страница 1
Лабораторная работа №13
Изучение системы команд однокристального микроконтроллера КР1816ВЕ51 (МК51).
Цель работы: Изучить систему команд однокристального микроконтроллера КР1816ВЕ51 (МК51).
Краткие сведения из теории
Общие сведения о системе команд
Система команд МК51 содержит 111 базовых команд, которые удобно разделить по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами.
Система команд МК51 много мощнее и шире системы команд МК48, так как кроме всех команд МК48 в ее состав входят команды умножения, деления, вычитания, операций над битами, операций со стеком и расширенный набор команд передачи управления.
Большинство команд (94) имеют формат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс.
На рис. 3.19 показаны 13 типов команд МК51. Первый байт команды любых типа и формата всегда содержит код операции (КОП). Второй и третий байты содержат либо адреса операндов, либо непосредственные операнды.
Типы операндов. Состав операндов МК51 шире, чем МК48, и включает в себя операнды четырех типов: биты, 4-битные цифры, байты и 16-битные слова.
В отличие от МК48, который имеет только три битовых флага, МК51 имеет 128 программно-управляемых флагов пользователя. Имеется также возможность адресации отдельных бит блока регистров специальных функций и портов. Для адресации бит используется прямой 8-битный адрес (bit). Косвенная адресация бит невозможна. Карты адресов отдельных бит представлены на рис. 3.20 и 3.21. Четырехбитные операнды используются только при операциях обмена (команды SWAP и XCHD). Восьмибитным операндом может быть ячейка памяти программ или данных (резидентной или внешней), константа (непосредственный операнд) , регистры специальных функций (РСФ), а также порты ввода/вывода. Порты и РСФ адресуются только прямым способом. Байты памяти могут адресоваться также и косвенным образом через адресные регистры (R0, Rl, DPTR и PC). Двухбайтные операнды — это константы и прямые адреса, для представления которых используются второй и третий байты команды.
Способы адресации данных. В МК51 используются такие же способы адресации данных, как и в МК48: прямая, непосредственная, косвенная и неявная. Следует отметить, что при косвенном способе адресации РПД в отличие от МК48 используются все восемь бит адресных регистров R0 и R1.
Система команд МК51 по сравнению с МК48 допускает больше комбинаций способов адресации операндов в командах, что делает ее более гибкой и универсальной.
Флаги результата. Слово состояния программы (PSW) включает в себя четыре флага: С - перенос, АС - вспомогательный перенос, 0V -переполнение и Р - паритет.
Флаг паритета (отсутствует в МК48) напрямую зависит от текущего значения аккумулятора. Если число единичных бит аккумулятора нечетное, то флаг Р устанавливается, а если четное — сбрасывается. Все попытки изменить флаг Р, присваивая ему новое значение, будут безуспешными, если содержимое аккумулятора при этом останется неизменным. Флаг АС устанавливается в случае, если при выполнении операции сложения/вычитания между тетрадами байта возник перенос/заем. Флаг С устанавливается, если в старшем бите результата возникает перенос или заем. При выполнении операций умножения и деления флаг С сбрасывается. Флаг 0V (отсутствует в МК48) устанавливается, если результат операции сложения/вычитания не укладывается в семи битах и старший (восьмой) бит результата не может интерпретироваться как знаковый. При выполнении операции деления флаг 0V сбрасывается, а в случае деления на нуль устанавливается. При умножении флаг 0V устанавливается, если результат больше 255.
Таблица 3.11 Команды, модифицирующие флаги результата
Команды
|
Флаги
|
Команды
|
Флаги
|
ADD
|
C,0V, АС
|
CLR С
|
С=0
|
ADDC
|
C,0V.AC
|
CPL С
|
С=-С
|
SUBB
|
C.0V, AC
|
ANL С,b
|
С
|
MUL
|
С=0, 0V
|
ANL С,/b
|
С
|
DIV
|
С=0, 0V
|
0RL С,b
|
с
|
DA
|
С
|
0RL С,/b
|
с
|
RRC
|
С
|
M0V С,b
|
с
|
RLC
|
С
|
CJNE
|
с
|
SETB C
|
С= 1
|
|
|
В табл. 3.11 перечисляются команды, при выполнении которых модифицируются флаги результата. В таблице отсутствует флаг паритета, так как его значение изменяется всеми командами, которые изменяют содержимое аккумулятора. Кроме команд, приведенных в таблице, флаги модифицируются командами, в которых местом назначения результата определены PSW или его отдельные биты, а также командами операций над битами.
Символическая адресация. При использовании ассемблера МК51 (ASM51) для получения объектных кодов программ допускается применение в программах символических имен регистров специальных функций (РСФ) , портов и их отдельных бит (рис. 3.21).
Для адресации отдельных бит РСФ и портов (такая возможность имеется не у всех РСФ) можно использовать символическое имя бита следующей структуры:
< имя РСФ или порта > . < номер бита >
Например, символическое имя пятого бита аккумулятора будет следующим: АСС.5. Символические имена РСФ, портов и их бит являются зарезервированными словами для ASM51, и их не надо определять с помощью директив ассемблера.
Группа команд передачи данных
Большую часть команд данной группы (табл. 3.12) составляют команды передачи и обмена байтов. Команды пересылки бит представлены в группе команд битовых операций. Все команды данной группы не модифицируют флаги результата, за исключением команд загрузки PSW и аккумулятора (флаг паритета) .
Структура информационных связей. В зависимости от способа адресации и места расположения операнда можно выделить девять типов операндов, между которыми возможен информационный обмен. Граф возможных операций передачи данных показан на рис. 3.22. Аккумулятор (А) представлен на этом графе отдельной вершиной, так как многие команды используют неявную (подразумеваемую) адресацию.
В отличие от МК48 передачи данных в МК51 могут выполняться без участия аккумулятора.
Аккумулятор. В отличие от МК48 обращение к аккумулятору может быть выполнено в МК51 с использованием неявной и прямой адресации.
В зависимости от способа адресации аккумулятора применяется одно из символических имен: А или АСС (прямой адрес). При прямой адресации обращение к аккумулятору производится как к одному из РСФ, и его адрес указывается во втором байте команды.
Использование неявной адресации аккумулятора предпочтительнее, однако не всегда возможно например при обращении к отдельным битам аккумулятора.
Обращение к внешней памяти данных. Режим косвенной адресации ВПД, имеющийся в МК48, реализован также и в МК51. При использовании команд M0VX @Ri обеспечивается доступ к 256 байтам внешней памяти данных.
Существует также режим обращения к расширенной ВПД, когда для доступа используется 16-битный адрес, хранящийся в регистре-указателе данных (DPTR). Команды M0VX @DPTR обеспечивают доступ к 65 536 байтам ВПД.
Группа команд передачи данных
|
Название команды
|
Мнемокод
|
|
Пересылка в аккумулятор из регистра (п = 0 — 7)
|
MOV A, Rn
|
|
Пересылка в аккумулятор прямоадресуемого байта
|
MOV A, ad
|
|
Пересылка в аккумулятор байта из РПД (i= 0,1)
|
MOV A, @Ri
|
|
Загрузка в аккумулятор константы
| MOV A, #data |
|
Пересылка в регистр из аккумулятора
|
MOV Rn, A
|
|
Пересылка в регистр прямоадресуемого байта
|
MOV Rn, ad
|
|
Загрузка в регистр константы
|
MOV Rn,#data
|
|
Пересылка по прямому адресу аккумулятора
|
MOV ad, A
|
|
Пересылка по прямому адресу регистра
|
MOV ad, Rn
|
|
Пересылка прямоадресуемого байта по прямому адресу
|
MOV add, ads
|
|
Пересылка байта из РПД по прямому адресу
|
MOV ad, @Ri
|
|
Пересылка по прямому адресу константы
|
MOV ad, #data
|
|
Пересылка в РПД из аккумулятора
|
MOV @Ri, A
|
|
Пересылка в РПД прямоадресуемого байта
|
MOV @Ri, ad
|
|
Пересылка в РПД константы
|
MOV @Ri, #data
|
|
Загрузка указателя данных
|
MOV DPTR, #data16
|
|
Пересылка в аккумулятор байта из ПП
|
MOVC А, @А+ DPTR
|
|
Пересылка в аккумулятор байта из ПП
|
MOVC A, @A + PC
|
|
Пересылка в аккумулятор байта из ВПД
|
MOVX A, @Ri
|
|
Пересылка в аккумулятор байта из расширенной ВПД
|
MOVX A, @DPTR
|
|
Пересылка в ВПД из аккумулятора
|
MOVX @Ri, A
|
|
Пересылка в расширенную ВПД из аккумулятора
|
MOVX @DPTR, A
|
|
Загрузка в стек
|
PUSH ad
|
|
Извлечение из стека
|
POP ad
|
|
Обмен аккумулятора с регистром
|
ХСН A,Rn
|
Обмен аккумулятора с прямоадресуемым байтом
|
ХСН A, ad
|
Обмен аккумулятора с байтом из РПД
|
ХСН A,@Ri
|
Обмен младшей тетрады аккумулятора с младшей тетрадой байта РПД
|
XCHD A,@Ri
|
|
|
|
Группа команд арифметических операций
Данную группу образуют 24 команды (табл. 3.13), выполняющие операции сложения, десятичной коррекции, инкремента/декремента байтов. Дополнительно по сравнению с МК48 введены команды вычитания, умножения и деления байтов.
Команды ADD и ADDC аналогичны командам сложения МК48, но допускают сложение аккумулятора с большим числом операндов. Аналогично командам ADDC существуют четыре команды SUBB, что позволяет более просто, чем в МК48, производить вычитание байтов и многобайтных двоичных чисел. В МК51 реализуется расширенный (по сравнению с МК48) список команд инкремента/декремента байтов, введена команда инкремента 16-битного регистра-указателя данных.
Таблица 3. 13. Группа команд арифметических операции
Название команды
|
Мнемокод
|
Сложение аккумулятора с регистром (п = 0 -7)
|
ADD A, Rn
|
Сложение аккумулятора с прямоадресуемым байтом
|
ADD A, ad
|
Сложение аккумулятора с байтом из РПД (i = 0,1)
|
ADD A, @Ri
|
Сложение аккумулятора с константой
|
ADD A, #data
|
Сложение аккумулятора с регистром и переносом
|
ADDC A, Rn
|
Сложение аккумулятора с прямоадресуемым байтом
|
ADDC A, ad
|
и переносом Сложение аккумулятора с байтом из РПД и переносом
|
ADDC A, @Ri
|
Сложение аккумулятора с константой и переносом
|
ADDC A, #data
|
Десятичная коррекция аккумулятора
|
DA A
|
|
Вычитание из аккумулятора регистра и заема
|
SUBB A, Rn
|
|
Вычитание из аккумулятора прямоадресусмого байта и эаема
|
SUBB A, ad
|
|
Вычитание из аккумулятора байта РПД и заема
|
SUBB A, @Ri
|
|
Вычитание из аккумулятора константы и заема
|
SUBB A, #data
|
|
Инкремент аккумулятора
|
INC A
|
|
Инкремент регистра
|
INC Rn
|
|
Инкремент прямоадресуемого байта
|
INC ad
|
|
Инкремент байта в РПД
|
INC @Ri
|
|
Инкремент указателя данных
|
INC DPTR
|
|
Декремент аккумулятора
|
DEC A
|
|
Декремент регистра
|
DEC Rn
|
|
Декремент прямоадресуемого байта
|
DEC ad
|
|
Декремент байта в РПД
|
DEC @Ri
|
|
Умножение аккумулятора на регистр В
|
MUL AB
|
|
Деление аккумулятора на регистр В
|
DIV AB
|
|
|
|
Группа команд логических операций
Данную группу образуют 25 команд (табл. 3.14), реализующих те же логические операции над байтами, что и в МК48. Однако в МК51 значительно расширено число типов операндов, участвующих в операциях.
В отличие от МК48 имеется возможность производить операцию "исключающее ИЛИ" с содержимым портов. Команда XR1 может быть эффективно использована для инверсии отдельных бит портов.
Таблица 3. 14. Группа команд логических операций
Название команды
|
Мнемокод
|
Логическое И аккумулятора и регистра
|
ANL A, Rn
|
Логическое И аккумулятора и прямоадресуемого байта
|
ANL A, ad
|
Логическое И аккумулятора и байта из РПД
|
ANL A, @Ri
|
Логическое И аккумулятора и константы
|
ANL A, #data
|
Логическое И прямоадресуемого байта и аккумулятора
|
ANL ad, A
|
Логическое И прямоадресуемого байта и константы
|
ANL ad, #data
|
Логическое ИЛИ аккумулятора и регистра
|
ORL A, Rn
|
Логическое ИЛИ аккумулятора и прямоадресуемого байта
|
ORL A, ad
|
Логическое ИЛИ аккумулятора и байта из РПД
|
ORL A, @Ri
|
Логическое ИЛИ аккумулятора и константы
|
ORL A, #data
|
Логическое ИЛИ прямоадресуемого байта и аккумулятора
|
ORL ad, A
|
Логическое ИЛИ прямоадресуемого байта и константы
|
ORL ad, #data
|
Исключающее ИЛИ аккумулятора и регистра
|
XRL A, Rn
|
Исключающее ИЛИ аккумулятора и прямоадресуемого байта
|
XRL A, ad
|
Исключающее ИЛИ аккумулятора и байта из РПД
|
XRL A, @Ri
|
Исключающее ИЛИ аккумулятора и константы
|
XRL A, #data
|
Исключающее ИЛИ прямоадресуемого байта и аккумулятора
|
XRL ad, A
|
Исключающее ИЛИ прямоадресуемого байта и константы
|
XRL ad, #data
|
Сброс аккумулятора
|
CLR A
|
Инверсия аккумулятора
|
CPL A
|
Сдвиг аккумулятора влево циклический
|
RL A
|
Сдвиг аккумулятора влево через перенос
|
RLC A
|
Сдвиг аккумулятора вправо циклический
|
RR A
|
Сдвиг аккумулятора вправо через перенос
|
RRC A
|
Обмен местами тетрад в аккумуляторе
|
SWAP A
|
Группа команд операций с битами
Отличительной особенностью данной группы команд (табл. 3.15) является то, что они оперируют с однобитными операндами. В качестве таких операндов могут выступать отдельные биты некоторых регистров специальных функций (РСФ) и портов, а также 128 программных флагов пользователя.
Существуют команды сброса (C1R), установки (SETB) и инверсии (CP1) бит, а также конъюнкции и дизъюнкции бита и флага переноса. Для адресации бит используется прямой восьмиразрядный адрес (bit). Косвенная адресация бит невозможна.
Таблица 3.15. Группа команд операций с битами
Название команды
|
Мнемокод
|
Сброс переноса
|
CLR С
|
Сброс бита
|
CLR bit
|
Установка переноса
|
SETB С
|
Установка бита
|
SETB bit
|
Инверсия переноса
|
CPL С
|
Инверсия бита
|
CPL bit
|
Логическое И бита и переноса
|
ANL С, bit
|
Логическое И инверсии бита и переноса
|
ANL С, bit
|
Логическое ИЛИ бита и переноса
|
ORL С, bit
|
Логическое ИЛИ инверсии бита и переноса
|
ORL С, bit
|
Пересылка бита в перенос
|
MOV С, bit
|
Пересылка переноса в бит
|
MOV bit, С
|
Группа команд передачи управления
К данной группе команд (табл. 3.16) относятся команды, обеспечивающие условное и безусловное ветвление, вызов подпрограмм и возврат из них, а также команда пустой операции N0P. В большинстве команд используется прямая адресация, т. е. адрес перехода целиком (или его часть) содержится в самой команде передачи управления. Можно выделить три разновидности команд ветвления по разрядности указываемого адреса перехода.
Длинный переход. Переход по всему адресному пространству ПП. В команде содержится полный 16-битный адрес перехода (ad 16). Трехбайтные команды длинного перехода содержат в мнемокоде букву 1 (10ng). Всего существует две такие команды 1JMP - длинный переход и 1CA11 — длинный вызов подпрограммы. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающее меньше места в памяти.
Абсолютный переход. Переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (adi1). Команды абсолютного перехода имеют формат 2 байта. Начальная буква мнемокода — A (Absolute). При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на adi1 из тела команды абсолютного перехода.
Относительный переход. Короткий относительный переход позволяет передать управление в пределах - 128 ¸ +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Существует одна команда безусловного короткого перехода SJMP (Sh0rt). Все команды условного перехода используют данный метод адресации . Относительный адрес перехода (re1) содержится во втором байте команды.
Косвенный переход. Команда JMP @ А + DPTR позволяет передавать управление по косвенному адресу. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы.
Условные переходы. Развитая система условных переходов предоставляет возможность осуществлять ветвление по следующим условиям: аккумулятор содержит нуль (JZ); содержимое аккумулятора не равно нулю (JNZ); перенос равен единице (JC); перенос равен нулю (JNC); адресуемый бит равен единице (JB); адресуемый бит равен нулю (JNB);
Для организации программных циклов удобно пользоваться командой DJNZ, которая работает аналогично соответствующей команде МК48. Однако в качестве счетчика циклов в МК51 может использоваться не только регистр, но и прямоадресуемый байт (например, ячейка РПД).
Команда CJNE эффективно используется в процедурах ожидания какого-либо события. Например, команда
WAIT : CJNE A,P0,WAIT
будет выполняться до тех пор, пока на линиях порта 0 не установится информация, совпадающая с содержимым аккумулятора.
Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг С, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг С в случае перехода.
Подпрограммы. Для обращения к подпрограммам необходимо использовать команды вызова подпрограмм (1CA11, ACA11). Эти команды в отличие от команд перехода (1JMP, AJMP) сохраняют в стеке адрес возврата в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Команда RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня.
Таблица 3.16. Группа команд передачи управления
-
Название команды
|
Мнемокод
|
Длинный переход в полном объеме памяти программ
|
LJMP ad16
|
Абсолютный переход внутри страницы в 2 Кбайта
|
AJMP ad11
|
Короткий относительный переход внут ри страницы в 256 байт
|
SJMP rel
|
Косвенный относительный переход
|
JMP @А + DPTR
|
Переход, если аккумулятор равен нулю
|
JZ rel
|
Переход, если аккумулятор не равен нулю
|
JNZ rel
|
Переход, если перенос равен единице
|
JC rel
|
Переход, если перенос равен нулю
|
JNC rel
|
Переход, если бит равен единице
|
JB bit, rel
|
Переход, если бит равен нулю
|
JNB bit, rel
|
Переход, если бит установлен, с по следующим сбросом бита
|
JBC bit, rel
|
Декремент регистра и переход, если не нуль
|
DJNZ Rn, rel
|
Декремент прямоадресуемого байта и переход, если не нуль
|
DJNZ ad, rel
|
Сравнение аккумулятора с прямоад- ресуемым байтом и переход, если не равно
|
CINE A, ad, rel
|
Сравнение аккумулятора с константой и переход,если не равно
|
CJNE А, #data, rel
|
Сравнение регистра с константой и переход, если не равно
|
CJNE Rn, #data, rel
|
Сравнение байта в РПД с константой и переход,если не равно
|
CJNE @Ri, #data, rel
|
Длинный вызов подпрограммы
|
LCALL ad16
|
Абсолютный вызов подпрограммы в пределах страницы в 2 Кбайта
|
ACALL ad11
|
Возврат из подпрограммы
|
RET
|
Возврат из подпрограммы обработки прерывания
|
RETI
|
Холостая команда
|
NOP
|
Примечание. Ассемблер допускает использование обобщенного имени команд JMP и CALL, которые в процессе трансляции заменяются оптимальными по формату командами перехода (AJMP, SJMP, LJMP) или вызова (ACALL, LCALL).
Содержание отчета
Название и цель работы, краткое описание системы команд МК51 (группы), выводы.
страница 1
|