- •Аналоговые и цифровые устройства автоматики
- •Глава 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. Обработка данных в однокристальных микроконтроллерах
3.1. Обращение к внутренней, внешней памяти данных и памяти программ
Рассмотрение раздела начнем с конкретного примера. При включении питания микропроцессорное устройство должно выполнить тестирование ячеек имеющегося в его распоряжении ОЗУ. Принцип проверки его работоспособности заключается в записи и считывании в ячейку ОЗУ определенного кода. Если код совпал, то ячейка считается исправной, и далее процесс продолжается, если же код не совпал, то необходимо сообщить об этом оператору. Сообщение может выдаваться на дисплей, или в простейшем случае, зажигается светодиод. В качестве тестирующих кодов выбираются “сложные коды”, такие, как 55Н (01010101В) и ААН (10101010В). Рассмотрим блок, выполняющий проверку ОЗУ (127 ячеек), в случае неисправности зажигается светодиод, включаемый разрядом Р1.0. “Тонким” моментом является то, что какой - то из регистров должен применяться в качестве указателя адреса ячеек памяти. Выберем в качестве такого регистр R0 нулевого банка (его адрес 00Н), заведомо считая, что эта ячейка исправна.
<1> MOV P1,#00H ; Выключение светодиода “ошибка”
<2> MOV R0,#01H ; Запись в указатель начальной ячейки
<3>AGAIN:MOV @R0,#55H ; Запись в ячейку проверочного кода
<4> CJNE @R0,#55H,ERROR ; Считывание и проверка
<5> MOV @R0,#0AAH ; Запись в ячейку проверочного кода
<6> CJNE @R0,#0AAH,ERROR ; Считывание и проверка
<7> INC R0 ; Продвижение по ячейкам ОЗУ
<8> CJNE R0,#80H,AGAIN ; Все ли ячейки протестированы?
<9>MAIN: ; Блок основной программы
<10> JMP MAIN ;
<11>ERROR:SETB P1.0 ; Включение светодиода “ошибка ОЗУ”
<12> JMP ERROR ;
Пусть в нашем микропроцессорном устройстве имеется дополнительное подключенное двухкилобайтное ОЗУ К537РУ10. Его ячейки также требуется протестировать. Принцип тот же самый, только теперь необходимо использовать команды обращения к внешним устройствам. Предположим, что адреса ячеек дополнительной микросхемы располагаются с 0800Н по 0FFFH.
<1> MOV P1,#00
<2> MOV DPTR,#0800H ; Указание начального адреса ячейки
<3>AGAIN: MOV A,#55H ;
<4> MOVX @DPTR,A ; Запись кода в ячейку внешнего ОЗУ
<5> MOVX A,@DPTR ; Считывание из ячейки внешнего ОЗУ
<6> CJNE A,#55H,ERROR ; Проверка кода
<7> MOV A,#0AAH ;
<8> MOVX @DPTR,A ; Запись кода в ячейку внешнего ОЗУ
<9> MOVX A,@DPTR ; Считывание из ячейки внешнего ОЗУ
<10> CJNE A,#0AAH,ERROR ; Проверка кода
<11> INC DPTR ; Продвижение по ячейкам ОЗУ
<12> MOV A,DPH ; Проверка на конец двухкилобайтно-
<13> CJNE A,#10H,AGAIN ;го пространства
<14>MAIN: ; Блок основной программы
<15> JMP MAIN ;
<16>ERROR: SETB P1.0 ; Включение светодиода “Ошибка ОЗУ”
<17> JMP ERROR ;
END
В этой программе для доступа к ячейкам внешнего ОЗУ используется шестнадцатиразрядный регистр-указатель адреса DPTR.
При включении питания в ячейках ОЗУ будет находиться случайная информация, поэтому перед выполнением основной программы необходимо их обнулить. Пусть необходимо обнулить все флаги пользователя, ими являются ячейки с адреса 20Н по 2FH.
<1> MOV R0,#20H ;Загрузка начального адреса для обнуления
<2> MOV R1,#10H ; Загрузка счетчика числа ячеек
<3>ZERO:MOV @R0,#00H ; Обнуление ячеек
<4> INC R0 ; Продвижение по ячейкам
<5> DJNZ R1,ZERO ; Если не все обнулены, то продолжить
При выключении питания микропроцессорного контроллера некоторые параметры должны быть сохранены для его дальнейшей работы. Во-первых, он должен “почувствовать” момент падения напряжения, во- вторых, передать нужные данные для хранения во внешнюю память (FLASH ОЗУ). Так, если контроллер измерял длину наматываемого в паковку материала и в этот момент произошло выключение питания, он должен сохранить данные о текущей длине и после восстановления питания продолжить измерение с сохраненного значения. Рассмотрим пример. Требуется сохранить данные 1 банка регистров во внешнем ОЗУ с адреса 0000Н.
<1> CLR RS0 ; Переключение на нулевой банк регистров
<2> CLR RS1 ;
<3> MOV R0,#08H; Загрузка счетчика количества регистров
<4> MOV DPTR,#0000H;Загрузка начального адреса ОЗУ
<5> MOV R1,#08H ;Указание начального адреса 1 банка регистров
<6>SAVE:MOV A,@R1 ;
<7> MOVX @DPTR,A; Сохранение во внешнем ОЗУ
<8> INC R1 ; Продвижение по ячейкам 1 банка
<9> INC DPTR ; Указание следующего адреса внешнего ОЗУ
<10> DJNZ R0,SAVE ; Все ли данные сохранены? Если нет, то про-
<11> ; должить сохранять
При работе микропроцессорного устройства иногда требуется выбрать какие-то константы из памяти программ, то есть из ПЗУ. Рассмотрим задачу выборки 10 данных из памяти программ и отправки их в порт Р2.
<1> MOV R7,#0AH ; Загрузка числа данных в ПЗУ
<2> MOV DPTR,#TABLE ; Указать на начало таблицы
<3>OUT_PORT:MOVC A,@A+DPTR ; Выборка кода из ПЗУ
<4> MOV P2,A ; Пересылка кода в порт Р2
<5> CLR A ;Обнулить А
<6> INC DPTR ; Продвижение по таблице
<7> DJNZ R7,OUT_PORT ;Если не все данные высланы, то
<8> NOP ; продолжить высылать
<9> TABLE: DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H, 0AH
END
При выполнении различных подпрограмм, вызываемых командой CALL, и подпрограмм обслуживания прерываний требуется сохранение в стеке данных, находящихся в регистрах / 4 /. При включении питания однокристального МК SP = 07H. Программист может переопределить вершину стека, используя команду MOV SP,# data. Таким образом, стек может располагаться в любом месте ОЗУ. Необходимо помнить, что область стека не должна пересекаться с областью данных. Рассмотрим фрагмент подпрограммы, сохраняющей в стеке содержимое основных регистров до выполнения непосредственно самой подпрограммы и возвращающей информацию в регистры перед выходом в основную программу.
<1> SUBROUT:PUSH ACC ; Сохранение в стеке содержимого А
<2> PUSH PSW ; Сохранение в стеке содержимого PSW
<3> PUSH B ; Сохранение в стеке содержимого B
<4> PUSH DPL ; Сохранение в стеке содержимого DPL
<5> PUSH DPH ; Сохранение в стеке содержимого DPH
<6> ; Операторы подпрограммы обслуживания пре-
<7> ; рывания
<8> POP DPH ; Восстановление DPH
<9> POP DPL ; Восстановление DPL
<10> POP B ; Восстановление B
<11> POP PSW ; Восстановление PSW
<12> POP ACC ; Восстановление A
<13> RETI ; Выход из подпрограммы в основную прог-
; рамму
Напомню о необходимости соблюдения принципа LIFO ( last in first out ) при работе со стеком. Последовательность написания команд должна быть такова, что данные, вошедшие первыми в стек, должны выйти из него последними.
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
Разработать программу обнуления ячеек внутреннего ОЗУ с адреса 08Н по 7FH.
Разработать программу обнуления ячеек внешнего ОЗУ с адреса 0000Н по 7FFFH.
Разработать программу для сохранения данных 2 и 3 банка регистров во внешнем ОЗУ с адреса 0100Н.
Разработать программу, обеспечивающую передачу десяти констант из ПЗУ (по рассмотренному примеру) в стеке. Вершину стека определить с адреса 30Н.