- •Аналоговые и цифровые устройства автоматики
- •Глава 1. Архитектура и устройство
- •1.1. Внутренняя организация мк
- •1.2. Назначение выводов микросхемы мк
- •1.3. Организация памяти в мк
- •1.4. Регистр состояния программы psw
- •1.5. Таймеры/счетчики, регистры tmod и tcon
- •1. 6. Режимы работы таймеров/счетчиков
- •Структура прерываний мк
- •1.8. Блок последовательного интерфейса мк
- •1.8.1. Последовательная передача информации
- •1.8.2. Последовательный порт однокристального мк
- •1.8.3. Регистр управления последовательным портом scon
- •1.8.4. Режимы работы последовательного порта
- •1.8.5. Асинхронный обмен (режимы 1,2,3) данными
- •1.8.6. Скорость приёма/передачи
- •1.8.7. Работа мк в локальной сети
- •1.9. Системный сброс однокристального мк
- •1.10. Режим пониженного энергопотребления мк
- •1.11. Нагрузочная способность портов ввода/вывода
- •1. 12. Расширение портов ввода/вывода
- •Глава 2. Система команд однокристальных мк семейства mcs51
- •Способы адресации операндов
- •2.2. Команды мк
- •2.3. Правила написания программ на языке assembler
- •Метка операция операнд(ы) комментарии
- •2.3.1. Метка
- •2.3.2. Операция
- •2.3.3. Операнды
- •2.3.4. Комментарий
- •2.4. Директивы ассемблера
- •2.4.1. Директивы символических определений
- •Пример:
- •Ozu_org xdata 0800h; Адрес начала области внешнего озу.
- •2.4.2. Директивы резервирования и инициализации памяти
- •2.4.3. Директивы управления состоянием ассемблера
- •Глава 3. Обработка данных в однокристальных микроконтроллерах
- •3.1. Обращение к внутренней, внешней памяти данных и памяти программ
- •3.2. Арифметические операции
- •3.3. Логические операции
- •3.4. Операции с битами
- •Глава 4. Взаимодействие однокристального мк с объектом управления
- •4.1. Программный опрос и ожидание срабатывания позиционных датчиков
- •4.2. Ожидание импульсного сигнала
- •4.3. Программирование таймеров/счетчиков и формирование дискретных управляющих сигналов
- •4.4. Программирование прерываний в микропроцессорном устройстве
- •4.5. Программирование последовательного порта
- •Глава 5. Аппаратные средства
- •5.1. Ввод информации с клавиатуры
- •5.1.1. Прямое подключение клавиш к разрядам порта мк
- •В блоке основной программы происходит инициализация системы, разрешение прерываний, а затем выполняется основная программа.
- •Применение шифратора для организации клавиатуры
- •Шифратора
- •5.1.3. Матричный способ подключения клавиатуры
- •5.1.4. Комбинированный способ организации клавиатуры
- •5.2. Отображение информации в микропроцессорном устройстве
- •5.2.1. Контроллер клавиатуры и дисплея к580вв79 ( intel 8279 )
- •5.2.2. Матричные светодиодные индикаторы
- •5.2.3. Жидкокристаллический дисплей
- •Ввод аналоговых сигналов в микропроцессорный контроллер
- •Ацп с параллельными цифровыми выходами
- •5.3.2. Применение ацп с последовательным выходом
- •5.3.3. Применение таблиц для вычисления функций
- •5.4. Формирование управляющих аналоговых сигналов
- •5.5. Построение ацп с использованием цап
- •5.6. Микропроцессорный контроллер как управляющее устройство в системах автоматического регулирования
- •Согласование дискретных датчиков и исполнительных механизмов с однокристальным мк
- •5.8. Контроль напряжения питания в микропроцессорных системах
- •Глава 6. Отладка программного обеспечения и программирование однокристальных мк
- •6.1. Интегрированная система отладки программного обеспечения для мк ProView
- •6.1.1. Оптимизирующий кросс - компилятор c51
- •6.1.2. Макроассемблер a51
- •6.1.4. Отладчик/симулятор WinSim51
- •6.2. Запуск ProView и создание файла проекта
- •Если в системе задействованы таймеры-счетчики, то удобно промоделировать их работу при разворачивании соответствующих окон Timer (рис.76).
- •В окне указаны источники и адреса векторов прерываний, их состояние и приоритет. Разрешенные прерывания отмечены словом Enable, неразрешенные - Not Enable.
- •Рассмотрим основные пункты раздела debug (отладка), представлены на рис. 84. Эти функции предназначены для выполнения процесса отладки прикладной программы пользователя.
- •6.3. Программирование однокристальных мк
- •Контрольные вопросы для закрепления материала
- •Заключение
- •Библиографический список
- •Глава 1. Архитектура и устройство однокристальных мк семейства mcs51………………………..6
- •Глава 6. Отладка программного обеспечения и программирование однокристальных мк ……….203
- •162600, Г.Череповец , пр. Луначарского, 5
3.2. Арифметические операции
При обработке получаемой от объекта информации часто требуется провести различные вычисления. В этом разделе рассмотрим примеры выполнения арифметических операций. Пусть требуется сложить два многобайтных двоичных числа. В регистрах R0 и R1 указаны начальные адреса ячеек ОЗУ, начиная с которых расположены многобайтные числа. В регистре R2 указывается число байт в складываемом числе. Алгоритм сложения основан на последовательном сложении байтов, начиная с младшего. При этом сумма может оказаться большей, чем 255, поэтому при сложении старших байтов необходимо применять команду ADDC. Пусть складываются трехбайтные числа.
<1>ADD_BIN: CLR C ; Сброс флага переноса
<2> MOV R0,#20H ; Адрес расположения мл. байта 1числа
<3> MOV R1,#30H ; Адрес расположения мл. байта 2 числа
<4> MOV R2,#3 ; Количество байт в числе
<5>ADDITION:MOV A,@R0 ; Загрузка текущего байта
<6> ADDC A,@R1 ; Сложение
<7> MOV @R0,A ; Размещение текущего байта результата
<8> INC R0 ; Указание на следующий байт 1 числа
<9> INC R1 ; Указание на следующий байт 2 числа
<10> DJNZ R2,ADDITION; Продолжить сложение, если R20
Для того чтобы произвести многобайтное вычитание двоичных чисел, необходимо в рассмотренном фрагменте заменить команду сложения на команду вычитания с учетом переноса. Пусть требуется выполнить вычитание трехбайтных чисел, тогда программа имеет вид:
<1>SUB_BIN:CLR C ; Сброс флага переноса
<2> MOV R0,#20H ; Адрес расположения мл. байта 1числа
<3> MOV R1,#30H ; Адрес расположения мл. байта 2 числа
<4> MOV R2,#3 ; Количество байт в числе
<5>SUBTRACT:MOV A,@R0 ; Загрузка текущего байта
<6> SUBB A,@R1 ; Вычитание
<7> MOV @R0,A ; Размещение текущего байта результата
<8> INC R0 ; Указание на следующий байт 1 числа
<9> INC R1 ; Указание на следующий байт 2 числа
<10> DJNZ R2,SUBTRACT; Продолжить вычитание, если R20
Результат выполнения операции будет размещаться в трех ячейках, начиная с 20Н.
При выводе информации на дисплей удобнее работать с числами, представленными в BCD формате. Рассмотрим фрагмент, позволяющий складывать многобайтные числа в BCD формате.
<1>ADD_BCD: CLR C ; Сброс флага переноса
<2> MOV R0,#20H ; Адрес расположения мл. байта 1числа
<3> MOV R1,#30H ; Адрес расположения мл. байта 2 числа
<4> MOV R2,#3 ; Число байт в числе
<5>ADDITION:MOV A,@R0 ; Загрузка текущего байта
<6> ADDC A,@R1 ; Сложение
<7> DA A ; Десятичная коррекция результата
<8> MOV @R0,A ; Размещение текущего байта результата
<9> INC R0 ; Указание на следующий байт 1 числа
<10> INC R1 ; Указание на следующий байт 2 числа
<11> DJNZ R2,ADDITION; Продолжить сложение, если R20
Отличительной особенностью фрагмента от рассмотренного выше является то, что после команды сложения необходимо выполнить десятичную коррекцию результата с помощью команды DA A. Это требуется сделать потому, что при сложении BCD чисел результат в тетрадах может превышать число 9.
При обработке данных требуется выполнять операции перемножения двоичных чисел. В системе команд имеется команда MUL AB, позволяющая выполнить эту операцию / 5 /. Рассмотрим пример использования команды. Множимое располагается в ОЗУ в ячейке 20Н, а множитель в 30Н. Результат перемножения помещается в ячейки 21Н и 20Н.
<1>MULT:MOV R0,#20H ; Загрузка указателя множимого
<2> MOV A,@R0 ; Множимое в А
<3> MOV R1,#30H ; Загрузка указателя расположения множителя
<4> MOV B,@R1 ; Пересылка множителя в В
<5> MUL AB ; Перемножить А и В
<6> MOV @R0,A ; Сохранить младший байт результата в 20Н
<7> INC R0 ;
<8> MOV @R0,B ; Сохранить старший байт результата в 21Н
<9> RET ;
В качестве примера использования команды деления рассмотрим подпрограмму преобразования бинарного кода числа в BCD формат. Преобразуемое число находится в аккумуляторе, результат преобразования будет находиться в ОЗУ в ячейках 20Н и 21Н.
<1>BIN_BCD:MOV B,#100 ; Определение количества сотен в
<2> DIV AB ; числе
<3> MOV 20H,A ; Сохранение в ОЗУ старшей цифры
<4> MOV A,#10 ; Определение числа десятков
<5> XCH A,B ; в остатке числа
<6> DIV AB ;
<7> SWAP A ; Число десятков в старшей тетраде
<8> ADD A,B ; Сложение числа десятков с единицами
<9> MOV 21H,A ;Сохранить число десятков и единиц в 21Н
<10> RET ; Возврат в основную программу
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
Разработайте фрагменты, реализующие последовательность действий:
(A) 0Fh [20h] 08h
(B) 05h [21h] 14h
[30h] (A) + (B) (A) 05h
[31h] (A) – (B) (B) [21h]
[32h] (A) / (B) [25h] (A) + [20h]
[33h] (A) * (B) [26h] (B) – [25h]
[34h] [33h] – [32h] [27h] (A) * [20h]
[35h] [31h] + [30h] [28h] (A) / 2
Примечание: В квадратных скобках показаны адреса ячеек внутреннего ОЗУ однокристального МК.