8492

Программирование микроконтроллеров MCS-51

Книга

Информатика, кибернетика и программирование

Программирование микроконтроллеров MCS-51 Приведены технические характеристики и функциональные возможности популярных микроконтроллеров семейства MCS-51, выпускаемых ведущими компаниями мира. Рассмотрены особенности программной модели микроконтролл...

Русский

2013-02-12

1007.5 KB

190 чел.

Программирование

микроконтроллеров MCS-51

Приведены технические характеристики и функциональные возможности популярных микроконтроллеров семейства MCS-51, выпускаемых ведущими компаниями мира. Рассмотрены особенности программной модели микроконтроллера 8051, являющегося ядром MCS-51, и соответствующего машинно-ориентированного языка АСМ51. Описаны содержание основных этапов разработки прикладного программного обеспечения микроконтроллера 8051, а также технология применения специальных программных кросс-средств (кросс-ассемблера X8051 и кросс-редактора связей Link). Даны варианты типовых микроконтроллерных программ. Изложение сопровождается большим числом практических примеров.

ПРЕДИСЛОВИЕ

Эффективная автоматизация машин, приборов и технологического оборудования, которая является обязательным условием ускорения научно-технического прогресса, основана на широком применении средств микропроцессорной техники (МТ). Автоматизация с использованием микропроцессоров (МП) и микроконтроллеров (МК) быстро распространяется в самых разнообразных отраслях народного хозяйства, охватывает новые сферы.

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

Как известно, МТ состоит из двух специфических частей: аппаратурных средств (АС) и прикладного программного обеспечения (ППО). При этом, рассматривая общий процесс проектирования МТ, можно отметить, что в большинстве случаев доля общей трудоемкости разработки ППО значительно превосходит трудоемкость разработки АС. Указанное обстоятельство объясняется тем, что разработка аппаратурной части МТ на базе типовых микропроцессорных БИС сводится (чаще всего) к выполнению стандартных операций в соответствии с рекомендациями, изложенными в технической документации на используемые БИС. Совсем по-другому выглядит инженерный труд при разработке ППО. Проектная работа носит здесь творческий характер, изобилует решениями, имеющими "волевую" или "вкусовую" окраску, и решениями, продиктованными конъюнктурными соображениями. В силу перечисленных обстоятельств именно при проектировании ППО разработчик сталкивается с наибольшим количеством проблем и от того, как они будут решены, зависит успех разработки МТ в целом. Таким образом, весьма актуальным представляется ориентация будущих инженеров на более глубокое изучение вопросов, связанных именно с программированием МТ, в частности языков программирования, средств автоматизации программирования (ассемблеров, компиляторов с языков высокого уровня, линкеров и др.), структурных особенностей микропроцессорной элементной базы.

Известны многочисленные книги, справочники, учебники и учебные пособия отдельно по программированию МП или МК и по средствам его автоматизации, причем вся эта литература издана, в основном, на рубеже 90-х годов. Отсюда следует необходимость создания литературы, в которой совместно, с единых методологических позиций рассматриваются особенности программирования современных микропроцессоров или микроконтроллеров и средства автоматизации их программирования.

Указанным требованиям в полной мере соответствует предлагаемое учебное пособие, основное внимание в котором уделено одним из наиболее популярных и перспективных микропроцессорных БИС - однокристальным микроконтроллерам семейства MCS-51.

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

Глава 1.

 СОСТАВ СЕМЕЙСТВА MCS-51

Несмотря на появление 16- и 32-разрядных микроконтроллеров и микропроцессоров, наибольшая доля мирового микропроцессорного рынка остается за 8-разрядными МК. Согласно данным компании Semico Research Corp., в 1996 году общий мировой объем продаж микроконтроллеров всех типов составил 11,4 миллиарда долларов, при этом 5,56 миллиарда долларов (или 48,8%) пришлось на долю 8-разрядных кристаллов, что примерно в 2,5 раза больше объема продаж ближайшего конкурента - 16-разрядных микроконтроллеров (2,1 млрд. долл.). Прогнозы аналитических компаний на период до 2001 года показывают, что лидирующее положение 8-разрядных МК на мировом рынке сохранится.

Среди всех 8-разрядных микроконтроллеров семейство MCS-51 является несомненным чемпионом по количеству компаний, выпускающих его модификации. Важную роль в достижении такой высокой популярности сыграла открытая политика фирмы Intel, родоначальницы этого семейства, направленная на широкое распространение лицензий на ядро MCS-51 среди большого количества ведущих полупроводниковых компаний мира.

В результате на сегодняшний день существует более 200 модификаций микроконтроллеров семейства MCS-51, выпускаемых почти 20-ю компаниями. Эти модификации включают в себя кристаллы с широчайшим набором периферии: от простых 20-выводных МК с одним таймером и резидентной памятью программ (РПП) объемом 1 Кбайт до сложнейших 100-выводных кристаллов с 10-разрядными АЦП, массивами таймеров/счетчиков, аппаратными 16-разрядными умножителями и резидентной памятью программ до 64 Кбайт. Каждый год появляются все новые варианты представителей семейства MCS-51, основными направлениями развития которого являются: увеличение быстродействия (за счет повышения тактовой частоты и (или) переработки архитектуры), снижение напряжения питания и потребления, увеличение объема РПП и резидентной памяти данных (РПД), реализация РПП на основе FLASH технологии с возможностью внутрисхемного программирования, введение в состав периферии микроконтроллера сложных устройств: системы управления приводами, CAN и USB интерфейсов и т.п.

Основными производителями модификаций 51-го семейства в мире являются фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Winbond, Silicon Systems и ряд других. В рамках данной главы невозможно рассказать о всех представителях семейства MCS-51 и всех компаниях-производителях микроконтроллеров указанного семейства. Все фирмы, о которых далее пойдет речь, имеют в России своих официальных дистрибьюторов, и, соответственно, микроконтроллеры этих фирм являются реальными кандидатами на применение в российских проектах.

1.1. Микроконтроллеры фирмы Intel

Фирма Intel является родоначальницей архитектуры семейства MCS-51, которое получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке. С точки зрения технологии микроконтроллер 8051 являлся для своего времени очень сложным изделием - в кристалле было использовано 128 тыс. транзисторов, что в 4 раза превышало количество транзисторов в 16-разрядном микропроцессоре 8086. Указанный микроконтроллер остается ядром семейства MCS-51 и по сей день.

Основными элементами базовой архитектуры семейства (архитектуры микроконтроллера 8051) являются:

- 8-разрядное АЛУ;

- 4 банка регистров, по 8 в каждом;

- внутренняя (резидентная) память программ 4 Кбайт, имеющая тип ROM или EPROM (8751);

- внутренняя (резидентная) память данных 128 байт;

- 21 регистр специальных функций;

- булевый процессор;

- два 16-разрядных таймера/счетчика;

- контроллер последовательного порта (UART);

- контроллер обработки прерываний с двумя уровнями приоритетов;

- четыре 8-разрядных порта ввода/вывода, два из которых используются в качестве шины адреса/данных для доступа к внешней памяти программ и данных;

- встроенный тактовый генератор.

Затем был выпущен микроконтроллер 8052, который отличался увеличенным объемом резидентной памяти программ и данных, введенным третьим таймером и соответственно расширенным контроллером прерываний.

Следующим принципиальным шагом в развитии MCS-51 стал перевод технологии изготовления на КМОП (модификация 8xC51). Это позволило реализовать режимы Idl (холостой ход) и Power Down (пониженное потребление), обеспечивающие резкое снижение энергопотребления кристалла и открывшие дорогу к применению микроконтроллера в энергозависимых приложениях, например, в автономных приборах с батарейным питанием.

И последним важным этапом развития МК 8051 фирмой Intel стал выпуск микроконтроллеров 8xC51FA/FB/FC и 8xC51RA/RB/RC, которые для краткости часто обозначаются как 8xC51Fx и 8xC51Rx. Главной отличительной особенностью этой группы кристаллов является наличие у них специализированного таймера/счетчика (РСА). Кроме того, микроконтроллеры 8xC51Rx дополнительно содержат сторожевой таймер (WDT). Рассмотрим архитектуру и функциональные возможности PCA более подробно.

В состав РСА входят:

- 16-разрядный таймер/счетчик;

- пять 16-разрядных модуля выборки и сравнения, каждый из которых связан со своей линией порта ввода/вывода микроконтроллера.

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

- 16-битовая выборка значения таймера по положительному фронту внешнего сигнала;

- 16-битовая выборка значения таймера по отрицательному фронту внешнего сигнала;

- 16-битовая выборка значения таймера по любому фронту внешнего сигнала;

- 16-битовый программируемый таймер;

- 16-битовое устройство скоростного вывода;

- 8-битовый ШИМ.

Выполнение всех перечисленных функций происходит в РСА на аппаратном уровне и не загружает центральный процессор. Указанное позволяет повысить общую пропускную способность, повысить точность измерений и обработки сигналов и снизить время реакции микроконтроллера на внешние события,  что  особенно важно для систем реального времени. Реализованный в  8xC51Fx  (8xC51Rx)  РСА  оказался  настолько

Обозначение

Макс. частота (МГц)

РПП

ROM/EPROM (байт)

РПД

(байт)

Таймеры/

счетчики

8051AH

12

ROM 4K

128

2

8751BH

12

EPROM 4K

128

2

8052AH

12

ROM 8K

256

3

8752BH

12

EPROM 8K

256

3

8xC51BH

24

4K

128

2

8xC52

24

8K

256

3

8xC54

33

16K

256

3

8xC58

33

32K

256

3

8xC5x-L

24

8…32K

256

3

8xC51FA

24

8K

256

3+PCA

8xC51FB

24

16K

256

3+PCA

8xC51FC

24

32K

256

3+PCA

8xL51Fx

16

8…32K

256

3+PCA

8xC51RA

24

8K

512

3+PCA+WDT

8xC51RB

24

16K

512

3+PCA+WDT

8xC51RC

24

32К

512

3+PCA+WDT

8xC251SA

16

8K

1K

3+PCA+WDT

8xC251SB

16

16K

1K

3+PCA+WDT

8xC251SP

16

8K

512

3+PCA+WDT

8xC251SQ

16

16K

512

3+PCA+WDT

TSC8xC251A1

16

24K

1K

2+WDT

8xC151SA

16

8K

256

3+PCA+WDT

8xC151SB

16

16K

256

3+PCA+WDT

удачным, что архитектура этих микроконтроллеров стала промышленным стандартом, а сам РСА многократно воспроизводился в различных модификациях МК 8051.

Некоторые характеристики ряда микроконтроллеров MCS-51, выпускаемых фирмой Intel, приведены в табл.1.1.

Изначально наиболее "узкими" местами архитектуры MCS-51 были 8-разрядное АЛУ на базе аккумулятора и относительно медленное выполнение  команд  (для выполнения  самых быстрых команд требуется  12 пе-

Таблица 1.1 

Линии

ввода/вывода

Послед.

каналы

АЦП, входы x разряды

Другая

периферия,

особенности

U пит. (В)

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,0…6,0

32

UART

-

-

4,0…6,0

32

UART

-

-

4,0…6,0

32

UART

-

-

4,0…6,0

32

UART

-

Низковольтный вариант

8xC52/54/58

2,7…3,6

32

UART

-

-

4,0…6,0

32

UART

-

4 уровня IRQ, clock out

4,0…6,0

32

UART

-

4 уровня IRQ, clock out

4,0…6,0

32

UART

-

Низковольтный вариант 8xC51Fx

2,7…3,6

32

UART

-

4 уровня IRQ, clock out

4,0…6,0

32

UART

-

4 уровня IRQ, clock out

4,0…6,0

32

UART

-

4 уровня IRQ, clock out

4,0…6,0

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

4x8

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

риодов тактовой частоты (частоты синхронизации МК)). Это ограничивало применение микроконтроллеров семейства в приложениях, требующих повышенного быстродействия и сложных вычислений (16- и 32-битовых). Насущным стал вопрос принципиальной модернизации архитектуры MCS-51. Проблема модернизации осложнялась тем, что к началу 90-х годов уже была создана масса наработок в области программного и аппаратного обеспечения семейства MCS-51, в связи с чем одной из основных задач проектирования новой архитектуры была реализация аппаратной и программной совместимости с разработками на базе MCS-51.

Для решения указанной задачи была создана совместная группа из специалистов компаний Intel и Philips, но позднее пути этих двух фирм разошлись. В результате в 1995 году появилось два существенно отличающихся семейства: MCS-251/151 у Intel и MCS-51XA у Philips (см. подраздел 1.2).

Основные характеристики архитектуры MCS-251:

- 24-разрядное линейное адресное пространство, обеспечивающее адресацию до 16 Мбайт памяти;

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

- страничный режим адресации для ускорения выборки команд из внешней программной памяти;

- очередь инструкций;

- расширенный набор команд, включающий 16-битовые арифметические и логические операции;

- расширенное адресное пространство стека (до 64 Кбайт);

- выполнение самой быстрой команды за 2 такта.

Система команд MCS-251 включает два набора инструкций - первый набор является копией системы команд MCS-51, а второй состоит из расширенных инструкций, реализующих преимущества архитектуры MCS-251. Перед использованием микроконтроллера его необходимо сконфигурировать, т.е. с помощью программатора "прожечь" конфигурационные биты, определяющие, какой из наборов инструкций станет активным после включения питания. Если установить первый набор инструкций, то в этом случае МК семейства MCS-251 будет совместим с MCS-51 на уровне двоичного кода. Такой режим называется Binary Mode. Если же изначально установить набор расширенных инструкций (режим Source Mode), то тогда программы, написанные для MCS-51, потребуют перекомпиляции на кросс-средствах для MCS-251. Режим Source Mode позволяет с максимальной эффективностью использовать архитектуру MCS-251 и достигнуть наибольшего быстродействия.

Для пользователей, ориентированных на применение микроконтроллеров MCS-251 в качестве механической замены MCS-51, фирма Intel выпускает микроконтроллеры MCS-151, уже запрограммированные в состояние Binary Mode.

Некоторые характеристики ряда микроконтроллеров MCS-251/151 приведены в табл.1.1.

В настоящее время Intel, устремленная на рынок Pentium-процессоров, сворачивает производство кристаллов MCS-51. В целом для конкретного разработчика это может остаться и незамеченным, если только он не использует микроконтроллеры 8xC51GB и 80C152Jx, которые не имеют своих точных аналогов среди изделий других фирм. Что же касается всех остальных микроконтроллеров семейства MCS-51, то все они многократно растиражированы другими компаниями.

1.2. Микроконтроллеры фирмы Philips

Фирму Philips можно по праву назвать чемпионом по количеству выпускаемых модификаций семейства MCS-51 - их более 100. В состав MCS-51 от Philips входят микроконтроллеры в корпусах от 24 до 80 выводов, работающие при тактовой частоте до 40 МГц и напряжении питания от 1,8 В. Во всех этих микроконтроллерах используется стандартное ядро MCS-51 (архитектура микроконтроллера 8051), дополненное широчайшим набором периферии, среди которой следует отметить:

- 10-разрядные АЦП;

- 8-разрядный ЦАП;

- широтно-импульсные модуляторы;

- массивы программируемых таймеров/счетчиков;

- интерфейсы I2C, CAN;

- интерфейсы с процессорными шинами (Processor Bus Interface);

- специализированную периферию для телевизионной, видео и аудио техники.

Кроме того, фирма Philips выпустила микроконтроллеры MCS-51, обладающие функцией снижения электромагнитных помех (Lower EMI).

Начиная с 1997 года Philips переводит стандартные микроконтроллеры групп 8xC51, 8xC52/54/58 и 8xC51Fx фирмы Intel на новую технологию, названную "New-and-Improved", т.е. "Новая и улучшенная". Отметим новые возможности, которые появились у хорошо известных кристаллов после модернизации:

- максимальная тактовая частота кристаллов увеличена до 33 МГц;

- расширен диапазон напряжения питания от 2,7 до 5,5 В;

- количество аппаратных уровней прерываний увеличено до 4-х;

- во все кристаллы введена функция программируемого clock-out;

- добавлен второй DPTR;

- потребляемая мощность снижена на 50%.

Кроме того, фирма Philips выпустила группу микроконтроллеров названную 8xC51Rx+. По сути это дальнейшее развитие группы 8xC51Rx фирмы Intel, в рамках технологии "New-and-Improved".

Обозначение

Макс.

частота (МГц)

РПП

ROM/EPROM (байт)

РПД

(байт)

Таймеры/

счетчики

8xC51

33

4K

128

2

8xCL51

16

4K

128

2

8xCL410

12

4K

128

2

8xC52

33

8K

256

3

8xC54

33

16K

256

3

8xC58

33

32K

256

3

8xC51FA

33

8K

256

3+PCA

8xC51FB

33

16K

256

3+PCA

8xC51FC

33

32K

256

3+PCA

8xC51RA+

33

8K

512

3+PCA+WDT

8xC51RB+

33

16K

512

3+PCA+WDT

8xC51RC+

33

32K

512

3+PCA+WDT

8xC51RD+

33

64K

3+PCA+WDT

8xC451

16

4K

128

2

8xC453

16

8K

256

2

8xC524

20

16K

512

3+WDT

8xC528

20

32K

512

3+WDT

8xC552

30

8K

256

3+WDT

8xCL580

12

6K

256

3+WDT

8xC654

24

8K

256

2

8xC748

16

2K

64

1

8xC749

16

2K

64

1

8xC750

40

1K

64

1

8xC754

16

4K

256

1+PCA

8xC592

16

16K

512

3+WDT

8xC598

16

32K

512

3+WDT

Наиболее известные модификации описанных выше микроконтроллеров от Philips представлены в табл.1.2.

В 1997 году фирма Philips взяла четкий курс на развитие FLASH технологии в производстве своих МК. Отчасти это было вызвано высокими технологическими возможностями фирмы, отчасти успехами конкурентов (в первую очередь Atmel).

Наиболее известные модификации микроконтроллеров MCS-51 с FLASH памятью, выпускаемых фирмой Philips, представлены в табл.1.3.

Таблица 1.2

Линии

Ввода/ вывода

Последов.

каналы

Периферия, особенности

U пит. (В)

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

10 внешних прерываний

1,8…6,0

32

I2C

10 внешних прерываний

1,8…6,0

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

2 DPTR, 4 уровня IRQ, clock out

2,7...5,5

56

UART

Processor Bus Interface

4,5…5,5

56

UART

Processor Bus Interface

4,5…5,5

32

UART, I2C

Lower EMI

4,5…5,5

32

UART, I2C

Lower EMI

4,5…5,5

48

UART, I2C

АЦП 8x10, ШИМ 2x8

4,5…5,5

40

UART, I2C

АЦП 4x8, ШИМ

2,5...6,0

32

UART, I2C

Lower EMI

4,5…5,5

19

-

Нагрузочная способность 10мА

4,5…5,5

21

I2C

АЦП 5x8, ШИМ 1x8

4,5…5,5

19

-

Нагрузочная способность 10мА

4,5…5,5

11

UART

ЦАП 8 бит

4,5…5,5

48

UART, CAN

АЦП 8x10, ШИМ 2x8

4,5…5,5

48

UART, CAN

АЦП 8x10, ШИМ 2x8

4,5…5,5

Как уже отмечалось выше фирма Philips предложила свое оригинальное решение по развитию архитектуры семейства MCS-51, выпустив семейство микроконтроллеров с индексом 51ХА, что буквально переводит- ся как "расширенная архитектура 51". Разработчики Philips решили отказаться от достижения совместимости кодов команд нового микроконтроллера с 8051. Такое решение, с одной стороны, сделало невозможным прямую замену микроконтроллера семейства MCS-51 на микроконтроллер семейства 51ХА, но  с  другой стороны, развязало руки разработчикам для

Обозначение

Макс. частота (МГц)

РПП

(байт)

РПД

(байт)

Таймеры/

счетчики

89C52

33

FLASH 8K

256

3

89C54

33

FLASH 16K

256

3

89C51RA+

33

FLASH 8K

512

3+PCA+WDT

89C51RB+

33

FLASH 16K

512

3+PCA+WDT

89C51RC+

33

FLASH 32K

512

3+PCA+WDT

89C51RD+

33

FLASH 64K

1K

3+PCA+WDT

89C535

33

FLASH 8K

512

2

89C536

33

FLASH 16K

512

2

89C538

33

FLASH 64K

512

2

89CE558

16

FLASH 32K

1K

3+WDT

P51XAG1x

30

ROM/EPROM 8K

512

3+WDT

P51XAG2x

30

ROM/EPROM 16K

512

3+WDT

P51XAG3x

30

ROM/EPROM 32K

512

3+WDT

P51XAC3x

25

ROM/EPROM 32K

1K

3+WDT

кардинальной переработки архитектуры в направлении создания полноценного 16-разрядного ядра.

Основные характеристики семейства MCS-51ХА (табл.1.3):

- 16-разрядное АЛУ на базе регистровой архитектуры;

- 24-разрядное адресное пространство, обеспечивающее адресацию до 16 Мбайт памяти программ или данных;

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

- расширенный набор команд;

- аппаратная поддержка мультизадачности;

- выполнение инструкций типа регистр-регистр за 100 нс;

- напряжение питания от 2,7 В.

По расчетам Philips архитектура MCS-51ХА обеспечивает увеличение быстродействия до 100 раз по сравнению с традиционной архитектурой MCS-51.

Таблица 1.3

Линии

ввода/вывода

Послед.

каналы

АЦП, входы x разряды

Другая

периферия,

особенности

U пит. (В)

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

2 DPTR, 4 уровня IRQ, clock out

2,7…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

32

UART

-

-

4,5…5,5

48

UART, CAN

8x10

ШИМ 2x8

4,5…5,5

32

2 UART

-

-

3,0…5,5

32

2 UART

-

-

2,7…5,5

32

2 UART

-

-

3,0…5,5

32

UART,

CAN

-

-

2,7…5,5

1.3. Микроконтроллеры фирм Siemens, Atmel

и Dallas Semiconductor

Фирма Siemens внесла несомненное своеобразие в развитие семейства MCS-51, выпустив микроконтроллеры серии C500 (табл.1.4), которые являются по существу самыми сложными МК 51-го семейства в мире. Эти микроконтроллеры построены на основе архитектуры МК 8051, дополненной разнообразной и весьма сложной периферией, среди которой можно отметить:

- 10-разрядные АЦП;

- 6-канальный 10-разрядный ШИМ для управления электродвигателями постоянного тока;

- 29-канальный ШИМ;

- 8 DPTR;

Обозначение

Макс. частота (МГц)

РПП

(байт)

РПД

(байт)

Таймеры/

счетчики

Микроконтроллеры

C502

20

ROM/EPROM 16K

512

3+WDT

C504G

40

ROM/EPROM 16K

512

4+WDT

С505С

20

ROM/EPROM 16K

512

3+WDT

C509

16

-

3328

5+WDT

C515A

24

ROM/EPROM 32K

1280

3+WDT

C515C

10

ROM/EPROM 64K

2304

3+WDT

C517A

24

ROM/EPROM 32K

2304

4+WDT

C540

12

ROM/EPROM 4K

256

2

C541

12

ROM/EPROM 8K

256

2+WDT

Микроконтроллеры

AT89C1051

24

FLASH 1K

64

1

AT89C2051

24

FLASH 2K

128

2

AT89C4051

24

FLASH 4K

128

2

AT89C51

24

FLASH 4K

128

2

AT89LV51

12

FLASH 4K

128

2

AT89C52

24

FLASH 8K

256

3

AT89LV52

12

FLASH 8K

256

3

AT89C55

33

FLASH 20K

256

3

AT89S8252

24

FLASH 8K

256,

EEPROM 2K

3+WDT

AT89S53

24

FLASH 12K

256

3+WDT

Микроконтроллеры

DS5000FP

12

NVRAM 32K

128

2+WDT

DS5001FP

12

NVRAM 128K

128

2+WDT

DS5002FP

12

NVRAM 128K

128

2+WDT

DS80C310

33

-

256

3

DS8xC520

33

ROM/EPROM 16K

1280

3+WDT

- аппаратный блок умножения 16х16 и деления 32/16;

- блок загрузчика программной памяти (БЗПП).

Что  касается фирмы Atmel,  то ее лицом является FLASH технология. Владея ею в совершенстве, Atmel строит свою политику на внедрении FLASH в наиболее известные микросхемы памяти, программируемой логики и микроконтроллеров, использующие технологию EPROM. Тот факт,

Таблица 1.4

Линии

ввода/ вывода

Последов.

каналы

Периферия, особенности

U пит. (В)

фирмы Siemens

32

UART

8 DPTR, 4 уровня IRQ

4,25…5,5

32

UART

АЦП 8x10,

6 ШИМ для двигателя пост. тока

4,25...5,5

34

UART, CAN

АЦП 8x8, 8 DPTR

4,25...5,5

80

2 UART

АЦП 15x10, 29 ШИМ, 8 DPTR, умн. 1616, дел. 32/16, БЗПП

4,25...5,5

56

UART

АЦП 8x8, 4 ШИМ

4,25...5,5

57

UART, SSC,

CAN

АЦП 8x10, 4 ШИМ, 8 DPTR

4,25...5,5

68

2 UART

АЦП 12x10, 21 ШИМ, 8 DPTR, умн. 1616, дел. 32/16

4,25...5,5

32

USB

-

4,25...5,5

32

USB, SSC

-

4,25...5,5

фирмы Atmel

15

-

Аналоговый компаратор

2,7...6,0

15

UART

Аналоговый компаратор

2,7...6,0

15

UART

Аналоговый компаратор

2,7...6,0

32

UART

-

4,0...6,0

32

UART

-

2,7...6,0

32

UART

-

4,0...6,0

32

UART

-

2,7...6,0

32

UART

-

4,0…6,0

32

UART, SPI

2 DPTR

2,7…6,0

32

UART, SPI

2 DPTR

4,0…6,0

фирмы Dallas Semiconductor

32

UART

БЗПП, 48-bit encryption key

4,5…5,5

32

UART

БЗПП

4,5…5,5

32

UART

БЗПП, 64-bit encryption key

4,5…5,5

32

UART

2 DPTR

4,5…5,5

32

2 UART

2 DPTR

4,5…5,5

что в качестве первого кандидата на модернизацию при прорыве на рынок микроконтроллеров, где господствовали такие мощные фирмы как Philips, Siemens, Intel, Motorola, Mitsubishi и др., фирма Atmel избрала микроконтроллер 8051, подтверждает исключительно высокую популярность этого кристалла.

Среди оригинальных разработок Atmel в рамках семейства MCS-51 отметим следующие (см. табл.1.4):

- 20-выводные микроконтроллеры AT89С2051/1051, открывшие дорогу семейству MCS-51 в сферу "1-долларовых" приложений;

- микроконтроллеры с каналом SPI, обеспечивающие возможность внутрисхемного программирования FLASH памяти. Эта функция может быть очень удобна в производстве, когда программирование микросхем осуществляется уже после их монтажа;

- микроконтроллер с резидентной памятью типа EEPROM, обеспечивающей хранение оперативных данных при отключенном питании микросхемы.

Фирма Dallas Semiconductor в первую очередь получила известность среди производителей семейства MCS-51 своей серией DS5000 (табл.1.4). Оригинальность микроконтроллеров этой серии заключается в том, что их резидентная память программ выполнена в виде NVRAM - оперативной памяти, энергонезависимость которой обеспечивается литиевой батарейкой, встроенной непосредственно в корпус микросхемы. Фирма дает 10-летнюю гарантию на сохранность информации в NVRAM. Микроконтроллеры серии DS5000 имеют архитектуру стандартного ядра MCS-51, поэтому их временные характеристики полностью идентичны характеристикам микроконтроллера 8051.

Отметим, что фирма Dallas Semiconductor первой попыталась усовершенствовать архитектуру семейства MCS-51. Как известно, базовая архитектура этого семейства обеспечивает не оптимальную процедуру выборки и выполнения команд. Например, команда MOV A,Rn выбирается и выполняется микроконтроллером 8051 за 6 тактов, а следующие 6 тактов происходит холостая выборка команды по следующему адресу. В результате затрачивается 12 тактов тактового генератора МК. Специалисты Dallas Semiconductor переработав архитектуру МК 8051 создали группу микроконтроллеров DS8xC300/500 (табл.1.4), в которых типовой цикл выборки и выполнения команд сократился до 4-х тактов, а холостые выборки были исключены. Таким образом, команда MOV A,Rn стала выполняться за 4 такта тактового генератора, т.е. в 3 раза быстрее. Команды МК 8051, которые не имели холостых выборок, в DS8xC300/500 "ускорились" в 1,5 раза.

Список литературы

1. Каталог инструментальных средств для микроконтроллеров/ Фитон. М., 1998.

Глава 2.

ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ

МИКРОКОНТРОЛЛЕРОВ MCS-51

2.1. Программная модель микроконтроллера 8051

0FFFH

23H  TI, RI

1BH  T/C1

13H  INT1

0BH  T/C0

03H  INT0

00H

15                            8

 

PC

7                              0

Рис.1. Структура резидентной памяти программ микроконтроллера 8051

В предыдущей главе было отмечено, что ядром семейства MCS-51 является микроконтроллер 8051 (отечественный аналог КР1816ВЕ51). В связи с этим представляется целесообразным рассмотрение особенностей программирования указанного семейства на примере именно этого микроконтроллера.

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

Резидентная память программ (рис.1) имеет байтовую организацию и доступна только по чтению, при этом ее ячейки (4 Кбайт) адресуются с использованием двенадцати младших разрядов PC. Резидентная память программ может быть дополнена внешней памятью. В этом случае общий максимально допустимый объем памяти программ составит 64 К. Младшие адреса резидентной памяти программ отведены под обработку внешних прерываний , , прерываний от таймеров/счетчиков T/C0, T/C1 и прерывания от последовательного порта. В случае возникновения какого-либо из указанных прерываний происходит обращение к соответствующей ячейке резидентной памяти программ (например, при возникновении прерывания  в PC записывается код 0003H).

Резидентная память данных (рис.2) состоит из 128-ми 8-разрядных ячеек с адресами 00H-7FH и может быть дополнена внешней памятью данных емкостью до 64 К. При этом пространства резидентной и внешней

Резидентная память данных

Регистры специальных функций

7FH

F7

F6

F5

F4

F3

F2

F1

F0

0F0H

E7

E6

E5

E4

E3

E2

E1

E0

0E0H

30H

D7

D6

D5

D4

D3

D2

D1

D0

0D0H

7F

7E

7D

7C

7B

7A

79

78

2FH

-

-

-

BC

BB

BA

B9

B8

0B8H

77

76

75

74

73

72

71

70

2EH

B7

B6

B5

B4

B3

B2

B1

B0

0B0H

6F

6E

6D

6C

6B

6A

69

68

2DH

AF

-

-

AC

AB

AA

A9

A8

0A8H

67

66

65

64

63

62

61

60

2CH

A7

A6

A5

A4

A3

A2

A1

A0

0A0H

5F

5E

5D

5C

5B

5A

59

58

2BH

SBUF

99H

57

56

55

54

53

52

51

50

2AH

9F

9E

9D

9C

9B

9A

99

98

98H

4F

4E

4D

4C

4B

4A

49

48

29H

97

96

95

94

93

92

91

90

90H

47

46

45

44

43

42

41

40

28H

TH1

8DH

3F

3E

3D

3C

3B

3A

39

38

27H

TH0

8CH

37

36

35

34

33

32

31

30

26H

TL1

8BH

2F

2E

2D

2C

2B

2A

29

28

25H

TL0

8AH

27

26

25

24

23

22

21

20

24H

TMOD

89H

1F

1E

1D

1C

1B

1A

19

18

23H

8F

8E

8D

8C

8B

8A

89

88

88H

17

16

15

14

13

12

11

10

22H

PCON

87H

0F

0E

0D

0C

0B

0A

09

08

21H

DPH

83H

07

06

05

04

03

02

01

00

20H

DPL

82H

R7

1FH

SP

81H

87

86

85

84

83

82

81

80

80H

R0

18H

R7

17H

R0

10H

R7

0FH

R0

08H

Рис.2. Структура резидентной памяти данных и регистров специальных функций микроконтроллера 8051

R7

07H

R0

00H

памяти не пересекаются, так как доступ к ним осуществляется с помощью разных команд.

Младшие 32 байта РПД сгруппированы в 4 банка по 8 регистров R0-R7 в каждом. Отметим, что Банк0, Банк1, Банк2 и Банк3 занимают соответственно адреса 00H-07H, 08H-0FH, 10H-17H и 18H-1FH. Следующие после банков регистров 16 байт (адреса 20H-2FH) или 128 бит (адреса 00H-7FH) образуют область ячеек, к которым возможно побитовое обращение. Набор команд МК 8051 содержит значительное количество инструкций, позволяющих работать с указанными битами.

Область регистров специальных функций (РСФ) (рис.2) содержит 21 регистр, назначение которых приведено в табл.2.1. Как видно из рис.2 и табл.2.1, 11 РСФ допускают побитовое обращение (биты с адресами 80H-0F7H).

                                                                                                                     Таблица 2.1

Наименование

Назначение

Адрес

P0*

Порт 0

80H

SP

Указатель стека

81H

DPL

Младший байт указателя данных DPTR

82H

DPH

Старший байт указателя данных DPTR

83H

PCON

Регистр управления потреблением

87H

TCON*

Регистр управления таймеров/счетчиков

88H

TMOD

Регистр режимов таймеров/счетчиков

89H

TL0

Таймер/счетчик 0. Младший байт

H

TL1

Таймер/счетчик 1. Младший байт

8BH

TH0

Таймер/счетчик 0. Старший байт

8CH

TH1

Таймер/счетчик 1. Старший байт

8DH

P1*

Порт 1

90H

SCON*

Регистр управления последовательным портом

98H

SBUF

Буфер последовательного порта

99H

P2*

Порт 2

0A0H

IE*

Регистр разрешения прерываний

0A8H

P3*

Порт 3

0B0H

IP*

Регистр приоритетов прерываний

0B8H

PSW*

Регистр состояния программы

0D0H

A*

Аккумулятор

0E0H

B*

Регистр B

0F0H

  * - регистры, допускающие побитовую адресацию.

Рассмотрим регистры специальных функций более подробно.

 Порты P0, P1, P2, P3 являются двунаправленными портами ввода/вывода и предназначены для обеспечения обмена информацией МК с внешними устройствами, образуя 32 линии ввода/вывода. Помимо обычного ввода/вывода указанные порты могут выполнять ряд дополнительных функций. В частности, при работе МК с внешней памятью данных или с внешней памятью программ через порты P0 и P2 выводятся соответственно младший и старший байты адреса, кроме того через порт P0 выдается (принимается) байт данных (байт данных или байт команды). При этом обмен байтом данных, ввод байта команды и вывод младшего байта адреса внешней памяти мультиплексированы во времени. Линии порта P3 имеют следующие альтернативные функции: P3.0 (P3.1) - вход (выход) последовательного порта; P3.2 (P3.3) - вход внешнего прерывания  (); P3.4 (P3.5) - счетный вход 0 (1); P3.6 (P3.7) - выход сигнала записи (чтения) во внешнюю память данных (из внешней памяти данных).

 Указатель стека SP (Stack Pointer) - регистр, содержимое которого инкрементируется (увеличивается на единицу) перед записью данных в стек при выполнении команд PUSH и CALL. Начальный сброс устанавливает указатель стека в 07H, а область стека в РПД начинается с адреса 08H. При необходимости, путем переопределения указателя стека область стека может быть расположена в любом месте РПД.

 Указатель данных DPTR (Data PoinTeR) предназначен для хранения 16-разрядного адреса внешней памяти данных и состоит из двух программно доступных регистров DPH (Data Pointer High) и DPL (Data Pointer Low), которые могут использоваться в качестве независимых регистров общего назначения, если нет необходимости в хранении упомянутого адреса. Кроме того, DPTR служит базовым регистром при косвенной адресации в некоторых командах пересылки или перехода.

 Регистр PCON (Power Control). Конструкция регистра PCON определяется технологией изготовления микроконтроллера. Для варианта изготовления по технологи n-МОП (8051) регистр PCON имеет всего один бит - SMOD, управляющий скоростью передачи последовательного порта. Для варианта изготовления по технологии КМОП (80С51) наименование и назначение разрядов регистра PCON приведены в табл.2.2. Для 8051 и 80С51 расположение и назначение разряда SMOD идентичны. Биты GF0 и GF1 пользователь может задействовать по своему усмотрению. Если в PD и IDL одновременно записана "1", то преимущество имеет PD.

Особенности режима холостого хода и режима микропотребления заключаются в том, что при первом блокируются только узлы, составляющие центральный процессор микроконтроллера (тактовый генератор продолжает функционировать), а при втором блокируется работа всех узлов. Токи потребления микроконтроллера 80С51 в режимах холостого хода и микропотребления составляют соответственно не более 4,2 мА и не более 50 мкА. Для окончания режима холостого хода имеются два способа. Активизация любого разрешенного прерывания автоматически приведет к сбросу бита IDL в "0", оканчивая режим холостого хода, при этом состояние резидентной памяти данных и РСФ остается таким же, каким оно было на момент перехода в указанный режим. После исполнения команды (инструкции), обеспечивающей выход из подпрограммы обслуживания прерывания, будет выполняться инструкция, которая следует за командой, переведшей микроконтроллер в режим холостого хода. Другим способом окончания режима холостого хода является инициализация (сброс) микроконтроллера. В этом случае сохраняется только содержимое РПД. Указанный способ используется и для окончания режима микропотребления.

                                                                                                                     Таблица 2.2

Биты

Наименование

Назначение

7

SMOD

Бит удвоения скорости передачи через последовательный порт. При установке в "1" скорость передачи удваивается. Доступен по чтению.

6

-

Не используется.

5

-

Не используется.

4

-

Не используется.

3

GF1

Программно управляемый флаг пользователя.

2

GF0

Программно управляемый флаг пользователя.

1

PD

Бит включения режима микропотребления ("1" - включение, "0" - отмена). Доступен по чтению.

0

IDL

Бит включения режима холостого хода. ("1" - включение, "0" - отмена). Доступен по чтению.

 Регистры TH0, TL0, TH1, TL1 (Timer/counter Low (High) byte). Исходное (текущее) состояние j-го таймера/счетчика T/Cj  в микроконтроллере определяется (отражается) программно доступными регистрами THj, TLj. Причем регистр THj - старшие, а регистр TLj - младшие 8 разрядов. Указанные регистры могут быть программно прочитаны или загружены как при выключенных, так и при работающих таймерах/счетчиках. Новая загрузка THj, TLj сразу же означает новую величину с которой будет начат счет в T/Cj, а старая теряется. Если загрузка произведена при включенном T/Cj, то счет продолжается с новой величины. Очередность загрузки регистров THj, TLj произвольная. Выключение T/Cj не искажает код, находящийся в THj, TLj. Таймер/счетчик T/Cj можно выключить, через произвольное время вновь включить и счет начнется с той величины, которая была в регистрах THj, TLj на момент выключения.

Регистр TCON (Timer/counter Control). Наименование и назначение разрядов регистра TCON приведены в табл.2.3. Все разряды этого регистра доступны по записи и по чтению.

                                                                                                                       Таблица 2.3

Биты

Наименование

Назначение

7

TF1

Флаг переполнения T/C1.

6

TR1

Бит включения T/C1.

TR1=1 - включен, TR1=0 - выключен.

5

TF0

Флаг переполнения T/C0.

4

TR0

Бит включения T/C0.

TR0=1 - включен, TR0=0 - выключен.

3

IE1

Флаг запроса внешнего прерывания .

2

IT1

Бит, определяющий вид прерывания .

IT1=0 - прерывание по уровню (низкому),

IT1=1 - прерывание по фронту (переход из"1" в "0").

1

IE0

Флаг запроса внешнего прерывания .

0

IT0

Бит, определяющий вид прерывания .

IT0=0 - прерывание по уровню (низкому),

IT0=1 - прерывание по фронту (переход из"1" в "0").

Флаг TFj  аппаратно устанавливается в "1" при переходе T/Cj из состояния "все единицы" в состояние "все нули". Если прерывание от T/Cj разрешено, то установка флага TFj вызовет прерывание. Бит TFj аппаратно сбрасывается в "0" при обращении к подпрограмме обработки прерывания. Флаг IEj аппаратно устанавливается в "1" от внешнего прерывания : от низкого уровня или перехода из "1" в "0" сигнала прерывания. Если при этом внешнее прерывание разрешено, то осуществляется переход к подпрограмме его обслуживания. Сброс флага IEj выполняется аппаратно при обслуживании прерывания только в том случае, когда ITj=1.

 Регистр TMOD (Timer/counter Mode). Наименование и назначение разрядов регистра TMOD приведены в табл.2.4. Все разряды этого регистра доступны по записи и по чтению.

При работе в качестве таймера содержимое T/Cj  инкрементируется с частотой , где f есть частота синхронизации микроконтроллера. При работе T/Cj в качестве счетчика внешних событий, его содержимое инкрементируется в ответ на переход из "1" в "0" сигнала на  j-ом счетном входе микроконтроллера. Для надежной работы T/Cj в режиме счетчика необходимо, чтобы максимальная частота указанного сигнала была не более , а уровень этого сигнала оставался неизменным в течение как минимум одного машинного цикла ().

                                                                                                                       Таблица 2.4

Биты

Наименование

Назначение

7

GATE1

Бит разрешает (запрещает) управлять T/C1 от внешнего вывода .

GATE1=1 - управление разрешено,

GATE1=0 - управление запрещено.

6

Бит определяет работу T/C1 в качестве таймера (=0), счетчика внешних событий (=1).

5

4

М1.1

М0.1

Биты определяют один из 4-х режимов работы T/C1.

M1.1

M0.1

Режим

0

0

0

0

1

1

1

0

2

1

1

3

3

GATE0

Бит разрешает (запрещает) управлять T/C0 от внешнего вывода .

GATE0=1 - управление разрешено,

GATE0=0 - управление запрещено.

2

Бит определяет работу T/C0 в качестве таймера (=0), счетчика внешних событий (=1).

1

0

М1.0

М0.0

Биты определяют один из 4-х режимов работы T/C0.

M1.0

M0.0

Режим

0

0

0

0

1

1

1

0

2

1

1

3

Таймер/счетчик T/Cj в режиме 0 (1) представляет собой устройство на основе 13- (16-) разрядного регистра, состоящего из 8-ми разрядов регистра THj и 5-ти младших разрядов (8-ми разрядов) регистра TLj. В режиме 2 T/Cj представляет собой устройство на основе 8-разрядного регистра TLj. При каждом переполнении TLj кроме установки в регистре TCON флага TFj происходит автозагрузка регистра TLj содержимым THj, причем указанная автозагрузка не влияет на содержимое регистра THj. Таймер/счетчик T/C1 в режиме 3 заблокирован (значение кода в регистрах TH1, TL1 не изменяется). Эффект такой же, как при сбросе TR1 в "0". Таймер/счетчик T/C0 в режиме 3 представляет собой два независимых устройства на основе регистров TH0 и TL0. Устройство на основе TL0 может работать в режиме таймера или в режиме счетчика и при переполнении устанавливает флаг TF0. За этим устройством сохраняются биты управления TR0, GATE0, . Устройство на основе регистра TH0 может работать только в режиме таймера. Оно использует бит включения TR1, при переполнении выставляет флаг TF1. Других битов управления устройство на основе TH0 не имеет.

 Регистр SCON (Serial port Control) предназначен для приема и хранения кода, который управляет последовательным интерфейсом. Наименование и назначение разрядов регистра SCON приведены в табл.2.5. Все разряды этого регистра программно доступны по записи и чтению.

                                                                                                                       Таблица 2.5

Биты

Наименование

Назначение

7

6

SM0

SM1

Биты определяют один из 4-х режимов работы последовательного порта

SM0

SM1

Режим

Характеристика режима

0

0

0

Сдвиговый регистр. Скорость (частота) приема/ передачи f/12.

0

1

1

8-битовый универсальный асинхронный приемник/ передатчик (УАПП). Скорость (частота) приема/ передачи задается частотой переполнений T/C1.

1

0

2

9-битовый УАПП. Скорость (частота) приема/ передачи f/64 или f/32.

1

1

3

9-битовый УАПП. Скорость (частота) приема/ передачи задается частотой переполнений T/C1.

5

SM2

Бит разрешения многопроцессорной работы.

4

REN

Бит разрешает (запрещает) прием.

REN=1 - прием разрешен,

REN=0 - прием запрещен.

3

TB8

Девятый бит передаваемых данных в режимах 2, 3.

2

RB8

Девятый бит принятых данных в режимах 2, 3.

1

TI

Флаг прерывания передатчика.

0

RI

Флаг прерывания приемника.

В режимах 2 и 3 при SM2=1 флаг RI не активизируется (не устанавливается в "1"), если девятый принятый бит данных равен "0". В режиме 1 при SM2=1 флаг RI не активизируется, если не принят стоп-бит равный "1". В режиме 0 бит SM2 не используется и должен быть сброшен в "0". Флаг TI аппаратно устанавливается в "1" в конце периода передачи 8-го бита в режиме 0 или в начале периода передачи стоп-бита в других режимах. Флаг RI аппаратно устанавливается в "1" в конце периода приема 8-го бита в режиме 0 или в середине периода приема стоп-бита (девятого бита) в режиме 1 (в режимах 2 и 3) при SM2=0.

Режим 2 и режим 3 последовательного порта позволяют организовать работу микроконтроллеров 8051 в многопроцессорных системах, использующих для обмена информацией между МК разделяемый моноканал (коаксиальный кабель, витая пара, оптоволокно и др.). В этих режимах флаг RI установится только в том случае, когда либо SM2=0, либо принятый девятый бит данных равен "1". Указанную особенность работы последовательного порта можно использовать для организации межконтроллерного обмена следующим образом. Пусть ведущему МК требуется передать блок данных некоторому (нескольким) ведомому (ведомым) МК. С этой целью ведущий МК в протокольном режиме "широковещательной" передачи (всем ведомым МК) выдает в моноканал байт-идентификатор абонента (код адреса МК-получателя), который отличается от байтов данных только тем, что в его девятом бите содержится "1". Программа реализации протокола сетевого обмена информацией должна быть построена таким образом, чтобы при получении байта-идентификатора во всех ведомых МК произошли прерывание прикладных программ и вызов подпрограммы сравнения байта-идентификатора с кодом собственного сетевого адреса. Адресуемый МК сбрасывает свой управляющий бит SM2 в "0" и готовится к приему блока данных. Остальные ведомые МК, адрес которых не совпал с кодом байта-идентификатора, оставляют неизменным состояние SM2=1 и передают управление основной программе. Байты данных, поступающие по моноканалу в последовательный порт ведомых микроконтроллеров у которых SM2=1, прерывание не вызывают (не устанавливается флаг RI), т.е. игнорируются.

 Регистр SBUF (Serial port Buffer). Через SBUF обеспечивается программный доступ к регистрам передатчика и приемника последовательного порта. Причем передача начинается любой командой микроконтроллера, использующей SBUF в качестве регистра назначения, т.е. выполняющей операцию "запись в SBUF".

 Регистр IE (Interrupt Enable) используется для разрешения или запрещения прерываний от соответствующих источников. Наименование и назначение разрядов регистра IE приведены в табл.2.6. Все биты указанного регистра программно доступны по записи и чтению.

 Регистр IP (Interrupt Priority) используется для установки уровня приоритета прерывания для каждого из пяти источников прерываний. Наименование и назначение разрядов регистра IP приведены в табл.2.7. Все биты этого регистра программно доступны по записи и чтению. Наличие в заданном разряде регистра IP "1" устанавливает для соответствующего источника высокий уровень приоритета, а наличие "0" - низкий уровень приоритета.

                                                                                                                       Таблица 2.6

Биты

Наименование

Назначение

7

EA

Бит управления всеми источниками прерываний одновременно.

EA=0 - прерывания запрещены,

EA=1 - прерывания могут быть разрешены индивидуальными разрешениями EX0, EX1, ET0, ET1, ES.

6

-

Не используется. 

5

-

Не используется. 

4

ES

Бит управления прерыванием от последовательного порта.

ES=0 - прерывание запрещено,

ES=1 - прерывание разрешено.

3

ET1

Бит управления прерыванием от T/C1.

ET1=0 - прерывание запрещено,

ET1=1 - прерывание разрешено.

2

EX1

Бит управления прерыванием от внешнего источника .

EX1=0 - прерывание запрещено,

EX1=1 - прерывание разрешено.

1

ET0

Бит управления прерыванием от T/C0.

ET0=0 - прерывание запрещено,

ET0=1 - прерывание разрешено.

0

EX0

Бит управления прерыванием от внешнего источника .

EX0=0 - прерывание запрещено,

EX0=1 - прерывание разрешено.

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

Источник

Приоритет внутри уровня

IE0

высокий

TF0

IE1

TF1

RI, TI

низкий

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

                                                                                                                       Таблица 2.7

Биты

Наименование

Назначение

7

-

Не используется.

6

-

Не используется. 

5

-

Не используется. 

4

PS

Бит установки уровня приоритета прерывания от последовательного порта.

3

PT1

Бит установки уровня приоритета прерывания от таймера/счетчика T/C1.

2

PX1

Бит установки уровня приоритета прерывания от внешнего источника .

1

PT0

Бит установки уровня приоритета прерывания от таймера/счетчика T/C0.

0

PX0

Бит установки уровня приоритета прерывания от внешнего источника .

 Регистр PSW (Program Status Word). Наименование и назначение разрядов регистра PSW приведены в табл.2.8.

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

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

                                                                                                                        Таблица 2.8

Биты

Наименование

Назначение

7

C

Флаг переноса. Устанавливается в "1" (сбрасывается в "0") аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 7-ом бите результата. Во время выполнения команды умножения или деления флаг всегда аппаратно сбрасывается.

6

AC

Флаг дополнительного переноса. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения  команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 3-ем бите результата.

5

F0

Программно управляемый флаг пользователя.

4

3

RS1

RS0

Разряды управления выбором банка рабочих регистров. Устанавливаются (сбрасываются) программно.

RS1

RS0

Банк

0

0

0

0

1

1

1

0

2

1

1

3

2

OV

Флаг переполнения. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается во время выполнения команды сложения (вычитания) если есть перенос (заем) в 6-ом бите результата и нет переноса (заема) в бите 7, или есть перенос (заем) в бите 7 и нет в бите 6, в противном случае флаг сбрасывается. Во время выполнения команды деления флаг аппаратно сбрасывается, а в случае деления на нуль - устанавливается. При умножении флаг аппаратно устанавливается если результат больше 255, в противном случае - сбрасывается.

1

без имени

Флаг пользователя. Устанавливается (сбрасывается) программно. Доступен по чтению.

0

P

Флаг паритета. Программно доступен только по чтению. Аппаратно сбрасывается (устанавливается) в каждом машинном цикле для индикации четности (нечетности) количества разрядов аккумулятора, находящихся в состоянии "1". Если в аккумуляторе все разряды сброшены в "0", флаг аппаратно сбрасывается.

 2.2. Ассемблерный язык микроконтроллера 8051

Для эффективной разработки прикладного программного обеспечения микропроцессоров и микроконтроллеров необходимо выбрать подходящий язык программирования. Если требуется не очень сложная и при этом быстрая и компактная программа, которая не содержит сложных вычислительных операций, то для ее написания лучше выбрать язык низкого уровня (язык ассемблера). Язык высокого уровня (ЯВУ) следует выбрать в том случае, если необходимо производить сложные вычисления: операции над 16-, 32-разрядными числами, числами с плавающей точкой и др. Очень часто наиболее подходящей является смешанная модель, где критичные к быстродействию части программы написаны на ассемблере, а вычислительные процедуры реализованы на ЯВУ, например, на Си.

Изучение языков программирования целесообразнее всего начинать с ассемблера, поскольку он дает наглядное представление о функционировании аппаратной части целевого микропроцессора (микропроцессора для которого разрабатывается прикладная программа), что в конечном счете обеспечивает получение оптимальных схемотехнических решений разрабатываемой микропроцессорной техники. Язык ассемблера относится к группе машинно-ориентированных языков. Иначе говоря, каждому типу микропроцессоров или микроконтроллеров соответствует свой ассемблерный язык.

Оператором языка ассемблера микроконтроллера 8051 (языка АСМ51) является строка исходного текста микроконтроллерной программы (МК-программы), имеющая следующий формат:

метка       

 команда/ директива  

;комментарий

операция операнды

 Поле команда/ директива является главным полем строки и состоит из поля операция и поля операнды, разделенных пробелом.

 Поле операция содержит мнемоническое обозначение команды или директивы ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: MOV - move - переслать, JMP - jump - перейти, DB - define byte - определить байт. Кроме того, поле операция может содержать символическое имя ассемблерной макрокоманды.

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

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

Регистровая адресация обеспечивает обращение к байтовому содержимому регистров A, B или регистров R0-R7 выбранного банка, к 2-байтовому содержимому регистра DPTR и к битовому содержимому флага переноса C, при этом в качестве операндов используются принятые имена перечисленных программно доступных элементов, а также символические имена (только для регистров R0-R7), определяемые пользователем.

Прямая адресация применяется для обращения к байтовому содержимому 128-ми ячеек резидентной памяти данных или 21-го регистра специальных функций, а также к битовому содержимому 16-ти ячеек РПД или 11-ти РСФ, допускающих побитовое обращение (рис.2). При прямой адресации данных в поле операнды указывается прямой адрес используемых ячейки РПД, регистра специальных функций или бита. Этот адрес может быть задан числом, символическим именем, выражением, именем (только для РСФ и битов РСФ). Имена регистров специальных функций приведены в табл.2.1, а имена битов РСФ - в табл.2.3, табл.2.5-2.8. Кроме того, имя бита РСФ может быть представлено структурой вида: имя РСФ.номер бита. Например, имя пятого бита регистра TCON можно записать как TCON.5, имя второго бита аккумулятора - как A.2 и т.д.

С помощью косвенно-регистровой адресации обеспечивается обращение к байтовому содержимому 128-ми ячеек РПД, при этом адрес используемой ячейки определяется содержимым указателя стека SP или одного из регистров R0, R1 выбранного банка. Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае регистром-указателем может быть 16-разрядный указатель данных DPTR или один из упомянутых выше регистров R0, R1. Для работы с данными, "зашитыми" в виде констант в память программ микроконтроллера, применяется косвенно-регистровая адресация по сумме: базовый регистр (содержимое DPTR или программного счетчика PC) плюс индексный регистр (содержимое аккумулятора A). Любая такая константа может быть выбрана по адресу, который вычисляется сложением содержимого DPTR (PC) с содержимым A. Операнд, определяющий косвенно-регистровую адресацию данных, задается именем регистра-указателя или символическим именем (только для R0 и R1) с обязательным префиксом @.

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

Аналогичным образом (за исключением префикса #) представляется операнд, определяющий адрес перехода в памяти программ микроконтроллера.

В качестве операндов ассемблерных директив и макрокоманд обычно используются числа, символические имена, выражения, имена программно доступных элементов микроконтроллера (только для директивы REG и макрокоманд), а в ряде случаев мнемоники языка АСМ51 (только для макрокоманд).

Символические имена, являющиеся операндами команд или директив, должны быть обязательно определены с помощью соответствующих директив (EQU, VAR или REG) языка АСМ51. Кроме того, символическое имя адреса в памяти программ может быть определено использованием этого имени в поле метка одной из строк исходного текста МК-программы. Отметим, что корректное символическое имя должно быть представлено комбинацией букв латинского алфавита и цифр и начинаться с буквы, при этом указанная комбинация допускает использование символа подчеркивания.

Применяемые в качестве операндов числа приводятся с указанием системы счисления (СС), для чего используется суффикс (латинская буква, стоящая после числа): B - для двоичной СС, Q - для восьмеричной СС, D -  и H -  соответственно для десятичной и шестнадцатеричной СС. Число без суффикса считается десятичным.

Выражение, используемое в поле операнды, вычисляется в процессе трансляции исходной МК-программы и представляет собой совокупность символических имен и (или) чисел (в формате 2-байтовых слов), содержащую следующие основные операторы:

"+" - сложение (третий уровень приоритета);

"-" - вычитание (третий уровень приоритета);

"" - умножение (четвертый уровень приоритета);

"/" - деление (четвертый уровень приоритета);

"" - возведение в степень (пятый уровень приоритета);

.OR. - ИЛИ (первый уровень приоритета);

.AND. - И (второй уровень приоритета);

.XOR. - исключающее ИЛИ (первый уровень приоритета);

.NOT. - отрицание (шестой уровень приоритета);

"<" (">") - выделение младшего (старшего) байта 2-байтового слова (шестой уровень приоритета).

Оператор с более высоким уровнем приоритета выполняется в первую очередь. Если в выражении присутствуют операторы с одинаковым уровнем приоритета, то вычисления производятся слева направо. Чтобы изменить указанный порядок выполнения расчетов допускается использовать скобки. В качестве примера приведем выражение <.NOT.13H+1, реализующее процедуру преобразования числа 13H в дополнительный код и эквивалентное числу 0EDH, которое будет получено при трансляции исходной МК-программы.

Поле метка не является обязательным, отделяется от поля команда/ директива пробелом и может содержать символическое имя непосредственных данных, одного из регистров R0-R7, прямого адреса, макрорасширения или адреса перехода в памяти программ. Если метка заканчивается двоеточием, то она может быть расположена в любом месте строки, в противном случае метка должна начинаться в начале строки.

Поле комментарий содержит пояснения различного характера - может объяснять применение той или иной команды или директивы, содержать описание алгоритма участка или МК-программы в целом и др. Это поле не является обязательным и при использовании должно начинаться символом ;.

2.2.1. Система команд языка АСМ51

Система команд языка АСМ51 содержит 111 команд, которые обеспечивают реализацию широкой номенклатуры арифметических и логических операций, а также операций пересылки данных и передачи управления. В табл.2.9 приведены обозначения, используемые в описании команд.

                                                                                                                     Таблица 2.9

Обозначение

Назначение

addr

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

addr11

Символическое имя 11-битового адреса ячейки памяти программ.

addr16

Символическое имя 16-битового адреса ячейки памяти программ.

bit

Символическое имя 8-разрядного адреса бита в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение (см. рис.2).

data8

Символическое имя байта данных.

                                                                                                   Продолжение табл.2.9

Обозначение

Назначение

data16

Символическое имя 16-битовых данных.

direct

Символическое имя 8-разрядного адреса ячейки резидентной памяти данных или регистра специальных функций.

rel

Значение байта смещения, используемое при вычислении адреса addr.

(X)

Содержимое элемента X.

((X))

Содержимое по адресу, хранящемуся в элементе X.

X[M]

Разряд M элемента X.

X[3-0]

Группа разрядов элемента X.



Оператор присваивания.

Дизъюнкция.

Конъюнкция.

Сложение по модулю 2.

XY

Целочисленное деление элемента X на элемент Y.

mod[XY]

Остаток при целочисленном делении.

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

ACALL addr11

addr11[10-8] 1 0 0 0 1

addr11[7-0]

Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по адресу addr11. При этом содержимое счетчика команд PC увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-разрядное значение PC помещается в стек, и содержимое указателя стека SP также увеличивается на 2. Адрес перехода образуется с помощью конкатенации (сцепления) 5-ти старших бит увеличенного содержимого счетчика команд PC, содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.

Алгоритм

Пример

(PC)(PC)+2, (SP)(SP)+1

((SP))(PC[7-0]), (SP)(SP)+1

((SP))(PC[15-8])

(PC[10-0])addr11[10-8] addr11[7-0],

где есть знак конкатенации

;(SP)=07H, (PC)=28DH,

;MT1 соответствует адресу ;345H в ПП

ACALL MT1 ;(PC)=345H, ;(SP)=09H,

;в РПД (09H)=02H, (08H)=8FH

ADD A,Rn ;где n=0-7

0 0 1 0 1 r r r

 где rrrB=000B-111B

Команда "сложение" складывает содержимое аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A)(A)+(Rn), где n=0-7

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=0C3H, (R6)=0AAH

ADD A,R6 ;(A)=6DH,(R6)=0AAH,

;(AC)=0, (C)=1, (OV)=1

ADD A,@Ri ;где i{0,1}

0 0 1 0 0 1 1 i

Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+((Ri)), где i{0,1}

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=95H, (R1)=31H,

РПД (31H)=4CH

ADD A,@R1 ;(A)=0E1H, (C)=0, ;(AC)=1, (OV)=0, (31H)=4CH

ADD A,direct 

0 0 1 0 0 1 0 1

direct

Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+(direct)

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=77H, (P1)=0FFH

ADD A,P1 ;(A)=76H,

;(AC)=1, (C)=1, (OV)=0

;(P1)=0FFH

ADD A,#data8 

0 0 1 0 0 1 0 0

data8

Команда "сложение" складывает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+data8

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=09H

ADD A,#0D3H ;(A)=0DCH,

;(AC)=0, (C)=0, (OV)=0

ADDC A,Rn ;где n=0-7

0 0 1 1 1 r r r

 где rrrB=000B-111B

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса С и содержимое заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7 и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A)(A)+(C)+(Rn), где n=0-7

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=0B2H, (R3)=99H, (C)=1

ADDC A,R3 ;(A)=4CH,(R3)=99H,

;(AC)=0, (C)=1, (OV)=1

ADDC A,@Ri ;где i{0,1}

0 0 1 1 0 1 1 i

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат помещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+(C)+((Ri)), где i{0,1}

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=0D5H, (R0)=3AH,

РПД (3AH)=1AH, (C)=1

ADDC A,@R0 ;(A)=0F0H,

;(AC)=1, (C)=0, (OV)=0,

;(3AH)=1AH

ADDC A,direct 

0 0 1 1 0 1 0 1

direct

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+(C)+(direct)

(С)x, (OV)x, (AC)x,

где x{0,1}

;(A)=11H, (C)=1,

;(DPH)=0DFH

ADDC A,DPH ;(A)=0F1H,

;(AC)=1, (C)=0, (OV)=0,

;(DPH)=0DFH

ADDC A,#data8 

0 0 1 1 0 1 0 0

data8

Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и байт данных data8, непосредственно указанный в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)+(C)+data8

(С)x, (OV)x, (AC)x, где x{0,1}

;(A)=55H, (C)=0

ADDC A,#55H ;(A)=0AAH,

;(AC)=0, (C)=0, (OV)=1

AJMP addr11

addr11[10-8] 0 0 0 0 1

addr11[7-0]

Команда "абсолютный переход" передает управление по адресу с символическим именем addr11, который образуется с помощью конкатенации (сцепления) 5-ти старших бит содержимого счетчика команд PC (после увеличения его на 2), содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.

Алгоритм

Пример

(PC)(PC)+2

(PC[10-0])addr11[10-8] addr11[7-0],

где есть знак конкатенации

;(PC)=28FH,

;MT2 соответствует адресу ;34AH в ПП

AJMP MT2 ;(PC)=34AH

ANL A,Rn ;где n=0-7

0 1 0 1 1 r r r

 где rrrB=000B-111B

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)(Rn), где n=0-7 

;(A)=0FH, (R2)=0C5H

ANL A,R2 ;(A)=05H,(R2)=0C5H

ANL A,@Ri ;где i{0,1}

0 1 0 1 0 1 1 i

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)((Ri)), где i{0,1}

;(A)=0BCH, (R0)=35H,

РПД (35H)=47H

ANL A,@R0 ;(A)=04H,

;в РПД (35H)=47H

ANL A,direct 

0 1 0 1 0 1 0 1

direct

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл. 

Алгоритм

Пример

(A)(A)(direct)

;(A)=0A3H, (PSW)=85H

ANL A,PSW ;(A)=81H,(PSW)=85H

ANL A,#data8 

0 1 0 1 0 1 0 0

data8

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл. 

Алгоритм

Пример

(A)(A)data8

;(A)=36H

ANL A,#0DDH ;(A)=14H

ANL direct,A 

0 1 0 1 0 0 1 0

direct

Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл. 

Алгоритм

Пример

(direct)(direct)(A)

;(A)=55H, (P2)=0AAH

ANL P2,A ;(A)=55H,(P2)=00H

ANL direct,#data8 

0 1 0 1 0 0 1 1

direct

data8

Команда "логическое И" выполняет поразрядную конъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла. 

Алгоритм

Пример

(direct)(direct)data8

;(P1)=0FFH

ANL P1,#73H ;(P1)=73H

ANL C,bit 

1 0 0 0 0 0 1 0

bit

Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла. 

Алгоритм

Пример

(C)(C)(bit)

;(C)=1, (P1[0])=0,

;в РПД (24H)=0FH

ANL C,P1.0 ;(C)=0, (P1[0])=0

ANL C,20H ;(C)=0, (24H)=0FH

ANL C,/bit 

1 0 1 1 0 0 0 0

bit

Команда "логическое И" выполняет конъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла. 

Алгоритм

Пример

(C)(C)  

;(C)=1, (AC)=0

ANL C,/AC ;(C)=1, (AC)=0

CJNE A,direct,addr 

1 0 1 1 0 1 0 1

direct

rel

Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct, и выполняет переход по адресу addr, если содержимое A не равно содержимому используемой ячейки или используемого регистра, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на три. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) используемой ячейки или используемого регистра, в противном случае флаг устанавливается в "1". Команда не изменяет (A) и (direct) и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (direct)(A), то (PC)(PC)+3+rel и (C)0

если (direct)(A), то (PC)(PC)+3+rel и (C)1

если (direct)=(A), то (PC)(PC)+3 и

(C)0

;(A)=97H, (P2)=0F0H, (C)=0,

;(PC)=3FFH, MT3 соответству-

;ет адресу 41FH, rel=1DH

CJNE A,P2,MT3 ;(C)=1,

;(A)=97H, (P2)=0F0H,

;(PC)=41FH

CJNE A,#data8,addr 

1 0 1 1 0 1 0 0

data8

rel

Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое A не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода, влияние на (A) и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) data8, в противном случае флаг устанавливается в "1".

Алгоритм

Пример

если data8(A), то (PC)(PC)+3+rel и (C)0

если data8(A), то (PC)(PC)+3+rel и (C)1

если data8=(A), то (PC)(PC)+3 и

(C)0

;(A)=0FCH, (C)=1, (PC)=3FFH, ;MT4 соответствует адресу

;3F0H, rel=0EEH

CJNE A,#0BFH,MT4 ;(C)=0,

;(A)=0FCH, (PC)=3F0H

CJNE Rn,#data8,addr 

1 0 1 1 1 r r r

data8

rel

где n=0-7

где rrrB=000B-111B

Команда "сравнение и переход, если не равно" сравнивает содержимое заданного регистра Rn выбранного банка с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое Rn не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое Rn больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на (Rn).

Алгоритм

Пример

если data8(Rn), то (PC)(PC)+3+rel и (C)0

если data8(Rn), то (PC)(PC)+3+rel и (C)1

если data8=(Rn), то (PC)(PC)+3 и

(C)0

;(R7)=80H, (C)=0, (PC)=300H, ;MT5 соответствует адресу

;30FH, rel=0CH

CJNE R7,#81H,MT5 ;(C)=1,

;(R7)=80H, (PC)=30FH

CJNE @Ri,#data8,addr 

1 0 1 1 0 1 1 i

data8

rel

где i{0,1}

Команда "сравнение и переход, если не равно" сравнивает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, с байтом данных data8, непосредственно указанным в команде, и выполняет переход по адресу addr, если содержимое используемой ячейки не равно data8, в противном случае выполняется следующая команда. Процедура вычисления адреса перехода и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой. Флаг переноса C сбрасывается в "0", если содержимое используемой ячейки больше (равно) data8, в противном случае флаг устанавливается в "1". Команда не влияет на ((Ri)).

Алгоритм

Пример

если data8((Ri)), то (PC)(PC)+3+rel и (C)0

если data8((Ri)), то (PC)(PC)+3+rel и (C)1

если data8=((Ri)), то

(PC)(PC)+3 и (C)0

;(R0)=41H, (C)=1, (PC)=200H,

;в РПД (41H)=57H, 

;MT6 соответствует адресу

;22AH, rel=27H

CJNE @R0,#29H,MT6 ;(C)=0,

;(PC)=22AH,

;в РПД (41H)=57H

CLR A

1 1 1 0 0 1 0 0

 

Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)0

;(A)=6CH, (C)=0, (AC)=1

CLR A ;(A)=00H, (C)=0, (AC)=1

CLR C

1 1 0 0 0 0 1 1

 

Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C)0

;(C)=1

CLR C ;(C)=0

CLR bit 

1 1 0 0 0 0 1 0

bit

Команда "сброс бита" сбрасывает (обнуляет) содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit)0

;(P1)=5EH=01011110B

;в РПД (28H)=31H

CLR P1.3 ;(P1)=56H=01010110B

CLR 40H ;(28H)=30H

CPL A

1 1 1 1 0 1 0 0

 

Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A) 

;(A)=65H=01100101B

CPL A ;(A)=9AH=10011010B

CPL C

1 0 1 1 0 0 1 1

 

Команда "инверсия флага переноса" инвертирует содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C) 

;(C)=1, (AC)=1, (OV)=0

CPL C ;(C)=0, (AC)=1, (OV)=0

CPL bit 

1 0 1 1 0 0 1 0

bit

Команда "инверсия бита" инвертирует содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(bit) 

;(P1)=39H=00111001B

CPL P1.1

CPL P1.3 ;(P1)=33H=00110011B

DA A

1 1 0 1 0 1 0 0

 

Команда "десятичная коррекция аккумулятора" упорядочивает 8-битовую величину в аккумуляторе A, полученную в результате выполненной ранее команды сложения двух переменных, представленных в двоично-десятичном формате. Для выполнения сложения может использоваться любая из типов команд ADD или ADDC. Если значение битов 3-0 аккумулятора превышает 9 (xxxx1010B-xxxx1111B) или, если содержимое флага AC установлено в "1", то к содержимому A прибавляется 06H, при этом получается соответствующая двоично-десятичная цифра в младшем полубайте A. Указанное сложение не изменяет содержимое флага AC, но устанавливает в "1" содержимое флага переноса C, если перенос из поля младших четырех бит распространяется через все старшие биты A, в противном случае - не изменяет (C). Далее, если содержимое флага C равно "1", или если значение битов 7-4 аккумулятора превышает 9 (1010xxxxB-1111xxxxB), то это значение увеличивается на 6, создавая соответствующую двоично-десятичную цифру в старшем полубайте A. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из бита 7 аккумулятора. Время выполнения команды 1 цикл.

Алгоритм

Пример

если (A[3-0])9 или (AC)=1,

то (A)(A)+6

если (A[7-4])9 или (C)=1,

то (A[7-4])(A[7-4])+6

;(A)=30H, (R3)=99H

ADD A,R3 ;(A)=0C9H,

;(AC)=0, (C)=0

DA A ;(C)=1, (A)=29H, (AC)=0

DEC A

0 0 0 1 0 1 0 0

 

Команда "декремент" производит вычитание "1" из содержимого аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)-1

;(A)=00H, (C)=1, (AC)=1

DEC A ;(A)=0FFH, (C)=1, (AC)=1

DEC Rn ;где n=0-7

0 0 0 1 1 r r r

 где rrrB=000B-111B

Команда "декремент" производит вычитание "1" из содержимого заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn)(Rn)-1, где n=0-7 

;(R1)=35H, (C)=0, (AC)=1

DEC R1 ;(R1)=34H, (C)=0, (AC)=1

DEC direct 

0 0 0 1 0 1 0 1

direct

Команда "декремент" производит вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(direct)-1

;(SCON)=0A0H, (C)=1, (AC)=0

DEC SCON ;(SCON)=9FH,

;(C)=1, (AC)=0

DEC @Ri ;где i{0,1}

0 0 0 1 0 1 1 i

 

Команда "декремент" производит вычитание "1" из содержимого ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri))((Ri))-1, где i{0,1}

;(R1)=7FH, в РПД (7FH)=40H

DEC @R1 ;(R1)=7FH,

;в РПД (7FH)=3FH

DIV AB

1 0 0 0 0 1 0 0

 

Команда "деление" делит 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B. Аккумулятору присваивается целая часть частного (старшие разряды), а регистру B - остаток. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV также сбрасывается, а в случае деления на нуль - устанавливается в "1". Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

Пример

(A)(A):(B), (B)mod[(A):(B)], (C)0

если (В)0, то (OV)0

если (В)=0, то (OV)1

;(A)=0FBH=251, (B)=12H=18,

;(C)=1, (OV)=1

DIV AB ;(C)=0, (OV)=0,

;(A)=0DH=13, (B)=11H=17 

DJNZ Rn,addr ;где n=0-7

1 1 0 1 1 r r r

rel

 где rrrB=000-111B

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого заданного регистра Rn выбранного банка и осуществляет переход по адресу addr, если содержимое Rn не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда DJNZ Rn,addr на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(Rn)(Rn)-1, где n=0-7

если (Rn)0, то (PC)(PC)+2+rel

если (Rn)0, то (PC)(PC)+2

;(R3)=0AH, rel=0FEH

MT5: DJNZ R3,MT5 ;команда ;выполнится 10 раз

DJNZ direct,addr 

1 1 0 1 0 1 0 1

direct

rel

Команда "декремент и переход, если не равно нулю" выполняет вычитание "1" из содержимого ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций, и осуществляет переход по адресу addr, если содержимое используемой ячейки не равно нулю, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)(direct)-1

если (direct)0, то (PC)(PC)+3+rel

если (direct)0, то (PC)(PC)+3

;(P1)=0AH, rel=0FDH

MT5: DJNZ P1,MT5 ;команда ;выполнится 10 раз

INC A

0 0 0 0 0 1 0 0

 

Команда "инкремент байта" производит прибавление "1" к содержимому аккумулятора A, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)+1

;(A)=0FFH, (C)=1, (AC)=1

INC A ;(A)=00H, (C)=1, (AC)=1

INC Rn ;где n=0-7

0 0 0 0 1 r r r

 где rrrB=000B-111B

Команда "инкремент байта" производит прибавление "1" к содержимому заданного регистра Rn выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(Rn)(Rn)+1, где n=0-7

;(R1)=35H, (C)=0, (AC)=1

INC R1 ;(R1)=36H, (C)=0, (AC)=1

INC direct 

0 0 0 0 0 1 0 1

direct

Команда "инкремент байта" производит прибавление "1" к содержимому ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(direct)+1

;(TMOD)=0A5H, (C)=1, (AC)=0

;в РПД (23H)=0FFH

INC TMOD ;(TMOD)=0A6H,

;(C)=1, (AC)=0

INC 23H ;в РПД (23H)=00H,

;(C)=1, (AC)=0

INC @Ri ;где i{0,1}

0 0 0 0 0 1 1 i

 

Команда "инкремент байта" производит прибавление "1" к содержимому ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri))((Ri))+1, где i{0,1}

;(R0)=44H, в РПД (44H)=55H

INC @R0 ;(R0)=44H,

;в РПД (44H)=56H

INC DPTR

1 0 1 0 0 0 1 1

 

Команда "инкремент двух байтов" производит прибавление "1" к содержимому 16-битового указателя данных DPTR, причем переполнение младшего байта DPTR (DPL) приводит к увеличению на "1" содержимого старшего байта DPTR (DPH). Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(DPTR)(DPTR)+1

;(DPH)=12H, (DPL)=0FFH,

INC DPTR ;(DPH)=13H, ;(DPL)=00H

JB bit,addr 

0 0 1 0 0 0 0 0

bit

rel

Команда "переход, если бит установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на 3. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (bit)1, то (PC)(PC)+3+rel

если (bit)0, то (PC)(PC)+3

;MT6 соответствует

;адресу 2FFH,

;(PC)=2F0H, rel=0CH, (A)=96H

JB A.2,MT6 ;(PC)=2FFH, ;(A)=96H

JBC bit,addr 

0 0 0 1 0 0 0 0

bit

rel

Команда "переход, если бит установлен и сброс этого бита" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, установлено в "1", в противном случае выполняется следующая команда. Содержимое используемого бита сбрасывается в "0". Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.

Алгоритм

Пример

если (bit)1, то (PC)(PC)+3+rel

и (bit)0

если (bit)0, то (PC)(PC)+3

;MT8 соответствует адресу 400H,

;(PC)=3F1H, rel=0CH, (A)=78H

JBС A.3,MT8 ;(PC)=400H, (A)=70H

JC addr 

0 1 0 0 0 0 0 0

rel

Команда "переход, если флаг переноса установлен" выполняет переход по адресу addr, если содержимое флага переноса C установлено в "1", в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (С)1, то (PC)(PC)+2+rel

если (C)0, то (PC)(PC)+2

;MT1 соответствует адресу 1F0H,

;(PC)=1FFH, rel=0EFH, (C)=1

JС MT1 ;(PC)=1F0H, (C)=1

JMP @A+DPTR

0 1 1 1 0 0 1 1

 

Команда "косвенный переход" складывает 8-битовое содержимое аккумулятора A с 16-битовым содержимым указателя данных DPTR и загружает полученный результат в счетчик команд PC. Указанное сложение выполняется таким образом, что перенос из младших 8-ми бит распространяется на старшие биты результата. Содержимое A и DPTR не изменяется. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC)(DPTR[15-0])+(A[7-0])

;(PC)=34EH, (DPTR)=329H, (A)=86H

JMP @A+DPTR ;(PC)=3AFH

JNB bit,addr 

0 0 1 1 0 0 0 0

bit

rel

Команда "переход, если бит не установлен" выполняет переход по адресу addr, если содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или в среде регистров специальных функций, сброшено в "0", в противном случае выполняется следующая команда. Содержимое используемого бита не изменяется. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JB bit,addr.

Алгоритм

Пример

если (bit)0, то (PC)(PC)+3+rel

если (bit)1, то (PC)(PC)+3

;MT2 соответствует адресу 2FFH,

;(PC)=2F0H, rel=0CH, (A)=96H

JNB A.0,MT2 ;(PC)=2FFH, (A)=96H

JNC addr 

0 1 0 1 0 0 0 0

rel

Команда "переход, если флаг переноса не установлен" выполняет переход по адресу addr, если содержимое флага переноса C сброшено в "0", в противном случае выполняется следующая команда. Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JC addr.

Алгоритм

Пример

если (С)0, то (PC)(PC)+2+rel

если (C)1, то (PC)(PC)+2

;MT1 соответствует адресу 200H,

;(PC)=1F0H, rel=0EH, (C)=0

JNС MT1 ;(PC)=200H, (C)=0

JNZ addr 

0 1 1 1 0 0 0 0

rel

Команда "переход, если содержимое аккумулятора не равно нулю" выполняет переход по адресу addr, если содержимое A не ноль, в противном случае выполняется следующая команда. Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги и (A) не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

если (A)0, то (PC)(PC)+2+rel

если (A)0, то (PC)(PC)+2

;MT4 соответствует адресу 183H,

;(PC)=200H, rel=81H, (A)=01H

JNZ MT4 ;(PC)=183H, (A)=01H

JZ addr 

0 1 1 0 0 0 0 0

rel

Команда "переход, если содержимое аккумулятора равно нулю" выполняет переход по адресу addr, если все биты аккумулятора равны нулю, в противном случае выполняется следующая команда. Содержимое A не изменяется.  Процедура вычисления адреса перехода addr, влияние на флаги и время выполнения такие же, как у рассмотренной выше команды JNZ addr.

Алгоритм

Пример

если (A)0, то (PC)(PC)+2+rel

если (A)0, то (PC)(PC)+2

;MT4 соответствует адресу 231H,

;(PC)=200H, rel=2FH, (A)=00H

JZ MT4 ;(PC)=231H, (A)=00H