Лабораторная работа № 2
Цель работы: изучение организации микроконтроллера Intel 8051, программных средств управления ходом выполнения программы, приобретение навыков программирования циклических алгоритмов, а также программирования арифметико-логических и битовых операций в кодах микроконтроллера.
1. ПРОСТРАНСТВО ПАМЯТИ ПРОГРАММ CSEG.
Для хранения программ и неизменяемых данных в МК 1816ВЕ51 используется логическое однородное линейное пространство памяти CSEG объемом 64 Кбайт. Память программ адресуется 16-разрядным счетчиком РС. Младшие 4 Кбайта этого пространства соответствует встроенному EPROM микроконтроллера, остальные 60 Кбайт реализуются внешними относительно МК схемами.
В пространстве CSEG выделяются следующие точки (адреса):
0000Н - RESET - стартовый адрес при сбросе системы;
0003H - EXTI0 - внешнее прерывание 0;
000BH - TIMER0 - прерывание таймера/счетчика 0;
0013H - EXTI1 - внешнее прерывание 1;
001BH - TIMER1 - прерывание таймера / счетчика 1;
0023H - SINT - прерывание последовательного порта.
В CSEG определены два способа передачи управления:
1) прямая адресация с помощью 16-разрядного прямого адреса ad16;
2) относительная адресация, имеющая два варианта: с помощью 8-разрядного смещения (целое двоичное со знаком) относительно РС [(A)+(PC)] или DPTR [(A)+(DPTR)].
Для двух команд (AJMP, ACALL) предусмотрена страничная адресация в CSEG, с помощью 11-разрядного адреса ad11. В этом случае 8 младших разрядов адреса располагаются во втором байте команды, а 3 старших – в трех старших разрядах первого байта команды:
Номер страницы задается пятью старшими разрядами программного счетчика РС.
Необходимо подчеркнуть также, что в группе пересылки существуют специальные команды MOVC A,@A+DPTR и MOVC A,@A+PC, которые позволяют считывать содержимое памяти программ. Как правило, эта возможность используется для организации таблиц констант в CSEG.
2. КОМАНДЫПЕРЕДАЧИ УПРАВЛЕНИЯ.
Группу команд передачи управления образуют команды безусловного перехода, безусловного перехода, команды вызова подпрограмм и команды возврата из подпрограммы.
В большинстве команд используется прямая адресация. Характеристики команд приведены в табл. 2.1.
Таблица 2.1. Группа команд передачи управления
№ | МНЕМОНИКА | КОП | Б | Ц | ОПЕРАЦИЯ |
1. | LJMP ad16 | (PC):= ad16 | |||
2. | AJMP ad11 | aaa00001 | (PC):= (PC) + 2; (PC[10-0]):= ad11 | ||
3. | SJMP rel | (PC):= (PC) + 2; (PC):= (PC) + rel | |||
4. | JMP @A+DPTR | (PC):= (A) + (DPTR) | |||
5. | JZ rel | (PC):= (PC) + 2; если (A) == 0 то (PC):= (PC)+rel | |||
6. | JNZ rel | (PC):= (PC) + 2; если (A)!= 0 то (PC):= (PC)+rel | |||
7. | JC rel | (PC):= (PC) + 2; если (C) == 1 то (PC):= (PC)+rel | |||
8. | JNC rel | (PC):= (PC) + 2; если (C) == 0 то (PC):= (PC)+rel | |||
9. | JB bit, rel | (PC):= (PC) + 3; если (b) == 1 то (PC):= (PC)+rel | |||
10. | JNB bit,rel | (PC):= (PC) + 3; если (b) == 0 то (PC):= (PC)+rel | |||
11. | JBC bit, rel | (PC):= (PC) + 3; если (b) == 1 то (PC):= (PC)+rel, (b):=0 | |||
12. | DJNZ Rn, rel | 11011rrr | (PC):= (PC)+ 2, (Rn):= (Rn) - 1; если (Rn)!= 0, то (PC):= (PC)+rel | ||
13. | DJNZ ad, rel | (PC):= (PC)+ 3, (ad):= (ad) - 1; если (ad)!= 0, то (PC):= (PC)+rel | |||
14. | CJNZ A, ad, rel | (PC):= (PC)+ 3; если (A)!= ad, то (PC):= (PC)+rel; если (А)<(ad), то (С):=1, иначе (С):= 0; | |||
15. | CJNE A, #d, rel | (PC):= (PC)+ 3; если (A)!= #d, то (PC):= (PC)+rel; если (А)<(#d), то (С):=1, иначе (С):= 0; | |||
16. | CJNZ Rn, #d, rel | 10111rrr | (PC):= (PC)+ 3; если (Rn)!= #d, то (PC):= (PC)+rel; если (Rn)<(ad), то (С):=1, иначе (С):= 0; | ||
17. | CJNZ @Ri, #d, rel | 1011011i | (PC):= (PC)+ 3; если ((Ri))!= #d, то (PC):= (PC)+rel; если ((Ri))<(#d), то (С):=1, иначе (С):= 0; | ||
18. | LCALL ad16 | (PC):= (PC)+3, (SP):= (SP) + 1 ((SP)):= (PCL), (SP):= (SP)+1 ((SP)):= (PCH), (PC):= ad16 | |||
19. | ACALL ad11 | aaa10001 | (PC):= (PC)+2, (SP):= (SP) + 1 ((SP)):= (PCL), (SP):= (SP)+1 ((SP)):=(PCH), (PC[0-10]):= ad11 | ||
20. | RET | (PCH):=((SP)), (SP):= (SP) + 1, (PCL):= ((SP)), (SP):= (SP) -1 | |||
21. | RETI | (PCH):=((SP)), (SP):= (SP) + 1, (PCL):= ((SP)), (SP):= (SP) -1 | |||
22. | NOP | (PC):= (PC) + 1 |
3. АРИФМЕТИКО-ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Команды данной группы позволяют выполнять следующие операции над 8-битными целыми двоичными числами: сложение, сложение с учетом переноса, десятичную коррекцию, инкремент и декремент, вычитание, умножение, деление, дизъюнкцию, конъюнкцию, исключающее ИЛИ, инверсию, сброс и сдвиг. Описание команд приведено в табл. 3.1, 3.2 и на рис. 3.1. В табл. 3.3 приведены условия установки и сброса флагов.
Признак паритета Р изменяется любыми командами, результат которых изменяет аккумулятор (включая команды пересылки).
Таблица 3.1. Группа команд арифметических операций
N | МНЕМОНИКА | КОП | Б | Ц | ОПЕРАЦИЯ |
1. | ADD A,Rn | 00101rrr | (A):=(A)+(Rn) | ||
2. | ADD A,ad | (A):=(A)+(ad) | |||
3. | ADD A,@Ri | 0010011I | (A):=(A)+((Ri)) | ||
4. | ADD A,#d | (A):=(A)+#d | |||
5. | ADDC A,Rn | 00111rrr | (A):=(A)+(Rn)+(C) | ||
6. | ADDC A,ad | (A):=(A)+(ad)+(C) | |||
7. | ADDC A,@Ri | 0011011I | (A):=(A)+((Ri))+(C) | ||
8. | ADDC A,#d | (A):=(A)+#d+(C) | |||
9. | DA A | Десятичная коррекция | |||
10. | SUBB A,Rn | 10011rrr | (A):=(A)-(С)-(Rn) | ||
11. | SUBB A,ad | (A):=(A)-(С)-(ad) | |||
12. | SUBB A,@Ri | 1001011I | (A):=(A)-(С)-((Ri)) | ||
13. | SUBB A,#d | (A):=(A)-(С) - #d | |||
14. | INC A | (A):=(A)+1 | |||
15. | INC Rn | 00001rrr | (Rn):=(Rn)+1 | ||
16. | INC ad | (ad):=(ad)+1 | |||
17. | INC @Ri | 0000011i | ((Ri)):=((Ri))+1 | ||
18. | INC DPTR | (DPTR):=(DPTR)+1 | |||
19. | DEC A | (A):=(A)-1 | |||
20. | DEC Rn | 00011rrr | (Rn):=(Rn)-1 | ||
21. | DEC ad | (ad):=(ad)-1 | |||
22. | DEC @Ri | 0001011i | ((Ri)):=((Ri))-1 | ||
23. | MUL AB | (B)(A):= (A)*(B) | |||
24. | DIV AB | (B).(A):= (A)/(B) |
Таблица 3.2. Группа команд логических операций
МНЕМОНИКА | КОП | Б | Ц | ОПЕРАЦИЯ | |
1. | ANL A,Rn | 01011rrr | (A):=(A)/\(Rn) | ||
2. | ANL A,ad | (A):=(A)/\(ad) | |||
3. | ANL A,@Ri | 0101011i | (A):=(A)/\((Ri)) | ||
4. | ANL A,#d | (A):=(A) /\ #d | |||
5. | ANL ad,A | (ad):=(ad)/\(A) | |||
6. | ANL ad,#d | (ad):=(ad)/\(#d) | |||
7. | ORL A,Rn | 01001rrr | (A):=(A)\/(Rn) | ||
8. | ORL A,ad | (A):=(A)\/(ad) | |||
9. | ORL A,@Ri | 0100011i | (A):=(A)\/((Ri)) | ||
10. | ORL A,#d | (A):=(A)\/ #d | |||
11. | ORL ad,A | (ad):=(ad)\/(A) | |||
12. | ORL ad,#d | (ad):=(ad)\/ #d | |||
13. | XRL A,Rn | 01101rrr | (A):=(A)+(Rn) | ||
14. | XRL A,ad | (A):=(A)+(ad) | |||
15. | XRL A,@Ri | 0110011i | (A):=(A)+((Ri)) | ||
16. | XRL A,#d | (A):=(A)+ #d | |||
17. | XRL ad,A | (ad):=(ad)+(A) | |||
18. | XRL ad,#d | (ad):=(ad)+ #d | |||
19. | CLR A | (A):=0 | |||
20. | CPL A | (A):= инверсия (А) | |||
21. | RL A | Влево циклически (рис. а) | |||
22. | RLC A | Влево через С (рис. б) | |||
23. | RR A | Вправо циклически (рис. в) | |||
24. | RRC A | Вправо через С (рис. г) | |||
25. | SWAP A | Обмен тетрадами (рис. д) |
Таблица 3.3. Установка признаков (флагов)
МНЕМОНИКА | CY | OV | AC | МНЕМОНИКА | CY | OV | AC |
ADD | + | + | + | CLR C | - | - | |
ADDC | + | + | + | CPL C | + | - | - |
SUBB | + | + | + | ANL C,bit | + | - | - |
MUL | + | - | ANL C, / bit | + | - | - | |
DIV | + | - | ORL C,bit | + | - | - | |
DA | + | - | - | ORL C, / bit | + | - | - |
RRC | + | - | - | MOV C, bit | + | - | - |
RLC | + | - | - | CJNE | + | - | - |
SET C | - | - |
(+) - изменяется
(-) - не изменяется
Организация сдвигов
Рис. 3.1. Типы сдвигов данных
4. КОМАНДЫРАБОТЫС БИТОВЫМИ ДАННЫМИ
Данная группа команд оперирует с однобитными операндами. В качестве операндов могут выступать отдельные биты некоторых регистров специальных функций, биты портов и биты 16 ячеек внутренней памяти данных. Все адресуемые биты образуют одноразрядное линейно упорядоченное пространство BSEG емкостью 256 бит.
В пространстве BSEG используется только прямая адресация, прямой восьмиразрядный адрес в пространстве BSEG обозначается bit.
Адресация в пространстве BSEG иллюстрируется табл. 4.1.
Группа команд операций с битами (табл. 4.2) включает 6 операций: три одноместных операции: установки (CLR), сброса (SETB) и инверсии (CPL), две двухместных операции: конъюнкции и дизъюнкции, и операцию пересылки. В качестве "аккумулятора" в битовых операциях используется триггер (флаг) переноса С. Характеристики битовых команд приведены в табл. 4.2.
Таблица 4.1. Адресация в пространстве BSEG
Адрес в пространстве DSEG | Разряд ячейки внутренней памяти данных | |||||||
0F | 0E | 0D | 0C | 0B | 0A | |||
1F | 1E | 1D | 1C | 1B | 1A | |||
2F | 2E | 2D | 2C | 2B | 2A | |||
3F | 3E | 3D | 3C | 3B | 3A | |||
4F | 4E | 4D | 4C | 4B | 4A | |||
2A | ||||||||
2B | 5F | 5E | 5D | 5C | 5B | 5A | ||
2C | ||||||||
2D | 6F | 6E | 6D | 6C | 6B | 6A | ||
2E | ||||||||
2F | 7F | 7E | 7D | 7C | 7B | 7A |
Регистры специального назначения
Адрес в пространстве DSEG | Разряд регистра специального назначения | Регистр | |||||||
PO | |||||||||
8F | 8E | 8D | 8C | 8B | 8A | TCON | |||
P1 | |||||||||
9F | 9E | 9D | 9C | 9B | 9A | SCON | |||
A0 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | P2 |
A8 | AF | -- | -- | AC | AB | AA | A9 | A8 | IE |
B0 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | P3 |
B8 | -- | -- | -- | BC | BB | BA | B9 | B8 | IP |
D0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | PSW |
E0 | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | A |
F0 | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | B |
Таблица 4.2. Группа команд операций с битами
№ | МНЕМОНИКА | КОП | Б | Ц | ОПЕРАЦИЯ | |
1. | CLR | C | (C):=0 | |||
2. | CLR | bit | (b):=0 | |||
3. | SET | C | (C):=1 | |||
4. | SET | bit | (b):=1 | |||
5. | CPL | C | (C):= ~ C | |||
6. | CPL | bit | (b):= ~ (b) | |||
7. | ANL | C,bit | (C):=(C)/\(b) | |||
8. | ANL | C,/bit | (C):=(C)/\~(b) | |||
9. | ORL | C,bit | (C):=(C)\/(b) | |||
10. | ORL | C,/bit | (C):=(C)\/~(b) | |||
11. | MOV | C,bit | (C):=(b) | |||
12. | MOV | bit,C | (b):=(C) |
~ -- инверсия
5. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Пусть в памяти программ, начиная с ячейки ADR2, расположена таблица кодов Z длиной N.
- записать в кодах МК программу, которая выполняет пересылку данного массива в RAM, начиная с адреса ADR3. Программа должна начинаться с ячейки ADR1;
- после пересылки массива вычислить значение функции F1, исходными данными для которой являются элементы исходного массива;
- вычислить значение битовой функции F2, исходными данными для которой являются разряды значения функции F1. Результат поместить в бит с порядковым номером, который соответствует номеру варианта.
Таблица 5.1. Таблица вариантов заданий
НОМЕР | ADR1 | ADR2 | N | ADR3 |
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 | |
4D2 | 2E1 | E | ||
E | 4F | |||
15F | 5D3 | F | 3F | |
3C6 | 5C |
Коды данных соответствуют ASCII-символам фамилии, имени и отчества студента.
Таблица 5.2. Алгоритм вычисления функции F1
Вид функции F2 для вычисления определяется следующим образом. Значение F1 имеет формат (поразрядно)
X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 |
F2 = (X7) OP1 (X6) OP2 (X5) OP3 (X4) OP4 (X3) OP5 (X2) OP6 (X1) OP7 (X0),
где OPi - булева операция, находится в таблице 5.3.
Таблица 5.3. Таблица операций
Z | ||||||||||
OP1 | Ù | Ù | Ù | Ù | Ù | Ú | Ú | Ú | Ú | Ú |
OP2 | Å | Å | Å | Ù | Ù | Ù | Ú | Ú | Ú | Ú |
OP3 | Ú | Ú | Ú | Å | Å | Å | Å | Ú | Å | Ù |
OP4 | Å | Å | Ú | Ù | Ú | Ù | Ù | Ù | Ú | Ú |
OP5 | Ù | Ù | Ú | Ú | Ú | Å | Å | Å | Å | Å |
OP6 | Å | Ú | Ù | Ú | Ù | Ù | Å | Å | Ù | Ù |
OP6 | Ú | Å | Å | Å | Å | Å | Ú | Ù | Å | Ù |
/\ - операция И
\/ - операция ИЛИ
+ - операция ИСКЛЮЧАЮЩЕЕ ИЛИ
6. СОДЕРЖАНИЕ ОТЧЕТА:
- определение варианта задания по лабораторной работе:
для табл. 5.1.: N – выдается преподавателем;
для табл. 5.2.: левая часть: (N*3) mod 10;
правая часть: (N*7) mod 10;
для табл. 5.3.: (N*13) mod 10;
- задание по лабораторной работе;
- подробная блок-схема алгоритма решения поставленной задачи;
- контрольный просчет;
- текст программы с подробными комментариями.
7. ФРАГМЕНТЫВЫПОЛНЕНИЯ ЗАДАНИЯ
В памяти команд с адреса ADR1 расположено N кодов. Необходимо переписать их в память данных, начиная с адреса ADR2.
Текст программы:
MET1: MOV PSW, #00; Выбор банка Bank0
… MOV DPTR, <ADR1 – 1>; Указатель на память программы
… MOV R0, <ADR2 + N – 1>; Указатель на память данных
… MOV R1, <N>; Количество элементов массива
MET2: MOV A, R1; Индекс текущего элемента массива
… MOVC A, @A+DPTR; Получение элемента в А
… MOV @R0, A; Пересылка в память данных
… DEC R0; Уменьшение индекса
… DJNZ R1, MET2; Организация цикла
… NOP
Пусть в памяти данных, начиная с ячейки ADR1, расположен массив кодов длиной N. Необходимо вычислить сумму четных значений элементов этого массива, результат поместить в ячейки RAM с адресами ADR2, ADR2+1 (старший и младший байты соответственно).
Текст программы:
MET1: MOV PSW, #00; Выбор банка Bank0
… MOV R2, <N>; Количество элементов массива
… MOV R0, <ADR1>; Указатель на память данных
… CLR A; Очистка А
… MOV R3, A; Очистка младшей части суммы
… MOV R4, A; Очистка старшей части суммы
MET2: MOV A, @R0; Получение первого элемента
… JB A.0, MET3; Если младший бит = 0, число четное
… ADD A, R3; Подсчет суммы
… MOV R3, A; Сохранение младшей части суммы
… JNC MET3; Если не было переноса à след. элемент
… INC R4; Инкремент старшей части суммы
MET3: INC R0; Сдвиг указателя на след. элемент
… DJNZ R2, MET2; Организация цикла
… MOV <ADR2>, R4; Сохранение старшей
… MOV <ADR2 + 1>, R3; и младшей частей результата
Пусть в DSEG, в ячейке ADR1 расположен код CODE. Записать в кодах МК Intel 8051 программу, которая выполняет вычисление заданной булевой функции F=X4 Ù ~X3 Ú X0 над этими кодами. Результат вычислений должен быть записан по адресу ADR2 пространства BSEG.
Внимание! Не забывайте о приоритетах логических операций!!!
Текст программы:
MET1: MOV 20, <ADR1>; Если ADR1 за пределами BSEG
… MOV C, 20.4; С = X4
… ANL C, /20.3; C = X4 Ù ~X3
… ORL C, 20.0; C = X4 Ù ~X3 Ú X0
… MOV <ADR2>, C; Запись результата
ЗАМЕЧАНИЕ:
Эмулятор FD51 неверно обрабатывает битовую команду MOV:
Пусть С = 1, а в ячейке 2D значение 1111 1111.
Выполнив команду MOV 2D.6, C, в ячейке получаем 0100 0000.