Система команд микроконтроллера 1816ВЕ48 предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реального времени.
Реализована побайтовая (8 бит) и потетрадная (4 бита) обработка данных. Микросхемы семейства MCS-48 — это 8-разрядные микропроцессоры, а это означает, что ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию.
В машинном коде команда занимает один, или два байта в зависимости от типа команды. Команды выполняются за один или два машинных цикла. При этом большинство команд выполняются за один машинный цикл длительностью 2,5 мкс (при 6 МГц кварцевом резонаторе).
Запись команд в машинных кодах для человека неудобна, кроме того, разные машинные команды выполняют одинаковые действия только над разными ячейками памяти. Поэтому для записи команд микропроцессоров была придумана система мнемонических обозначений. Для записи команды микропроцессора сначала ставится мнемоническое обозначение, затем указывается ячейка памяти – приёмник результата выполнения операции и наконец источник данных для выполнения операции. Например, в команде
MOV A, R2
символы MOV обозначают операцию копирования, второй операнд R2 определяет, что данные необходимо взять из регистра R2 текущего банка регистров, а первый операнд A определяет, что результат необходимо поместить в регистр – аккумулятор. При этом старое значение регистра – аккумулятора будет стёрто.
Мнемоническое обозначение команды отделяется от операндов одним или несколькими символами пробела или табуляции, а операнды отделяются друг от друга запятыми.
Если операция требует для выполнения двух источников и одного приёмника результата операции (например, команда сложения ADD или логического умножения ANL), то первый операнд является одновременно и источником и приёмником результата операции. Например, в команде
ADD A, R1
символы ADD обозначают операцию сложения двух чисел, данные будут взяты из регистра R1 текущего банка регистров и аккумулятора а результат будет помещён в аккумулятор вместо старого значения этого регистра.
В таблице 1 приведены инструкции, влияющие на установку флагов.
Таблица 1
Мнемоника | Флаги | ||||||
---|---|---|---|---|---|---|---|
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