Лабораторная работа
Тема: Команды передачи управления. Организация циклов
Цель работы: изучение организации пространства памяти программ микроконтроллера МК51, программных средств управления ходом выполнения программы, приобретение навыков программирования циклических алгоритмов в кодах микроконтроллера.
Оборудование: персональный компьютер
Программное обеспечение: операционная система, программа отладчик для МК51
Общие положения.
Пространство памяти программ CSEG
Для хранения программ и неизменяемых данных в МК51 используется логическое однородное линейное пространство памяти CSEG объемом 64 Кбайт. Память программ адресуется 16‑разрядным счетчиком PC. Младшие 4 Кбайт этого пространства соответствуют встроенному EPROM микроконтроллера, остальные 60 Кбайт реализуются внешними, относительно МК, схемами.
В пространстве CSEG выделяются следующие точки (адреса):
· 0000H - RESET - стартовый адрес при сбросе системы;
· 0003H - EXTI0 - внешнее прерывание 0;
· 000BH - TIMER0 - прерывание таймера/счетчика 0;
· 0013H - EXTI1 - внешнее прерывание 1;
· 001BH - TIMER1 - прерывание таймера/счетчика 1;
· 0023H - SINT - прерывание последовательного порта;
· 002BH - TIMER2 - прерывание таймера 2 (для MCS 52).
В CSEG определены два способа передачи управления:
1. прямая адресация с помощью 16-разрядного прямого адреса ad16;
2. относительная адресация, имеющая два варианта: с помощью 8 разрядного смещения rel (целое двоичное со знаком) относительно PC, или с помощью содержимого аккумулятора @A относительно PC [(A)+(PC)] или DPTR [(A)+(DPTR)].
Для двух команд (AJMP, ACALL) предусмотрена страничная адресация в CSEG, c помощью 11‑разрядного адреса ad11. В этом случае 8 младших разрядов адреса располагаются во втором байте команды, а 3 старших - в трех старших разрядах первого байта команды:
А | А | А | КОП | А | А | А | А | А | А | А | А | |||||
Номер страницы задается пятью старшими разрядами программного счетчика PC. Необходимо подчеркнуть также, что в группе пересылки существуют специальные команды MOVC A,@A+DPTR и MOVC A,@A+PC, которые позволяют считывать содержимое памяти программ. Как правило, эта возможность используется для организации таблиц констант в CSEG.
Команды передачи управления.
Группу команд передачи управления образуют команды безусловного перехода, условного перехода, команды вызова подпрограмм и команды возврата из подпрограммы. В большинстве команд используется прямая адресация. Характеристики команд приведены в таблице 1.
Таблица 1. Группа команд передачи управления.
Мнемоника | Код операции | Байт | Циклов | Операция |
LJMP ad16 | (PC):= ad16 | |||
AJMP ad11 | aaa00001 | (PC):= (PC)+2, (PC[0-10]):=ad11 | ||
SJMP rel | (PC):= (PC)+2, (PC):= (PC)+rel | |||
JMP @A+DPTR | (PC):= (A)+(DPTR) | |||
JZ rel | (PC):= (PC)+2; если(A)==0, то (PC):=(PC)+rel | |||
JNZ rel | (PC):= (PC)+2; если(A)!=0, то (PC):=(PC)+rel | |||
JC rel | (PC):= (PC)+2; если(C)==1, то (PC):=(PC)+rel | |||
JNC rel | (PC):= (PC)+2; если(C)==0, то (PC):=(PC)+rel | |||
JB bit,rel | (PC):= (PC)+3; если(bit)==1, то (PC):=(PC)+rel | |||
JNB bit,rel | (PC):= (PC)+3; если (bit)==0, то (PC):=(PC)+rel | |||
JBC bit,rel | (PC):= (PC)+3; если(bit)==1,то (PC):=(PC)+rel,(b):=0 | |||
DJNZ Rn,rel | 11011rrr | (PC):=(PC)+2, (Rn):=(Rn)-1; если (Rn)!=0, то (PC):=(PC)+rel | ||
DJNZ ad,rel | (PC):=(PC)+3, (ad):=(ad)-1; если (ad)!=0, то (PC):=(PC)+rel | |||
CJNE A,ad,rel | (PC):=(PC)+3, если (A)!=(ad), то(PC):=(PC)+rel; если (A)<(ad), то (С):=1, иначе (C):=0; | |||
CJNE A,#d,rel | (PC):=(PC)+3, если (A)!= #d, то(PC):=(PC)+rel; если (A)< #d, то (С):=1, иначе (C):=0; | |||
CJNE Rn,#d,rel | 10111rrr | (PC):=(PC)+3, если (Rn)!= #d, то(PC):=(PC)+rel; если (Rn):=(ad),то(С):=1, иначе C):=0; | ||
CJNE @Ri,#d,rel | 1011011i | (PC):=(PC)+3, если ((Ri))!= #d, то(PC):=(PC)+rel; если ((Ri))< #d,то(С):=1, иначе(C):=0; | ||
LCALL ad16 | (PC):=(PC)+3, (SP):=(SP)+1, ((SP)):=(PCL), (SP):=(SP)+1. ((SP)):=(PCH), (PC):=ad16 | |||
ACALL ad11 | aaa10001 | (PC):= (PC)+2,(SP):=(SP)+1, ((SP)):=(PCL), (SP):=(SP)+1, ((SP)):=(PCH), (PC[0-10])-=ad11 | ||
RET | (PCH):=((SP)),(SP):=(SP)-1, (PCL):=((SP)),(SP):=(SP)-1, | |||
RETI | (PCH):=((SP)),(SP):=(SP)-1, (PCL):=((SP)),(SP):=(SP)-1, | |||
NOP | (PC):=(PC)+1 |
Задание для домашней подготовки.
1. Повторить основные узлы МК51;
2. Повторить форматы данных и команд МК51;
3. Повторить способы адресации данных МК51;
4. Повторить команды передачи управления МК51;
Порядок выполнения работы.
1. Ознакомиться с заданием и проанализировать его.
2. Составить программу согласно заданию в кодах МК51.
3. Набрать текст составленной программы в текстовом редакторе отладчика.
4. Выполнить трансляцию программы (в случае возникновения ошибок исправить их).
5. Выполнить пошаговое выполнение программы и убедиться в правильности ее работы (в случае неправильности внести исправления в текст программы и повторить п.4-5)
Задание по лабораторной работе.
Пусть в памяти программ, начиная с ячейки ADR2, расположена таблица кодов длиной N. Записать на языке ассемблера МК51 программу, которая выполняет пересылку данного массива в RAM, начиная с адреса ADR3. Программа должна начинаться с ячейки ADR1.
Таблица 2. Таблица вариантов заданий
Номер | ADR1 | ADR2 | N | ADR3 |
E | 4F | |||
62F | F | |||
53E | D | |||
44A | C | |||
B | ||||
A | 3D | |||
4F | ||||
78A | 3A | |||
69D | F | 4C | ||
5AF | E | |||
4BA | ||||
3C9 | ||||
2D8 | 3A1 | 4C | ||
1E4 | 4B2 | 6C | ||
7F5 | 5C2 | 6F | ||
6E6 | 6D2 | 3A | ||
5A1 | 7E2 | F | 4A | |
4D3 | 1F2 | A | 5B | |
3C8 | 2E2 | B | 3B | |
26F | 3D2 | C | 4B | |
4BE | D | |||
3CA | E | |||
2D3 | 3A2 | F | ||
1E7 | 4B2 | |||
7F3 | 5C2 | 3D | ||
6E5 | 6D2 | |||
5AD | 7E4 | C | 3E |
Коды данных задаютcя первыми N символами ФИО студента
Содержание отчета
ü Задание по лабораторной работе;
ü Блок-схема алгоритма программы;
ü Текст программы с комментариями;
ü Ответы на вопросы:
- Описать способы адресации микроконтроллера i8051.
- Дать краткую характеристику команд передачи управления для микроконтроллера i8051.
Пример выполнения задания.
В памяти команд с адреса ADR2=0D80 расположено N=0Ch, шестнадцатеричных кодов:
FFh, 00h, 11h, 22h, 33h, 44h, 55h, 66h, 77h, 88h, 99h, AAh
Необходимо переписать их в память данных, начиная с адреса ADR3=65h. Программа должна начинаться с адреса ADR1=0F00h.
org 0
jmp Start; переход на начало программы
org 0D80h; организация массива в памяти программ
db 0FFh,00h,11h,22h,33h,44h,55h,66h,77h,88h,99h,0АAh
org 0F00h; начало программы
Start:
mov DPTR,#0D80h; база массива в памяти программ
mov R0,#65h; база массива в ОЗУ
mov R2,#0Ch; число циклов
mov R3,#0; индекс элемента массива
cycle:
mov A,R3; номер извлекаемого элемента массива
movc A,@A+DPTR; извлечение элемента из массива
mov @R0,A; запись элемента в ОЗУ
inc R3; переход к следующему элементу в ПЗУ
inc R0; переход к следующему элементу в ОЗУ
djnz R2,cycle; если не все элементы процесс повтори
jmp $; останов программы
end