КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ, ОРГАНИЗАЦИЯ ЦИКЛОВ, АРИФМЕТИЧЕСКИХ, ЛОГИЧЕСКИХ, БИТОВЫХ ОПЕРАЦИИ




Лабораторная работа № 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.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: