Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП_лекции 2011.DOC
Скачиваний:
14
Добавлен:
18.09.2019
Размер:
2.13 Mб
Скачать

Специальные команды

EI :4: Разрешение прерывания

DI :4: Запрещение прерывания

HLT :7: Останов

NOP :4: Холостая операция

УСЛОВНЫЕ ОБОЗНАЧЕНИЯ

в системе команд микропроцессора КР580ВМ80

' - команда оказывает воздействие на все признаки

" - команда оказывает воздействие на признак С

"' - команда оказывает воздействие на все признаки, кроме признака С

R,R1- содержимое регистров А, В, С, D, Е, Н, L или ячейки памяти

M(HL).

YZ - содержимое регистровой пары ВС, DE, HL или регистра SP

YZ* - содержимое регистровой пары ВС или DE

YZ**- содержимое регистровой пары ВС, DE, HL или PSW

(YZ в мнемонике соответствующих команд заменяется на В, D, Н, SP или PSW)

SP - содержимое указателя стека перед выполнением команды

D8 - 8-разрядный операнд (содержимое второго байта двухбайтовой команды)

D16 - 16-разрядный операнд (содержимое второго и третьего байтов команды)

(N) - содержимое порта ввода или вывода с номером (адресом) N

(N = 0 h....FF h)

ADR - 16-разрядный адрес в трехбайтовой команде

М( ) - содержимое ячейки памяти (в скобках указывается адрес ADR

или имя регистровой пары, где содержится адрес)

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

-CON в мнемонике заменяется на следующие варианты;

NZ - признак неравенства нулю результата;

Z - признак равенства результата нулю;

NC - отсутствие признака переноса;

С - наличие признака переноса;

РО - отсутствие признака четности;

РЕ - наличие признака четности;

Р - признак положительного результата;

М - признак отрицательного результата.

ОЭВМ семейства К1816ВЕ48.

Приборы серии К1816 изготавливаются на одном кремниевом кристалле по n-МОП технологии. Эти микро-ЭВМ можно использовать как на нижних уровнях систем управления, так и (при соответствующем добавлении стандартных ПЗУ и ЗУПВ, кристаллов периферийных ИС) в разнообразных высокопроизводительных системах управления и обработки данных. Семейство ВЕ48 является аналогом семейства iMCS-48 фирмы Intel. В основу его архитектуры положена организация гарвардского типа, ориентированная на интенсивное использование двух банков рабочих регистров и операций ввода-вывода.

Таблица Ошибка! Текст указанного стиля в документе отсутствует.-1 Типы процессоров семейства ВЕ48.

Базовая архитектура ВЕ48 содержит 8-разрядный центральный процессор, управляющее ПЗУ, внутреннее ОЗУ, 24 линии прямого ввода-вывода, три тестирумых входа, 8-разрядный таймер/счетчик и логику одноуровневой системы прерываний с двумя источниками запросов.

2.1. Архитектура микроЭвм

        Как было указано ранее, особенностью архитектуры микроконтроллера является логическое и физическое разделение памяти на программную и данных. Программная память представлена только ПЗУ, так как в К1816 отсутствуют программные средства оперативной записи команд и программ.

        Память может расширяться путем подключения внешних БИС: программная — на 2 Кбайта, данных — на 256 байт. Возможно также расширение средств ввода-вывода за счет использования интерфейсных БИС серии К580.

Таблица 1

Пр.память

Объём пр.памяти

Расширение пр. памяти

Максимальная тактовая частота, МГц

ОЗУ

Расширение озу

1816ВЕ35

-----

-------

44

6

64

384

1816ВЕ39

-----

--------

44

11

128

384

1816ВЕ48

ППЗУ

44

6

64

384

1816ВЕ49

ПЗУ

4

11

128

384

1816ВЕ51(1)

ППЗУ

64

128

64К

1816ВЕ51(1)

ПЗУ

64

128

64К

1816ВЕ51(1)

----------

--------

64

128

64К

Структурная схема контроллера представлена на рис.1. Основу микроконтроллера составляет системная шина, которая связывает между собой все основные функциональные узлы микросхемы: блок управления, арифметико-логического устройство, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. По такой схеме построены все представители семейства MCS-48. Различные микросхемы этого семейства различаются только объёмом внутренней памяти. Система команд всех контроллеров семейства MCS-48 содержит 96 базовых команд с форматом 1 или 2 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одного типа микросхем на другой. Рассмотрим подробнее назначение каждого блока.

Рисунок 1. Структурная схема контроллера К1816ВЕ48

Блок управления и синхронизации

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

  • устройство формирования временных интервалов,

  • логика ввода-вывода,

  • регистр команд,

  • дешифратор команд, логика управления ЭВМ.

  • Устройство синхронизации и управления связано с периферийными устройствами 13-разрядной шиной С {12: 0}, отдельные провода которой несут на себе следующие сигналы (в скобках указаны аналоги сигналов МП580):

  • BQ1, BQ2 - подключение кварца или LC — цепи синхронизации встроенного тактового генератора или входа внешнего тактового генератора;

  • WR (WR) — запись во внешнюю память данных, запись из порта BUS во внешнее устройство;

  • RD (DBIN) — чтение из внешней памяти или из внешних устройств, подключенных к порту BUS

  • ALE (C) (address latch enable) — стробирование внешней памяти;

  • SR (RESET) (set-reset) - инициализация микроЭВМ;

  • INT (INT) — сигнал запроса на прерывание;

  • SS — организация пошагового выполнения программы (используется совместно с ALE);

  • PME (periphery memory enable) - стробирование внешней памяти при чтении;

  • EMA (external memory access} — доступ к внешней памяти. Используется также при программировании и проверке ППЗУ; PR (periphery register) — расширение каналов ввода/вывода. Используется также при программировании ППЗУ; ТО — ввод условия для JTO/JNTO или выход тактовых сигналов после выполнения команды ENTO CLK; TI — ввод условия для JT1/JNT1 или ввод счетчика внешних событий после выполнения команды STRT CNT.

  •         Блок программного управления преобразует коды команд программы в сигналы управления. Он включает в себя счетчик команд (PC), дешифратор адреса команды, ППЗУ, регистр команды (IR) и дешифратор команды (IDC). В отличие от МП580, этот блок может работать как с внутренней, так и с внешней памятью. В последнем случае код адреса РС {11 : 0} подается на внешнюю программную память, а байтный код команды записывается непосредственно в регистр команды.

Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Генератор построен на внутреннем инверторе и внешнем кварцевом или LC резонаторе. Допустимая частота кварцевого резонатора от 1 до 6 МГц. Схемы задающих генераторов тактовой частоты с использованием внутренней и внешней синхронизации приведены на рисунке 2.

Рисунок 2. Схемы генераторов тактовой частоты.

Нужно отметить, что запуск задающего генератора этого микроконтроллера был затруднённым (жёсткий режим самовозбуждения), поэтому для надёжного запуска задающего генератора следовало использовать либо внешний генератор, либо шунтировать ножки XTAL1 и XTAL2 внешним резистором.

Практически все команды микроконтроллера выполняются за один или два машинных цикла. Обозначим частоту задающего генератора через Fг. Тогда длительность машинного цикла равна 15/Fг или составляет 15 периодов сигнала задающего генератора. Именно с такой частотой выдаётся сигнал стробирования адреса ALE. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода и системную шину микроконтроллера.

Сброс микроконтроллера можно осуществить при помощи конденсатора, подключенного к ножке сброса RESET, как показано на рисунке 3. Минимальное время сброса контроллера 50 мс. В настоящее время для этой цели лучше бы подошла микросхема супервизора питания ADM809. После сброса микроконтроллера обнуляется содержимое счётчика команд PC, указателя стека в составе регистра PSW, выбираются 0 банк регистров и нулевой банк памяти программ. Запрещаются прерывания.

Рисунок 3. Схемы сброса микропроцессора.

Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью дешифратора команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды, считанной из ПЗУ.

Арифметико-логический блок представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛБ состоит из:

  • регистров временного хранения TMP1 и TMP2,

  • аккумулятора (ACC),

  • ПЗУ констант,

  • арифметико-логического устройства,

  • регистра состояния программ (PSW).

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

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

ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.

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

При выполнении операций обработки данных в АЛУ вырабатываются флаги, которые сохраняются в регистре состояния программы PSW.

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

Блок обработки прерываний предназначен для организации ввода - вывода последовательных потоков информации и организации системы прерывания программ. Опрос входа запроса прерывания INT производится во время выдачи сигнала ALE. Передача управления на вектор прерывания 3 произойдёт только по завершению цикла команды. При обработке прерывания содержимое счётчика команд и старшей тетрады слова состояния программы сохраняется в стеке. При обработке прерывания запросы прерываний игнорируются до выхода из подпрограммы обработки прерывания по команде RETR. Прерывания могут быть запрещены командой DIS и разрешены командой EN. Приоритет от внешнего прерывания выше приритета прерывания от внутреннего таймера, то есть если эти прерывания возникнут одновременно, то будет осуществлён переход на вектор прерывания 3

Счетчик команд (Program Counter) предназначен для формирования текущего 11-разрядного адреса памяти программ. В состав счетчика команд входят 11-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1). Кроме того, под управлением команд SEL MB0 и SEL MB1 могут переключаться страницы памяти программ.

ОЗУ - память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.

Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы. Формат регистра PSW приведён ниже:

Номер бита

77

66

55

44

33

22

11

00

Имя флага

C

AC

F0

BS

-

S2

S1

S0

C - флаг переноса, формируемый АЛУ,

AC - флаг вспомогательного переноса между тетрадами, формируемого при десятичных вычислениях.

F0 - флаг (битовая переменная), используемый пользователем в своих целях

BS - флаг переключения регистровых банков,

S0...S2 - биты указателя стека.

Память программ предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах семейства применяются ПЗУ различного объёма. В микросхеме 1816ВЕ35 внутренняя память программ отсутствует вовсе.

Устройство параллельных портов микроконтроллеров MCS-48

Порты P1, P2 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией микроконтроллера с внешними устройствами, образуя 16 линий ввода- вывода. Каждый из портов содержит восьмиразрядный регистр, позволяющий устанавливать (запись '1') или сбрасывать (запись '0') любой разряд этого регистра с помощью программного обеспечения. Выходы регистров квазидвунаправленного порта соединены с внешними ножками микросхемы. Упрощенная схема одного разряда порта показана на рисунке 4.

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

Рисунок 4. Упрощенная схема одного бита порта.

Порт Р2 используется также для подключения расширителя ввода/вывода и выдачи четырех старших разрядов программного счетчика РС{11 : 8 }.

Порт BUS реализует двунаправленный канал передачи данных. Он передает восемь младших разрядов кода адреса команд РС{1 : 0} или кода адреса данных ADRD {7 : 0} при работе с внешней программной памятью или памятью данных и байт данных D{1 : 0} при работе с внешней памятью или схемами расширения (интерфейсные БИС серии К580). По завершению передачи данных порт переходит в третье состояние.

IN A, P1 ;Скопировать состояние ножек порта P1 в аккумулятор

IN A, P2 ;Скопировать состояние ножек порта P2 в аккумулятор

Вывод информации через параллельные порты осуществляется командами:

OUTL P1, A ;Скопировать содержимое аккумулятора в порт P1

OUTL P2, A ;Скопировать содержимое аккумулятора в порт P2

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

Порты микросхемы служат для управления внешними устройствами, подключенными к микроконтроллеру. Схема подключения простейших внешних устройств приведена на рисунке 5. Этот рисунок иллюстрирует особенности подключения индикаторов к параллельным портам микроконтроллера MCS-48.

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

Рисунок 5. Эквивалентная схема подключения светодиодного индикатора к параллельному порту.

Для умощнения выводов порта можно применить транзисторный ключ, показанный на рисунке 6. Обратите внимание, что база транзистора подключена непосредственно к выводу порта. Это стало возможным только благодаря использованию в схеме порта генератора тока в верхнем плече выходного каскада (Схему подключения устройств к портам с TTL выходами можно посмотреть здесь). Если выходного тока достаточно для открывания транзисторного ключа, то резистор R2 не используется. Этот резистор подключается для увеличения базового тока транзисторного ключа. На максимальное значение тока через этот резистор накладываются те же ограничения, что и для непосредственного подключения светодиодного индикатора к выводам порта.

Это были рассмотрены схемотехнические особенности применения параллельных портов. Однако управлять напряжением на выходе параллельного порта микроконтроллера можно только при помощи программы. В приведённой на рисунке 6 схеме, для зажигания светодиода VD1, в шестой вывод порта P0 необходимо записать логический 0. Для зажигания светодиода VD2 необходимо в седьмой разряд порта P2 записать логическую единицу. Рисунок 6. Схема подключения светодиодных индикаторов к параллельному порту.

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

  1. OUTL (выдача в порт константы), например 

  2. MOV A, #56h ;Установить единичный сигнал на ножках 1,2,4 и 6 порта P2

  3. OUTL P2, A ;и нулевой потенциал на ножках 0,3,5 и 7

  4. MOV A, #01110011b ;Выдать на все восемь выводов порта P1

OUTL P1, A ;двоичное число 01110011

  1. ANL (использование логического 'И' для обнуления выбранных маской бит), например:

  2. MOV A, 56 ;Занести в аккумулятор копию порта P1

  3. ANL P1, #11110011b ;сформировать низкий потенциал на ножках P1.2 и P1.3

OUTL P1, A ;записать новое значение в порт P1

  1. XRL (использование операции исключающее 'ИЛИ' для инвертирования выбранных бит), например

  2. MOV A, 56 ;Занести в аккумулятор копию порта P1

  3. XRL A, #01000010b ;инвертировать состояние ножек P1.1 и P1.6

OUTL P1, A ;записать новое значение в порт P1

  1. ORL (использование операции логическое 'ИЛИ' для записи единиц в выбранные биты), например

  2. MOV A, 56 ;Занести в аккумулятор копию порта P1

  3. ORL A, #00100001b ;выдать высокий потенциал на ножках P1.0 и P1.5

OUTL P1, A ;записать новое значение в порт P1

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

Порт P1. Этот квазидвунаправленный порт никаких особенностей не имеет. При сбросе микросхемы во все разряды порта P2 записываются '1'.

  • Порт P2. Младшая тетрада порта может быть использована для передачи старших четырёх бит адреса при работе с внешней памятью программ и внешней памятью данных (с 12- разрядным адресом). Схема использования порта P2 в качестве шины адреса приведена на рисунке 4. При сбросе микросхемы во все разряды порта P2 записываются '1'. Кроме того через младшие четыре разряда порта 2 могут быть использованы для подключения микросхемы расширителя портов.

  • Порт D/A. Может быть использован для стробируемого вывода данных. Стробирование данных производится сигналом WR. Над этим портом возможно выполнение логических операций, что может сократить длину программ, приведённых выше, до одной команды.

Построение памяти микроконтроллеров семейства MCS-48

Микроконтроллеры семейства MCS-48 построены по Гарвардской архитектуре. Это означает, что память данных и память программ в этих микросхемах разделены и имеют отдельное адресное пространство. В этих микроконтроллерах имеется три адресных пространства: память программ, внешняя память данных и внутренняя память данных. Такое построение памяти позволяет реализовывать максимально надёжные системы.

Схема подключения внешних микросхем памяти к микроконтроллерам семейства MCS-48 показана на рисунке 7. Регистр адреса D3 на этой схеме предназначен для запоминания младших 8-ми бит адреса, передаваемых через шину данных/памяти. Старшие четыре бита адреса передаются через шину адреса, совмещенную с портом P2. Во время передачи адреса, микроконтроллер вырабатывает синхроимпульс на ножке ALE. Именно этот импульс позволяет запомнить младший байт адреса в регистре D3.

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

Память программ микроконтроллеров MCS-48

Память программ предназначена для хранения программ и имеет отдельное от памяти данных адресное пространство объемом 4 Кбайта, причем для некоторых микросхем (например КР1816ВЕ48, КМ1816ВЕ49) для хранения программ на кристалле микроконтроллера расположено ПЗУ. Это ПЗУ отображается в область младших адресов памяти программ. Учитывая, что выполнение программы после сброса микроконтроллера всегда начинается с нулевого адреса памяти программ, то при включении питания начнет выполняться программа, записанная во внутреннем ПЗУ микроконтроллера. Микроконтроллеры, не имеющие внутреннего ПЗУ (например КР1816ВЕ35 или 8035) могут работать только с внешней микросхемой ПЗУ емкостью до 4 Кбайт. Микроконтроллеры семейства MCS-48 имеют внешний вывод EA, с помощью которого можно запретить работу внутренней памяти, для чего необходимо подать на вывод EA логический "0" (соединить этот вывод с корпусом). При этом внутренняя память программ отключается и, начиная с нулевого адреса, все обращения происходят к внешней памяти программ.

Рисунок 7. Схема подключения схем внешней памяти к микроконтроллерам семейства MCS-48

Доступ к внешней памяти программ осуществляется в двух случаях:

  1. при действии сигнала EA=0 независимо от адреса обращения,

  2. в любом случае, если программный счетчик (РС) содержит число большее, чем максимальная ячейка внутренней памяти программ.

Распределение памяти программ микроконтроллера КР1816ВЕ48 представлено ниже:

Рисунок 8. Адресное пространство памяти программ.

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

MOVP A, @A и MOVP3 A, @A

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

SEL MB1 ;Выбрать первую страницу

SEL MB0 ;Выбрать нулевую страницу

Для других микроконтроллеров этого семейства изменяется только объем внутренней памяти программ. При использовании портов P1 и P2 в качестве дополнительных адресных расширителей объём доступной внешней памяти программ может быть увеличен до 16 Мбайт.

Ниже приведены адреса векторов прерываний и соответствующие им аппаратурные источники прерываний программы:

Вектор прерывания

Флаги, вызывающие прерывание

Источник прерывания

0000Н

-

Рестарт (сброс) контроллера RESET

0003Н

IE

внешнее прерывание INT

0007Н

TF

Таймер

Внешняя память данных микроконтроллеров MCS-48

Внешняя память данных предназначена для временного хранения информации, используемой в процессе выполнения программы. Эта память физически должна быть подключена к микросхеме микроконтроллера при помощи схемы, изображенной на рисунке 1. Максимальный объем этой памяти определяется регистрами R0 и R1 и составляет 256 байт. Точно также как и в случае внешней памяти программ, объем внешней памяти данных может быть увеличен за счет использования портов P1 и P2 до 16 Мбайт.

Для обращения к внешней памяти данных используются команды:

MOVX A, @R0 или MOVX A, @R1 (команды чтения)

MOVX @R0, или MOVX @R1, A (команды записи)

Рисунок 9. Адресное пространство внешней памяти данных.

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

Внутренняя память данных микроконтроллеров MCS-48

Внутренняя память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы. Адресное пространство внутренней памяти данных представляет собой 256 восьмиразрядных ячеек, с адресами от 000h до 0FFh. Для микроконтроллеров 8048, 8035, КР1816ВЕ35, КР1816ВЕ48 из них доступно только 64 ячейки памяти.  Для микроконтроллеров 8049, КР1816ВЕ49 из них доступно 128 ячеек памяти. И только для микроконтроллеров 1850ВЕ49 доступны все 256 ячеек внутренней памяти данных. Распределение адресного пространства памяти данных микроконтроллеров серии MCS-48 приведено на рисунке 10.

Младшие 32 байта внутреннего ОЗУ данных объединены с 2мя банками регистров (RB0 - RB1) и восьмиуровневым стеком микроконтроллера. Банк регистров состоит из восьми восьмиразрядных регистров с именами R0, R1, …, R7. Два банка регистров служат для организации независимой работы основной программы и подпрограмм обслуживания прерываний. Переключение банков регистров производится при помощи особого бита BS регистра слова состояния программы PSW командами SEL RB0 и SEL RB1.

Команды программы могут обращаться к регистрам, используя их имена R0-R7 (MOV A, R0 или MOV R7, A), или используя их адрес во внутренней памяти данных (доступна только косвенно-регистровая адресация). Например:

MOV R0, #5

MOV A, @R0

или

MOV R0, #7

MOV @R0, A).

Рисунок 10. Адресное пространство внутренней памяти данных.

Следующие после второго банка регистров ячейки памяти образуют обычное ОЗУ.

Ячейки внутренней памяти данных с адресами 8 - 23 представляют из себя аппаратный 8 - ми уровневый стек, где сохраняются адреса возвратов из подпрограмм. В составе системы команд отсутствуют команды сохранения регистров в стеке. То есть разработчик программы вынужден следить за использованием регистров во вложенных подпрограммах. Это, наряду с малой глубиной аппаратного стека, сильно ограничивает возможности по написанию программ для микроконтроллеров семейства MCS-48.

Устройство таймера микроконтроллера MCS-48

В микроконтроллерах семейства MCS-48 внутренний таймер может быть использован как в режиме таймера так и в режиме счетчика внешних событий.

Режим таймера

Таймер состоит из пятиразрядного предварительного делителя на 32 и восьмиразрядного суммирующего счётчика. На вход предделителя поступают сигналы основной синхронизации ALE с периодом 2,5 мкс (15 периодов задающего генератора тактовой частоты). Таким образом минимальный промежуток времени, задаваемый при помощи таймера равен 80 мкс. Путём предварительной записи информации в таймер можно регулировать время, задаваемое таймером от 80 мкс до 20,48 мс. Эти значения определяются тем, что в таймер T можно записать 256 различных чисел. Если требуется больший временной интервал, то его можно получить программным путём с использованием любой ячейки внутренней памяти. Схема таймера приведена на рисунке 11.

Рисунок 11. Схема таймера микроконтроллеров семейства MCS-48.

Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1.

Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени, меньший максимально возможного. Для уменьшения интервала времени в регистр таймера можно предварительно занести число и тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T для формирования временного интервала 5мс.

;Настроить таймер на генерацию 5-ти миллисекундного интервала времени--------------------------------------

mov A, #-62 ;Загрузить таймер числом 9Eh, равным числу -62 - количество периодов

mov T, A ;входной частоты таймера (62 периода таймера = 62*80 мкс = 4,96 мс)

STRT T ;Запустить таймер

OjidanTimer:

JTF SledKomanda ;Подождать пока не переполнится таймер

JMP OjidanTimer

SledKomanda:

STOP TCNT ;Остановить таймер

Режим счётчика

В режиме счетчика содержимое счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на вывод микроконтроллера T1. Так как на распознавание периода требуются три машинных цикла то, минимальное время между импульсами равно 7,5 мкс. Минимальная длительность единичного сигнала на входе T1 при частоте кварцевого резонатора 6 МГц равна 0,5 мкс. На длительность периода входных сигналов ограничений сверху нет.

Запуск счётчика осуществляется командой STRT CNT, а остановка STOP TCNT. Количество подсчитанных импульсов можно считать командой  MOV A, T.

Система команд микроконтроллеров MCS-48

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

Реализована побайтовая (8 бит) и потетрадная (4 бита) обработка данных. Микросхемы семейства MCS-48 - это 8-разрядные микропроцессоры, а это означает, что ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию.

В машинном коде команда занимает один, или два байта в зависимости от типа команды. Команды выполняются за один или два машинных цикла. При этом большинство команд выполняются за один машинный цикл длительностью 2,5 мкс (при 6 МГц кварцевом резонаторе).

Запись команд в машинных кодах для человека неудобна, кроме того, разные машинные команды выполняют одинаковые действия только над разными ячейками памяти. Поэтому для записи команд микропроцессоров была придумана система мнемонических обозначений. Для записи команды микропроцессора сначала ставится мнемоническое обозначение, затем указывается ячейка памяти – приёмник результата выполнения операции и наконец источник данных для выполнения операции. Например, в команде

MOV A, R2

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

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

Если операция требует для выполнения двух источников и одного приёмника результата операции (например, команда сложения ADD или логического умножения ANL), то первый операнд является одновременно и источником и приёмником результата операции. Например, в команде

ADD A, R1

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

В таблице 2 приведены инструкции, влияющие на установку флагов.

Систему команд микроконтроллера условно можно разбить на пять групп:

  • арифметические команды

  • логические команды

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

  • команды ветвления программ и передачи управления

  • команды управления режимами работы микроконтроллера

Таблица 2

Мнемоника

Флаги

C

AC

F0

F1

TF

BS

DBF

ADD, ADDC

+

+

-

-

-

-

-

DA

+

+

-

-

-

-

-

CLR C

0

-

-

-

-

-

-

CPL C

+

-

-

-

-

-

-

CLR F0

-

-

0

-

-

-

-

CPL F0

-

-

+

-

-

-

-

CLR F1

-

-

-

0

-

-

-

CPL F1

-

-

-

+

-

-

-

JTF

-

-

-

-

0

-

-

RRC

+

-

-

-

-

-

-

RLC

+

-

-

-

-

-

-

MOV A, PSW

+

+

+

-

-

+

-

RETR

+

+

+

-

-

+

-

SEL MB0, SEL MB1

-

-

-

-

-

-

+

SEL RB0, SEL RB1

-

-

-

-

-

+

-

Арифметические команды

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

  • сложение ADD,

  • сложение с учетом флага переноса ADDC,

  • инкрементирование (увеличение на 1) INC,

  • декрементирование (уменьшение на 1) DEC,

  • десятичная коррекция DA,

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

Логические команды.

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

  • И ( ANL ANLD),

  • ИЛИ ( ORL ORLD),

  • ИСКЛЮЧАЮЩЕЕ ИЛИ ( XRL).

  • сброс и инвертирование всех восьми разрядов аккумулятора ( CPL A; CLR A);

  • сброс и инвертирование флагов микроконтроллера ( CLR C; CLR F0; CLR F1; CPL C; CPL F0; CPL F1);

  • циклический сдвиг влево и вправо с учетом переноса и без ( RR A; RRC A; RL A; RLC A);

  • обмен местами старшей и младшей тетрад внутри аккумулятора ( SWAP A).

Команды пересылки данных.

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

  • обмен данными во внутреннем ОЗУ: MOV, XCH

  • обмен данными из внешней памяти данных: MOVX

  • копирование данных из памяти программ: MOVP

  • обмен данными параллельных портов IN, OUTL, MOVD

Примеры использования команд пересылки данных:

Любая ячейка 256- байтового блока внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 и R1 (выбранного банка рабочих регистров):

MOV A, @R0 ;Скопировать число из ячейки памяти с адресом, хранящемся в R0, в аккумулятор

MOV @R1, A ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

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

MOVP A, @A ;Скопировать символ из текущей страницы памяти программ в аккумулятор

MOVP3 A, @A ;Скопировать символ из третьей страницы памяти программ в аккумулятор

Ячейка адресного пространства 256 байт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистры R0 или R1:

MOVX A, @R0 ;Скопировать число из внешней ячейки памяти с адресом, ;хранящемся в R0, в аккумулятор

MOVX @R1, A ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящемся в R1

Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка:

XCH A, R0.

Для работы с параллельными портами используется отдельные команды пересылки данных IN и OUTL:

IN A, P0 ;Скопировать число из порта P0, в аккумулятор

OUTL P1, A ;Скопировать число из аккумулятора, в порт P1

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

Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-48 доступны следующие команды:

  • безусловный переход: JMP

  • Вызов и возврат из подпрограммы: CALL, RET, RETR

  • проверка содержимого аккумулятора: JZ, JNZ, JMPP, JB0 ... JB7

  • проверка флага переноса С: JC, JNC

  • проверка сигнала на ножке T0: JT0, JNT0

  • проверка сигнала на ножке T1:  JT1, JNT1

  • проверка сигнала на ножке INT: JNI

  • Проверка состояния флагов пользователя JF0, JF1

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

JMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’

CALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных переходов. Эти команды позволяют осуществлять переход в пределах страницы 256 байт.

Примеры использования команд условного перехода:

JB5 TstNxtUsl ;Если в 6 бите аккумулятора нулевое значение,

CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

JNZ A, #5, TstNxtUsl ;Если в аккумуляторе содержится нулевое значение,

CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

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

MOV A, 34 ;Если в переменной, хранящейся в ячейке внутренней памяти 34

JB7 TstNxtUsl ;число меньше нуля,

CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

;---------------------------------------------------------------------------------

MOV A, 34 ;Если в переменной,

ADD A, -5 ;хранящейся в ячейке внутренней памяти 34

JZ TstNxtUsl ;занесено число 5,

CALL Podpr5 ;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’

;---------------------------------------------------------------------------------

MOV A, 34 ;Если в переменной,

ADD A, -5 ;хранящейся в ячейке внутренней памяти 34

JNС TstNxtUsl ;занесено число, меньшее 5,

CALL PodprLT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’

;---------------------------------------------------------------------------------

MOV A, 34 ;Если в переменной,

ADD A, -6 ;хранящейся в ячейке внутренней памяти 34

JC TstNxtUsl ;занесено число, большее 5,

CALL PodprGT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’

;---------------------------------------------------------------------------------

MOV A, 34 ;Если в переменной,

ADD A, -5 ;хранящейся в ячейке внутренней памяти 34

JC TstNxtUsl ;занесено число, большее или равное 5,

CALL PodprGE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’

;---------------------------------------------------------------------------------

MOV A, 34 ;Если в переменной,

ADD A, -6 ;хранящейся в ячейке внутренней памяти 34

JNC TstNxtUsl ;занесено число, меньшее или равное 5,

CALL PodprLE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

Косвенный переход JMPP @A в системе команд микроконтроллера обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентное оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Пример реализации команды выбора варианта:

ORG 256 ;Разместить команды переходов по границе страницы

JMP Case0 ;Перейти к выполнению кода по числу 0

JMP Case1 ;Перейти к выполнению кода по числу 1

JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит

JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит

JMP Case4 ;Перейти к выполнению кода по числу 4

BeginOpCase: ;Сюда нужно перейти командой JMP BeginOpCase

MOV A, 33 ;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу

CLR C ;Осуществить арифметический сдвиг аккумулятора вправо

RLC A ;(умножить на 2) т.к. команды переходов занимают два байта

JMPP @A ;Перейти к выполнению заданного в 25 ячейке кода

EndCase:

Команды управления режимами работы микроконтроллера.

Команды управления микроконтроллером позволяют:

  • запускать и останавливать таймер/счётчик ( STRT CNT STRT T, STOP TCNT),

  • разрешать и запрещать прерывания ( EN I, EN TCNTI, DIS I, DIS TCNTI),

  • выбирать рабочий банк регистров ( SEL RB0, SEL RB1),

  • выбирать страницы памяти программ ( SEL MB0, SEL MB1),

  • разрешать выдачу синхросигнала на ножке T0 ( ENT0 CLC).

Способы адресации операндов.

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

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

RR A ;сдвиг содержимого аккумулятора вправо

DA A ;десятичная коррекция аккумулятора

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

 MOV A, R7 ;Во втором операнде использована регистровая адресация (в первом операнде неявная адресация)

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Примеры использования косвенно-регистровой адресации:

MOV A, @R0 ;Косвенно-регистровая адресация использована во втором операнде

MOV @R1, A ;Косвенно-регистровая адресация использована в первом операнде

Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например:

MOVX A, @R0 ;Косвенно-регистровая адресация использована во втором операнде

MOVX @R1, A ;Косвенно-регистровая адресация использована в первом операнде

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

MOVP3 A, @A

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

MOV A, #11h ;помещает в аккумулятор число 11h

MOV R5, #48 ;помещает в регистр R5 число 48

Описание машинных команд.

ADD A, <байт-источник> - сложение.

Описание: складывает содержимое аккумулятора А с содержимым байта- источника. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:

  • регистровая;

Пример: ADD A, R7

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 1 0 1 r r r

  • косвенно-регистровая;

Пример: ADD A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + ((Ri)) , i=0,1

Машинный код:

0 1 1 0 0 0 0 i

  • непосредственная.

Пример: ADD A, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) + (date 8)

Машинный код:

0 0 0 0 0 0 1 1

i i i i i i i i

ADDC A, <байт-источник> - сложение с учетом переноса.

Описание: складывает содержимое аккумулятора А с содержимым байта-источника, к получившемуся результату прибавляется значение флага переноса. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:

  • регистровая;

Пример: ADDC A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (C) + (Rn) , n=0, : ,7

Машинный код:

0 1 1 1 1 r r r

  • косвенно-регистровая;

Пример: ADDC A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + (C) + ((Ri)) , i=0,1

Машинный код:

0 1 1 1 0 0 0 i

  • непосредственная.

Пример: ADDC A, #100

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) + (C) + (date 8)

Машинный код:

0 0 0 1 0 0 1 1

i i i i i i i i

ANL <байт приемник>,<байт источник> - команда "логическое И" для байтовых переменных.

Описание: выполняет операцию побитового "логического И" над указанными переменными и помещает результат в байт приемник. Команда не воздействует на флаги.

Для команды ANL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

  • регистровая;

Пример: ANL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) & (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 0 1 1 r r r

  • косвенно-регистровая;

Пример: ANL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) & ((Ri)) , i=0,1

Машинный код:

0 1 0 1 0 0 0 i

  • непосредственная.

Пример: ANL A, #100

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (A) & (date 8)

Машинный код:

0 1 0 1 0 0 1 1

i i i i i i i i

Для команды ANL возможна работа с портами и шиной данный в качестве приёмника информации. При этом источник информации использует непосредственную адресацию:

Пример: ANL BUS, #00010010B

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(BUS) = (BUS) & (direct)

Машинный код:

1 0 0 1 1 0 0 0

d d d d d d d d

Пример: P1, #10000000b

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) & (date 8), pp=1,2

Машинный код:

1 0 0 1 1 0 p p

d d d d d d d d

Примечание: при выполнении команды ANL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!

ANLD P, A - "логическое И" порта внешней микросхемы расширителя портов и аккумулятора A.

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

Пример: ANLD P6, A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) & (A), pp=4,5,6,7

Машинный код:

1 0 0 1 1 1 p p

CALL <addr 11> - вызов подпрограммы.

Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем помещает полученный результат в стек. Кроме программного счетчика в стеке сохраняется содержимое регистра флагов PSW. После это содержимое указателя стека SP увеличивается на 1.  Команда не воздействует на флаги.

Пример: CALL 311h

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

((SP)) = (PC), (PSW4-7)

(SP) = (SP) + 1

(PC10-0) = адрес подпрограммы (метки)

Машинный код:

a10 a9 a8 1 0 1 0 0

a7 a6 a5 a4 a3 a2 a1 a0

CLR A - сброс аккумулятора

Описание: сбрасывает (записывает '0' во все биты аккумулятора). Команда не изменяет содержимое флагов. Команда использует неявную адресацию:

Пример: CLR A      ;Записывает в аккумулятор число 00h

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = 0

Машинный код:

0 0 1 0 0 1 1 1

CLR C - сбрасывает флаг переноса в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг переноса. Команда использует неявную адресацию:

Пример: CLR C ;Записывает во флаг переноса '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(C) = 0

Машинный код:

1 0 0 1 0 1 1 1

CLR F0 - сбрасывает флаг пользователя F0 в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг пользователя F0. Команда использует неявную адресацию:

Пример: CLR F0 ;Записывает во флаг пользователя F0 '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F0) = 0

Машинный код:

1 0 0 0 0 1 0 1

CLR F1 - сбрасывает флаг пользователя F1 в нулевое значение.

Описание: сбрасывает (записывает '0') в флаг пользователя F1. Команда использует неявную адресацию:

Пример: CLR F1 ;Записывает во флаг пользователя F0 '0'

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F1) = 0

Машинный код:

1 0 1 0 0 1 0 1

CPL A - каждый бит аккумулятора инвертируется.

Описание: каждый бит аккумулятора инвертируется, т.е. если в каком-либо из восьми бит аккумулятора записана '1', то в этот бит записывается '0' и наоборот.

Пример: CPL A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = not(A)

Машинный код:

0 0 1 1 0 1 1 1

CPL C - инвертируется флаг переноса 'C'.

Описание: флаг переноса 'C' инвертируется, т.е. если флаг переноса 'C' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример: CPL C

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(C) = not(C)

Машинный код:

1 0 1 0 0 1 1 1

CPL F0 - инвертируется флаг пользователя F0 в нулевое значение.

Описание: флаг пользователя 'F0' инвертируется, т.е. если флаг пользователя 'F0' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример: CLR F0 ;Инвертирует флаг пользователя F0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F0) = 0

Машинный код:

1 0 0 0 0 1 0 1

CPL F1 - инвертируется флаг пользователя F1 в нулевое значение.

Описание: флаг пользователя 'F1' инвертируется, т.е. если флаг пользователя 'F1' содержит '1', то в него записывается '0' и наоборот. Команда использует неявную адресацию:

Пример: CLR F1 ;Инвертирует флаг пользователя F0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(F1) = 0

Машинный код:

1 0 1 0 0 1 0 1

DA A - десятичная коррекция аккумулятора при сложении двоично-десятичных чисел.

Описание: команда десятичной коррекции позволяет вести сложение чисел, представленных в упакованном двоично-десятичном коде. Команда применяется после инструкций ADD или ADDC. Инструкции (команды) ADD или ADDC позволяют суммировать сразу две тетрады, расположенные в одном байте.

Если биты аккумулятора с 0 по 3 содержат число большее 9 (xxxx1010:xxxx1111) или флаг вспомогательного переноса AC содержит '1', то к аккумулятору прибавляется число 6 для того, чтобы получить правильную двоично-десятичную цифру в младшей тетраде.

Если старшие биты аккумулятора (с 4 по 7) содержат число большее 9 (1010xxxx :1111xxxx) или флаг переноса C содержит '1', то к аккумулятору прибавляется число 60h для того, чтобы получить правильную двоично-десятичную цифру в старшей тетраде.

Если в результате операции DA A возникнет перенос, то флаг переноса C будет установлен в 1. Единичный флаг переноса после операции DA A означает, что результат суммирования больше 100 и этим можно воспользоваться для суммирования многоразрядных двоично-десятичных чисел. Команда десятичной коррекции не воздействует на флаг переполнения OV.

Примечание: команда DA A не может преобразовать двоичное число из аккумулятора в двоично-десятичный вид или правильно скорректировать двоично-десятичное вычитание.

Пример: DA A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

IF [[(A3-0) > 9] or [(AC) = 1]] THEN (A3-0) = (A3-0) + 6

AND

IF [[(A7-4) > 9] or [(C) = 1]] THEN (A7-4) = (A7-4) + 6

Машинный код:

0 1 0 1 0 1 1 1

DEC <байт> - производит вычитание 1 из указанного операнда.

Описание: операнд уменьшается на 1. Если первоначально в ячейке было записано значение 00h, то в нее заносится значение 0FFh. Команда не воздействует на флаги.

Для команды DEC разрешены следующие режимы адресации:

  • неявная.

Пример: DEC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) - 1

Машинный код:

0 0 0 0 0 1 1 1

  • регистровая;

Пример: DEC R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7

Машинный код:

1 1 0 0 1 r r r

DIS I - запрет внешнего прерывания.

Описание: запрещает прерывание выполнения программы по сигналу низкого уровня на внешней ножке INT.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Запретить прерывания от внешней ножки INT

Машинный код:

0 0 0 1 0 1 0 1

DIS TCNTI - запрет прерывания от таймера/счётчика.

Описание: запрещает прерывание выполнения программы по переполнению таймера/счётчика.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Запретить прерывания по переполнению таймера/счётчика

Машинный код:

0 0 1 1 0 1 0 1

DJNZ Rn,<адрес> - вычитание 1 из указанной ячейки и переход, если результат не равен 0.

Описание: вычитание 1 из указанной во втором байте команды ячейки памяти и переход к вычисляемому по второму байту команды адресу, если результат вычитания не равен 0. Если первоначально в ячейке памяти содержится '0', то в результате выполнения операции туда будет записано число '0FFH'. Команда не воздействует на флаги. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Для команды DJNZ используется регистровая адресация:

Пример: LABEL1: DJNZ R3 ,LABEL1;

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7

IF (Rn) < > 0, THEN (PC0..7) = Address

Машинный код:

1 1 1 0 1 r r r

A d d r e s s

EN I - разрешение внешнего прерывания.

Описание: разрешает прерывание выполнения программы по сигналу низкого уровня на внешней ножке INT.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить прерывания от внешней ножки INT

Машинный код:

0 0 0 0 0 1 0 1

EN TCNTI - разрешение прерываний от таймера/счётчика.

Описание: разрешает прерывание выполнения программы по переполнению таймера/счётчика.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить прерывания от таймера/счётчика

Машинный код:

0 0 1 0 0 1 0 1

ENT0 CLK - разрешение выдачи синхросигнала на вывод T0.

Описание: разрешает выдачу синхросигнала на вывод микросхемы T0.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Разрешить  выдачу синхросигнала на вывод T0

Машинный код:

0 1 1 1 0 1 0 1

IN Pp - пересылка данных из порта в аккумулятор.

Описание: копирует данные на выводах микросхемы в аккумулятор. Команда не воздействует на флаги и использует неявную адресацию.

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (Pp), p=1,2

Машинный код:

0 0 0 0 1 0 p p

INC <байт> - производит прибавление 1 к указанному операнду.

Описание: ячейка памяти адрес, которой указан во втором байте команды увеличивается на 1. Если первоначально в ячейке было записано значение 0FFh, то в нее заносится значение 00h. Команда не воздействует на флаги.

Для команды INC разрешены следующие режимы адресации байта - источника:

  • неявная.

Пример: INC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) + 1

Машинный код:

0 0 0 1 0 1 1 1

  • регистровая;

Пример: INC R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (Rn) + 1, n=0,1,2,3,4,5,6,7

Машинный код:

0 0 0 1 1 r r r

  • косвенно-регистровая;

Пример: INC @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

((Ri)) = ((Ri)) + 1, i=0,1

Машинный код:

0 0 0 1 0 0 0 i

JB0 <адрес> - переход если нулевой бит аккумулятора установлен.

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

Пример: JB0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.0) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 0 1 0 0 1 0

A d d r e s s

JB1 <адрес> - переход если первый бит аккумулятора установлен.

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

Пример: JB1 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.1) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 1 1 0 0 1 0

A d d r e s s

JB2 <адрес> - переход если второй бит аккумулятора установлен.

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

Пример: JB2 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.2) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 0 1 0 0 1 0

A d d r e s s

JB3 <адрес> - переход если третий бит аккумулятора установлен.

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

Пример: JB3 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.3) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 1 1 0 0 1 0

A d d r e s s

JB4 <адрес> - переход если четвёртый бит аккумулятора установлен.

Описание: Если четвёртый бит аккумулятора равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JB4 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.4) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 0 1 0 0 1 0

A d d r e s s

JB5 <адрес> - переход если пятый бит аккумулятора установлен.

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

Пример: JB5 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.5) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 1 1 0 0 1 0

A d d r e s s

JB6 <адрес> - переход если шестой бит аккумулятора установлен.

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

Пример: JB6 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.6) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 0 1 0 0 1 0

A d d r e s s

JB7 <адрес> - переход если седьмой бит аккумулятора установлен.

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

Пример: JB7 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (ACC.7) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 1 1 0 0 1 0

A d d r e s s

JC <адрес> - переход, если бит переноса установлен.

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

Пример: JС LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (С) = 1 THEN (PC0..7) = Address

Машинный код:

1 1 1 1 0 1 1 0

A d d r e s s

JF0 <адрес> - переход, если бит переноса установлен.

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

Пример: JF0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (F0) = 1 THEN (PC0..7) = Address

Машинный код:

1 0 1 1 0 1 1 0

A d d r e s s

JF1 <адрес> - переход, если бит переноса установлен.

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

Пример: JF0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (F1) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 1 1 0 1 1 0

A d d r e s s

JMP <addr 11> - переход на метку.

Описание: осуществляет переход на метку, размещенную по указанному адресу <addr 11>. Команда не воздействует на флаги.

Пример: JMP 311h

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC10-0) = адрес метки

Машинный код:

a10 a9 a8 0 0 1 0 0

a7 a6 a5 a4 a3 a2 a1 a0

JMPP @A - косвенный переход в текущей странице.

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

Пример: JMPP @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC7-0) = ((A))

Машинный код:

a10 a9 a8 0 0 1 0 0

a7 a6 a5 a4 a3 a2 a1 a0

JNC <адрес> - переход, если бит переноса сброшен.

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

Пример: JNС     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (С) = 0 THEN (PC0..7) = Address

Машинный код:

1 1 1 0 0 1 1 0

A d d r e s s

Описание машинных команд (продолжение).

JNI <адрес> - переход, если сигнал на ножке запроса прерывания равен нулю.

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

Пример: JNI     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (INT) = 0 THEN (PC0..7) = Address

Машинный код:

1 0 0 0 0 1 1 0

A d d r e s s

JNT0 <адрес> - переход, если сигнал ножке микроконтроллера T0 равен нулю.

Описание: Если на ножке микроконтроллера T0 сигнал равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JNT0     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T0) = 0 THEN (PC0..7) = Address

Машинный код:

0 0 1 0 0 1 1 0

A d d r e s s

JNT1 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T1 сигнал равен нулю, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги.

Пример: JNT1     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T1) = 0 THEN (PC0..7) = Address

Машинный код:

0 1 0 0 0 1 1 0

A d d r e s s

JNZ <адрес> - переход, если содержимое аккумулятора не равно нулю.

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

Пример: JNZ     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) <> 0 THEN (PC0..7) = Address

Машинный код:

1 0 0 1 0 1 1 0

A d d r e s s

JTF <адрес> - переход, если содержимое аккумулятора не равно нулю.

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

Пример: JTF LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) <> 0 THEN (PC0..7) = Address

Машинный код:

0 0 0 1 0 1 1 0

A d d r e s s

JT0 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T0 сигнал равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JT0 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T0) = 1 THEN (PC0..7) = Address

Машинный код:

0 0 1 1 0 1 1 0

A d d r e s s

JT1 <адрес> - переход, если бит переноса сброшен.

Описание: Если на ножке микроконтроллера T1 сигнал равен единице, то производится переход к указанному во втором байте команды адресу. В противном случае выполняется следующая команда. Новое значение программного счетчика при переходе вычисляется соединением содержимого старших бит программного счетчика с вторым операндом (вторым байтом команды). Таким образом осуществляется переход в пределах страницы размером в 256 байт. Если команда окажется на границе двух страниц, то переход осуществляется в пределах страницы, где расположен второй байт команды. Команда не воздействует на флаги и не изменяет содержимое проверяемого бита.

Пример: JT1 LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (T1) = 1 THEN (PC0..7) = Address

Машинный код:

0 1 0 1 0 1 1 0

A d d r e s s

JZ <адрес> - переход, если содержимое аккумулятора не равно нулю.

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

Пример: JZ     LABEL1

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

IF (A) = 0 THEN (PC0..7) = Address

Машинный код:

1 1 0 0 0 1 1 0

A d d r e s s

MOV <приемник>,<источник> - скопировать байтовую переменную.

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

Команда допускает следующие виды адресации:

первый операнд - неявная, второй операнд - неявная адресация;

Пример: MOV A, PSW

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (PSW)

Машинный код:

1 1 0 0 0 1 1 1

Пример: MOV A, T

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (T)

Машинный код:

0 1 0 0 0 0 1 0

Пример: MOV PSW, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(PSW) = (A)

Машинный код:

1 1 0 1 0 1 1 1

Пример: MOV T, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(T) = (A)

Машинный код:

0 1 1 0 0 0 1 0

первый операнд - неявная, второй операнд - регистровая адресация;

Пример: MOV A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

1 1 1 1 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: MOV A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = ((Ri)) , i=0,1

Машинный код:

1 1 1 1 0 0 0 i

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: MOV A, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (data 8)

Машинный код:

0 0 1 0 0 0 1 1

i i i i i i i i

первый операнд - регистровая, второй операнд - неявная адресация;

Пример: MOV R3, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(Rn) = (A) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 0 1 r r r

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: MOV R3, #38h

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(Rn) = (data 8) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 1 1 r r r

i i i i i i i i

первый операнд - косвенно-регистровая, второй операнд - неявная адресация;

Пример: MOV @R0, A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

((Ri)) = (A), i=0,1

Машинный код:

1 0 1 0 0 0 0 i

первый операнд - косвенно-регистровая, второй операнд - непосредственная адресация;

Пример: MOV @R0, #80

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

((Rn)) = (data 8) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 1 1 0 0 0 i

i i i i i i i i

MOVD A,<источник> - считать порт микросхемы расширителя портов.

Описание: содержимое порта расширителя портов копируется в младшую тетраду аккумулятора. Старшая тетрада обнуляется. Команда не воздействует на флаги. В обоих операндах используется неявная адресация.

Пример: MOVD A, P4

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC) = (PC) + 2

(A) = (Pp), p=4,5,6,7

Машинный код:

0 0 0 0 1 1 p p

MOVP A, @A - переслать байт из текущей страницы памяти программ в аккумулятор.

Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта задаётся исходным содержимым аккумулятора. Команда не воздействует на флаги.

Пример: MOVP A, @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC0..PC7) = (A)

(A) = ((PC))

Машинный код:

1 0 1 0 0 0 1 1

MOVP3 A, @A - переслать байт из третьей страницы памяти программ в аккумулятор.

Описание: загружает аккумулятор константой из памяти программ. Адрес считываемого байта задаётся исходным содержимым аккумулятора. Команда не воздействует на флаги.

Пример: MOVP3 A, @A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC0..PC7) = (A)

(PC8..PC11) = 0011

(A) = ((PC))

Машинный код:

1 1 1 0 0 0 1 1

MOVX <приемник>,<источник> - переслать байтовую переменную во внешнюю память (из внешней памяти)

Описание: пересылает данные между аккумулятором и байтом внешней памяти.

В первом случае регистр R0 или R1 текущего банка регистров обеспечивает 8- битный адрес, который мультиплексируется с данными на выводах порта P0.

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: MOVX A, @R1 ;Скопировать данные из внешней памяти данных в аккумулятор

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

(A) = ((Ri)), i=0,1

Машинный код:

1 0 0 0 0 0 0 i

первый операнд - косвенно-регистровая, второй операнд - неявная адресация;

Пример: MOVX @R0, A ;Скопировать данные из аккумулятора во внешнюю память

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

((Ri)) = (A), i=0,1

Машинный код:

1 0 0 1 0 0 0 i

NOP - нет операции

Описание: Кроме программного счетчика не изменяет ни одного регистра, на флаги не воздействует.

Пример: NOP

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

Машинный код:

0 0 0 0 0 0 0 0

ORL <приемник>,<источник> - "логическое ИЛИ" для байтовых переменных

Описание: выполняет операцию побитового "логического ИЛИ" между указанными переменными. Результат сохраняется в приемнике. Команда не воздействует на флаги.

Для команды ORL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

первый операнд - неявная, второй операнд - регистровая адресация;

Пример: ORL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) V (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 0 0 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: ORL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) V ((Ri)), i=0,1

Машинный код:

0 1 0 0 0 0 0 i

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: ORL A, #100

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(A) = (A) V (date 8)

Машинный код:

0 1 0 0 0 0 1 1

i i i i i i i i

Пример: ORL BUS, #100

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(BUS) = (BUS) V (date 8)

Машинный код:

1 0 0 1 1 0 0 0

i i i i i i i i

Пример: ORL P1, #10010000b

Количество байт: 2

Количество циклов: 2

Действие команды:

(PC) = (PC) + 2

(Pp) = (Pp) V (date 8), p=1,2

Машинный код:

1 0 0 1 1 0 p p

i i i i i i i i

Примечание: при выполнении команды ORL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы!

ORLD Pp, A - логическое ИЛИ между портом расширителя и аккумулятором.

Описание: выполняет операцию побитового "логического ИЛИ" между портом микросхемы расширителя портов и аккумулятором. Результат сохраняется в порту. Команда не воздействует на флаги.

Пример: ORLD P5, A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

(Pp) = (Pp) V (A0...A3)

Машинный код:

1 0 0 0 1 1 p p

OUTL BUS, A - стробируемый вывод данных из аккумулятора в порт BUS.

Описание: осуществляет стробируемый вывод данных из аккумулятора в порт BUS. Команда не воздействует на флаги.

Пример: OUTL BUS, A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

(BUS) = (A)

Машинный код:

0 0 0 0 0 0 1 0

OUTL Pp, A - стробируемый вывод данных из аккумулятора в порт.

Описание: осуществляет вывод данных через порт. Команда не воздействует на флаги.

Пример: OUTL Pp, A

Количество байт: 1

Количество циклов: 2

Действие команды:

(PC) = (PC) + 1

(Pp) = (A), p=1,2

Машинный код:

0 0 1 1 1 0 p p

RET - возврат из подпрограммы.

Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 1. Выполнение программы продолжается с нового, только что загруженного в счетчик команд адреса. Команда не воздействует на флаги.

Пример: RET

Количество байт: 1

Количество циклов: 2

Действие команды:

(SP) = (SP) - 1

(PC) = ((SP))

Машинный код:

1 0 0 0 0 0 1 1

RETR - возврат из подпрограммы обслуживания прерывания и восстановление слова состояния программы.

Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 1. Кроме того, команда восстанавливает состояние логики прерываний, разрешая обработку следующего прерывания. Выполнение программы продолжается с того же адреса, что был в программном счетчике (PC) до начала обработки прерывания (следующий за командой, во время выполнения которой был обнаружен запрос на прерывание). Команда не воздействует на флаги. Если к этому моменту обнаруживается новый запрос на прерывание, то до нового вызова подпрограммы обслуживания прерывания выполняется одна команда из основной программы.

Пример: RETR

Количество байт: 1

Количество циклов: 2

Действие команды:

(SP) = (SP) - 1

(PC) = ((SP))

(PSW4...PSW7) = ((SP))

Машинный код:

1 0 0 1 0 0 1 1

RL A - сдвиг содержимого аккумулятора влево.

Описание: сдвигает восемь бит аккумулятора на один бит влево, бит 7 засылается на место бита 0. Команда не воздействует на флаги.

Пример: RL A

Количество байт: 1

Количество циклов: 1

Действие команды:

(An+1) = (An) n=0..6

(A0) = (A7)

Машинный код:

1 1 1 0 0 1 1 1

RLC A - сдвиг содержимого аккумулятора влево через флаг переноса.

Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит влево. Содержимое флага переноса помещается на место бита 0 аккумулятора, а содержимое бита 7 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.

Пример: RLC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(An+1) = (An) n=0..6

(A0) = (C)

(C) = (A7)

Машинный код:

1 1 1 1 0 1 1 1

RR A - сдвиг содержимого аккумулятора вправо.

Описание: сдвигает восемь бит аккумулятора на один бит вправо, бит 0 засылается на место бита 7. Команда не воздействует на флаги.

Пример: RR A

Количество байт: 1

Количество циклов: 1

Действие команды:

(An) = (An+1) n=0..6

(A7) = (A0)

Машинный код:

0 1 1 1 0 1 1 1

RRC A - сдвиг содержимого аккумулятора через флаг переноса.

Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит вправо. Содержимое флага переноса помещается на место бита 7 аккумулятора, а содержимое бита 0 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.

Пример: RRC A

Количество байт: 1

Количество циклов: 1

Действие команды:

(An) = (An+1) n=0..6

(A7) = (C)

(C) = (A0)

Машинный код:

0 1 1 0 0 1 1 1

SEL MB0 - выбор нулевого банка памяти программ.

Описание: сбрасывает старший бит счетчика команд в нулевое состояние. Команда используется для выбора нулевого банка памяти программ.

Пример: SEL MB0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(PC11) = 0

Машинный код:

1 1 1 0 0 1 0 1

SEL MB1 - выбор первого банка памяти программ.

Описание: устанавливает старший бит счетчика команд в 1. Команда используется для выбора первого банка памяти программ.

Пример: SEL MB0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(PC11) = 1

Машинный код:

1 1 1 1 0 1 0 1

SEL RB0 - выбор нулевого банка памяти программ.

Описание: сбрасывает флаг выбора банков в нулевое состояние. Команда используется для выбора нулевого банка регистров.

Пример: SEL RB0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(BS) = 0

Машинный код:

1 1 0 0 0 1 0 1

SEL RB1 - выбор нулевого банка памяти программ.

Описание: устанавливает флаг выбора банков в 1. Команда используется для выбора первого банка регистров.

Пример: SEL RB0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(BS) = 1

Машинный код:

1 1 0 1 0 1 0 1

STOP TCNT - остановить таймер-счетчик.

Описание: прекращает подачу импульсов на вход таймера-счетчика.

Пример: STOP TCNT

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

остановить таймер-счетчик

Машинный код:

0 1 1 0 0 1 0 1

STRT CNT - запустить счетчик.

Описание: разрешает подачу импульсов со входа микроконтроллера T1 на вход таймера-счетчика.

Пример: STRT CNT

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

запустить счетчик

Машинный код:

0 1 0 0 0 1 0 1

STRT T - запустить таймер.

Описание: разрешает подачу импульсов с выхода предделителя на вход таймера-счетчика.

Пример: STRT CNT

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

запустить таймер

Машинный код:

0 1 0 1 0 1 0 1

SWAP A - обмен тетрадами внутри аккумулятора.

Описание: команда осуществляет обмен между младшей (биты 0..3) и старшей (биты 4..7) тетрадами аккумулятора. (Тетрада - это четырехбитная переменная). Команду можно интерпретировать как циклический сдвиг на четыре бита. Команда не воздействует на флаги.

Пример: SWAP A

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A3..A0) <=> (A7..A4)

Машинный код:

0 1 0 0 0 1 1 1

XCH A,<байт> - обмен содержимого аккумулятора с переменной байтом.

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

В команде допускается следующие виды адресации:

первый операнд - неявная, второй операнд - регистровая адресация;

Пример: XCH A, R7

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) <=> (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 0 1 0 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: XCH A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC)= (PC) + 1

(A) <=> ((Ri)) , i=0,1

Машинный код:

0 0 1 0 0 0 0 i

XCHD A, @Ri - обмен цифры.

Описание: команда осуществляет обмен между младшей (биты 0..3) тетрадой (тетрада это четырехбитная переменная) аккумулятора, где обычно хранится двоично-десятичная цифра с тетрадой ячейки внутреннего ОЗУ. Используется косвенно регистровая адресация. Старшие тетрады (биты 4..7) обоих операндов не изменяются. Команда не воздействует на флаги.

Пример: XCHD A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A3..A0) <=> ((Ri3..Ri0)) , i=0,1

Машинный код:

0 0 1 1 0 0 0 i

XRL <байт приемник>,<байт источник> - исключающее ИЛИ для переменных байтов.

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

Для команды XRL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации:

первый операнд - неявная, второй операнд - регистровая адресация;

Пример: XRL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) xor (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

1 1 0 1 1 r r r

первый операнд - неявная, второй операнд - косвенно-регистровая адресация;

Пример: XRL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды:

(PC) = (PC) + 1

(A) = (A) xor ((Ri)) , i=0,1

Машинный код:

1 1 0 1 0 0 0 i

первый операнд - неявная, второй операнд - непосредственная адресация;

Пример: XRL A, #100

Количество байт: 2

Количество циклов: 1

Действие команды:

(PC)= (PC) + 2

(A) = (A) xor (date 8)

Машинный код:

1 1 0 1 0 0 1 1

i i i i i i i i

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]