Учебное пособие: Управление и информатика в технических системах и 230101 Вычислительные машины, комплексы, системы и сети. Екатеринбург 2006

Название: Управление и информатика в технических системах и 230101 Вычислительные машины, комплексы, системы и сети. Екатеринбург 2006
Раздел: Остальные рефераты
Тип: учебное пособие Скачать документ бесплатно, без SMS в архиве

Федеральное агентство по образованию

ГОУ ВПО «Уральский государственный технический университет – УПИ»

ПРОГРАММИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ МИКРОКОНТРОЛЛЕРОВ 8051 С ОБЪЕКТАМИ УПРАВЛЕНИЯ

Методические указания к лабораторному практикуму по курсу “Микропроцессорные устройства систем управления” для студентов всех форм обучения специальностей 220201 -Управление и информатика в технических системах и 230101 – Вычислительные машины, комплексы, системы и сети.

Екатеринбург

2006


УДК 681.322

Составители : В.А.Добряк, В.П. Мокрецов

Научный редактор доц., канд. техн. наук Паутов В.И.

ПРОГРАММИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ МИКРОКОНТРОЛЛЕРОВ 8051 С ОБЪЕКТАМИ УПРАВЛЕНИЯ

Методические указания к лабораторному практикуму по курсу “Микропроцессорные устройства систем управления” для студентов всех форм обучения специальностей 220201 -Управление и информатика в технических системах и 230101 – Вычислительные машины, комплексы, системы и сети./сост. В.А.Добряк, В.П.Мокрецов. Екатеринбург: ГОУ ВПО УГТУ – УПИ. 29с.

Методические указания предназначены для использования при выполнении лабораторного практикума и могут использоваться при курсовом проектировании. Содержат описание организации взаимодействия микроконтроллеров с объектами управления, контрольные вопросы, примеры программ на языке ассемблера, порядок выполнения домашнего и лабораторного заданий.

Библиогр.: 5 назв. Рис. 10. Прил. 1

Подготовлено кафедрой « Автоматика и управление в технических системах»

Ó ГОУ ВПО «Уральский государственный

технический университет – УПИ», 2006

ОГЛАВЛЕНИЕ

1. ЦЕЛЬ И СОДЕРЖАНИЕ РАБОТЫ............................................................ 4

2. ЗАДАНИЯ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ ...................................... 4

2.1. Изучение аппаратных средств....................................................................... 4

2.2. Изучение системы команд............................................................................. 4

2.3. Изучение типовых процедур взаимодействия микроконтроллера с объектами управления и подготовка программ ................................................. 5

2.4. Контрольные вопросы.................................................................................... 5

3. ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА С ОБЪЕКТАМИ

УПРАВЛЕНИЯ..................................................................................................... 7

3.1. Прерывания ..................................................................................................... 7

3.2. Ввод информации с датчиков......................................................................... 8

3.2.1. Опрос двоичного датчика. Ожидание события........................................ 8

3.2.2. Устранение дребезга контактов................................................................. 9

3.2.3. Подсчет числа импульсов .......................................................................... 9

3.2.4. Опрос группы двоичных датчиков .......................................................... 11

3.3. Реализация функций времени ..................................................................... 12

3.3.1. Программное формирование временной задержки ............................... 12

3.3.2. Формирование временной задержки таймером ..................................... 14

3.3.3. Измерение временных интервалов........................................................... 15

3.4. Вывод управляющих сигналов..................................................................... 16

3.4.1. Формирование статических сигналов...................................................... 16

3.4.2. Формирование импульсных сигналов ..................................................... 17

3.5. Работа с последовательным портом ........................................................... 17

3.6.Средства ProView для отладки взаимодействия с объектами управления……………………………………………………………………….18

4. ЛАБОРАТОРНЫЕ ЗАДАНИЯ.................................................................... 22

5. СОДЕРЖАНИЕ ОТЧЁТА ............................................................................ 23

БИБЛИОГРАФИЧЕСКИЙ СПИСОК........................................................... 23

Приложение . Система команд микроконтроллера К1816ВЕ51……………...24

1. ЦЕЛЬ И СОДЕРЖАНИЕ РАБОТЫ

Целью работы является изучение основ организации взаимодействия микроконтроллеров семейства 8051 Intel с объектами управления. Цель состоит также в изучения интегрированной среды ProView фирмы Franklin Software Inc., предназначенной для разработки программного обеспечения этого семейства [3-4]. Работа рассчитана на 4 - 8 часов домашней подготовки и 4 - 8 часов занятий в лаборатории в зависимости от количества выполняемых заданий.

При подготовке к работе изучаются основные приёмы программирования, направленные на организацию работы с различными объектами управления. Далее составляются программы на языке ассемблера, и разрабатывается методика их отладки. Перед началом лабораторной работы проводится коллоквиум. Студенты, выполнившие домашнее задание, а также успешно ответившие на поставленные вопросы, допускаются к лабораторной части работы. При выполнении лабораторного задания осуществляется ввод исходных текстов, трансляция и отладка программ. Затем оформляется и защищается отчёт с указанным ниже содержанием.

2. ЗАДАНИЯ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ

2.1. Изучение аппаратных средств

Изучите аппаратные средства микроконтроллера Intel 8051 (К1816ВЕ51), предназначенные для взаимодействия с объектами управления [1 - 3]:

Параллельные порты P0 - P3. Альтернативные функции порта P3.

Регистры таймеров TH0, TL0 и TH1, TL1. Работа в режиме таймера и в режиме счётчика. Регистр режима таймера/счётчика TMOD, формат управляющего слова. Режимы работы таймера/счётчика. Регистр управления/статуса таймера TCON, функциональное назначение разрядов.

Буфер приёмопередатчика SBUF. Режимы работы последовательного порта.

Регистр управления приёмопередатчиком SCON, функциональное назначение разрядов. Установка скорости приёма/передачи.

Регистр управления мощностью PCON, функциональное назначение разрядов.

Система прерываний микроконтроллера. Регистр приоритетов прерываний IP, регистр маски прерываний IE.

2.2. Изучение системы команд

Изучите систему команд микроконтроллера с точки зрения поддержки взаимодействия с объектами управления [3, 4]:

Типы операндов и структура информационных связей. Символические имена регистров специальных функций и портов. Адресация битов в регистрах специальных функций, карта адресуемых битов. Команды работы с регистрами специальных функций.

2.3. Изучение типовых процедур взаимодействия микроконтроллера с

объектами управления и подготовка программ

Изучите раздел методических указаний “ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА С ОБЪЕКТАМИ УПРАВЛЕНИЯ”.

Для дальнейшей работы в лаборатории от Вас потребуется значительный объем домашней подготовки. Подготовьте к отладке следующие программы:

1. Подпрограмма обработки внешнего прерывания уровня 0 (SUBIN0).

2. Ожидание импульсного сигнала (WAITIMP).

3. Устранение дребезга контактов на основе счетчика (DBNC).

4. Подсчёт числа импульсов между двумя событиями (CNTEVNT).

5. Подсчёт числа импульсов за заданный промежуток времени на основе двух

таймеров/счётчиков (CNTTIME).

6. Ожидание заданного кода (WTCODE).

7. Опрос группы двоичных датчиков с передачей управления прикладным программам (GOCODE).

8. Опрос группы импульсных датчиков (KBRD).

9. Формирование временной задержки длительностью 100 мкс программным способом (DELAY).

10. Формирование временной задержки длительностью 1 с программным способом (DLY1).

11. Формирование временной задержки с помощью таймера (TIMER).

12. Измерение временных интервалов программным способом (MSCONT).

13. Измерение временных интервалов на основе таймера (MSTIMER).

14. Формирование статических сигналов (OUT).

15. Генерация бесконечной последовательности импульсов скважностью 2 на основе примеров из раздела 3.4.2.

16. Программа работы с последовательным портом (UART).

Внимание! В ниже приведенных примерах программ преднамеренно допущены ошибки. Ваша задача состоит в обнаружении и устранении этих ошибок на этапах изучения исходных текстов и отладки программ.

Некоторые примеры программ оставляют возможность оптимизации с учётом особенностей системы команд микроконтроллера. Выполните оптимизацию.

Тщательно продумайте методики отладки каждой из программ на осно-

ве средств ProView. Дополните программы командами и директивами, обеспечивающими тестирование и дальнейшую отладку в лаборатории.

Возможно, что при работе с ProView Вы заметите ошибки, допущенные разработчиком этой программы.

2.4. Контрольные вопросы

1. Перечислите характерные черты архитектуры однокристальных микроконтроллеров, направленные на взаимодействие с объектами управления.

2. Укажите назначение регистров специальных функций.

3. Перечислите альтернативные функции параллельных портов.

4. В каком состоянии находятся параллельные порты после формирования сигнала RST?

5. Может ли порт одновременно являться источником операнда и приемником результата операции?

6. С какой частотой инкрементируется содержимое таймера/счётчика при работе в качестве таймера?

7. Чему равна максимальная частота подсчёта входных сигналов при работе таймера/счётчика в режиме счётчика?

8. Охарактеризуйте режимы работы таймера-счётчика.

9. Охарактеризуйте режимы работы последовательного порта.

10. Для чего предназначен регистр SCON?

11. Как изменить скорость передачи данных через последовательный порт?

12. Для чего используется девятый бит?

13. Перечислите команды операций с битами.

14. Укажите, какие из регистров специальных функций допускают битовую адресацию.

15. Перечислите и охарактеризуйте типы прерываний. Как изменить приоритеты прерываний?

16. Как задать вектор прерывания в программе на языке ассемблера?

17. Почему в примере SUBINFO переход на обработчик прерывания производится по команде SJMP, а не CALL?

18. Как соотносится порядок сохранения содержимого регистров в стеке с порядком восстановления из стека в подпрограмме обработки прерывания?

19. Почему подпрограмма обработки прерывания завершается командой RETI, а не RET?

20. Как организовать процедуру ожидания события с помощью одной команды?

21. Каково время реакции микроконтроллера на событие при программной реализации процедуры ожидания и по прерыванию?

22. Какие ограничения накладываются на длительность обнаруживаемого импульсного сигнала при программной реализации цикла ожидания?

23. Поясните принципы устранения дребезга контактов.

24. Поясните принцип организации процедур подсчёта числа импульсов между двумя событиями и за заданный промежуток времени.

25. Расшифруйте команду MOV TMOD, #01000000B.

26. Поясните принцип организации передачи управления в программе по коду.

27. Как программно и аппаратно формируются задержки разной длительности?

28. Как с помощью микроконтроллера измерить временной интервал и оценить точность и диапазон измерения?

29. Поясните принцип генерации статических, периодических и апериодических сигналов.

30. В чём заключается табличный способ генерации микроконтроллером сложных последовательностей управляющих сигналов?

31. Перечислите и охарактеризуйте средства программы ProView, предназначенные для отладки взаимодействия микроконтроллера с объектами управления.

3. ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА С ОБЪЕКТАМИ

УПРАВЛЕНИЯ

3.1. Прерывания

Подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые будут в ней использованы, а перед возвратом в прерванную программу должна восстановить их значения. Подпрограмма обработки внешнего прерывания уровня 0 (SUBINO) может, например, иметь следующую структуру:

Обратите внимание, что обработчик заканчивается командой возврата из подпрограммы RETI, а переход на него происходит по команде безусловного перехода SJMP. Дело в том, что система прерываний формирует вызов LCALL аппаратно [3].

В целях отладки программу необходимо дополнить следующими командами:

3.2. Ввод информации с датчиков

3.2.1. Опрос двоичного датчика. Ожидание события

В устройствах и системах управления объектами события фиксируются с использованием разнообразных датчиков цифрового и аналогового типов. Наибольшее распространение имеют двоичные датчики типа да/нет.

Ожидание статического сигнала. Типовая процедура ожидания события (WAIT) состоит из следующих действий: ввода сигнала от датчика, анализа значения сигнала и передачи управления в зависимости от состояния датчика. Конкретная программная реализация процедуры зависит от того, каким образом датчик подключен к микроконтроллеру. Например, при подключении датчика к линии бита 3 порта 1 программа ожидания размыкания контакта будет иметь вид:

Другим частным случаем является процедура ожидания замыкания контакта, которая может быть реализована следующим образом:

Для опроса особо важных датчиков с целью уменьшения времени реакции на исключительную ситуацию в объекте целесообразно использовать режим прерывания.

Ожидание импульсного сигнала. Особенность процедуры ожидания импульсного сигнала состоит в том, что микроконтроллер должен обнаружить не только факт появления, но и факт окончания сигнала.

Для программирования этой процедуры удобно воспользоваться рассмотренными выше примерами, смонтировав их последовательно в линейную программу. Оформлять процедуры WAITC и WAIT0 в виде подпрограмм нецелесообразно, так как это удлиняет программу, а длина и, следовательно, время исполнения программы определяют минимальную длительность импульса, который может быть обнаружен программой.

Последовательность следования процедур WAITC и WAIT0 зависит от формы импульса. Для “отрицательного” импульса (1→0→1) процедура WAITC предшествует процедуре WAIT0, для “положительного” (0→1→0) следует за ней.

Ниже приведён пример программной реализации процедуры ожидания “отрицательного” импульсного сигнала (WAITIMP) при подключении датчика к биту 3 порта 1 при условии, что начальное состояние входа – единичное.

Программная реализация цикла ожидания накладывает ограничения на длительность импульса: импульсы длительностью меньше времени выполнения цикла ожидания могут быть “не замечены” микроконтроллером. Для обнаружения кратковременных импульсов обычно используют способ фиксации импульса на внешнем триггере флага. На вход в этом случае поступает не кратковременный сигнал с датчика, а флаг, формируемый триггером. Триггер устанавливается по фронту импульса, а сбрасывается программным путем – выдачей специального управляющего воздействия. Длительность импульса при этом будет ограничена снизу только

быстродействием триггера.

3.2.2. Устранение дребезга контактов

При работе с датчиками, имеющими механические или электромеханические контакты (кнопки, клавиши, реле и клавиатуры), возникает явление, называемое дребезгом. Он заключается в том, что при замыкании контактов возможно появление отскока (BOUNCE) контактов, которое приводит к переходному процессу. При этом сигнал с контакта может быть прочитан микроконтроллером как случайная последовательность нулей и единиц. Подавить это нежелательное явление можно схемотехническими средствами, но чаще это делается программным путем.

Наибольшее распространение получили два программных способа ожидания установившегося значения [1].

Подсчет заданного числа совпадающих значений сигнала. Его суть состоит в многократном считывании сигнала с контакта. Подсчет удачных опросов, обнаруживших, что контакт устойчиво замкнут, ведется счетчиком. Если после серии удачных опросов встречается неудачный, то подсчет начинается сначала. Контакт считается устойчиво замкнутым, если последовало N удачных опросов. Число N подбирается экспериментально для каждого типа используемых датчиков и лежит в пределах от 5 до 50. Пример программного подавления дребезга контакта (DBNC) приводится для случая, когда датчик импульсного сигнала подключен к входу T0, счет удачных опросов ведется в регистре R3, N=20.

Введение временной задержки. Устранение дребезга контакта путем введения временной задержки заключается в следующем. Программа, обнаружив замыкание контакта, запрещает опрос его состояния на время, заведомо большее длительности переходного процесса. Программа (DBNCDL) написана для случая подключения датчика к входу T0 и программной реализации временной задержки:

Временная задержка в пределах 1-10 мс подбирается экспериментально для каждого типа датчиков и реализуется подпрограммой DELAY.

3.2.3. Подсчет числа импульсов

Часто в управляющих программах возникает необходимость ожидания цепочки событий, представляемой последовательностью импульсных сигналов от датчиков. Рассмотрим две типовые процедуры: подсчет числа импульсов между двумя событиями и подсчет числа импульсов в заданный интервал времени.

Подсчет числа импульсов между двумя событиями. Один из возможных вариантов процедуры подсчёта (CNTEVNT) может быть реализован, если использовать вход T1 как вход счетчика внешних импульсов, а T0 – для программного включения и выключения счета. В аккумуляторе фиксируется число импульсов, деленное на 32, так как TL1 работает как 5-битный предделитель [1].

Подсчет числа импульсов за заданный промежуток времени. При решении задачи преобразования числоимпульсного кода в двоичный код, а также в ряде других задач может возникнуть необходимость подсчёта числа импульсов за заданный интервал времени. Эта процедура может быть реализована различными способами [1]:

- программной реализацией временного интервала и программным подсчетом числа импульсов на входе;

- программной реализацией временного интервала и аппаратным подсчетом числа импульсов (на внутреннем таймере/счетчике);

- аппаратной реализацией временного интервала и программным подсчетом числа импульсов;

- аппаратной реализацией временного интервала с аппаратным подсчетом числа импульсов.

Последний способ подсчёта требует использования двух счётчиков

(CNTTIME). На T/C1 можно выполнять подсчёт числа импульсов, а на T/C0 - отсчёт заданного интервала. Датчик импульсов должен быть подключен к входу T1.

3.2.4. Опрос группы двоичных датчиков

Микроконтроллеры чаще всего имеют дело не с одним датчиком, как в рассмотренных выше примерах, а с группой автономных, логически независимых или взаимосвязанных, формирующих двоичный код датчиков. При этом микроконтроллер может выполнять процедуру опроса датчиков и передачи управления отдельным фрагментам прикладной программы в зависимости от принятого кода.

Ожидание заданного кода. Программную реализацию процедуры ожидания заданного кода (WTCODE) рассмотрим для случая подключения группы из восьми взаимосвязанных статических датчиков к входам порта 1.

Передача управления по коду. При опросе двоичных датчиков передачу управления удобно осуществлять по таблице переходов. Ниже приводится текст программы (GOCODE), осуществляющей передачу управления одной из восьми прикладных программ PROG0 - PROG7, которые расположены в пределах одной страницы памяти программ. Передача производится в зависимости от кодовой комбинации на входах P1.0 - P1.2.

Адрес строки таблицы, в которой хранятся адреса переходов, вычисляется как сумма относительного (внутри текущей страницы резидентной памяти программ) начального адреса таблицы BASE и кода, принятого от датчиков. Команды MOVC A, @A+DPTR , JMP @A+DPTR, таблица BASE и программы PROG0 - PROG7 должны располагаться в одной странице памяти программ.

Опрос группы импульсных датчиков. Эта процедура состоит из последовательности действий: ожидания замыкания одного из контактов, устранения дребезга, ожидания размыкания замкнутого контакта.

Программная реализация процедуры (KBRD) для случая подключения четырех импульсных датчиков к входам 0 - 3 порта 1 будет иметь вид:

Анализ состояния контактов осуществляется наложением маски на принятый от датчиков код. Для датчиков, формирующих “отрицательный” импульс, принятый код предварительно инвертируется.

Для группы импульсных датчиков, представляющих собой клавишный регистр, процедура KBRD должна быть дополнена процедурами идентификации нажатой клавиши и защиты от одновременного нажатия двух и более клавиш.

Идентификация нажатой клавиши может осуществляться двумя способами: по таблице или программно. При табличном способе перекодирования в памяти программ должна находиться таблица двоичных эквивалентов кодов клавиш. Программное преобразование унитарного кода, принятого от клавиатуры, в двоичный код может быть выполнено методом сдвигов исходного унитарного кода и подсчетом числа сдвигов на счетчике до появления первого переноса [1].

3.3. Реализация функций времени

3.3.1. Программное формирование временной задержки

Временная задержка малой длительности. Процедура реализации временной задержки использует метод программных циклов. При этом в некоторый рабочий регистр загружается число, которое затем в каждом проходе цикла уменьшается на 1. Так продолжается до тех пор, пока содержимое регистра не станет равным нулю, что интерпретируется программой как момент выхода из цикла. Время задержки при этом определяется числом, загруженным в рабочий регистр, и временем выполнения команд, образующих программный цикл.

Предположим, что в управляющей программе необходимо реализовать временную задержку 99 мкс. Фрагмент программы (DELAY) оформим в виде подпрограммы, так как предполагается, что основная управляющая программа будет производить к ней многократные обращения для формирования выходных импульсных сигналов, длительность которых кратна 99 мкс:

Для получения требуемой временной задержки необходимо определить число X, загружаемое в рабочий регистр. Определение числа X выполняется на основе расчёта времени выполнения команд, образующих данную подпрограмму. При этом необходимо учитывать, что команды MOV и RET выполняются однократно, а число повторений команды DJNZ равно числу X. Кроме того, обращение к подпрограмме временной задержки осуществляется по команде CALL DELAY, время исполнения которой также необходимо учитывать при подсчете временной задержки.

В описании команд микроконтроллера [4] указывается, за сколько машинных циклов (МЦ) исполняется каждая команда: CALL - 2 МЦ, MOV - 1 МЦ, DJNZ - 2 МЦ, RET - 2 МЦ. На основании этих данных определяется суммарное число машинных циклов в подпрограмме. При тактовой частоте 12 МГц каждый машинный цикл выполняется за 1 мкс. Таким образом, подпрограмма выполняется за время 2 + 1 + 2Х + 2 = 5 + 2Х мкс. Для реализации временной задержки 99 мкс число Х = (99 - 5)/2 = 47.

В данном случае при загрузке в регистр R2 числа 47 требуемая временная задержка (99 мкс) реализуется точно. Если число Х получается дробным, то временную задержку можно реализовать лишь приблизительно. Для более точной подстройки в подпрограмму могут быть включены команды NOP, время выполнения каждой из которых равно 1 мкс.

Минимальная временная задержка, реализуемая подпрограммой DELAY, составляет 7 мкс (X = 1). Временную задержку меньшей длительности программным путем можно реализовать, включая в программу цепочки команд NOP.

Максимальная длительность задержки, реализуемая подпрограммой DELAY, составляет 515 мкс (X = 255). Для реализации задержки большей длительности можно рекомендовать увеличить тело цикла включением дополнительных команд или использовать метод вложенных циклов. Так, например, если в подпрограмму DELAY перед командой DJNZ вставить дополнительно две команды NOP, то максимальная задержка составит 5 + Х(2 + 1 + 1) = 5+4 * 255 = 1025 мкс (т.е. почти в два раза больше).

Временная задержка большой длительности. Задержка большой длительности может быть реализована методом вложенных циклов. Числа Х и Y выбираются из соотношения Т = 2 + 1 + Х(1 + 2Y + 2) + 2, где Т - реализуемый временной интервал в микросекундах. Максимальный временной интервал, реализуемый таким способом, при Х = Y = 255 составляет 130.82 мс, т.е. приблизительно 0.13 с.

В качестве примера рассмотрим подпрограмму (DLY100), реализующую временную задержку 100 мс.

Здесь два вложенных цикла реализуют временную задержку длительностью 5 + 195(3 + 2*254) = 99 650 мкс, а дополнительный цикл LOOPAD и команда NOP реализует задержку 350 мкс и тем самым обеспечивает точную настройку временного интервала.

Временная задержка длительностью 1 с. Из предыдущего примера видно, что секунда является очень большим интервалом времени по сравнению с тактовой частотой микроконтроллера. Такие задержки сложно реализовать методом вложенных циклов, поэтому их обычно набирают из точно подстроенных задержек меньшей длительности. Например, задержку в 1 с можно реализовать десятикратным вызовом подпрограммы, реализующей задержку 100 мс:

Погрешность подпрограммы DLY1 составляет 21 мкс. Для очень многих применений это достаточно высокая точность, хотя реализованные на основе этой программы часы астрономического времени за сутки “убегут” примерно на 1.8 с.

3.3.2. Формирование временной задержки таймером

Недостатком программного способа реализации временной задержки является нерациональное использование ресурсов микроконтроллера: во время формирования задержки он практически простаивает, так как не может решать никаких задач управления объектом. В то же время аппаратные средства позволяют реализовать временные задержки на фоне работы основной программы.

На вход таймера/счетчика (Т/С) могут поступать сигналы синхронизации с частотой 1 МГц (Т/С в режиме таймера) или сигналы от внешнего источника (Т/С в режиме счетчика). Оба эти режима могут быть использованы для формирования задержек [1]. Если использовать Т/С в режиме таймера полного формата (16 бит), то можно получить задержки в диапазоне 1 - 65 536 мкс.

В качестве примера рассмотрим организацию временной задержки 50 мс (TIMER). Предполагается, что бит IE.7 установлен, т.е. снята блокировка всех прерываний.

Обратите внимание, что здесь использована команда перевода микроконтроллера в режим холостого хода, который прекращается после истечения 50 мс.

Этот режим реализован в микроконтроллере Intel 80C51 (отечественный аналог КР1830ВЕ51), изготовленный по технологии КМОП [3]. Поэтому для отладки этой программы через пункт Debug меню Options выберите указанный тип микроконтроллера.

3.3.3. Измерение временных интервалов.

В задачах управления часто возникает необходимость измерения промежутка времени между двумя событиями. Обычно события в объекте управления представляются сигналами от двоичных датчиков. Считая событиями фронт и спад импульса, можно определять временные характеристики импульсных сигналов: длительность, период и скважность.

Программный способ. Это простейший способ измерения длительности импульса. Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры WAIT, а отсчёт времени ведется программным способом. Для “положительного” импульсного сигнала, поступающего на вход Т0, программа измерения его длительности (MSCONT) будет иметь вид:

После выхода из процедуры содержимое счетчика R7 пропорционально длительности импульса.

Для нормальной работы этой программы необходимо, чтобы обращение к ней производилось в моменты, когда на входе Т0 присутствует сигнал нулевого уровня. Верхний предел измеряемой длительности “положительного” импульса составит 255(1 + 2) мкс = 765 мкс. Этот предел может быть увеличен включением в цикл COUNT дополнительных команд NOP. Максимальная погрешность измерений 3 мкс.

Применение таймера. Для измерения длительности сигнала может быть использован таймер. Особенно эффективно использование для этой цели таймера в 8051 Intel, имеющего вход разрешения счёта (альтернативная функция входа INT).

Измеряемый сигнал можно, например, подавать на вход INT0, а измерение длительности при этом будет выполняться в Т/С0. Программа измерения длительности “положительного” импульса (MSTIMER) будет выглядеть так:

Управление программе должно быть передано при условии, что на входе INT0 присутствует низкий уровень. Прерывание от T/C0 и внешнее прерывание по входу INT0 должны быть запрещены. По завершении программы в T/C0 будет находиться число, пропорциональное длительности “положительного” импульса на входе INT0. Верхний предел измерения равен 65 536 мкс, а максимальная погрешность 1 мкс.

При необходимости измерения временных интервалов большей длительности можно программным способом подсчитывать число переполнений от таймера, т.е. расширять его разрядность за счет рабочего регистра или ячейки резидентной памяти данных.

3.4. Вывод управляющих сигналов

3.4.1. Формирование статических сигналов

Для управления исполнительным устройством, работающим по принципу включено/выключено, на соответствующей выходной линии порта необходимо сформировать статический сигнал 1 или 0, что реализуется командами установки, сброса или инверсии бита порта (OUT) [1].

В случае параллельного управления группой автономных исполнительных устройств, подключенных к выходному порту, формируется не двоичное управляющее воздействие, а управляющее слово, каждому из разрядов которого ставится в соответствие 1 или 0 в зависимости от того, какие исполнительные устройства должны быть включены, а какие выключены.

Управляющие слова удобно формировать командами логических операций над содержимым порта [1]. Командой XRL осуществляется инверсия тех битов, которые в маске заданы единицей. Команда ORL используется для установки битов управляющего слова. Команда ANL используется для сброса битов.

Для формирования сложных последовательностей управляющих слов обычно используют табличный способ, при котором все возможные слова упакованы в таблицу, а прикладная программа вычисляет адрес требуемого слова, выбирает его из таблицы и передаёт в порт.

3.4.2. Формирование импульсных сигналов

Импульс . Его можно получить последовательной выдачей сигналов, включая и отключая (PULS), с промежуточным вызовом подпрограммы временной задержки:

Длительность импульса определяется временной задержкой, реализуемой подпрограммой DELAY.

Генерация меандра. В этом случае можно воспользоваться подпрограммой задержки, равной половине периода сигнала:

Бесконечный периодический сигнал формируется в линии 3 порта 1. На остальных линиях сигналы остаются неизменными.

Формирование апериодических управляющих сигналов. Последователь-

ность импульсных сигналов с произвольной длительностью и скважностью может быть получена аналогичным образом, то есть путём чередования процедур выдачи значения 0 или 1 и вызова подпрограмм временных задержек заданных длительностей.

3.5. Работа с последовательным портом

Последовательный порт микроконтроллера может использоваться в виде регистра сдвига для расширения ввода-вывода или в качестве UART с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения [1]. То есть через порт можно передавать и принимать данные одновременно. Порт может принимать очередной байт даже в том случае, если уже принятый до этого байт не был прочитан из регистра приёмника. Однако если до окончания приёма находящийся в регистре приёмника байт не будет прочитан, принятый байт теряется. Программный доступ к регистрам приёмника и передатчика осуществляется обращением к регистру специальных функций SBUF.

Ниже приведён пример фрагмента программы (UART), принимающей из последовательного порта байт и отправляющей его назад в последовательный порт, настроенный на 8-битный режим со скоростью передачи 2400 бод при тактовой частоте микроконтроллера 12 МГц.

3.6. Средства ProView для отладки взаимодействия с объектами

управления

Интегрированная среда ProView фирмы Franklin Software Inc. имеет несколько окон, предназначенных для отладки взаимодействия микроконтроллера с объектами управления [3-4]. Окно Main Registers (Рис. 1), где доступны регистр масок прерывания IE, блокировка прерываний EA, порты P0 – P3, регистр управления/статуса таймера TCON, регистры таймеров THL0 и THL1, а также регистр управления мощностью PCON.

Кроме того, через пункт Hardware меню View (Рис. 2) можно открыть окна контроллера прерываний, таймеров, параллельных портов и последовательного порта.

В информационном окне контроллера прерываний (Рис. 3) указывается статус и приоритет всех источников прерывания.

В строке состояния (Рис. 4) при выполнении программы в пошаговом режиме или в режиме анимации показывается текущее реальное время.

В окнах таймеров (Рис. 5) доступно содержимое 16-битного тайме-

ра/счётчика THLx, регистра режима работы таймера/счётчика TMOD, регистра управления/статуса таймера TCON, флаг переполнения таймера TFx, бит управления таймера TRx. Здесь же указывается состояние и режим работы таймера.

В окнах параллельных портов (Рис. 6) доступно содержимое регистра-

защёлки LATCH и отдельных линий порта. Состояние линий порта может быть изменено с помощью мыши.

В окне последовательного порта UART (Рис. 7) отображается содержимое буфера передатчика Buffer, режим работы и скорость. В буфер приёмника Input может быть введена последовательность байтов. Информация может быть представлена в символьном виде ASCII или в шестнадцатеричной форме HEX. Буфер очищается с помощью кнопки Reset Buffer.

При отладке программы часто возникает необходимость приостановить ее выполнение на определенной команде.

Breakpoints – это маркеры в вашей программе, которые заставляют отладчик остановить ее выполнение в “реальном масштабе времени”. Вы можете установить маркеры на любых командах программы (Рис. 8). Когда отладчик WinSim51 доходит до маркера, выполнение программы будет приостановлено, и управление возвращено Вам. В этом случае Вы можете сами принять решение о дальнейшем продолжении работы программы. Breakpoints устанавливаются через пункт Toggle breakpoint из меню Debug (Рис. 9) или из контекстного меню, которое вызывается нажатием правой кнопки мыши в окне с исходным текстом или кодом программы

(Рис. 10).

4. ЛАБОРАТОРНЫЕ ЗАДАНИЯ

С помощью пакета ProView выполните отладку подготовленных при выпол-

нении домашнего задания программ:

1. Подпрограмма обработки внешнего прерывания уровня 0 (SUBIN0).

2. Ожидание импульсного сигнала (WAITIMP).

3. Устранение дребезга контактов на основе счетчика (DBNC).

4. Подсчёт числа импульсов между двумя событиями (CNTEVNT).

5. Подсчёт числа импульсов за заданный промежуток времени на основе двух

таймеров/счётчиков (CNTTIME).

6. Ожидание заданного кода (WTCODE).

7. Опрос группы двоичных датчиков с передачей управления прикладным программам (GOCODE).

8. Опрос группы импульсных датчиков (KBRD).

9. Формирование временной задержки длительностью 100 мкс программным

способом (DELAY).

10. Формирование временной задержки длительностью 1 с программным способом (DLY1).

11. Формирование временной задержки с помощью таймера (TIMER).

12. Измерение временных интервалов программным способом (MSCONT).

13. Измерение временных интервалов на основе таймера (MSTIMER).

14. Формирование статических сигналов (OUT).

15. Генерация бесконечной последовательности импульсов скважностью 2.

16. Программа работы с последовательным портом (UART).

Используйте оптимизированные варианты программ и их отладочные дополнения.

Для отладки каждой из программ:

• создайте файл проекта задачи, создайте файл исходного текста программы

на языке ассемблера, и добавьте его к проекту;

• выполните трансляцию исходного текста и исправьте возможные синтакси-

ческие ошибки;

• запустите отладчик;

• в случае необходимости задайте начальные значения регистров и памяти;

• осуществите пробный пуск программы на контрольном примере в соответ-

ствии с разработанной методикой отладки;

• убедитесь в полной работоспособности программы;

• после устранения всех ошибок и отладки выполните генерацию листинга

программы, который включите в отчёт о выполнении работы.

5. СОДЕРЖАНИЕ ОТЧЁТА

Отчёт о лабораторной работе должен содержать:

• титульный лист;

• цель и задачи работы;

краткое, но точное описание методики отладки каждой из программ;

• листинги с исходными текстами и объектным кодом отлаженных программ с дополнениями, обеспечивающими тестирование и отладку;

• перечень выявленных в примерах ошибок;

• выводы по работе.

БИБЛИОГРАФИЧЕСКИЙ СРИСОК

1. Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. М.: Энергоатомиздат, 1990. - 224с.

2. Микропроцессорные системы: Учебное пособие для вузов / Е. К. Александров и др.; Под общ. ред. Д. В. Пузанкова.- СПб.: Политехника, 2002.- 935с.

3. Бродин В.Б., Шагурин И.И. Микроконтроллеры. Архитектура, программирование, интерфейс. – М.: Издательство ЭКОМ, 1999. – 400с.

4. Ваша первая программа для микроконтроллера Intel 8051: Методические указания к лабораторной работе №1 по курсу « Микропроцессоры и вычислительные устройства» / Добряк В.А. Екатеринбург: УГТУ, 1999.

32с.

5. Система команд микроконтроллера INTEL 8051: Методические указания к лабораторной работе №2 по курсу «Цифровые устройства и микропроцессоры»/В.А.Добряк, В.К.Рогозин, Екатеринбург: УГТУ, 1999.32с.

ПРИЛОЖЕНИЕ Система команд микроконтроллера К1816ВЕ51

Команды передачи данных

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Пересылка в аккумулятор из регистра (n =0..7)

MOV A,Rn

11101rrr

1

1

1

(A)<-(Rn)

Пересылка в аккумулятор прямоадресуемого байта

MOV A,ad

11100101

3

2

1

(A)<-(ad)

Пересылка в аккумулятор байта из РПД (i=0,1)

MOV A,@Ri

1110011i

1

1

1

(A)<-((Ri))

Загрузка в аккумулятор константы

MOV A,#d

01110100

2

2

1

(A)<-#d

Пересылка в регистр из аккумулятора

MOV Rn,A

11111rrr

1

1

1

(Rn)<-(A)

Пересылка в регистр прямоадресуемого байта

MOV Rn,ad

10101rrr

3

2

2

(Rn)<-(ad)

Загрузка в регистр константы

MOV Rn,#d

01111rrr

2

2

1

(Rn)<-#d

Пересылка по прямому адресу аккумулятора

MOV ad,A

11110101

3

2

1

(ad)<-(A)

Пересылка по прямому адресу регистра

MOV ad,Rn

10001rrr

3

2

2

(ad)<-(Rn)

Пересылка прямоадресуемого байта по прямому адресу

MOV add,ads

10000101

9

3

2

(add)<-(ads)

Пересылка байта из РПД по прямому адресу

MOV ad,@Ri

1000011i

3

2

2

(ad)<-((Ri))

Пересылка по прямому адресу константы

MOV ad,#d

01110101

7

3

2

(ad)<-#d

Пересылка в РПД из аккумулятора

MOV @Ri,A

1111011i

1

1

1

((Ri))<-(A)

Пересылка в РПД прямоадресуемого байта

MOV @Ri,ad

0110011i

3

2

2

((Ri))<-(ad)

Пересылка в РПД константы

MOV @Ri,#d

0111011i

2

2

1

((Ri))<-#d

Загрузка указателя данных

MOV DPTR,#d16

10010000

13

3

2

(DPTR)<-#d16

Пересылка в аккумулятор байта из ПП

MOVC A,@A+DPTR

10010011

1

1

2

(A)<-((A)+

+(DPTR))

Пересылка в аккумулятор байта из ПП

MOVC A,@A+PC

10000011

1

1

2

(PC)<-(PC)+1 (A)<-((A)+(PC))

Пересылка в аккумулятор байта из ВПД

MOVX A,@Ri

1110001i

1

1

2

(A)<-(Ri)

Пересылка в аккумулятор байта из

расширенной ВПД

MOVX A,@DPTR

11100000

1

1

2

(A)<-((DPTR))

Пересылка в ВПД из аккумулятора

MOVX @Ri,A

1111001i

1

1

2

((Ri))<-(A)

Пересылка в расширенную ВПД из аккумулятора

MOVX @DPTR,A

11110000

1

1

2

((DPTR))<-(A)

Загрузка в стек

PUSH ad

11000000

3

2

2

(SP)<-(SP)+1 ((SP))<-(ad)

Извлечение из стека

POP ad

11010000

3

2

2

(ad)<-(SP) (SP)<-(SP)-1

Обмен аккумулятора с регистром

XCH A,Rn

11001rrr

1

1

1

(A)↔(Rn)

Обмен аккумулятора с прямоадресуемым байтом

XCH A,ad

11000101

3

2

1

(A)↔(ad)

Обмен аккумулятора с байтом из РПД

XCH A,@Ri

1100011i

1

1

1

(A)↔((Ri))

Обмен младшей тетрады аккумулятора с младшей тетрадой байта РПД

XCHD A,@Ri

1101011i

1

1

1

(A0..3 )↔((Ri)0..3 )

Команды арифметических операций

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Сложение аккумулятора с регистром (n =0..7)

ADD A,Rn

00101rrr

1

1

1

(A)<-(A)+(Rn)

Сложение аккумулятора с прямоадресуемым байтом

ADD A,ad

00100101

3

2

1

(A)<-(A)+(ad)

Сложение аккумулятора с байтом из РПД (i =0,1)

ADD A,@Ri

0010011i

1

1

1

(A)<-(A)+((Ri))

Сложение аккумулятора с константой

ADD A,#d

00100100

2

2

1

(A)<-(A)+#d

Сложение аккумулятора с регистром и переносом

ADDC A,Rn

00111rrr

1

1

1

(A)<-(A)+(Rn)+(C)

Сложение аккумулятора с прямоадресуемым байтом и переносом

ADDC A,ad

00110101

3

2

1

(A)<-(A)+(ad)+(C)

Сложение аккумулятора с байтом из РПД и переносом

ADDC A,@Ri

0011011i

1

1

1

(A)<-(A)+((Ri))+(C)

Сложение аккумулятора с константой и переносом

ADDC A,#d

00110100

2

2

1

(A)<-(A)+#d+(C)

Десятичная коррекция аккумулятора

DA A

11010100

1

1

1

Если (А0..3 )> 9 V

((AC)=1), то (А0..3 )<- (А0..3 )+6, затем если (A4..7 )> 9 V ((С)=1), то (A4..7 )<-(А4..7 )+6

Вычитание из аккумулятора регистра и заёма

SUBB A,Rn

10011rrr

1

1

1

(A)<-(A)-(C)-(Rn)

Вычитание из аккумулятора прямоадресуемого

байта и заёма

SUBB A,ad

10010101

3

2

1

(A)<-(A)-(C)-((ad))

Вычитание из аккумулятора байта РПД и заёма

SUBB A,@Ri

1001011i

1

1

1

(A)<-(A)-(C)-((Ri))

Вычитание из аккумулятора константы и заёма

SUBB A,d

10010100

2

2

1

(A)<-(A)-(C)-#d

Инкремент аккумулятора

INC A

00000100

1

1

1

(A)<-(A)+1

Инкремент регистра

INC Rn

00001rrr

1

1

1

(Rn)<-(Rn)+1

Инкремент прямоадресуемого байта

INC ad

00000101

3

2

1

(ad)<-(ad)+1

Инкремент байта в РПД

INC @Ri

0000011i

1

1

1

(Ri)<-(Ri)+1

Инкремент указателя данных

INC DPTR

10100011

1

1

2

(DPTR)<-(DPTR)+1

Декремент аккумулятора

DEC A

00010100

1

1

1

(A)<-(A)-1

Декремент регистра

DEC Rn

00011rrr

1

1

1

(Rn)<-(Rn)-1

Декремент прямоадресуемого байта

DEC ad

00010101

3

2

1

(ad)<-(ad)-1

Декремент байта в РПД

DEC @Ri

0001011i

1

1

1

(Ri)<-(Ri)-1

Умножение аккумулятора на регистр В

MUL AB

10100100

1

1

4

(B)(A)<-(A)*(B)

Деление аккумулятора на регистр В

DIV AB

10000100

1

1

4

(A).(B)<-(A)/(B)

Команды логических операций

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Логическое И аккумулятора и регистра

ANL A,Rn

01011rrr

1

1

1

(A)<-(A)and(Rn)

Логическое И аккумулятора и прямоадресуемого байта

ANL A,ad

01010101

3

2

1

(A)<-(A)and(ad)

Логическое И аккумулятора и байта из РПД

ANL A,@Ri

0101011i

1

1

1

(A)<-(A)and((Ri))

Логическое И аккумулятора и константы

ANL A,#d

01010100

2

2

1

(A)<-(A)and#d

Логическое И прямоадресуемого байта и аккумулятора

ANL ad,A

01010010

3

2

1

(ad)<-(ad)and(A)

Логическое И прямоадресуемого байта и константы

ANL ad,#d

01010011

7

3

2

(ad)<-(ad)and#d

Логическое ИЛИ аккумулятора и регистра

ORL A,Rn

01001rrr

1

1

1

(A)<-(A)V(Rn)

Логическое ИЛИ аккумулятора и прямоадресуемого байта

ORL A,ad

01000101

3

2

1

(A)<-(A)V(ad)

Логическое ИЛИ аккумулятора и байта из РПД

ORL A,@Ri

0100011i

1

1

1

(A)<-(A)V((Ri))

Логическое ИЛИ аккумулятора и константы

ORL A,#d

01000100

2

2

1

(A)<-(A)V#d

Логическое ИЛИ прямоадресуемого байта и аккумулятора

ORL ad,A

01000010

3

2

1

(ad)<-(ad)V(A)

Логическое ИЛИ прямоадресуемого байта и константы

ORL ad,#d

01000011

7

3

2

(ad)<-(ad)V#d

Исключающее ИЛИ аккумулятора и регистра

XRL A,Rn

01101rrr

1

1

1

(A)<-(A)xor(Rn)

Исключающее ИЛИ аккумулятора и прямоадресуемого байта

XRL A,ad

01100101

3

2

1

(A)<-(A)xor(ad)

Исключающее ИЛИ аккумулятора и байта из РПД

XRL A,@Ri

0110011i

1

1

1

(A)<-(A)xor((Ri))

Исключающее ИЛИ аккумулятора и константы

XRL A,#d

01100100

2

2

1

(A)<-(A)xor#d

Исключающее ИЛИ прямоадресуемого байта и аккумулятора

XRL ad,A

01100010

3

2

1

(ad)<-(ad)xor(A)

Исключающее ИЛИ прямоадресуемого байта и константы

XRL ad,#d

01100011

7

3

2

(ad)<-(ad)xor#d

Сброс аккумулятора

CLR A

11100100

1

1

1

(A)<-0

Инверсия аккумулятора

CPL A

11110100

1

1

1

(A)<-not(A)

Сдвиг аккумулятора влево циклический

RL A

00100011

1

1

1

(An+1 )<-(An ), n=0..6, (A0 )<-(A7 )

Сдвиг аккумулятора влево через перенос

RLC A

00110011

1

1

1

(An+1 )<-(An ), n=0..6, (A0 )<-(C), (C)<-(A7 )

Сдвиг аккумулятора вправо циклический

RR A

00000011

1

1

1

(An+1 )<-(An ), n=0..6, (A7 )<-(A0 )

Сдвиг аккумулятора вправо через перенос

RRC A

00010011

1

1

1

(An+1 )<-(An ), n=0..6, (A7 )<-(C), (C)<-(A0 )

Обмен местами тетрад в аккумуляторе

SWAP A

11000100

1

1

1

0..3 )<-(А4-7 )

Команды операций с битами

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Сброс переноса

CLR C

11000011

1

1

1

(С)<-0

Сброс бита

CLR bit

11000010

4

2

1

(b)<-0

Установка переноса

SETB C

11010011

1

1

1

(C)<-1

Установка бита

SETB bit

11010010

4

2

1

(b)<-1

Инверсия переноса

CPL C

10110011

1

1

1

(C)<-not(C)

Инверсия бита

CPL bit

10110010

4

2

1

(b)<-not(b)

Логическое И бита и переноса

ANL C,bit

10000010

4

2

2

(C)<-(C)and(b)

Логическое И инверсии бита и переноса

ANL C,/bit

10110000

4

2

2

(C)<-(C)andnot(b)

Логическое ИЛИ бита и переноса

ORL C,bit

01110010

4

2

2

(C)<-(C)or(b)

Логическое ИЛИ инверсии бита и переноса

ORL C,/bit

10100000

4

2

2

(C)<-(C)ornot(b)

Пересылка бита в перенос

MOV C,bit

10100010

4

2

1

(C)<-(b)

Пересылка переноса в бит

MOV bit,C

10010010

4

2

2

(b)<-(C)

Команды передачи управления

Название команды

Мнемокод

КОП

Т

Б

Ц

Операция

Длинный переход в полном объеме памяти программ

LJMP ad16

00000010

12

3

2

(PC)<-ad16

Абсолютный переход внутри страницы в 2 Кбайта

AJMP ad11

a10 a9 a8 00001

6

2

2

(PC)<-(PC)+2 (PC0..10 )<-ad11

Короткий относительный переход внутри страницы в 256 байт

SJMP rel

10000000

5

2

2

(PC)<-(PC)+2 (PC)<-(PC)+rel

Косвенный относительный переход

JMP @A+DPTR

01110011

1

1

2

(PC)<-(A)+(DPTR)

Переход, если аккумулятор равен нулю

JZ rel

01100000

5

2

2

(PC)<-(PC)+2, если (A)=0, то (PC)<-(PC)+rel

Переход, если аккумулятор не равен нулю

JNZ rel

01110000

5

2

2

(PC)<-(PC)+2, если (A)≠0, то (PC)<-(PC)+rel

Переход, если перенос равен единице

JC rel

01000000

5

2

2

(PC)<-(PC)+2, если (C)=1, то (PC)<-(PC)+rel

Переход, если перенос равен нулю

JNC rel

01010000

5

2

2

(PC)<-(PC)+2, если (C)=0, то (PC)<-(PC)+rel

Переход, если бит равен единице

JB bit,rel

00100000

11

3

2

(PC)<-(PC)+3, если (b)=1, то (PC)<-(PC)+rel

Переход, если бит равен нулю

JNB bit,rel

00110000

11

3

2

(PC)<-(PC)+3, если (b)=0, то (PC)<-(PC)+rel

Переход, если бит установлен, с последующим сбросом бита

JBC bit,rel

00010000

11

3

2

(PC)<-(PC)+3, если (b)=1, то (b)<-0 и (PC)<-(PC)+rel

Декремент регистра и переход, если не нуль

DJNZ Rn,rel

11011rrr

5

2

2

(PC)<-(PC)+2, (Rn)<-(Rn)-1, если (Rn)≠0, то (PC)<-(PC)+rel

Декремент прямоадресуемого байта и переход, если не нуль

DJNZ ad,rel

11010101

8

3

2

(PC)<-(PC)+2, (ad)<-(ad)-1, если (ad)≠0, то (PC)<-(PC)+rel

Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно

CJNE A,ad,rel

10110101

8

3

2

(PC)<-(PC)+3, если (A)≠(ad),то (PC)<-(PC)+rel, если (A)<(ad), то (С)<-1, иначе (С)<-0

Сравнение аккумулятора с константой и переход, если не равно

CJNE A,#d,rel

10110100

10

3

2

(PC)<-(PC)+3, если (A)≠#d, то (PC)<-(PC)+rel, если (A)<#d, то (С)<-1, иначе (С)<-0

Сравнение регистра с константой и переход, если не равно

CJNE Rn,#d,rel

10111rrr

10

3

2

(PC)<-(PC)+3, если (Rn)≠#d, то (PC)<-(PC)+rel, если (Rn)< #d, то (С)<-1, иначе (С)<-0

Сравнение байта в РПД с константой и переход, если не равно

CJNE @Ri,#d,rel

1011011i

10

3

2

(PC)<-(PC)+3, если ((Ri))≠#d, то (PC)<-(PC)+rel, если ((Ri))< #d, то (С)<-1, иначе (С)<-0

Длинный вызов подпрограммы

LCALL ad16

00010010

12

3

2

(PC)<-(PC)+3, (SP)<-(SP)+1, ((SP))<-(PC0..7 ), (SP)<-(SP)+1, ((SP))<-(PC8..15 ), (PC)<-ad16

Абсолютный вызов подпрограммы в пределах страницы в 2 Кбайта

ACALL ad11

a10 a9 a8 10001

6

2

2

(PC)<-(PC)+2, (SP)<-(SP)+1, ((SP))<-(PC0..7 ), (SP)<-(SP)+1, ((SP))<-(PC8..15 ), (PC0..10 )<-ad11

Возврат из подпрограммы

RET

00100010

1

1

2

(PC8..15 )<-((SP)), (SP)<-(SP)-1, (PC0..7 )<-((SP)), (SP)<-(SP)-1

Возврат из подпрограммы обработки прерывания

RETI

00110010

1

1

2

(PC8..15 )<-((SP)), (SP)<-(SP)-1, (PC0..7 )<-((SP)), (SP)<-(SP)-1

Холостая команда

N0P

00000000

1

1

1

(PC)<-(PC)+1

Примечание. Ассемблер допускает использование обобщенного имени команд JMP и CALL, которые в процессе трансляции заменяются оптимальными по формату командами перехода (AJMP, SJMP, LJMP) или вызова (ACALL, LCALL).