Изучение системы команд в микроконтроллерах серии MCS51. Изучение способов адресации.
Практическая работа, 12 Июня 2015, автор: пользователь скрыл имя
Краткое описание
Цель работы: Изучить систему команд микроконтроллеров серии MCS51, способы адресации операндов в командах и получить практические навыки в применении команд при разработке программного обеспечения.
Прикрепленные файлы: 1 файл
ПР№2.docx
— 81.83 Кб (Скачать документ)Для наглядности изначально в регистр R0 загружено значение 33Н, в регистр R1 – 40Н, в аккумулятор – 11H.
- примере 4.1 значение из аккумулятора A пересылается в ячейку памяти, адрес которой находится в регистре R0. В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 33H (т.к. в регистре R0 находится значение 33H).
- примере 4.2 команда выполняется также как и в примере 4.1, но в регистре R0 находится значение 34H, т.к. после выполнения команды INC R0 значение в регистре R0 увеличилось на 1 (было 33H стало 34H). В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 34H.
- примере 4.3 команда выполняется также как и в примере 4.2, но в регистре R0 находится значение 35H, т.к. после выполнения команды INC R0 значение в регистре R0 увеличилось на 1 (было 34H стало 35H). В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 35H.
- примере 4.4 значение из аккумулятора A пересылается в ячейку памяти, адрес которой находится в регистре R1. В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 40H (т.к. в регистре R1 находится значение 40H).
Во всех примерах (примеры 4.1, 4.2, 4.3, 4.4) в машинном коде данная команда представлена одним байтом. В двоичном виде машинные коды примеров 4.1, 4.2, 4.3, 4.4 будут иметь вид:
1111 0110 |
для примера 4.1 |
1111 0110 |
для примера 4.2 |
1111 0110 |
для примера 4.3 |
1111 0111 |
для примера 4.4 |
Старшие семь бит являются кодом команды, а младший бит – адресом (номером регистра, который используется в качестве указателя на ячейку памяти данных).
Этот пример иллюстрирует – первый операнд указан в виде косвенно-регистровой адресации. Данный способ называется косвенно-регистровый: косвенно – т.к. адрес получателя информации задан косвенно (адрес ячейки памяти содержится в регистре) и регистровый – т.к. указатель задан неявно (номер регистра, выступающего в роли указателя находится в памяти программ непосредственно в коде команды).
Этот способ адресации позволяет получить более короткий код программы при работе с
массивами, организовав цикл. |
|||||
Пример №5 |
00 |
NOP |
|||
0000 |
DPTR,#01A0H |
;Запись в DPTR знач. 1A0H |
|||
0001 |
9001A0 |
MOV |
|||
0004 |
7405 |
MOV |
A,#05H |
;Запись в A значения 05H |
|
0006 |
93 |
MOVC |
A,@A+DPTR |
;Пример 5.1 |
|
0007 |
7464 |
MOV |
A,#64H |
;Запись в A значения 64H |
|
4 |
|||||
0009 |
83 |
MOVC |
A,@A+PC |
;Пример 5.2 |
000D |
00 |
NOP |
Для наглядности примера 5.1 изначально в регистр DPTR загружено значение 01A0Н, в аккумулятор – 05H.
- примере 5.1 значение из ячейки памяти программ, адрес которой определяется как сумма значений находящихся в регистре DPTR и аккумуляторе A пересылается в аккумулятор. В результате выполнения команды значение из ячейки памяти программ с адресом 01A5H (т.к. 01A0H + 05H = 01A5H) будет переслано в аккумулятор.
Для наглядности примера 5.2 изначально в аккумулятор загружено значение 64Н.
- примере 5.2 значение из ячейки памяти программ, адрес которой определяется как сумма значений находящихся в счетчике команд PC и аккумуляторе A пересылается в аккумулятор. В результате выполнения команды значение из ячейки памяти программ с адресом 006DH (т.к. 0009H + 64H = 006DH) будет переслано в аккумулятор.
Примеры 5.1 и 5.2 демонстрируют косвенно-регистровую адресацию по сумме базового и индексного регистров. В качестве базового регистра может выступать регистр DPTR или счетчик команд PC, а в качестве индексного регистра – аккумулятор A.
Косвенно-регистровая адресация по сумме базового и индексного регистров позволяет осуществлять выбор данных (констант) из таблиц, размещенных в памяти программ.
Пример №6.
Данный пример демонстрирует синтаксис, обеспечивающий различные способы адресации.
0000 |
00 |
NOP |
R0,#5CH |
;Пример 6.1 |
|
0001 |
785C |
MOV |
|||
0003 |
A85C |
MOV |
R0,5CH |
;Пример 6.2 |
|
0005 |
A65C |
MOV |
@R0,5CH |
;Пример 6.3 |
|
0007 |
765C |
MOV |
@R0,#5CH |
;Пример 6.4 |
|
000D |
00 |
NOP |
Пример 6.1 – значение 5CH пересылается в регистр R0.
Пример 6.2 – значение из ячейки памяти данных с адресом 5CH пересылается в регистр R0. Пример 6.3 – значение из ячейки памяти данных с адресом 5CH пересылается в ячейку
памяти данных, адрес которой находится в регистре R0.
Пример 6.4 – значение 5CH пересылается в ячейку памяти данных, адрес которой находится в регистре R0.
ПРИМЕЧАНИЕ: Для полного изучения команд пересылок и способов адресации операндов необходимо самостоятельно рассмотреть выполнение команд:
MOV <байт-назначения>,<байт-ис
MOV <бит назначения>,<бит источника>
MOV DPTR,#datal6
MOVC A,@A+(<R16>)
MOVX <байт приемника>,<байт источника>
Выполнение работы.
- Изучить команды, в выше приведенных примерах.
- Разработать алгоритм программы в соответствии с заданием.
- Создать проект и разработать программное обеспечение в соответствии с алгоритмом.
- Произвести отладку и проверку работы программного обеспечения.
- Продемонстрировать работу программы преподавателю.
- Подготовить и оформить отчет.
Содержание отчета:
- тема работы;
5
- цель работы;
- задание;
- алгоритм программы (программного обеспечения) в виде блок-схемы или графа;
- исходный текст программного обеспечения;
- выводы о выполненной работе.
6
ПРИЛОЖЕНИЕ А
Мнемонические обозначения команд микроконтроллеров серии MCS-51 и их функциональное назначение
Команда |
Операнды |
Функция команды |
ACALL |
<addr 11> |
абсолютный вызов |
подпрограммы | ||
ADD |
А,<байт-источник> |
сложение |
ADDC |
A,<байт-источник> |
сложение с переносом |
AJMP |
<addr11> |
абсолютный переход |
ANL |
<байт-назначения>,<байт-источн |
логическое "И" |
ANL |
С,<бит источника> |
логическое "И" для переменных- |
битов | ||
CJNE |
<байт-назначения>,<байт-источн |
сравнение и переход, если не |
равно | ||
CLR |
A |
сброс аккумулятора |
CLR |
<bit> |
сброс бита |
CPL |
А |
инверсия аккумулятора |
CPL |
<bit> |
инверсия бита |
DA |
А |
десятичная коррекция |
аккумулятора для сложения | ||
DEC |
<байт> |
декремент |
DIV |
АВ |
деление |
DJNZ |
<байт>, < смещение > |
декремент и переход, если не |
равно нулю | ||
INC |
<байт> |
Инкремент |
INC |
DPTR |
инкремент указателя данных |
JB |
<bit>,<rel8> |
переход, если бит установлен |
JBC |
<bit>,<rel8> |
переход, если бит установлен и |
сброс этого бита | ||
JC |
<rel8> |
переход, если перенос |
установлен" | ||
JMP |
@A+DPTR |
косвенный переход |
JNB |
<bit>,<rel8> |
переход, если бит не установлен |
JNC |
<rel8> |
переход, если перенос не |
установлен | ||
JNZ |
<ге18> |
переход, если содержимое |
аккумулятора не равно нулю | ||
JZ |
<ге18> |
переход, если содержимое |
аккумулятора равно нулю | ||
LCALL |
<addrl6> |
длинный вызов |
LJMP |
<addrl6> |
длинный переход |
MOV |
<байт-назначения>,<байт-источн |
переслать переменную-байт |
MOV |
<бит назначения>,<бит источника> |
переслать бит данных |
MOV |
DPTR,#datal6 |
загрузить указатель данных 16- |
битовой константой | ||
MOVC |
A,@A+(<R16>) |
переслать байт из памяти |
программ | ||
MOVX |
<байт приемника>,<байт источника> |
переслать во внешнюю память |
(из внешней памяти) данных |
7
Команда |
Операнды |
Функция команды |
MUL |
АВ |
умножение |
NOP |
нет операции | |
ORL |
<байт назначения>,<байт источника> |
логическое "ИЛИ |
ORL |
С,<бит источника> |
логическое "ИЛИ" для |
переменных-битов | ||
POP |
<direct> |
чтение из стека |
PUSH |
<direct> |
запись в стек |
RET |
возврат из подпрограммы | |
RETI |
возврат из прерывания | |
RL |
A |
сдвиг содержимого аккумулятора |
влево | ||
RLC |
А |
сдвиг содержимого аккумулятора |
влево через флаг переноса | ||
RR |
А |
сдвиг содержимого аккумулятора |
вправо | ||
RRC |
A |
сдвиг содержимого аккумулятора |
вправо через флаг переноса | ||
SETB |
<бит> |
установить бит |
SJMP |
<rel8> |
короткий переход |
SUBB |
А,<байт источника> |
вычитание с заемом |
SWAP |
A |
обмен тетрадами внутри |
аккумулятора | ||
XCH |
А,<байт> |
обмен содержимого |
аккумулятора с переменной- | ||
байтом | ||
ХCНD |
А,@Ri |
обмен тетрадой |
XRL |
Байт назначения>,<байт источника> |
логическое "ИСКЛЮЧАЮЩЕЕ |
ИЛИ" для переменных-байтов |
8
ПРИЛОЖЕНИЕ В
Варианты заданий для индивидуального выполнения. Вариант задания №1.
- Сформировать массив констант (37Н, 25H, 100, 50, 77H, 5EH, DFH, 7CH) в памяти программ с адреса 00Е0Н.
- Создать программу, которая последовательно выполнит следующие действия:
- занесение в аккумулятор значения 55H;
- занесение в регистр R7 значения 40H;
- осуществит пересылку значения из аккумулятора в ячейку памяти данных с адресом 30H (используя прямую адресацию);
- осуществит пересылку значения из аккумулятора в ячейки памяти данных с адресом от 35H до 38H (используя косвенно-регистровую адресацию);
- осуществит пересылку значения из ячейки памяти данных с адресом 30H в регистр R0 (используя прямую адресацию);
- осуществит пересылку значения из аккумулятора в ячейку памяти данных по адресу, находящемуся в регистре R0;
- осуществит пересылку из ячейки памяти программ с адресом 00E2H в регистр B;
Вариант задания №2.
- Сформировать массив констант (78Н, 22, 100, 50H, 200, 62H, 8FH, DCH) в памяти программ с адреса 00F0Н.
- Создать программу, которая последовательно выполнит следующие действия:
- занесение в регистр B значения 50;
- занесение в регистр R3 значения 40H;
- осуществит пересылку значения из регистра B в ячейку памяти данных с адресом 3AH (используя прямую адресацию);
- осуществит пересылку из ячейки памяти программ с адресом 00F4H в регистр B;
- осуществит пересылку значения из регистра R3 в регистр R1.
- осуществит пересылку значения из регистра B в аккумулятор.
- осуществит пересылку значения из аккумулятора в ячейки памяти данных с адресом от 20H до 23H (используя косвенно-регистровую адресацию);
- осуществит пересылку значения из ячейки памяти данных с адресом 3AH в регистр R0 (используя прямую адресацию);