Аккумулятор - 8-разрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига.
Блок последовательного интерфейса и прерываний предназначен для организации последовательного ввода-вывода информации и организации прерываний выполнения программы. В состав этого блока входят:
- логика управления;
- регистр управления;
- буфер передатчика;
- буфер приемника;
- приемопередатчик последовательного порта;
- регистр приоритетов прерываний;
- регистр разрешения прерываний;
- логика обработки флагов прерываний.
Счетчик команд предназначен для формирования текущего 16-разрядного адреса внутренней или внешней памяти программ. В состав счетчика команд входят 16-разрядный буфер счетчика команд, регистр счетчика команд и схема инкремента (увеличения содержимого на 1).
Память данных предназначена для временного хранения информации, используемой в процессе выполнения программы.
Порты Р0, P1, P2, РЗ являются квазидвунаправленными портами ввода-вывода и предназначены для обеспечения обмена информацией между микроконтроллером и внешними устройствами, образуя 32 линии ввода-вывода.
Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.
Память программ предназначена для хранения программного кода и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные, стираемые ультрафиолетовым излучением или FLASH ПЗУ.
Регистр указателя данных (DPTR) предназначен для формирования 16-разрядного адреса внешней памяти данных или памяти программ при считывании таблиц констант.
Указатель стека (SP) представляет собой 8-разрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой хранятся адреса возврата из подпрограмм, переменные и содержимое внутренних регистров микроконтроллера (в том числе регистры PSW и аккумулятор).
Система команд микроконтроллеров MCS-51
Ни один из видов микропроцессоров не может рассматриваться отдельно от системы команд. Не является исключением и семейство микроконтроллеров MCS-51. Система команд микроконтроллеров этого семейства предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление устройствами в режиме реального времени.
В этой системе команд реализована побитная, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. Микросхемы семейства MCS-51 - это 8-разрядные микропроцессоры, а это означает, что ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DTPR) и счетчиком команд (PC).
В машинном коде команда занимает один, два или три байта в зависимости от типа адресации.
Команды выполняются за один, два или четыре (умножение и деление) машинных цикла.
Запись команд в машинных кодах для человека неудобна. Кроме того, машинные команды, отличающиеся младшими битами или вторым байтом, выполняют одинаковые действия над разными ячейками памяти. Поэтому для записи команд микропроцессоров была придумана система мнемонических обозначений. В записи команды микропроцессора сначала ставится мнемоническое обозначение кода операции, затем указывается ячейка памяти - приемник результата выполнения операции и, наконец, источник данных для выполнения операции. Например, в команде
Е535 MOV A, 35h
символы MOV обозначают операцию копирования, второй операнд 35 определяет, что данные необходимо взять из ячейки памяти с шетнадцатеричным адресом 35, а первый операнд A определяет, что результат необходимо поместить в регистр-аккумулятор. При этом старое значение регистра-аккумулятора будет стерто. Слева приведена машинная команда микроконтроллера в шестнадцатеричной записи, соответствующая находящейся справа мнемонической записи команды.
Мнемоническое обозначение кода операции отделяется от операндов одним или несколькими символами пробела пли табуляции, а операнды отделяются друг от друга запятыми. При этом между операндами допустимо использование символов пробела или табуляции, которые могут потребоваться для более наглядной записи команды.
Если операция требует для выполнения двух источников и одного приемника результата операции (например, команда сложения ADD или вычитания SUBB), то первый операнд является одновременно и источником и приемником результата операции. Например, в команде
2535 ADD A, 35h
символы ADD обозначают операцию сложения двух чисел, данные будут взяты из ячейки памяти с шестнадцатеричным адресом 35 и аккумулятора, а результат будет помещен в аккумулятор вместо старого значения этого регистра.
В табл. П1 приведены мнемонические обозначения машинных команд, влияющих на значения флагов регистра слова состояния программы PSW, а в табл. П2 приведены обозначения и символы, используемые при описании команд микроконтроллеров семейства MCS-51.
Команды микроконтроллера условно можно разбить на пять групп:
- арифметические команды;
- логические команды с байтовыми переменными;
- команды передачи данных;
- команды битового процессора;
- команды ветвления программ и передачи управления ОЭВМ.
Арифметические команды
В наборе команд микроконтроллера имеются следующие арифметические операции:
- сложение - ADD;
- сложение с учетом флага переноса - ADDCC;
- вычитание с заемом из флага переноса - SUBB;
- инкрементирование (увеличение на 1) - INC;
- декрементирование (уменьшение на 1) - DEC;
- десятичная коррекция - DA;
- умножение - MUL;
- деление - DIV.
Действия производятся над целыми беззнаковыми 8-разрядными числами. Арифметические операции в рассматриваемой системе команд могут быть выполнены только над содержимым регистра-аккумулятора.
При операции умножения содержимое аккумулятора А умножается на содержимое регистра В, и результат размещается следующим образом: младший байт в регистре В, старший - в регистре А.
В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток - в регистр В.
Логические команды с байтовыми переменными
Система команд рассматриваемого микроконтроллера позволяет реализовать следующие логические операции:
- логическое "И" - ANL;
- логическое "ИЛИ" - ORL;
- исключающее "ИЛИ" - XRL.
Логические операции могут выполняться только над аккумулятором или над портами ввода-вывода.
Существуют логические операции, которые выполняются только на аккумуляторе:
- сброс всех восьми разрядов А - CLR A;
- инвертирование всех восьми разрядов А - CPL A;
- циклический сдвиг влево и вправо без учета флага переноса - RL A и RR A;
- циклический сдвиг влево и вправо с учетом флага переноса - RLC A и RRC A;
- обмен местами старшей и младшей тетрад внутри аккумулятора - SWAP A.
Команды пересылки данных
Как было рассмотрено ранее, арифметические и логические команды могут быть выполнены только над содержимым регистра-аккумулятора, поэтому исключительное значение в системе команд приобретают команды пересылки данных. С помощью этих команд можно скопировать содержимое любой ячейки памяти в регистр-аккумулятор или наоборот скопировать содержимое аккумулятора в любую ячейку памяти.
Так как в микроконтроллере присутствуют три независимых области памяти, то для обращения к ним введены различные команды:
- копирование данных во внутреннем ОЗУ - MOV;
- обмен данными аккумулятора с внутренним ОЗУ - XCH, XCHO;
- копирование из внешней памяти данных - MOVX;
- копирование данных из памяти программ - MOVC.
Рассмотрим несколько примеров использования команд пересылки данных.
Любая из 256 ячеек внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры-указатели R0 и R1 (выбранного банка рабочих регистров):
MOV A, @R0 ;Скопировать число из ячейки памяти с адресом, хранящимся в R0, в аккумулятор
MOV @R1, А ;Скопировать число из аккумулятора, в ячейку памяти с адресом, хранящимся в R1
Команды пересылки между ячейками памяти, использующие прямую адресацию, позволяют заносить содержимое порта в ячейку внутреннего ОЗУ или пересылать содержимое из одной ячейки внутреннего ОЗУ в другую без использования аккумулятора: