Автор работы: Пользователь скрыл имя, 11 Апреля 2011 в 12:22, реферат
В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП.
В машинном коде
команда занимает один, два или
три байта в зависимости от
типа адресации.
Команды выполняются
за один, два или четыре (умножение
и деление) машинных цикла.
Запись команд в машинных кодах для человека неудобна, кроме того, разные машинные команды выполняют одинаковые действия только над разными ячейками памяти. Поэтому для записи команд микропроцессоров была придумана система мнемонических обозначений. Для записи команды микропроцессора сначала ставится мнемоническое обозначение, затем указывается ячейка памяти – приёмник результата выполнения операции и наконец источник данных для выполнения операции. Например, в команде
E535
MOV A, 35h
символы MOV обозначают
операцию копирования, второй операнд
35 определяет, что данные необходимо
взять из 35 ячейки памяти, а первый операнд
A определяет, что результат необходимо
поместить в регистр – аккумулятор. При
этом старое значение регистра – аккумулятора
будет стёрто. Слева приведена машинная
команда микроконтроллера в шестнадцатеричной
записи, соответствующая мнемонической
записи команды.
Мнемоническое
обозначение команды отделяется
от операндов одним или
Если операция требует для выполнения двух источников и одного приёмника результата операции (например, команда сложения ADD или вычитания SUBB), то первый операнд является одновременно и источником и приёмником результата операции. Например, в команде
2535
ADD A, 35h
символы ADD обозначают
операцию сложения двух чисел, данные
будут взяты из 35 ячейки памяти и аккумулятора
а результат будет помещён в аккумулятор
вместо старого значения этого регистра.
В таблице 1 приведены
инструкции, влияющие на установку
флагов микроконтроллера.
Таблица 1
Мнемоника
Флаги
Мнемоника
Флаги
C
OV
AC
C
OV
AC
ADD
+
+
+
CLR C
0
ADDC
+
+
+
CPL C
+
SUBB
+
+
+
ANL C, bit
+
MUL
0
+
ANL C, /bit
DIV
0
+
ORL C, bit
+
DA
+
ORL C, /bit
+
RRC
+
MOV C, bit
+
RLC
+
CJNE
+
SETB C
1
Систему команд микроконтроллера условно можно разбить на пять групп:
арифметические команды
логические команды с байтовыми переменными
команды передачи данных
команды битового процессора
команды ветвления программ и передачи управления
Арифметические
команды
В наборе команд микроконтроллера имеются следующие арифметические операции:
сложение ADD,
сложение с учетом флага переноса ADDC,
вычитание с заемом SUBB,
инкрементирование (увеличение на 1) INC,
декрементирование (уменьшение на 1) DEC,
десятичная коррекция DA,
умножение MUL
деление DIV.
Действия производятся
над целыми числами без знака.
При операции умножения
содержимое аккумулятора A умножается
на содержимое регистра B, и результат
размещается следующим образом: младший
байт в регистре B, старший - в регистре
А.
В случае выполнения операции деления целое от деления помещается в аккумулятор A, остаток - в регистр В.
Логические команды
с байтовыми переменными.
Система команд рассматриваемого микроконтроллера позволяет реализовать логические операции
И ( ANL),
ИЛИ ( ORL),
ИСКЛЮЧАЮЩЕЕ ИЛИ
( XRL).
Логические операции
выполняются над аккумулятором
или непосредственно над
Существуют логические операции, которые выполняются только на аккумуляторе:
сброс всех восьми разрядов A ( CLR A);
инвертирование всех восьми разрядов A ( CPL A );
циклический сдвиг влево и вправо без учета флага переноса ( RR A; RL A);
циклический сдвиг влево и вправо с учетом флага переноса ( RRC A; RLC A);
обмен местами старшей и младшей тетрад внутри аккумулятора ( SWAP A).
Команды пересылки
данных.
Как было рассмотрено ранее, арифметические и логические команды могут быть выполнены только над содержимым регистра аккумулятора, поэтому исключительно важное значение в системе команд приобретают команды пересылки данных. С помощью этих команд можно скопировать содержимое любой ячейки памяти в регистр-аккумулятор или наоборот скопировать содержимое аккумулятора в любую ячейку памяти. Так как в микроконтроллере присутствует три независимых области памяти, то для обращения к ним введены различные команды:
копирование данных во внутреннем ОЗУ: MOV;
обмен данными аккумулятора с внутренним ОЗУ: XCH, XCHD
копирование из внешней памяти данных: MOVX
копирование данных
из памяти программ: MOVC
Примеры использования
команд пересылки данных:
Любая ячейка 256- байтового блока внутреннего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 и R1 (выбранного банка рабочих регистров):
MOV A, @R0 ;Скопировать число из ячейки памяти с адресом, хранящемся в R0, в аккумулятор
MOV @R1, A
;Скопировать число из
Команды пересылки с прямой адресацией между ячейками памяти позволяют заносить содержимое порта в ячейку внутреннего ОЗУ или обмениваться содержимым ячеек внутреннего ОЗУ между собой без использования аккумулятора:
MOV 15, 25
;Скопировать содержимое 25-й ячейки
в 15-ю ячейку
Таблицы символов (кодов), записанные в ПЗУ программы могут быть скопированы в аккумулятор с помощью команд передачи данных с косвенной адресацией:
MOVC A, @A+DPTR
;Скопировать символ в
Ячейка адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр указатель данных DPTR:
MOVX A, @DPTR
;Скопировать число из внешней
ячейки памяти с адресом, ;хранящемся
в DPTR, в аккумулятор
Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка:
XCH A, R0.
Кроме того, любой бит с прямой адресацией может быть скопирован в бит переноса и наоборот:
MOV C, AdrBit
Битовые команды.
Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0, или инвертирован:
установить бит (записать логическую единицу) SETB;
сбросить бит (записать логический ноль) CLR;
проинвертировать значение бита (изменить на прямо противоположное) CPL;
бит может быть
записан во флаг переноса или считан из
флага переноса MOV.
Могут быть реализованы переходы:
если бит установлен (содержит логическую 1) JB;
если бит не установлен (содержит логический 0) JNB;
переход, если бит
установлен со сбросом этого бита
после выполнения команды (запись в
этот бит 0) JBC;
Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".
И ( ANL),
ИЛИ ( ORL),
Команды ветвления
и передачи управления.
Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:
безусловный переход: LJMP, AJMP, SJMP
Вызов и возврат из подпрограммы: LCALL, ACALL, RET, RETI
проверка содержимого аккумулятора: JZ, JNZ, CJNE, JMP
проверка флага переноса С: JC, JNC
проверка содержимого
любого бита в битовом пространстве:
JB, JNB, JBC
Команды 16-разрядных
безусловных переходов и
LJMP Metka
;Переход к команде,
LCALL Podprogramma
;Вызов подпрограммы по адресу,
обозначенному меткой ‘
Команды 11-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри программного модуля 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних 2 Кбайтовых сегментах памяти.
AJMP Metka
;Переход к команде,
ACALL Podprogramma
;Вызов подпрограммы по адресу,
обозначенному меткой ‘
В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (РС)-127 до (РС)+127. Примеры команд:
SJMP Metka
;Переход к команде,
JB P3.5, TstNxtUsl ;Если на 6 выводе порта P3 нулевой потенциал,
ACALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’
CJNE A, #5, TstNxtUsl
;Если в аккумуляторе
ACALL Podprogramma
;то вызвать подпрограмму, обозначенную
меткой ‘Podprogramma’
Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий. При этом содержимое не изменяется, то есть если требуется произвести несколько проверок одной и той же переменной, то повторно заносить значение этой переменной в аккумулятор не нужно. Например:
MOV A, 34 ;Если в переменной, хранящейся в ячейке внутренней памяти 34
JNB ACC_7, TstEQ5 ;число меньше нуля,
CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’
TstEQ5 ;-----------------------------