Файл: Команды передачи управления. Организация циклов.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 142

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИФедеральное государственное бюджетное образовательное учреждениевысшего образования«Тверской государственный технический университет»(ТвГТУ)Факультет Информационных ТехнологийКафедра ЭВМОтчёт к лабораторной работе № 2по дисциплине: «Проектирование специализированных компьютерных систем»на тему: «Команды передачи управления. Организация циклов»Выполнил: студент группыБ.ИВТ.ВМКСС-19.03Макаров М.К.Принял: Филиппов Р.Н.Тверь, 2023Цель работыИзучение организации пространства памяти программ микроконтроллера КМ1816ВЕ51, программных средств управления ходом выполнения программы, приобретение навыков программирования циклических алгоритмов в кодах микроконтроллера.ЗаданиеВариант №18

НОМЕР

ADR1

ADR2

N

ADR3

 14

4D3

1F2

A

5B
Часть 1:Пусть в памяти программ, начиная с ячейки ADR2, расположена таблица кодов длиной N. Записать в кодах МК К1816ВЕ51 программу, которая выполняет пересылку данного массива в RAM, начиная с адреса ADR3. Программа должна начинаться с ячейки ADR1. Коды данных задать произвольно.Часть 2:Собрать схему, в результате работы которой:

  • с клавиатуры вводятся числа;

  • записываются во внешнюю память МК (пространство XSEG).
Теоретическая частьПространство памяти программ 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 - прерывание последовательного порта;002BH - TIMER2 - прерывние таймера 2 (для MCS 52).В CSEG определены два способа передачи управления:1. Прямая адресация с помощью 16- разрядного прямого адреса ad16;2. Относительная адресация, имеющая два варианта: с помощью 8- разрядного смещения куд (целое двоичное со знаком) относительно РС [(A)+(PC0] или DPTR [(A)+(DPTR)].Для двух команд (AJMP, ACALL) предусмотрена страничная адресация в CSEG, с помощью 11-разрядного адреса ad11. В этом случае 8 младших разрядов адреса располагаются во втором байте команды, а 3 старших - в трех старших разрядах первого байта команды:Номер страницы задается пятью старшими разрядами программного счетчика РС.Необходимо подчеркнуть также, что в группе пересылки существуют специальные команды MOVC A,@A+DPTR и MOVC A,@A+PC, которые позволяют считывать содержимое памяти программ программ. Как правило эта возможность используется для организации таблиц констант в CSEG.Команды передачи управленияГруппу команд передачи управления образуют команды безусловного перехода, безусловного перехода, команды вызова подпрограмм и команды возврата из подпрограммы.В большинстве команд используется прямая адресация. Характеристики команд приведены в следующей таблице:



МНЕМОНИКА

КОП

Б

Ц

ОПЕРАЦИЯ

 

LJMP ad16

00000010

3

2

(PC) := ad16

 

AJMP ad11

aaa00001

2

2

(PC) := (PC) + 2

(PC[0-10] ) := ad11

 

SJMP rel

10000000

2

2

(PC) := (PC) + 2

(PC) := (PC) + rel

 

JMP @A+DPTR

01110011

1

2

(PC) := (A) + (DPTR)

 

JZ rel

01100000

2

2

(PC) := (PC) + 2; если (A) == 0

то (PC) := (PC)+rel

 

JNZ rel

01110000

2

2

(PC) := (PC) + 2; если (A) != 0

то (PC) := (PC)+rel

 

JC rel

01000000

2

2

(PC) := (PC) + 2; если (C) == 1

то (PC) := (PC)+rel

 

JNC rel

01010000

2

2

(PC) := (PC) + 2; если (C) == 0

то (PC) := (PC)+rel

 

JB bit, rel

00100000

3

2

(PC) := (PC) + 3; если (b) == 1

то (PC) := (PC)+rel

 

JNB bit,rel

00110000

3

2

(PC) := (PC) + 3; если (b) == 0

то (PC) := (PC)+rel

 

JBC bit, rel

00010000

3

2

(PC) := (PC) + 3; если (b) == 1

то (PC) := (PC)+rel, (b) :=0

 

DJNZ Rn, rel

11011rrr

2

2

(PC) := (PC)+ 2, (Rn) := (Rn) - 1; если (Rn) != 0

то (PC) := (PC)+rel

 

DJNZ ad, rel

11010101

3

2

(PC) := (PC)+ 3, (ad) := (ad) - 1; если (ad) != 0

то (PC) := (PC)+rel

 

CJNZ A, ad, rel

10110101

3

2

(PC) := (PC)+ 3;

если (A) != ad,

то (PC) := (PC)+rel;

если (А)<(ad), то (С):=1,

иначе (С) := 0;

 

CJNE A, #d, rel

10110100

3

2

(PC) := (PC)+ 3;

если (A) != #d,

то (PC) := (PC)+rel;

если (А)<(#d), то (С):=1,

иначе (С) := 0;

 

CJNZ Rn, #d, rel

10111rrr

3

2

(PC) := (PC)+ 3;

если (Rn) != #d,

то (PC) := (PC)+rel;

если (Rn)<(ad), то (С):=1,

иначе (С) := 0;

 

CJNZ @Ri, #d, rel

1011011i

3

2

(PC) := (PC)+ 3;

если ((Ri)) != #d,

то (PC) := (PC)+rel;

если ((Ri))<(#d), то (С):=1,

иначе (С) := 0;

 

LCALL ad16

00010010

3

2

(PC) := (PC)+3, (SP) := (SP) + 1

((SP)) := (PCL), (SP) := (SP)+1

((SP)) := (PCH), (PC) := ad16

 

ACALL ad11

aaa10001

2

2

(PC) := (PC)+2, (SP) := (SP) + 1

((SP)) := (PCL), (SP) := (SP)+1

((SP)):=(PCH), (PC[0-10]):= ad11

 

RET

00100010

1

2

(PCH) :=((SP)), (SP) := (SP) + 1,

(PCL) := ((SP)), (SP) := (SP) -1

 

RETI

00110010

1

2

(PCH) :=((SP)), (SP) := (SP) + 1,

(PCL) := ((SP)), (SP) := (SP) -1

 

NOP

00000000

1

1

(PC) := (PC) + 1

Таблица 1. Группа команд передачи управленияПрактическая частьЧасть 1Для выполнения данной задачи сначала необходимо добавить на схему микроконтроллер 80C51, в который далее нужно будет загружать код программы в шестнадцатеричном формате. Можно воспользоваться схемой из предыдущей лабораторной работы, просто заменив в ней код на языке ассемблера.Рисунок 1. Добавление микроконтроллера 80C51 в проект.Код программы, который выводит строку «Yakovlev»:jmp startorg 1F2Hdb '$Makarov',0org 4D3Hstart:MOV DPTR,#01F2HMOV R0,#5BHMOV R1,#0AHm2:MOV A,R1MOVC A,@A+DPTRMOV @R0, ADJNZ R0, m1m1: DJNZ R1, m2NOPRETENDПосле сборки и компиляции написанного кода появляется файл Debug.HEX, содержимое которого показано на рис. 2.Рисунок 2. Содержимое файла Debug.hex.Далее приведены окна ячеек памяти, используемые во время отладки приложения:Рисунок 3. Окно ячеек памяти (SFR).Часть 2Во второй части данной лабораторной работы необходимо немного модернизировать схему клавиатуры с микроконтроллером из прошлой лабораторной работы, добавив в неё два семисегментных индикатора для вывода чисел в шестнадцатеричном формате. Полная схема изображена на рис. 5.Рисунок 4. Схема клавиатуры с микроконтроллером и семисегментными индикаторами.Ниже представлен модернизированный код программы предыдущей лабораторной работы, который позволяет выводить числа на индикаторы:ORG 0255hstart:MOV DPTR, #0781MOV P2, #00000000bchk:JB p1.5,chk ;проверка нажатия на числоSETB p1.7m2: SWAP Abit0:JB P1.0,bit1 ;считывание заданного числа побитноADD A,#00000001bbit1:JB P1.1,bit2 ;считывание заданного числа побитно
ADD A,#00000010bbit2:JB P1.2,bit3 ;считывание заданного числа побитноADD A,#00000100bbit3:JB P1.3,m1 ;считывание заданного числа побитноADD A,#00001000bm1:CALL delayCALL delayCALL delay;ожидание дальнейших действийnumber:JB p1.7,rstJMP m2rst:JB p1.6,mem ;сброс введённого числаCLR AJMP chk ;возврат на ожидание ввода числаmem:JB p1.4,number ;запоминание числаMOVX @DPTR,AMOV P2, AINC DPTRCLR AJMP chkdelay:MOV R7,#255ZD0:MOV R6,#255MOV R5,#255ZD1: DJNZ R6,ZD1ZD2: DJNZ R5,ZD2DJNZ R7,ZD0RETENDРисунок 5. Содержимое файла Debug.hex.Результат ввода и запоминания числа выглядит следующим образом:Рисунок 6. Результат ввода числа 45.При нажатии на кнопку запоминания можно наблюдать, как записывается введённое число, а также значение регистра R0 увеличивается на количество записей (запоминаний). Число из аккумулятора записывается в соответствующую ячейку памяти.Рисунок 7. Окно ячеек памяти (SFR).Рисунок 8. Окно ячеек памяти (IDATA).ВыводВ результате выполнения данной лабораторной работы были изучены организация пространства памяти программ микроконтроллера КМ1816ВЕ51 и программных средств управления ходом выполнения программы. Приобретены навыки программирования циклических алгоритмов в кодах микроконтроллера.В первой части лабораторной работы была написана простая программа на языке ассемблера для ознакомления с работой микроконтроллера.Во второй части построена схема шестнадцатеричной клавиатуры с микроконтроллером и двумя семисегментными индикаторами, на которые выводились шестнадцатеричные числа. В микроконтроллер также была записана программа на языке ассемблера, в результате сборки которой можно было наблюдать перемещение введённых данных по регистрам и битам микроконтроллера с помощью инструментов отладки программного средства Proteus, а также их отображение на индикаторах.