МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНМ РАБОТАМ ПО КУРСУ " ТЕОРИЯ И ПРОЕКТИРОВАНИЕ СПЕЦИАЛИЗИРОВАННЫХ ЦВМ"
(для студентов специальности 22.01)
Донецк ДПИ 1993
ОБЩИЕ СВЕДЕНИЯ
Предлагаемый курс лабораторных работ по дисциплине "Теория и проектирование специализированных цифровых вычислительных машин" (ТиП СЦВМ) имеет своей целью развитие у студентов навыков разработки и отладки программ для построения простейших цифровых управляющих устройств на базе микроконтроллеров .
В результате проведения лабораторных занятий студенты должны знать приемы работы с эмулятором микроконтроллера на ПЭВМ и уметь разрабатывать простейшие алгоритмы и отлаживать программы для микроконтроллера .
В настоящем курсе в качестве базового выбран микроконтроллер КМ1816ВЕ51. Это аналог распространенного микроконтроллера 8951 фирмы Intel, входящего в семейство iMCS-51. Микроконтроллер совместим с архитектурой iMCS-51, имеет большую ёмкость памяти программ и данных, аппаратно ориентирован на работу в режиме реального времени.
Для отладки программ предлагается использовать эмулятор микроконтроллера AFD-51 для ПЭВМ класса IBM PC XT/AT. Краткая инструкция по работе с эмулятором приведена в приложении.
Порядок выполнения лабораторных работ по курсу ТиП СЦВМ следующий:
-- при самостоятельной подготовке к работе студент должен написать программу в соответствии с заданием и выполнить необходимые контрольные расчеты;
-- на занятии студент должен предъявить преподавателю подготовку и получить допуск к выполнению работы;
-- отладив программу на ПЭВМ, студент должен пояснить преподавателю работу программы и обосновать правильность ее функционирования. После этого работа считается выполненной, преподаватель подписывает черновик выполненной работы;
-- к следующей лабораторной работе студент должен оформить отчет по выполненной работе и защитить его у преподавателя. Подпись отчета преподавателем означает, что работа сдана.
Рекомендуется подписанные преподавателем отчеты хранить до конца обучения по курсу ТиП СЦВМ, так на экзамене разрешается пользоваться своими отчетами по лабораторным работам для решения экзаменационной задачи.
Лабораторная работа 1
АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРА КМ1816ВЕ51.
ОРГАНИЗАЦИЯ ПАМЯТИ. КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ
Цель работы: изучение структуры микроконтроллера КМ1816ВЕ51, организация памяти и форматов его команд, а также приобретение начальных навыков программирования в кодах микроконтроллера с использованием команд передачи данных.
1. АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРА
Микроконтроллер (МК) КМ1816ВЕ51 относится к классу однокристальных микроЭВМ и предназначен для построения несложных цифровых систем управления. Микроконтроллер (МК) выполнен на базе n-МОП технологии, упакован в корпус с двухрядным расположением выводов СБИС (имеет 40 контактов). БИС питается от одного источника напряжением 5В. Структура МК приведена на рис.1.1.
1.1. Операционная часть.
В состав операционной части МК включены следующие устройства:
АЛУ, выполняющее 51 различную операцию над битами, восьми разрядными двоичными числами и десятичными числами;
восьмиразрядные временные регистры Т1 и Т2;
аккумулятор А;
расширитель аккумулятора В (для выполнения операций умножения и деления);
регистр слова состояния программы PSW, назначение битов которого приведено в табл. 1.1.
1.2. Память
Микропроцессор содержит:
RAM- резидентную память данных объемом 128 байт, доступ к которой осуществляется через регистр адреса RAR или указатель стека SP;
EPROM - встроенную перепрограммируемую память программ, при выборке команд из которой используется 16-разрядный указатель адреса РС. Если из памяти команд выбираются данные (константы), то для адресации используется 16-разрядный указатель адреса DPTR (младший байт адреса помещается в DPL, а старший в DPH).
Описание памяти приведено в п.2. данной лабоаторной работы.
Рис. 1.1. Структурная схема микроконтроллера.
Таблица 1.1. Назначение битов PSW.
РАЗРЯД |
СИМВОЛ |
НАЗНАЧЕНИЕ |
PSW.7 |
C |
Перенос из старшего разряда АЛУ |
PSW.6 |
АС |
Десятичный перенос из младшей тетрады АЛУ |
PSW.5 |
F0 |
Флаг пользователя общего назначения |
PSW.4 |
RS1 |
Выбор банка регистров |
PSW.3 |
RS0 |
Выбор банка регистров |
PSW.2 |
OV |
Арифметическое переполнение результата |
PSW.1 |
1 |
Not used |
PSW.0 |
P |
Паритет - четность содержимого регистра А |
1.3. Устройство управления
В состав устройства управления МК входят:
IR - регистр команд, в котором хранится код выполняемой команды;
OSC - встроенный генератор синхроимпульсов Х1, Х2;
Устройство синхронизации и управления работой МК.
1.4. Внешние устройства
МК имеет 4 квази двунаправленных порта Р0-Р3 для подключения внешних устройств, причем порт Р3 может выполнять альтернативные функции.
В состав МК входят:
два 16-ти разрядных таймера-счетчика для временной синхронизации временных процессов;
последовательный приемо-передатчик SIO;
схема обработки внутренних и внешних прерываний.
2. ФОРМАТЫ КОМАНД
Система команд МК насчитывает 111 команд, среди которых: 49 однобайтных, 45 двухбайтных и 17 трехбфйтных. Форматы команд МК приведены на рис. 1.2.
В приведенных форматах использованы следующие сокращения:
#d -- непосредственный операнд;
ad -- адрес операнда в DSEG;
bit -- адрес бита в BSEG;
rel -- относительный адрес в CSEG;
ad16 -- адрес 16 разрядов;
#d16 -- непосредственный 16-разрядный операнд;
ads, add -- непосредственные адреса источника и приемника в DSEG.
Рис. 1.2. Форматы команд микроконтроллера.
3.ОРГАНИЗАЦИЯ ПАМЯТИ
Память микроконтроллера можно представить как пять логических адресуемых пространств, отображаемых на 3 физических устройствах памяти (внутренние ROM и RAM и внешнее ЗУ ).
3.1. Пространство RSEG
Пространство внутренних регистров включает 32 восьмиразрядных регистра, которые объединены в 4 банка по 8 регистров в каждом. Банки регистров (см. рис. 1.3.) соответственно обозначаются -- RB0, RB1, RB2, RB3.
Рис. 1.3. Пространство RSEG
Для доступа к любому регистру текущего банка используется регистровая адресация, при этом номер регистра текущего банка указывается в 3 младших разрядах первого байта команды - в поле Rn.
Текущий банк регистров выбирается с помощью двухразрядного поля RS в PSW.
3.2. Пространство DSEG
Пространство внутренней памяти данных имеет объем 256 байт.
Для доступа к ячейке пространства DSEG используется для способа адресации.
Первый способ - прямая адресация, при этом в команде указывается прямой восьмиразрядный адрес ad. При прямой адресации доступно 128 младших байт пространства DSEG или специальные регистры. Если старший (седьмой) разряд прямого адреса равен 0, то происходит обращение к одному из специальных регистров. Если при этом используется адрес, который не приписан ни к одному специальному регистру, то результат команды не определен. В двухадресных командах используется прямой адрес источника операнда ads и прямой адрес приемника операнда add.
Второй способ - косвенная адресация через регистры R0, R1 текущего банка регистров.
При косвенной адресации к пространству DSEG возможен доступ только к 128 младшим адресам пространства. Если содержимое регистра R0 (R1) при косвенном обращении к DSEG превосходит 7Fh, то результат операции не определен.
3.3.Пространство BSEG
Пространство DSEG представляет собой одноразрядное линейно упорядоченное пространство памяти емкостью 256 бит.
В пространстве BSEG используется только прямая адресация , прямой восьмиразрядный адрес в пространстве BSEG обозначается bit. Работа в BSEG подробно рассматривается в лаб. работе №4.
3.4. Пространство внешней памяти данных XSEG
Пространство внешней памяти данных представляет собой линейное адресное пространство объемом 64Кбайт . Адрес в XSEG может принимать значение от 0000h до FFFFh.
Используются два способа адресации.
Первый способ - косвенная адресация через 16-разрядный регистр-указатель DPTR. Такая адресация возможна только в двух командах MOVX A,@DPTR и MOVX @DPTR,A;
Второй способ - косвенная страничная адресация, при этом номер страницы задается содержимым порта Р2 , а смещение в странице - содержимым регистра R0 (или R1) текущего банка, т.е. адрес в XSEG находится как конкатенация (Р2)*(Ri). Для этой цели можно использовать также только две команды - MOVX A, @Ri или MOVX @Ri, A.
3.5.Пространство памяти программ CSEG
Объем пространства памяти программ 64Кбайт . Оно построено как однородное линейное пространство с двумя основными способами передачи управления. Первые (младшие) 4К байт физически принадлежат EPROM внутри МК, остальные 60К байт - реализуются внешним ЗУ (передача управления подробно рассматривается в лаб. работе №2).
К пространству CSEG возможно также обращение как к источнику операндов (констант). Для этого ипользуется непосредственная адресация и косвенная адресация через регистры DPTR или PC с переменным смещением.
При непосредственной адресации операнд (константа!) указывается в коде команды. Возможны команды с 8-разрядным операндом #d и 16-разрядным операндом (#d16).
Косвенная адресация возможна только с помощью двух команд. Команда MOVC A, @A+DPTR считывает в аккумулятор байт из CSEG по адресу, равному сумме содержимого А (смещение) и DPTR. Команда MOVC A, @A+PC считывает в аккумулятор байт из CSEG по адресу , найденному как сумма содержимого А и PC.
4. КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ
В микроконтроллере широко представлены команды пересылки данных, большую часть которых составляют команды передачи и обмена байтов. Все команды данной группы не модифицируют флаги результата, за исключением команд загрузки PSW и аккумулятора. Мнемоника и коды операций команд передачи данных приведены в табл. 1.2.
Таблица 1.2. Группа команд передачи данных
МНЕМОНИКА |
К О П |
Б |
Ц |
ОПЕРАЦИЯ |
||
MOV A,Rn |
11101 rrr |
1 |
1 |
(A) := (Rn) |
||
MOV A,ad |
11100101 |
2 |
1 |
(A) := (ad) |
||
MOV A,@Ri |
1110011i |
1 |
1 |
(A) := ((Ri)) |
||
MOV A,#d |
01110100 |
2 |
1 |
(A) := #d |
||
MOV Rn,A |
11111rrr |
1 |
1 |
(Rn) := (A) |
||
MOV Rn,ad |
10101rrr |
2 |
2 |
(Rn) := (ad) |
||
MOV Rn,#d |
01111rrr |
2 |
1 |
(Rn) := #d |
||
MOV ad,A |
11110101 |
2 |
1 |
(ad) := (A) |
||
MOV ad,Rn |
10001rrr |
2 |
2 |
(ad) := (Rn) |
||
MOV add,ads |
10000101 |
3 |
2 |
(add) := (ads) |
||
MOV ad,@Ri |
0000011i |
2 |
2 |
(ad) := ((Ri)) |
||
MOV ad,#d |
01110101 |
3 |
2 |
(ad) := #d |
||
MOV @Ri,A |
1111011i |
1 |
1 |
( (Ri) ) := (A) |
||
MOV @Ri,ad |
0110011i |
2 |
2 |
( (Ri) ) := (ad) |
||
MOV @Ri,#d |
0111011i |
2 |
1 |
( (Ri) ) := #d |
||
MOV DPTR,#d16 |
10010000 |
3 |
2 |
(DPTR) := #d16 |
||
MOVC A,@A+DPTR |
10010011 |
1 |
2 |
( A ) := ( (A)+(DPTR)) |
||
MOVC A,@A+PC |
10000011 |
1 |
2 |
( PC ):=(PC)+1, (A):=( (A)+(PC) ) |
||
MOVX A,@Ri |
1110001i |
1 |
2 |
(A) :=( (P2)*(Ri) ) |
||
MOVX A,@DPTR |
11100000 |
1 |
2 |
(A) := ( (DPTR) ) |
||
MOVX @Ri,A |
1111001i |
1 |
2 |
((P2*(Ri)):=(A) |
||
MOVX @DPTR,A |
11110000 |
1 |
2 |
((DPTR)):=(A) |
||
PUSH ad |
11000000 |
2 |
2 |
(SP):=(SP)+1, ((SP)):=(ad) |
||
POP ad |
11010000 |
2 |
2 |
(ad):=((SP)), (SP):=(SP)-1 |
||
XCH A,Rn |
11001rrr |
1 |
1 |
(A) <--> (Rn) |
||
XCH A,ad |
11000101 |
2 |
1 |
(A) <--> (ad) |
||
XCH A,@Ri |
1100011i |
1 |
1 |
(A) <--> (Ri) |
||
XCHD A,@Ri |
1101011i |
1 |
1 |
(A[0-3]) <--> (( Ri[0-3] )) |
5. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Записать в кодах МК К1816ВЕ1 программу , которая:
- записывает в ячейку RAM1 константу CONST1;
- записывает в ячейку RAM2 константу CONST2;
- переписывает содержимое RAM1 в регистр с номером Х банка регистров номер Q;
- переписывает содержимое RAM2 в регистр с номером Y банка регистров номер W;
Начальный адрес программы ADR1.
Таблица 1.3. Таблица вариантов заданий
№ |
RAM1 |
RAM2 |
CONST1 |
CONST2 |
X |
Bank Q |
Y |
Bank W |
ADR1 |
71 |
43 |
FE |
CA |
0 |
0 |
2 |
3 |
0714 |
|
62 |
54 |
FF |
AB |
1 |
1 |
3 |
2 |
062F |
|
53 |
62 |
FD |
BC |
2 |
2 |
4 |
1 |
053E |
|
44 |
71 |
FC |
CD |
3 |
3 |
5 |
0 |
044A |
|
35 |
12 |
FB |
DE |
4 |
1 |
6 |
3 |
0355 |
|
26 |
23 |
FA |
EF |
5 |
2 |
7 |
2 |
0266 |
|
17 |
34 |
F1 |
FF |
6 |
3 |
0 |
0 |
0177 |
|
78 |
45 |
F2 |
1A |
7 |
0 |
1 |
3 |
078A |
|
69 |
56 |
F3 |
2B |
3 |
1 |
2 |
2 |
069D |
|
5A |
67 |
F4 |
3C |
0 |
2 |
3 |
1 |
05AF |
|
4B |
78 |
F5 |
4D |
1 |
3 |
4 |
0 |
04BA |
|
3C |
23 |
F6 |
5E |
2 |
0 |
5 |
3 |
03C9 |
|
2D |
3A |
F7 |
6F |
3 |
1 |
6 |
2 |
02D8 |
|
1E |
4B |
F8 |
7A |
4 |
2 |
7 |
1 |
01E4 |
|
7F |
5C |
F8 |
8B |
5 |
3 |
0 |
0 |
07F5 |
|
6E |
6D |
F9 |
9C |
6 |
0 |
1 |
3 |
06E6 |
|
5A |
7E |
F1 |
2D |
7 |
1 |
2 |
2 |
05A1 |
|
4D |
1F |
F2 |
5E |
0 |
2 |
3 |
1 |
04D3 |
|
3C |
2E |
F3 |
6F |
1 |
3 |
4 |
0 |
03C8 |
|
26 |
3D |
F4 |
7A |
2 |
0 |
5 |
3 |
026F |
|
45 |
9A |
FF |
8B |
3 |
1 |
6 |
3 |
04BE |
|
67 |
8D |
1F |
9D |
4 |
2 |
7 |
3 |
03CA |
|
4F |
4E |
2E |
A0 |
5 |
3 |
7 |
2 |
02D3 |
|
5D |
3B |
3D |
B1 |
6 |
3 |
6 |
1 |
01E7 |
|
3A |
71 |
4C |
C2 |
7 |
2 |
5 |
0 |
07F3 |
|
9E |
69 |
5B |
D3 |
1 |
1 |
4 |
2 |
06E5 |
|
3F |
9E |
6A |
E4 |
2 |
0 |
3 |
1 |
05AD |
6. СОДЕРЖАНИЕ ОТЧЕТА:
- краткое описание структуры МК;
- таблица команд передачи данных;
- задание по лабораторной работе;
- текст программы с пояснениями;
- черновик выполнения работы.
Лабораторная работа 2
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ. ОРГАНИЗАЦИЯ ЦИКЛОВ
Цель работы: изучение организации пространства памяти программ микроконтроллера КМ1816ВЕ51, программных средств управления ходом выполнения программы, приобретение навыков программирования циклических алгоритмов в кодах микроконтроллера.
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 - прерывание последовательного порта;
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.
2. КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ.
Группу команд передачи управления образуют команды безусловного перехода, безусловного перехода, команды вызова подпрограмм и команды возврата из подпрограммы.
В большинстве команд используется прямая адресация. Характеристики команд приведены в таблице 2.1.
Таблица 2.1. Группа команд передачи управления
№ |
МНЕМОНИКА |
КОП |
Б |
Ц |
ОПЕРАЦИЯ |
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 |
3. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Пусть в намяти программ, начиная с ячейки ADR2, расположена таблица кодов длиной N.
Записать в кодах МК К1816ВЕ51 программу, которая выполняет пересылку данного массива в RAM, начиная с адреса ADR3.
Программа должна начинаться с ячейки ADR1.
Таблица 2.2. Таблица вариантов заданий
НОМЕР |
ADR1 |
ADR2 |
N |
ADR3 |
714 |
431 |
E |
4F |
|
62F |
541 |
F |
23 |
|
53E |
621 |
D |
45 |
|
44A |
711 |
C |
56 |
|
355 |
121 |
B |
48 |
|
266 |
236 |
A |
3D |
|
177 |
345 |
6 |
4F |
|
78A |
454 |
7 |
3A |
|
69D |
568 |
F |
4C |
|
5AF |
677 |
E |
44 |
|
4BA |
781 |
5 |
23 |
|
3C9 |
231 |
6 |
18 |
|
2D8 |
3A1 |
7 |
4C |
|
1E4 |
4B2 |
8 |
6C |
|
7F5 |
5C2 |
8 |
6F |
|
6E6 |
6D2 |
9 |
3A |
|
5A1 |
7E2 |
F |
4A |
|
4D3 |
1F2 |
A |
5B |
|
3C8 |
2E2 |
B |
3B |
|
26F |
3D2 |
C |
4B |
|
4BE |
782 |
D |
39 |
|
3CA |
232 |
E |
47 |
|
2D3 |
3A2 |
F |
65 |
|
1E7 |
4B2 |
8 |
33 |
|
7F3 |
5C2 |
8 |
3D |
|
6E5 |
6D2 |
9 |
55 |
|
5AD |
7E4 |
C |
3E |
Коды данных задать произвольно.
4. СОДЕРЖАНИЕ ОТЧЕТА:
- краткое содержание пространства CSEG;
- таблица команд передачи управления;
- задание по лабораторной работе;
- текст программы с пояснениями;
- черновик выполнения работы.
5. ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ
В памяти команд с адреса ADR2=0D80 расположено N=0CH шестнадцатиричных кодов. Например: FF, 00, 11, 22, 33, 44, 55, 66, 77, 88, 99, AA.
Необходимо переписать их в память данных, начиная с адреса ADR3=65H. Программа должна начинаться с адреса ADR1=0F00H.
Текст программы:
0F00 900D7F MOV DPTR,#0D7F
0F03 7870 MOV R0,#70
0F05 790C MOV R1,#OC
0F07 E9 MOV A,R1
0F08 93 MOV A,@A+DPTR
0F09 F6 MOV @R0, A
0F0A D800 DJNZ R0, 0F0C
0F0C D9F9 DJNZ R1, 0F07
0F0E 00 NOP
Содержимое памяти.
Данные до выполнения программы
FD51 Print Out Program Memory CSEG
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0D80 |
FF |
00 |
11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
AA |
00 |
00 |
00 |
00 |
0D90 |
00 |
После выполнения программы:
FD51 Print Out Internal Memory DSEG
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0060 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
0070 |
AA |
Еще один вариант программы:
MOV PSW,#00
MOV R1,#65
MOV DPTR,(0D80-65)
MOV A,R1
MOVC A,@A+DPTR
MOV @R1,A
INC R1
CJNZ R1,71,F9
NOP
Лабораторная работа 3
АРИФМЕТИКО-ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Цель работы: приобретение навыков программирования арифметико - логических операций в кодах микроконтроллера.
1. АРИФМЕТИКО - ЛОГИЧЕСКИЕ ОПЕРАЦИИ.
Команды данной группы позволяют выполнять следующие операции над 8-битными целыми двоичными числами: сложение, сложение с учетом переноса, десятичную коррекцию, инкремент и декремент, вычитание, умножение, деление, дизъюнкцию, конъюнкцию, исключающее ИЛИ, инверсию, сброс и сдвиг. Описание команд приведено в табл. 3.1, 3.2 и рис. 3.1. В табл.3.3. приведены условия установки и сброса флагов.
Признак паритета Р изменяется любыми командами, результат которых изменяет аккумулятор (включая команды пересылки).
Таблица 3.1. Группа команд арифметических операций
N |
МНЕМОНИКА |
КОП |
Б |
Ц |
ОПЕРАЦИЯ |
ADD A,Rn |
00101rrr |
1 |
1 |
(A):=(A)+(Rn) |
|
ADD A,ad |
00100101 |
2 |
1 |
(A):=(A)+(ad) |
|
ADD A,@Ri |
0010011I |
1 |
1 |
(A):=(A)+((Ri)) |
|
ADD A,#d |
00100100 |
2 |
1 |
(A):=(A)+#d |
|
ADDC A,Rn |
00111rrr |
1 |
1 |
(A):=(A)+(Rn)+(C) |
|
ADDC A,ad |
00110101 |
2 |
1 |
(A):=(A)+(ad)+(C) |
|
ADDC A,@Ri |
0011011I |
1 |
1 |
(A):=(A)+((Ri))+(C) |
|
ADDC A,#d |
00110100 |
2 |
1 |
(A):=(A)+#d+(C) |
|
DA A |
11010100 |
1 |
1 |
Десятичная коррекция |
|
SUBB A,Rn |
10011rrr |
1 |
1 |
(A):=(A)-(С)-(Rn) |
|
SUBB A,ad |
10010101 |
2 |
1 |
(A):=(A)-(С)-(ad) |
|
SUBB A,@Ri |
1001011I |
1 |
1 |
(A):=(A)-(С)-((Ri)) |
|
SUBB A,#d |
10010100 |
2 |
1 |
(A):=(A)-(С) - #d |
|
INC A |
00000100 |
1 |
1 |
(A):=(A)+1 |
|
INC Rn |
00001rrr |
1 |
1 |
(Rn):=(Rn)+1 |
|
INC ad |
00000101 |
1 |
1 |
(ad):=(ad)+1 |
|
INC @Ri |
0000011i |
2 |
1 |
((Ri)):=((Ri))+1 |
|
INC DPTR |
10100011 |
1 |
2 |
(DPTR):=(DPTR)+1 |
|
DEC A |
00010100 |
1 |
1 |
(A):=(A)-1 |
|
DEC Rn |
00011rrr |
1 |
1 |
(Rn):=(Rn)-1 |
|
DEC ad |
00010101 |
1 |
1 |
(ad):=(ad)-1 |
|
DEC @Ri |
0001011i |
2 |
1 |
((Ri)):=((Ri))-1 |
|
MUL AB |
10100100 |
1 |
4 |
(B)(A):= (A)*(B) |
|
DIV AB |
10000100 |
1 |
4 |
(B).(A):= (A)/(B) |
Таблица 3.2. Группа команд логических операций
МНЕМОНИКА |
КОП |
Б |
Ц |
ОПЕРАЦИЯ |
|
ANL A,Rn |
01011rrr |
1 |
1 |
(A):=(A)/\(Rn) |
|
ANL A,ad |
01010101 |
2 |
1 |
(A):=(A)/\(ad) |
|
ANL A,@Ri |
0101011i |
1 |
1 |
(A):=(A)/\((Ri)) |
|
ANL A,#d |
01010100 |
2 |
1 |
(A):=(A) /\ #d |
|
ANL ad,A |
01010010 |
2 |
1 |
(ad):=(ad)/\(A) |
|
ANL ad,#d |
01010011 |
3 |
2 |
(ad):=(ad)/\(#d) |
|
ORL A,Rn |
01001rrr |
1 |
1 |
(A):=(A)\/(Rn) |
|
ORL A,ad |
01000101 |
2 |
1 |
(A):=(A)\/(ad) |
|
ORL A,@Ri |
0100011i |
1 |
1 |
(A):=(A)\/((Ri)) |
|
ORL A,#d |
01000100 |
2 |
1 |
(A):=(A)\/ #d |
|
ORL ad,A |
01000010 |
2 |
1 |
(ad):=(ad)\/(A) |
|
ORL ad,#d |
01000011 |
3 |
2 |
(ad):=(ad)\/ #d |
|
XRL A,Rn |
01101rrr |
1 |
1 |
(A):=(A)+(Rn) |
|
XRL A,ad |
01100101 |
2 |
1 |
(A):=(A)+(ad) |
|
XRL A,@Ri |
0110011i |
1 |
1 |
(A):=(A)+((Ri)) |
|
XRL A,#d |
01100100 |
2 |
1 |
(A):=(A)+ #d |
|
XRL ad,A |
01100010 |
2 |
1 |
(ad):=(ad)+(A) |
|
XRL ad,#d |
01100011 |
3 |
2 |
(ad):=(ad)+ #d |
|
CLR A |
11100100 |
1 |
1 |
(A):=0 |
|
CPL A |
11110100 |
1 |
1 |
(A):= инверсия (А) |
|
RL A |
00100011 |
1 |
1 |
Влево циклически (рис. а) |
|
RLC A |
00110011 |
1 |
1 |
Влево через С (рис.б) |
|
RR A |
00000011 |
1 |
1 |
Вправо циклически (рис.в) |
|
RRC A |
00010011 |
1 |
1 |
Вправо через С (рис.г) |
|
SWAP A |
11000100 |
1 |
1 |
Обмен тетрадами (рис.д) |
2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Пусть в памяти программ, начиная с ячейки ADR2, расположена таблица кодов длиной N (Xi, I=1,2, ... N , формат - байт)
Записать в кодах МК К1816ВЕ1 программу, которая выполняет вычисление заданной функции F над этими кодами. Результат вычисления разместить в регистр В. Программа должна начинаться с ячейки ADR1. Варианты заданий приведены в табл. 3.4.
Таблица 3.3. Установка признаков (флагов)
МНЕМОНИКА |
CY |
OV |
AC |
ADD |
+ |
+ |
+ |
ADDC |
+ |
+ |
+ |
SUBB |
+ |
+ |
+ |
MUL |
0 |
+ |
- |
DIV |
0 |
+ |
- |
DA |
+ |
- |
- |
RRC |
+ |
- |
- |
RLC |
+ |
- |
- |
SET C |
1 |
- |
- |
CLR C |
0 |
- |
- |
CPL C |
+ |
- |
- |
ANL C,bit |
+ |
- |
- |
ANL C, / bit |
+ |
- |
- |
ORL C,bit |
+ |
- |
- |
ORL C, / bit |
+ |
- |
- |
MOV C, bit |
+ |
- |
- |
CJNE |
+ |
- |
- |
(+) - изменяется
( -) - не изменяется
Организация сдвигов
Рис. 3.1.
Таблица 3.4. Таблица вариантов заданий
Номер |
ADR1 |
ADR2 |
N |
Функция F |
714 |
431 |
E |
Сумма(Xi) / N |
|
62F |
541 |
F |
Max(Xi) / N |
|
53E |
621 |
D |
Min(Xi) / N |
|
44A |
711 |
C |
Сумма(Xi) \/ X1 |
|
355 |
121 |
B |
Max(Xi) \/ X1 |
|
266 |
236 |
A |
Min(Xi) \/ X1 |
|
177 |
345 |
6 |
Сумма(Xi) /\ X1 |
|
78A |
454 |
7 |
Max(Xi) /\ X1 |
|
69D |
568 |
F |
Min(Xi) /\ X1 |
|
5AF |
677 |
E |
Сумма(Xi) /\ X2 |
|
4BA |
781 |
5 |
Max(Xi) /\ X2 |
|
3C9 |
231 |
6 |
Min(Xi) /\ X2 |
|
2D8 |
3A1 |
7 |
Сумма(Xi) /\ X3 |
|
1E4 |
4B2 |
8 |
Max(Xi) /\ X3 |
|
7F5 |
5C2 |
8 |
Min(Xi) /\ X3 |
|
6E6 |
6D2 |
9 |
Сумма(Xi) \/ X4 |
|
5A1 |
7E2 |
F |
Max(Xi) \/ X4 |
|
4D3 |
1F2 |
A |
Min(Xi) \/ X4 |
|
3C8 |
2E2 |
B |
Сумма(Xi) X1 |
|
2F6 |
3D2 |
C |
Max(Xi) X1 |
|
4BE |
782 |
D |
Min(Xi) X1 |
|
3CA |
232 |
E |
Сумма(Xi) /\ Xn |
|
2D3 |
3A2 |
F |
Max(Xi) /\ Xn |
|
1E7 |
4B2 |
8 |
Min(Xi) /\ Xn |
|
7F3 |
5C2 |
8 |
Сумма(Xi) \/ Xn |
|
6E5 |
6D2 |
9 |
Max(Xi) \/ Xn |
|
5AD |
7E4 |
C |
Min(Xi) \/ Xn |
Коды данных задать произвольно. Выполнить контрольный просчет.
3. СОДЕРЖАНИЕ ОТЧЕТА:
- таблицы арифметико-логических команд;
- задание по лабораторной работе;
- текст программы с пояснениями и контрольным просчетом;
- черновик выполнения работы.
4. ПРИМЕР ПРОГРАММЫ
Пусть в памяти программ, начиная с ячейки ADR2 =0F20, расположена таблица кодов длиной N=5 (21,32,43,54,65).
Необходимо составить и отладить программу, которая вычисляет сумму по модулю 2 этих кодов, результат поместить в ячейку 7F RAM. Программа должна начинаться с ячейки ADR1 = 0200.
Контрольный просчет:
0010 0001 21
0011 0010 32
0100 0011 43
0101 0100 54
0110 0101 65
0110 0001 61
Исходные данные в EPROM
FD51 Print Out Program Memory
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0F20 |
21 |
32 |
43 |
54 |
65 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
Текст программы
0200 |
75D000 |
MOV |
PSW, #00 |
; Задаем нулевой банк |
0203 |
E4 |
CLR |
A |
; Очищаем аккумулятор |
0204 |
F57F |
MOV |
7F, A |
; Очищаем результат |
0206 |
7A05 |
MOV |
R2, #05 |
; Задаем счетчик |
0208 |
900F1F |
MOV |
DPTR, #0F1F |
; Задаем нач. адрес массива |
020B |
EA |
MOV |
A, R2 |
; Индекс элемента в А |
020C |
93 |
MOVC |
A,@A+DPTR |
; Элемент массива в А |
020D |
627F |
XRL |
7F, A |
; Сложение по модулю 2 |
020F |
DAFA |
DJNZ |
R2, 020B |
; Вычитание и проверка на |
02011 |
00 |
NOP |
; выход |
Результат работы пограммы
FD51 Print Out Internal Memory
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0070 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
Лабораторная работа №4
БИТОВЫЕ ОПЕРАЦИИ
Цель работы: изучение организации битового пространства памяти МК КМ1816ВЕ51, программных средств обработки бит и особенностей программирования битовых операций в кодах микроконтроллера.
1. КОМАНДЫ РАБОТЫ С БИТОВЫМИ ДАННЫМИ
Данная группа команд оперирует с однобитными операндами. В качестве операндов могут выступать отдельные биты некоторых регистров специальных функций, биты портов и биты 16 ячеек внутренней памяти данных. Все адресуемые биты образуют одноразрядное линейно упорядоченное пространство BSEG емкостью 256 бит.
В пространстве BSEG используется только прямая адресация, прямой восьмиразрядный адрес в пространстве BSEG обозначается bit.
Адресация в пространстве BSEG иллюстрируется табл. 4.1.
Группа команд операций с битами (табл. 4.2.) включает 6 операций : три одноместных операции - установки (CLR), сброса (SETB), и инверсии (CPL), две двухместных операции - конъюнкции и дизъюнкции, и операцию пересылки. В качестве "аккумулятора" в битовых опрациях используется триггер (флаг) переноса С. Характеристики битовых команд приведены в табл. 4.2.
Таблица 4.1. Адресация в пространстве BSEG
Адрес в пространстве DSEG |
Разряд ячейки внутренней памяти данных |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
20 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
21 |
0F |
0E |
0D |
0C |
0B |
0A |
09 |
08 |
22 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
23 |
1F |
1E |
1D |
1C |
1B |
1A |
19 |
18 |
24 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
25 |
2F |
2E |
2D |
2C |
2B |
2A |
29 |
28 |
26 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
27 |
3F |
3E |
3D |
3C |
3B |
3A |
39 |
38 |
28 |
47 |
46 |
45 |
44 |
43 |
42 |
41 |
40 |
29 |
4F |
4E |
4D |
4C |
4B |
4A |
49 |
48 |
2A |
57 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
2B |
5F |
5E |
5D |
5C |
5B |
5A |
59 |
58 |
2C |
67 |
66 |
65 |
64 |
63 |
62 |
61 |
60 |
2D |
6F |
6E |
6D |
6C |
6B |
6A |
69 |
68 |
2E |
77 |
76 |
75 |
74 |
73 |
72 |
71 |
70 |
2F |
7F |
7E |
7D |
7C |
7B |
7A |
79 |
78 |
Регистры специального назначения
Адрес в пространстве DSEG |
Разряд регистра специального назначения |
Регистр |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
80 |
87 |
86 |
85 |
84 |
83 |
82 |
81 |
00 |
PO |
81 |
8F |
8E |
8D |
8C |
8B |
8A |
89 |
88 |
TCON |
90 |
97 |
96 |
95 |
94 |
93 |
92 |
91 |
90 |
P1 |
98 |
9F |
9E |
9D |
9C |
9B |
9A |
99 |
98 |
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. Группа команд операций с битами.
№ |
МНЕМОНИКА |
КОП |
Б |
Ц |
ОПЕРАЦИЯ |
|||||
CLR |
C |
11000011 |
1 |
1 |
(C):=0 |
|||||
CLR |
bit |
11000010 |
2 |
1 |
(b):=0 |
|||||
SET |
C |
11010011 |
1 |
1 |
(C):=1 |
|||||
SET |
bit |
11010010 |
2 |
1 |
(b):=1 |
|||||
CPL |
C |
10110011 |
1 |
1 |
(C):= ~ C |
|||||
CPL |
bit |
10110010 |
2 |
1 |
(b):= ~ (b) |
|||||
ANL |
C,bit |
10000010 |
2 |
2 |
(C):=(C)/\(b) |
|||||
ANL |
C,/bit |
10110000 |
2 |
2 |
(C):=(C)/\~(b) |
|||||
ORL |
C,bit |
01110010 |
2 |
2 |
(C):=(C)\/(b) |
|||||
ORL |
C,/bit |
10100000 |
2 |
2 |
(C):=(C)\/~(b) |
|||||
MOV |
C,bit |
10100010 |
2 |
1 |
(C):=(b) |
|||||
MOV |
bit,C |
10010010 |
2 |
2 |
(b):=(C) |
~ -- инверсия
2. Задание по лабораторной работе.
Пусть в DSEG, в ячейке ADR2 расположен код CODE. Записать в кодах МК ВЕ51 программу, которая выполняет чвычисление аданной булевой функции F над этими кодами . Результат вычислений должен быть записан по адресу ADR3 пространства BSEG. Программа должна начинаться с адреса ADR1.
Таблица 4.3. Варианты заданий
№ |
ADR1 |
ADR2 |
CODE |
ADR3 |
333 |
43 |
FE |
7A |
|
A45 |
54 |
3F |
4B |
|
563 |
62 |
5D |
6C |
|
234 |
71 |
7C |
7D |
|
D41 |
12 |
8B |
1E |
|
872 |
23 |
7A |
2F |
|
45F |
34 |
1E |
4F |
|
32E |
45 |
F2 |
5A |
|
695 |
56 |
E3 |
6B |
|
5A2 |
67 |
FA |
3C |
|
4B3 |
78 |
A5 |
4D |
|
3C4 |
23 |
56 |
5E |
|
2DF |
3A |
F7 |
6F |
|
1E3 |
4B |
A8 |
7A |
|
7FE |
5C |
48 |
5B |
|
6E2 |
6D |
29 |
6C |
|
5A2 |
7E |
F3 |
3D |
|
4D4 |
1F |
E2 |
5E |
|
3C3 |
2E |
D3 |
6F |
|
261 |
3D |
A4 |
5A |
|
3BF |
5D |
B5 |
3D |
|
2CC |
53 |
3D |
2E |
|
3D3 |
6A |
4F |
3E |
|
7E3 |
7B |
8F |
48 |
|
2F4 |
5E |
6D |
5B |
|
4E4 |
45 |
D9 |
6C |
Вид функции F для вычисления определяется следующим образом.
Пусть YZ две последние цифры номера зачетки.
Код CODE имеет формат (поразрядно)
X7 |
X6 |
X5 |
X4 |
X3 |
X2 |
X1 |
X0 |
F= (X7)OP1(X6)OP2(X5)OP3(X4)OP4(X3)OP5(X2)OP6(X1)OP7(X0), где OPi - булева операция, находится в таблице 4. 4, а каждая переменная Хi может входить в выражение прямо или инверсно (определяется по табл. 4.5).
Таблица 4.4. Таблица операций.
Z |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
OP1 |
/\ |
/\ |
/\ |
/\ |
/\ |
\/ |
\/ |
\/ |
\/ |
\/ |
OP2 |
+ |
+ |
+ |
/\ |
/\ |
/\ |
\/ |
\/ |
\/ |
\/ |
OP3 |
\/ |
\/ |
\/ |
+ |
+ |
+ |
+ |
\/ |
+ |
/\ |
OP4 |
+ |
+ |
\/ |
/\ |
\/ |
/\ |
\/ |
/\ |
\/ |
\/ |
OP5 |
/\ |
/\ |
\/ |
\/ |
\/ |
+ |
+ |
+ |
+ |
+ |
OP6 |
+ |
\/ |
/\ |
\/ |
/\ |
/\ |
+ |
+ |
/\ |
/\ |
OP7 |
\/ |
+ |
+ |
+ |
+ |
+ |
\/ |
/\ |
+ |
\/ |
/\ - операция И
\/ - операция ИЛИ
+ - операция ИСКЛЮЧАЮЩЕЕ ИЛИ
3. Содержание отчета:
- описание сегмента BSEG;
- таблица битовых команд;
- задание по лабораторной работе;
- текст программы с пояснеинями и контрольным просчетом;
- черновик выполнения работы.
Таблица 4.5. Значения переменных
Y |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
X0 |
П |
И |
П |
И |
П |
И |
П |
И |
П |
И |
X1 |
П |
П |
П |
П |
И |
И |
И |
И |
И |
И |
X2 |
П |
П |
И |
И |
И |
П |
П |
И |
И |
П |
X3 |
И |
И |
И |
П |
П |
П |
И |
И |
И |
И |
X4 |
И |
И |
И |
П |
И |
П |
П |
И |
П |
П |
X5 |
П |
И |
И |
П |
И |
П |
П |
П |
И |
И |
X6 |
И |
П |
П |
П |
И |
И |
П |
П |
П |
П |
П - переменная в функцию входит прямо (без инверсии)
И - переменная в функцию входит инверсно
Х7 входит для F всегда без инверсии.
4. ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ
Пусть в DSEG, в ячейке ADR2=31 расположен код CODE=20. Записать в кодах МК К1816ВЕ1 программу, которая выполняет вычисление заданной булевой функции F=X4 /\ ~X3 \/ X0 над этими кодами. Результат вычислений должен быть записан по адресу ADR3=7F пространства BSEG. Программа должна начинаться с ячейки ADR1=0F00.
Текст программы и размещение ее в памяти
0F00 |
853120 |
MOV |
20, 31 |
0F03 |
A204 |
MOV |
C, 20.4 |
0F05 |
B003 |
ANL |
C, /20.3 |
0F07 |
7200 |
ORL |
C, 20.0 |
0F09 |
9278 |
MOV |
2F.0, C |
0F0B |
00 |
NOP |
|
0F0C |
00 |
NOP |
Программа во внутренней памяти программ
FD51 Print Out Program Memory
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
|
0F00 |
85 |
31 |
20 |
A2 |
04 |
B0 |
03 |
72 |
00 |
92 |
78 |
00 |
00 |
Результаты работы программы
FD51 Print Out Internal Memory
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0020 |
21 |
32 |
43 |
54 |
65 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0030 |
00 |
2D |
00 |
00 |
00 |
00 |
00 |
00 |
ЗАМЕЧАНИЕ :
Эмулятор FD51 неверно обрабатывает битовую команду MOV.
Пусть С=1, а в ячейке 2D все 11111111
Выполнив команду MOV 2D.6 , C , в ячейке получаем 0100 0000
Лабораторная работа 5
СТЕК. ОБРАЩЕНИЕ К ПОДПРОГРАММАМ.
СИСТЕМА ПРЕРЫВАНИЙ МК КМ1816ВЕ51.
Цель работы изучение организации стековой памяти и системы прерываний микроконтролера КМ1816ВЕ51, а также приобретение навыков программирования с использованием подпрограмм.
1. ОРГАHИЗАЦИЯ СТЕКОВОЙ АДРЕСАЦИИ
Стековая адресация в МК реализована с помощью автоинкрементной/ автодекрементной косвенной адресации через 8-разрядный регистр указатель стека SР (адрес 81Н в пространстве DSEG). Стек располагается в любом поле DSEG в диапазоне адресов ООН-7FH. При выполнении операций загрузки в стек (типа PUSH, CALL) содержимое SP сначала инкрементируется , а затем в него загружается операнд. В операциях чтения (выгрузки) из стека (типа POP,RET) сначала читается содержимое стека, а затем SP декрементируется.
Команды работы со стеком приведены в табл.5.1.
Таблица 5.1. Команды работы со стеком
МНЕМОНИКА |
КОП |
Б |
Ц |
Операция |
PUSH ad |
11000000 |
2 |
2 |
(SP) := (SP)+1 ((SP)) := (ad) |
POP ad |
1101000 |
2 |
2 |
(ad) := ((SP)) (SP):=(SP)-1 |
LCALL ad16 |
00010010 |
3 |
2 |
(PC):=(PC)+3, (SP):=(SP) + 1 ((SP)):=(PCL), (SP):=(SP)+1 ((SP)):=(PCH), (SP):=ad16 |
ACALL ad11 |
aaa10001 |
3 |
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 |
RET I |
00110010 |
1 |
2 |
(PCH):=((SP)), (SP):=(SP) - 1 (PCL):=((SP)), (SP):=(SP) - 1 |
При инициализации МК по сигналу RST "Cброс" в указатель стека автоматически загружается к од О7Н,т.е. первый элемент стека будет загружаться в ячейку . О8Н ( регистр RO первого банка регистров). Пользователь имеет возможность переопределить содержимое SP, изменив необходимым образом расположение стека в DSEG. Переполнение стека аппаратно не фиксируется,что должно учитываться в программе пользователя.
При обращении к подпрограмме ( и обработке прерываний) по командам типа CALL в стек загружается только адрес возврата . Информация о состоянии МК аппаратно не сохраняется. При необходимости это должна делать прикладная программа.
2. ОРГАНИЗАЦИЯ СИСТЕМЫ ПРЕРЫВАНИЙ
Микроконтроллер МК51 поддерживает двухуровневую приоритетную систему прерываний с пятью источниками запросов.
Имеется два внешних запроса на прерывания - линии ~INT0, ~INTO1 (разряды 2-й и 3-й третьего порта ввода/вывода , P3,2 и Р3,3, соответственно).
Рис.5.1. Архитектура системы прерываний МК51.
Источниками внутренних запросов могут служить;
- cчетчик / таймер О,
- счетчик/ таймер 1 ,
- порт последовательного ввода / вывода.
Архитектура системы прерывания МК иллюстрируется рис.5.1.
3. РЕГИСТРЫ СИСТЕМЫ ПРЕРЫВАНИЙ
Блок регистров системы прерываний включает регистр управления TCON, формат которого приведен на рис. 5.2.,, и два регистра для управления режимом прерываний и уровнями приоритетов. Форматы этих регистров приведены на рис. 5.3. и 5.4., соответственно.
Регистр TCON (адрес 88 в пространстве DSEG)
Адрес бита в пространстве BSEG |
8F |
8E |
8D |
8C |
8B |
8A |
89 |
88 |
Назначение разрядов регистра |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TCON. O ITO - управление типом входа ~INTO
IТО = O - по спадающему фронту
ITO =1 - статичесикй вход
ТСON. 1 IEO - флаг запроса на прерывание ~INTO1
при динамическом входе
TCON. 2 IT1 - управление типом входа ~ INT1
1Т1 = О - по спадающему фронту
1Т1 = 1 - статический вход
TCON.3 IEI - флаг запроса на прерывание ~ INTI
при динамическом входе
TCON.4 TRO - флаг программного управления СТО
TCON.5 TFO - флаг запроса прерывания по переполнению СТО
TCON.6 TR1 - флаг программного управления СТ1
TCON.7 TF1 - флаг запроса прерывания по переполнению СТ1
Рис.5.2. Регистр управления таймерами /счетчиками
и системой прерываний
Регистр IE (адрес A8 в пространстве DSEG)
Адрес бита в пространстве BSEG |
AF |
AE |
AD |
AC |
AB |
AA |
A9 |
A8 |
Назначение разрядов регистра |
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
IE.О EXO - маска IEO или ~ INTO
IE.1 EXO - маска TFO
IE.2 EX1 - маска IEI или ~ INTI1
IE.3 ET1 - маска TFI
IE.4 ES - маска ТI/RI
IE.7 EA - общее разрешение прерывания
Рис. 5.3. Регистр разрешения прерываний
Регистр IP (адрес B8 в пространстве DSEG)
Адрес бита в пространстве BSEG |
BF |
BE |
BD |
BC |
BB |
BA |
B9 |
B8 |
Назначение разрядов регистра |
- |
- |
- |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
IP. O PXO - приоритет IEO или ~ INTO
IP. 1 РТО - приоритет TFO
IP. 2 PXI - приоритет IEI или ~ INTI
IP. 3 PTI - приоритет TFI
IP. 4 PS - приоритет Т1/ RI
Рис.5.4. Регистр уровня прерываний
4. ОБСЛУЖИВАНИЕ ПРЕРЫВАНИЙ
Линии ~INTO и ~ INT1 (Р3.2, Р3.3) могут быть запрограммированы на срабатывание как по спадающему фронту сигнала,так и по низкому уровню сигнала. Управление типом вход выполняется флажками ITO и IT1 соответственно. При ITO=1 устанавливается режим срабатывания по L уровню сигнала на входе ~INTO.Аналогично и для IT1. Запросы на прерывание от внешних источников устанавливают флажки IEO и IE1. В случае работы по спадающему фронту эти флажки сбрасываются аппаратно,при приеме соответствующего запроса на обработку. При работе по уровню флажки IEO, IE1 отслеживают состояние сигнала на входе, их сброс необходимо предусмотреть в программе обработки соответствующим обращением к устройству, выставившему запрос.
Переполнение счетчика/таймера приводит к установке флага переполнения TFO для счетчика /таймера О и TFI для счетчика/ таймера 1. При приеме запроса на обработку прерывания от счетчика/таймера соответствующий флажок аппаратно сбрасывается.
Запросы на прерывание могут поступать и от последовательного порта ввода/вывода. Порт может взвести флажок TI - запрос на прерывание от передатчика или флажок RI - запрос на прерывание от приемника. Оба запроса воспринимаются как запрос от одного источника. Флажки RI,TI при приеме запроса на прерывание от порта аппаратно не сбрасываются. Их обнуление должно быть предусмотрено в обработчике прерывания.
Все флажки, фиксирующие запросы на прерывания, могут устанавливаться и сбрасываться программно, с помощью соответствующих команд работы в пространстве BSEG. Т.е. существует возможность вы зывать прерывания чисто программным путем.
С помощью регистра разрешения прерываний можно замаскировать любой из источников прерываний индивидуально или запретить/разрешить работу системы прерываний в целом.
Каждый источник прерываний может иметь два уровня приоритета,который задается установкой или сбросом соответствующегоразряда в регистре уровня приоритета IР. Установка разряда в 1 соответствует высокому приоритету. Установка разряда в О низкому. При обслуживании низкоприоритетного прерывания запрос на высокоприоритетное прерывание может быть принят и обслужен. При обслуживании высокоприоритетного прерывания запрос на низкоприоритетное игнорируется.
При одновременном появлении нескольких запросов одного уровня используется арбитраж в соответствии со следующими приоритетами :
Приоритет Источник
О (высший) IED
1 TF0
2 IEI
3 IF1
4 (низший) RI/TI
При приеме запроса аппаратно генерируется команда LCALL vect, которая обеспечивает переход к начальному адресу vect соответствующей процедуры обслуживания. Каждому источнику соответствует свой адрес :
Вектор прерываний
ОООЗН EXT IEO - внешний запрос О
OOOBH TIMERO TFO - по таймеру /счетчику О
OO1ЗН EXTI1 IE1 - внешний запрос 1
ОО1ВН TIMER1 TF1 - по таймеру/счетчику 1
ОО2ЗН SINT RI/TI - от последовательного порта
Запрос на прерывание может быть принят в конце каждого цикла выполнения команды, кроме команды RETI и команд,работающих с регистрами IE и IP.
При переходе к процедуре обслуживания текущее состояние РО загружается в стек ,обеспечивая возврат по команде RETI , которая должна завершать работу обработчика прерываний. Эта команда отличается от обычной RET тем , что сообщает системе прерываний о конце обслуживания прерывания данного уровня. Это позволяет перейти к обслуживанию прерывания низкого уровня,если на него поступил запрос во время обработки высокоуровневого. Общий алгоритм обработки прерываний микроконтроллера приведен на рис.5.5.
5. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Написать систему программ, которая выполняет следующие функции.
Первая программа выполняет циклический вызов прерывания типа TYPE. Программа располагается в CSEG, начиная с адреса ADRO. Программа должна состоять из двух частей. Первая часть - инициализация системы , вторая - циклическое взведение соответствующего триггера запроса на прерывание.
Вторая программа - обработчик прерывания , должна располагаться в памяти CSEG, начиная с адреса ADRI. Обработчик должен при каждом обращении передавать в порт Р1 очередной код из массива кодов длиной N, расположенный в CSEG, начиная с адреса ADF2.
Вход в систему программ по команде LCALL ADRO, расположенной в CSEG по адресу OOOOН.
Рис. 5.5. Алгоритм обработки прерываний.
Таблица 5.2. Варианты заданий.
Номер |
ADR0 |
TYPE |
ADR1 |
ADR2 |
N |
614 |
IE0 |
714 |
431 |
E |
|
52F |
TF0 |
62F |
541 |
F |
|
43E |
IE1 |
53E |
621 |
D |
|
34A |
TF1 |
44A |
711 |
C |
|
255 |
RI |
355 |
121 |
B |
|
366 |
TI |
266 |
236 |
A |
|
277 |
IE0 |
177 |
345 |
6 |
|
68A |
TF0 |
78A |
454 |
7 |
|
79D |
IE1 |
69D |
568 |
F |
|
3AF |
TF1 |
5AF |
677 |
E |
|
5BA |
RI |
4BA |
781 |
5 |
|
4C9 |
TI |
3C9 |
231 |
6 |
|
1D8 |
IE0 |
2D8 |
3A1 |
7 |
|
2E4 |
TF0 |
1E4 |
4B2 |
8 |
|
3F5 |
IE1 |
7F5 |
5C2 |
8 |
|
5E6 |
TF1 |
6E6 |
6D2 |
9 |
|
6A1 |
RI |
5A1 |
7E2 |
F |
|
7D3 |
TI |
4D3 |
1F2 |
A |
|
4C8 |
IE0 |
3C8 |
2E2 |
B |
|
36F |
TF0 |
26F |
3D2 |
C |
|
2BE |
IE1 |
4BE |
782 |
D |
|
1CA |
TF1 |
3CA |
232 |
E |
|
4D3 |
RI |
2D3 |
3A2 |
F |
|
3E7 |
TI |
1E7 |
4B2 |
8 |
|
6F3 |
IE0 |
7F3 |
5C2 |
8 |
|
4E5 |
TF0 |
6E5 |
6D2 |
9 |
|
6AD |
IE1 |
5AD |
7E4 |
C |
6. СОДЕРЖАНИЕ ОТЧЕТА :
- краткое описание системы прерываний ;
- задание по лабораторной работе ;
- текст программы с пояснениями ;
- черновик выполнения работы.
7. ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ
Необходимо написать программную систему со следующими функциями.
Программа 1 инициализирует систему и циклически вызывает прерывание типа IEI ( программный аналог запроса на прерывание по входу ~INTI). Программа должна располагаться в CSEG по адресу О1ООН.
Программа 2 является обработчиком прерывания. При каждом вызове она должна пересылать очередной элемент массива в порт Р1. Массив однобайтных кодов длиной О6Н располагается в CSEG, начиная с адреса О3ООН.
Вектор прерываний
0000 |
020100 |
LJMP |
0100 |
0003 |
00 |
NOP |
|
0013 |
020200 |
LJMP |
0200 |
0005 |
00 |
NOP |
|
Программа 1.
0100 |
900300 |
MOV |
DPTR,#0300 |
; загружаем DPTR |
0103 |
D2AF |
SETB |
IE.7 |
; разрешаем прерывания |
0105 |
D2AA |
SETB |
IE.2 |
; разрешаем прерывание IE1 |
0107 |
00 |
NOP |
|
; пустая команда |
0108 |
D28B |
SETB |
TCON.3 |
; программный запрос на прерывания |
010A |
80FB |
SJMP |
0107 |
; в начало цикла |
Программа 2.
0200 |
D2D3 |
SETB |
PSW.3 |
; задаем 3 банк |
0202 |
D2D4 |
SETB |
PSW.4 |
; |
0204 |
B80602 |
CJNE |
R0, #06, 0209 |
; проверяем счетчик |
0207 |
7800 |
MOV |
R0, #00 |
; обнуляем счетчик |
0209 |
E8 |
MOV |
A, R0 |
|
020A |
93 |
MOVC |
A,@A+DPTR |
; чтение очередного кода |
020B |
F590 |
MOV |
R1, A |
; засылка кода в Р1 |
020D |
08 |
INC |
R0 |
; инкремент счетчика |
020E |
32 |
RET |
I |
; возврат из обработчика |
Содержимое программной памяти
FD51 Print Out Program Memory
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0000 |
02 |
01 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0010 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0100 |
90 |
03 |
00 |
D2 |
AF |
D2 |
AA |
00 |
D2 |
8B |
80 |
FB |
00 |
00 |
00 |
00 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0100 |
D2 |
D3 |
D2 |
D4 |
B8 |
06 |
02 |
78 |
00 |
E8 |
93 |
F5 |
90 |
08 |
32 |
00 |
ЛАБОРАТОРНАЯ РАБОТА 6.
ТАЙМЕРЫ МИКРОКОНТРОЛЛЕРА КМ1 816ВЕ51.
Цель работы : изучение организации службы времени микроконтроллера КМ1816ВЕ51, а также приобретение навыков программирования временных задержек в кодах микроконтроллера с использованием службы времени.
1. ОРГАНИЗАЦИЯ ТАЙМЕРОВ
В состав ВЕ51 входит два 16-разрядных таймера/счетчика (рис.6.1),каждый из которых состоит из двух программно-доступных регистров ТНО,ТLО (таймер О), ТН1, TL1 (таймер 1).
Рис. 6.1. Регистры таймеров/счетчиков
Каждый таймер/счетчик может быть запрограммирован на работу в режиме таймера - подсчета числа машинных циклов,следующих с частотой OSC/12 (обычно 1 Мгц), либо счетчика - подсчета числа переходов из Н и L на соответствующих входах ТО и Т1. Функцией таймера/счетчика и выбором режима его работы управляет регистр TMOD ( Timer/Counter Mode), формат которого приведен на рис. 6.2.
Регистр TMOD (адрес 89 в пространстве DSEG)
|
T1 MOD |
T0 MOD |
||||||
Мнемоническое обозначение разрядов регистра |
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
CT0 CT1
TMOD.0 TMOD.4 M0 - младший бит поля режима
TMOD.1 TMOD.5 M1 - старший бит поля режима
TMOD.2 TMOD.6 C/T - Выбор функции: 0-таймер / 1-счетчик
TMOD.3 TMOD.7 GATE - Управление работой CT0 / CT1
Рис. 6.2. Формат регистра режимов таймеров/счетчиков
Разряд С/Т задает функцию таймера\.счетчика . При С/Т =0 таймер/счетчик работает в режиме таймера. При С/Т = 1 - в режиме счетчика. Разряды М0,М1 определяют режим работы таймера - счетчика. Каждый таймер/счетчик может работать в 4-х режимах.
В режиме 0 счетный регистр имеет длину 13 бит (см. рис.6.3.а), причем 5 младших разрядов расположены в TL, а 8 старших - в ТН. Сигнал переполнения фиксируется соответствующим флажком TF.
В режиме 1 счетный регистр иммет длину 16 разрядов. В остальном режим не отличается от режима 0.
В режиме 2 ( рис. 6.3.б) задается 8-разрядный регистр таймера/счетчика (TL), с автоматической загрузкой начального кода из ТН. Сигнал перполнения таймера/счетчика не только взводит флажок TF, но и перегружает TL содержимым ТН.
В режиме 3 работает только таймер/счетчик 0. В этом режиме два регистра СТО рассматриваются как два независимых 8-разрядных таймера/счетчика. Переполнение TLO вызывает взведение флага TFO,переполнение ТНО устанавливает флаг TFI.
Независимо от режима работы иммется возможность программного и аппаратного управления пуском/остановой счета импульса. Логика пуска/останова анализирует состояние разряда GATE в регистре ТМОD и разряда TR в регистре TCON ( Timer/Counter ContrI), формат которого приведен на рис. 6.4.
Рис.6.3. Режимы работы счетчиков/таймеров
Регистр TCON (адрес 88 в пространстве DSEG)
Адрес бита в пространстве BSEG |
8F |
8E |
8D |
8C |
8B |
8A |
89 |
88 |
Назначение разрядов регистра |
TF1 |
TR1 |
TF0 |
TR0 |
|
|
|
|
TCON. 4 TRO - флаг программного запуска/останова СТО
TCON. 5 TFO - флаг запроса прерывания по переполнению СТО
TCON. 6 TRI - флаг программного запускап/останова СТ1
TCON. 7 TFI - флаг запроса прерывания по переполнению СТ1
Рис. 6.4. Формат регистра управления таймерами/счетчиками
Работа таймера/счетчика разрешается только, если взведен соответствующий разряд TR. При этом разряд GATE должен быть нулевым или на входе ~INT~ - низкий уровень. Для подачи внешних сигналов на таймеры/cчетчики и логику их управления используются разряды порта 3 (см. рис.6.5).
P3 (адрес B0 в пространстве DSEG)
Адрес бита в пространстве BSEG |
B7 |
B6 |
8D |
8C |
8B |
8A |
89 |
88 |
Спец. назначение контактов порта |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
Р3.2 INTO - вход запроса на прерывание О
Р3.3 INTI - вход запроса на прерывание 1
Р3.4. ТО - счетный вход таймера/счетчика О
Р3.5. Т1 - счетный вход таймера/счетчика 1
Рис . 6.5. Использование порта РЗ для подключения внешних сигналов
ЗАМЕЧАНИЕ !
Эмулятор FD51 с ошибками моделирует работу таймеров/счетчиков микроконтроллера. Для отладки программ рекомаендуется использовать таймеры/счетчики в режиме 2 с программной загрузкой начального содержимого таймера в обработчике прерывания.
2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Написать систему программ, которая выполняет следующие функции.
Обработчик прерывания от таймера О инкрементирует содержимое ячейки ADRT и загружает начальное состояние в регистр TLO.
Первая программа выпролняет циклический анализ содержимого ADRT и вызывает подпрограмму вывода массива кодов в порт. Программа располагается в CSEG,начиная с адреса ADRO. Программа должна состоять из двух частей. Первая часть - инициализация системы , вторая - анализ содержимого ADRTи вызов подпрограммы.
Вторая программа - должна располагаться в памяти CSEG, начиная с адреса ADRI. Она должна при каждом обращении передавать в порт Р1 масссив кодов длиной N, расположенный в CSEG,начиная с адреса ADR2.
Начальный код в таймере и константа сравнения должны быть выбраны так ,чтобы вызов подпрограммы выполнялся каждые 1 мкс. Считаем , что частота OSC/12 = 1 Мгц.
Вход в систему программ по команде LCALL ADRO, расположенной в CSEG по адресу ОООН.
Варианты заданий приведены в табл.6.1.
Массив кодов должен соответствовать массиву программы 2 из лабораторной работы номер 5.
3. СОДЕРЖАНИЕ ОТЧЕТА :
- краткое описание организации службы времени;
- задание по лабораторной работе;
- текст программы с пояснениями;
- черновик выполнения работы.
4. ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ
Написать программную систему, в которой подпрограмма вывода массива кодов вызывается каждые 1ООО мкс.
Обработчик прерывания от таймера О инкрементирует содержимое ячейки ADRT= 5О.
Первая программа выполняет циклический анализ содержимого ADRT и вызывает подпрограмму вывода массива кодов в порт. Программа располагается в CSEG, начиная с адреса О1ООН. Программа должна состоять из двух частей. Первая часть - инициализация системы, вторая - анализ содержимого ADRT и вызов подпрограммы.
Вторая программа - должна располагаться в памяти CSEG, начиная с адреса О2ООН. Она должна при каждом обращении передавать в порт Р1 массив кодов длиной 6, расположенный в CSEG,начиная с адреса О3ООН.
Вход в систему программ по команде LCALL ADRO, расположенной в CSEG по адресу ООООН.
Таблица 6.1. Варианты заданий.
Номер |
ADRT |
ADR0 |
ADR1 |
ADR2 |
N |
T |
21 |
614 |
714 |
431 |
E |
500 |
|
22 |
52F |
62F |
541 |
F |
550 |
|
23 |
43E |
53E |
621 |
D |
600 |
|
24 |
34A |
44A |
711 |
C |
650 |
|
25 |
255 |
355 |
121 |
B |
700 |
|
26 |
366 |
266 |
236 |
A |
750 |
|
27 |
277 |
177 |
345 |
6 |
800 |
|
28 |
68A |
78A |
454 |
7 |
850 |
|
29 |
79D |
69D |
568 |
F |
900 |
|
2A |
3AF |
5AF |
677 |
E |
950 |
|
2B |
5BA |
4BA |
781 |
5 |
1000 |
|
2C |
4C9 |
3C9 |
231 |
6 |
1050 |
|
2D |
1D8 |
2D8 |
3A1 |
7 |
1100 |
|
2E |
2E4 |
1E4 |
4B2 |
8 |
1150 |
|
2F |
3F5 |
7F5 |
5C2 |
8 |
1200 |
|
30 |
5E6 |
6E6 |
6D2 |
9 |
1250 |
|
31 |
6A1 |
5A1 |
7E2 |
F |
1300 |
|
32 |
7D3 |
4D3 |
1F2 |
A |
1350 |
|
33 |
4C8 |
3C8 |
2E2 |
B |
1400 |
|
34 |
36F |
26F |
3D2 |
C |
1450 |
|
35 |
2BE |
4BE |
782 |
D |
1500 |
|
36 |
1CA |
3CA |
232 |
E |
1550 |
|
37 |
4D3 |
2D3 |
3A2 |
F |
1600 |
|
38 |
3E7 |
1E7 |
4B2 |
8 |
1650 |
|
39 |
6F3 |
7F3 |
5C2 |
8 |
1700 |
|
3A |
4E5 |
6E5 |
6D2 |
9 |
1750 |
|
3B |
6AD |
5AD |
7E4 |
C |
1800 |
Выберем начальную константу для таймера таким образом, чтобы прерывание от него поступало каждые 100 мкс. Так как максимальное число число в таймере 255 , следовательно начальное его значение должно быть 255 - 100 = 155 = 9ВН. Для задания интервала 100 мкс. в ячейке ADRT должен декрементироваться код 10 = 0АН.
0000 |
020100 |
LJMP |
0100 |
; Переход по включению питания |
0003 |
00 |
NOP |
|
|
0004 |
00 |
NOP |
|
|
0005 |
00 |
NOP |
|
|
0006 |
00 |
NOP |
|
|
0007 |
00 |
NOP |
|
|
0008 |
00 |
NOP |
|
|
0009 |
00 |
NOP |
|
|
000A |
00 |
NOP |
|
; Обработчик прерывания |
000B |
758A9B |
MOV |
TL0, #9B |
; Восстановление TL0 |
000E |
0550 |
INC |
50 |
; Инкремент ADRT |
0010 |
32 |
RET |
I |
; Возврат из прерывания |
Основная программа
0100 |
900300 |
MOV |
DPTR, #0300 |
; Инициализация DPTR |
0103 |
758A9B |
MOV |
TL0, #9B |
; Константу в TL0 |
0106 |
758902 |
MOV |
TMOD, #02 |
; Режим 2 |
0109 |
75A882 |
MOV |
IE, #82 |
; Разрешение прерывания |
010C |
758810 |
MOV |
TCON, #10 |
; Разрешение счета |
010F |
00 |
NOP |
|
; |
0110 |
E550 |
MOV |
A,50 |
; |
0112 |
B40AFB |
CJNE |
A, #0A, 0110 |
; Прошло 1000 мкс? |
0115 |
755000 |
MOV |
50, #00 |
; Обнуление ADRT |
0118 |
120200 |
LCALL |
0200 |
; Вызов подпрограммы |
011B |
80F3 |
SJMP |
0110 |
; На проверку |
011D |
00 |
NOP |
|
|
Подпограмма пересылки кодов в Р1
0200 |
020100 |
LJMP |
0100 |
|
0202 |
D2D3 |
SETB |
PSW.3 |
|
0204 |
D2D4 |
SETB |
PSW.4 |
|
0206 |
A800 |
MOV |
R0, #00 |
|
0207 |
E8 |
MOV |
A, R0 |
|
0208 |
93 |
MOVC |
A,@A+DPTR |
|
020A |
08 |
INC |
R0 |
|
020B |
B806F8 |
CJNE |
R0, #06, 0206 |
|
020E |
22 |
RET |
|
Лабораторная работа 7
УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМО-ПЕРЕДАТЧИК КМ1816ВЕ51.
(ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ)
Цель работы : изучение организации системы ввода/вывода микроконтроллера КМ1816ВЕ51 при помощи программной имитации работы универсального асинхронного приемо-передатчика.
1. ОРГАНИЗАЦИЯ СИСТЕМЫ ВВОДА - ВЫВОДА
В состав ВЕ51 входит универсальный асинхронный приемо-передатчик (последвательный порт) , обеспечивающий прием и /или передачу информации последовательным кодом (младшими байтами вперед).
В состав порта входят:
- принимающий регистр,
- передающий регистр ,
- буферный регистр ( SBUF, адрес 99Н),
- регистр управления - состояния ( SCON, адрес 98Н ), формат которого приведен на рис. 7.1.
Регистр SCON (адрес 98 в пространстве DSEG)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Мнемоническое обозначение разрядов регистра |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
Рис. 7.1. Формат регистра SCON
Биты регистра имеют следующее функциональное назначение :
SM, SMO - задают режим работы УАПП
О О режим О - сдвигающий регистр
О 1 режим 1 - 8 бит, изменяемая скорость
1 О режим 2 - 9 бит , фиксированная скорость
1 1 режим 3 - 9 бит, изменяемая скорость
SM2 - бит управления режимом , устанавливается программно для запрета приема кадров с девятым битом равным нулю;
REN - бит разрешения /запрета приема , устанавливается программно для разрешения приема данных :
ТВ8 - девятый бит передатчика в режиме 2 и 3 ;
RB8 - девятый бит приемника в режиме 2 и 3 ;
ТI - флаг прерывания передатчика, устанавливается аппаратно при окончании передачи кадра, сбрасывается программно ;
RI - флаг прерывания приемника, устанавливается аппаратно при окончании приема кадров , сбрасывается программно.
Режим работы УАПП должен задаваться программно, загрузкой двух старших бит регистра SCON.
1.1. Работа УАПП в режиме О.
Информация передается и принимается через внешний вывод входа приемника RхD ( Р3.0 ). Принимаются или передаются только 8 бит данных. Через внешний вывод выхода передатчика ТхD ( Р3.1 ) выдаются импульсы сдвига с частотой OSC/12 , которые сопровождают каждый бит.
Передача начинается после выполнения любой команды, которая загружает код в буферный регистр SBUF. Автоматически содержимое SBUF переписывается в сдвигающий регистр передатчика, и в каждом машинном цикле ( в момент S6Р2 ) содержимое сдвигающего регистра сдвигается вправо и подается на выход RхD ( рис.7.2.). В освобождающиеся биты записываются 0. Когда сдвигающий регистр весь заполнится нулями - передача закончена, устанавливается флаг Т1.
Рис. 7.2. Формат передачи данных в режиме 0 .
Прием начинается при условии REN = 1 и RI = 0. Установка REN и сброс RI должны выполняться программно. Как только условие начала приема выполнено, начинается ( S6Р2 ) выдача синхросигналов на выход ТхD и считывание битов с входа RхD в моменты S5Р2 каждого машинного цикла. После 8 машинных циклов , в начале 9 ( в момент S1Р1 ) содержимое сдвигающего регистра приемник переписывается в SBUF, аппаратурно сбрасывается REN и устанавливается RI.
1.2. Работа УАПП в режиме 1.
В этом режиме выполняется асинхронный прием/передача 11-разрядного кадра : стартовый бит ( 1 разряд) , байт данных ( 8 разрядов ) и стоповый бит ( 1 разряд ) . Скорость приема/передачи задается таймером.
Данные передаются через ТхD и принимаются через RхD. Передача инициируется любой командой, которая записывает в SBUF байт для передачи. При этом в девятый ( стоповый ) бит передатчика записывается 1. В момент времени SIPI следующей команды на выходе ТхD появляется стартовый бит (низкий уровень ) , а затем и биты данных. Последним выдается стоповый бит , всегда равный Н. Во время его формирования взводится триггер Т1 - запрос на прерывание по завершении передачи. Длительность выдачи каждого бита равна 16 периодам работы внутреннего счетчика.
Рис. 7.3. Кадр передачи данных в режиме 1
Прием начинается при обнаружении на входе R хD перехода сигнала из Н в L. При обнаружении перехода в сдвигающий регистр приемника загружается код 1FFН , а внутренний счетчик тактов перезапускается . В состоянии 7,8,9 внутреннего счетчика тактов проверяется уровень сигнала на входе RхD. Если в двух случаях их трех уровень не L , считается, что пришла помеха и снова начинается ожидание стартового бита - перехода из Н в L .
Если в эти же моменты в двух случаях из трех зафиксирован уровень L, считается что пришел стартовый бит. Стартовый бит сдвигается в регистр приемника и продолжается прием остальных бит кадра. При приеме каждого бита происходит фиксация уровня входного сигнала в состояниях 7,8,9 внутреннего счетчика. Значение сигнала принмается равным полученному не менее 2 раз из трех.
Принятый байт загружается в буферный регистр SBUF только если R1=0 и, либо SM2 = 0, либо принятый стоп-бит равен 1. При этом в RB8 загружается 1. В противном случае информация теряется и приемник начинает поиск стартового бита.
В режиме 1 ( как в режиме 3 ) частота передачи приема данных УАПП определяется таймером СТ1, вернее частотой его переполнения , и состоянием старшего разряда регистра РСОN - SMOD ( адрес регистра PCON - 87Н ). Частота приема/передачи равна частоте переполнения СТ1 деленное на 32 , если SMOD = 0. Если SMOD установлен в 1 , частота приема/передачи равна частоте переполнения СТ1 деленной на 16 т.е. в два раза выше. СТ1 при синхронизации УАПП может работать в любом режиме, однако запрос на прерывание ТF1 по переполнению СТ1 должен быть заблокирован.
1.3. Работа УАПП в режиме 2.
В этом режиме происходит асинхронный прием/передача 12-разрядного кадра : стартовый бит (1 разряд) , байт данных ( 8 разрядов) , программируемый бит данных ( 1 разряд ) и стоповый бит ( 1 разряд ) . Скотрость приема/передачи задается программно и может быть равна 1/32 или 1/54 частоты OSC, в зависимости от состояния разряда SCON регистра PCON.
Режим 2 отличается от режима 1 только наличием дополнительного 9 программируемого бита. При передаче стоповым битом вставляется 9 бит, равный содержимому ТВ8 регистра SCON.
Рис. 7.4. Кадр передачи данных в режиме 2
При приеме 9 бит записывается в RВ8 регистра SCON. Причем и перезапись байта из регистра сдвига в буферный регистр SВUN и перезапись 9 бита в R В8 происходит только в том случае, если при приеме стопового бита выполняется два условия : бит R 1 = 0, и либо SM2= 0, либо значение принятого 9 бита равно 1.
1.4. Работа УАПП в режиме 3.
Режим предусматривает выполнение асинхронного приема/передачи 12-разрядного кадра. Работа аналогично режиму 2, но скорость передачи задается таймером, как в режиме 1.
ЗАМЕЧАНИЕ !
Эмулятор FD51 не моделирует работу УАПП.
2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Написать подпрограмму, которая имитирует работу передатчика УАПП в заданном режиме, и программу ее вызова.
Режим 0 - выдача только разрядов байта
Режим 1 - выдача стартового бита, байта данных и стопового бита
Режим 2 - выдача стартового бита , байта данных, дополнительного бита (ТВ8) и стопового бита.
Байт данных для выдачи должен передаваться в подпрограмму через SВUF. Выдача последовательного кода должна осуществляться через разряд N и порта РХ.
Период выдачи одного бита должен быть равен 1 и задаваться с помощью счетчика-таймера ТСО.
После выдачи кадра подпрограмма должна установить флаг запроса на прерывание Т1.
Основная программа должна обращаться к подпрограмме и выдавать массив байт, начинающихся в CSEG по адресу ADRO, длиной S байт. Содержимое массива задать как символьные коды начальных букв фамилии студента в кодировке ASC11.
Адрес программы вызова и подпрограммы произвольный.
Таблица 7.1. Варианты заданий.
Номер |
Режим |
ADR0 |
S |
PX |
N |
T |
0 |
714 |
7 |
0 |
0 |
10 |
|
1 |
62F |
6 |
1 |
1 |
15 |
|
2 |
53E |
5 |
2 |
2 |
20 |
|
0 |
44A |
8 |
3 |
3 |
25 |
|
1 |
355 |
9 |
0 |
4 |
15 |
|
2 |
266 |
7 |
1 |
5 |
50 |
|
0 |
177 |
6 |
2 |
6 |
30 |
|
1 |
78A |
5 |
3 |
7 |
40 |
|
2 |
69D |
9 |
0 |
1 |
10 |
|
0 |
5AF |
8 |
1 |
2 |
50 |
|
1 |
4BA |
7 |
3 |
3 |
30 |
|
2 |
3C9 |
6 |
2 |
4 |
35 |
|
0 |
2D8 |
10 |
0 |
5 |
10 |
|
1 |
1E4 |
9 |
1 |
6 |
15 |
|
2 |
7F5 |
8 |
2 |
7 |
20 |
|
0 |
6E6 |
7 |
3 |
0 |
25 |
|
1 |
5A1 |
6 |
2 |
3 |
30 |
|
2 |
4D3 |
5 |
1 |
4 |
35 |
|
0 |
3C8 |
11 |
0 |
5 |
40 |
|
1 |
26F |
10 |
0 |
6 |
45 |
|
2 |
4BE |
9 |
1 |
7 |
50 |
|
0 |
3CA |
8 |
2 |
0 |
55 |
|
1 |
2D3 |
7 |
3 |
1 |
60 |
|
2 |
1E7 |
6 |
0 |
2 |
65 |
|
0 |
7F3 |
5 |
1 |
5 |
70 |
|
1 |
6E5 |
12 |
2 |
6 |
75 |
|
2 |
5AD |
11 |
3 |
7 |
80 |
3. СОДЕРЖАНИЕ ОТЧЕТА :
- краткое описание организации УАПП для вывода информации;
- форматы основных регистров ввода/вывода ;
- задание по лабораторной работе;
- текст программы с пояснениями;
- черновик выполнения работы.
ЛАБОРАТОРНАЯ РАБОТА 8
УНИВЕРСАЛЬНЫЙ АСИНХРОННЫЙ ПРИЕМО-ПЕРЕДАТЧИК КМ1816ВЕ51 ( ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ )
Цель работы: изучение организации системы ввода/вывода микроконтроллера КМ1816ВЕ51 при помощи программной имитации работы универсального асинхронного приемо-передатчика в режиме ввода.
1. ЗАДАНИЕ ПО ЛАБОРОТОРНОЙ РАБОТЕ
Написать подпрограмму, которая имитирует работу приемника УАПП в заданном режиме , и программу ее вызова.
Режим 0 - прием только разрядов байта
Режим 1 - прием стартового бита, байта данных и стопового бита
Режим 2 - прием стартового бита , байта данных, дополнительного бита ( ТВ8) и стопового бита.
Подпрограмма должна возвращать принятый байт данных в вызывающую программу через SBUF . Ввод последовательного кода должен осуществляться через разряд N порта PX. Имитация ввода при отладке программы и демонстрации ее работоспособности должна выполняться с помощью ручного редактирования значения соответствующего бита порта.
Период приема одного бита должен быть равен 1 и задаваться с помощью счетчика-таймера ТСО. Проверка значения вводимого бита должна выполняться путем трехкратного последовательного считывания в центре битового интервала.
После приема кадра подпрограмма должна установить флаг запроса на прерывание Т1.
Основная программа должна вызывать подпрограмму имитации, принимать байт из подпрограммы и размещать его в DSEG по адресу ADRO.
Адрес программы вызова и подпрограммы произвольный .
Таблица 8.1. Варианты заданий.
Номер |
Режим |
ADR0 |
PX |
N |
T |
0 |
94 |
0 |
0 |
10 |
|
1 |
8F |
1 |
1 |
15 |
|
2 |
AE |
2 |
2 |
20 |
|
0 |
FA |
3 |
3 |
10 |
|
1 |
C5 |
0 |
4 |
15 |
|
2 |
D6 |
1 |
5 |
50 |
|
0 |
E7 |
2 |
6 |
30 |
|
1 |
FA |
3 |
7 |
40 |
|
2 |
9D |
0 |
1 |
10 |
|
0 |
AF |
1 |
2 |
50 |
|
1 |
BA |
3 |
3 |
30 |
|
2 |
C9 |
2 |
4 |
35 |
|
0 |
D8 |
0 |
5 |
10 |
|
1 |
E4 |
1 |
6 |
15 |
|
2 |
F5 |
2 |
7 |
20 |
|
0 |
E6 |
3 |
0 |
25 |
|
1 |
A1 |
2 |
3 |
30 |
|
2 |
D3 |
1 |
4 |
35 |
|
0 |
C8 |
0 |
5 |
40 |
|
1 |
6F |
0 |
6 |
45 |
|
2 |
BE |
1 |
7 |
50 |
|
0 |
CA |
2 |
0 |
55 |
|
1 |
D3 |
3 |
1 |
60 |
|
2 |
E7 |
0 |
2 |
65 |
|
0 |
F3 |
1 |
5 |
70 |
|
1 |
E5 |
2 |
6 |
75 |
|
2 |
AD |
3 |
7 |
80 |
2. СОДЕРЖАНИЕ ОТЧЕТА :
- краткое описание организации УАПП для ввода информации;
- форматы основных регистров ввода/вывода;
- задание по лабораторной работе;
- текст программы с пояснениями;
- черновик выполнения работы.
ЛАБОРАТОРНАЯ РАБОТА 9
ПРОГРАММИРОВАНИЕ МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ
КОНТРОЛЯ ТЕМПЕРАТУРЫ
Цель работы : приобретение навыков программирования простейших микропроцессорных систем контроля.
1. СТРУКТУРА МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ КОНТРОЛЯ
На базе микроконтроллера КМ1816ВЕ51 построена система контроля температуры. Структура системы включает ( см. рис. 9.1 ) :
- микроконтроллер;
- аналого-цифровой преобразователь;
- датчик температуры;
- сигнальные лампочки.
Датчик температуры измеряет температуру Т ( в градусах Цельсия) контролируемого объекта и преобразует ее в напряжение U(Т) в вольтах. Температура изменяется от 0 до Т mах градусов. Напряжение на выходе датчика изменяется от 0 до Umax. Закон преобразования имеет вид ;
U (T) = ( Umax/T max ) * T
Выход датчика подключен к входу аналого-цифрового преобразователя,который преобразует входное напряжение в диапазоне от 0 до Umax вольт в эквивалентный десятиразрядный код N . Закон преобразования имеет вид :
N = (1024/Umax) * U (T)
Рис.9.1. Структура системы контроля температуры.
АЦП запускается на преобразование сигналом "ПУСК", время преобразования t(мкс). По истечении времени преобразования на выходах АЦП устанавливается истинный код входного напряжения.
Информационный выход АЦП подключен к портам Р0 и Р1 микроконтроллера. Вход запуска АЦП управляется установкой в нулевое состояние бита Р2.0 порта Р2. К выходам порта Р2 (разряды 1,2,3) подключены также лампочки сигнализации, соответственно, красная,зеленая и синяя. Установка выхода в 0 состояние зажигает лампочку.
2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Написать программу работы микроконтроллера, циклически выполняющие следующие функции:
- запуск АЦП на преображение ;
- ожидание завершения преобразования (t мкс);
- ввод кода температуры;
- анализ введенного значения температуры Т:
если Т >К1* Tmax - должна гореть красная лампочка,
если К2 *Tmax<T<К1* Tmax - должна гореть зеленая лампочка,
если Т< К2* Tmax - должна гореть синяя лампочка.
Таблица 9.1. Варианты заданий
Номер |
Tmax |
Umax |
K1 |
K2 |
t |
70 |
5 |
0.95 |
0.05 |
90 |
|
80 |
6 |
0.85 |
0.1 |
80 |
|
90 |
7 |
0.75 |
0.15 |
50 |
|
100 |
8 |
0.7 |
0.2 |
60 |
|
110 |
9 |
0.8 |
0.25 |
70 |
|
120 |
10 |
0.9 |
0.05 |
40 |
|
130 |
1 |
0.95 |
0.1 |
90 |
|
140 |
2 |
0.85 |
0.15 |
80 |
|
200 |
3 |
0.75 |
0.2 |
50 |
|
250 |
4 |
0.7 |
0.25 |
60 |
|
300 |
5 |
0.8 |
0.05 |
70 |
|
260 |
6 |
0.9 |
0.1 |
40 |
|
160 |
7 |
0.95 |
0.15 |
90 |
|
170 |
8 |
0.85 |
0.2 |
80 |
|
180 |
9 |
0.75 |
0.25 |
50 |
|
190 |
10 |
0.7 |
0.05 |
60 |
|
210 |
1 |
0.8 |
0.1 |
70 |
|
310 |
2 |
0.9 |
0.15 |
40 |
|
290 |
3 |
0.95 |
0.2 |
90 |
|
280 |
4 |
0.85 |
0.25 |
80 |
|
270 |
5 |
0.75 |
0.05 |
50 |
|
50 |
6 |
0.7 |
0.1 |
60 |
|
150 |
7 |
0.8 |
0.15 |
70 |
|
500 |
8 |
0.9 |
0.2 |
40 |
|
450 |
9 |
0.95 |
0.25 |
90 |
|
560 |
10 |
0.85 |
0.1 |
80 |
3. СОДЕРЖАНИЕ ОТЧЕТА:
- краткое описание структуры микропроцессорной системы контроля;
- задание по лабораторной работе;
- текст программы с пояснениями;
- расчет граничных значений температуры и соответствующих кодов;
- черновик выполнения работы.
ЛАБОРАТОРНАЯ РАБОТА 10
ПРОГРАММИРОВАНИЕ МИКРОППРОЦЕССОРНОЙ СИСТЕМЫ КОНТРОЛЯ ТЕМПЕРАТУРЫ (часть 2)
Цель работы : приобретение навыков программирования простейших микропроцессорных систем контроля.
1. ОРГАНИЗАЦИЯ СИСТЕМЫ КОНТРОЛЯ ТЕМПЕРАТУРЫ
На базе микроконтроллера КМ1816ВЕ51 построена система контроля температуры. Описание приведено в лабораторной работе N 9.
Микроконтроллер системы подключен через линию последоваптельной передачи данных к центральной вычислительной машине. Микроконтроллер после каждого опроса и включения/выключения лампочек должен передать через последовательный порт код принятого значения температуры в истинной размерности (точность представления - 1 градус Цельсия).
Расчет истинного значения температуры Т (в градусах Цельсия) контролируемого объекта и преобразует ее в напряжение U(Т) в вольтах. Температура изменяется от 0 до т max градусов. Напряжение на выходе датчика изменяется от 0 до U max. Закон преобразования имеет вид :
U(T) = [ U max/Tmax ] * T
Выход датчика подключен в входу аналого-цифрового преобразователя,который преобразует входное напряжение в диапазоне от 0 до Umax вольт в эквивалентный десятиразрядный код N. Закон преобразования имеет вид :
N = [ 1024/Umax] * U (T) = (1024/Umax) * (Umax/Tmax) * Т
Пусть известно Тmax и Nmax =1024. Тогда код истинного значения температуры Тх можно вычислить по формуле :
Tx = N * Tmax/1024
Таким образом вычисление истинного значения температуры можно свести к умножению введенного кода N на известную константу Tmax и сдвигу полученного результата на 10 разрядов вправо.
2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Дополнить программу из лабораторной работы N 9 программными блоками, реализующими следующие функции:
- расчет истинного значения температуры (формат представления истинного значения температуры - шестнадцатиразрядное целое без знака);
- передачу полученного истинного значения температуры по последовательному каналу. Должно выдаваться два байта в формате, заданном в лабораторной работе N 7.
3. СОДЕРЖАНИЕ ОТЧЕТА :
- краткое описание структуры микропроцессорной системы контроля;
- задание по лабораторной работе;
- текст программы с пояснениями;
- контрольный просчет значений температуры для различных входных кодов;
- оценка погрешности вычисления истинного значения температуры;
- черновик выполнения работы.
Л И Т Е Р А Т У Р А
1. Сташин В.В. и др. Проектирование цифровых устройств на однокристальных микроконтроллерах. В.В.Сташин, А.В.Урусов, О.Ф.Мологонцева. - М.,Энергоатомиздат, 1990. - 224с.
2. Щелкунов Н.Н. , Дианов А.П. Микропроцессорные средства и системы. М., Радио и связь, 1989. - 288 с.: ил.
ПРИЛОЖЕНИЕ
ЭМУЛЯТОР КМ1816ВЕ51
Полноэкранный отладчик-эмулятор для программ, написанных на языке ассемблера однокристальных микро-ЭВМ КР1816ВЕ51/КМ1816ВЕ51/КР1816ВЕ35 обеспечивает полный набор возможностей для логической отладки программ. В качестве загружаемой для отладки программы используются стандартные файлы,вырабатываемые ISIS-1I MACRO ASSEMBLER'ом , а также файлы чистого двоичного кода программы, полученные например, считыванием ПЗУ. Загруженную программу можно выполнить по шагам и в непрерывном режиме с остановкой по точкам прерывания, задаваемых пользователем. Обеспечивается трассировка выполнения программы, печать дисассемблированного текста, дампов памяти данных и программ. По ходу выполнения программы можно оперативно корректировать содержимое ОЗУ, регистров и вносить изменения в саму программу в мнемонических обозначениях языка ассемблера и машинных кодах. Отладчик иммет счетчик времени выполнения загруженной программы. Предполагается,что тактовая частота равна 12 Мгц. При другой частоте пересчет производится простым умножением на коэффициент.
1. КОМАНДЫ ОТЛАДЧИКА
Команды вводятся с клавиатуры. Сразу после запуска FD51 готов к приему команды. При вводе команды можно пользоваться клавишами [Del], [Ins], [BaskSpace], [ Left] , [ Right]. Ввод команды завершается нажатием клавиши [Enter]. При неправильном вводе команды выдается сообщение об ошибке или просто звуковой сигнал. Чтобы воспользоваться справочной информацией ( написанной на английском языке) , следует ввести команду "H" ( Help) либо нажать одновременно клавиши <Alt> и " H".
L [ < тип памяти > < нач. адрес>, ] < файл. спец. >[ / A ]
Загрузить файл в память . <Тип памяти> может быть I, Е или Р . В соответствии с этим параметром файл загружается во внутреннюю (tnt), внешнюю (Ехt) или программную (Pgm) память. <Нач.адрес> и <тип памяти > указывается только при загрузке чистого двоичного кода. При загрузке файла , выработанного ISIS - II MACRO - ASSEMBLER'ом ,нужно указать только спецификацию файла и ключ /A. Пример : L O1F, A:\ REM\ Т1 - загрузить двоичный файл во внутреннюю память с адреса O1F.
S < тип памяти > < нач. адрес > - < кон. адрес >, <файл. спец. >
Сохранить область памяти в дисковом файле ( вообще говоря, во всех командах в качестве < файл. спец.> допускается любое конкретное в DOS имя файла, например COMI). < нач. адрес > и < кон. адрес > указывают соответственно начало и конец сохраняемой области. Сохраненый командой S файл можно потом снова загрузить командой L. Пример : S P 20-642, С: \PGMLIB\ MYFILE
PRT < тип памяти > < нач. адрес > - < кон.адрес> [, <файл.спец.> ]
Распечатать дамп области памяти в шестнадцатеричном формате. Если не указана < файл. спец. > , то дамп выводится на принтер.
PRTD < нач. адрес >, < количество команд > [, < файл.спец.> ]
Распечатать дисассемблированный текст, начиная с < нач. адреса>. Вывод по умолчанию на принтер.
R < номер регистра > = < число >
Занести число в регистр текущего банка. Число должно быть байтом. Пр. R4 = FF
< Имя регистра > = < число >
Занести число в регистр специального назначения. Можно использовать следующие имена :
А,В,
THO , THI, TLO, TLI,
DPH, DPL, DPTR ,
SP , IP , IE,
TMOD , TCON, SCON, SBUF, РС.
Число для РС и DPTR может быть и двухбайтовой величиной.
Пример : SP = 20 DPTR = FF00
< Имя флага > = < число >
Установить или сбросить флаг в PSW. Имена флагов : C, АС,FO, SI, SO,OV,Р. Если число= 0 , то флаг сбрасывается, иначе- устанавливается. Пр.: SI = 0
PO < номер порта > = < число >
Занести число в порт. Номер порта может быть 0 -3. Пр. : 02 =12
D < адрес >
Установить адрес дисассемблированного текста в окне. Пр.: 0240
< Тип памяти > < адрес > [ - < кон. адрес >] = < число >
Занести число в память. Если указан <кон. адрес > , то этим числом заполняется область памяти. Пр. : I 22 =55 P 0-40=FF
< Тип памяти > < адрес > . < номер бита > = <число >
Установить или сбросить бит в памяти. <Номер бита > может быть 7 - 0 ( старший бит - 7 ). Пр. : I 20 . 6 = 1
< Имя регистра > , < номер бита > = < число >
Установить или сбросить бит в регистре специального назначения ( А,В,Р00 Р03, 1Р, 1Е, TMOD, TCON, SCON). Пр. : TMOD. 3=0
М < тип памяти > <нач. адрес >
Установить начальный адрес памяти в окне. Пр. : М I 20 М Е OFF М Р О
G [ < нач. адрес > , < кон. адрес> ] ]
Выполнить программу с < нач. адреса > до < кон. адреса > . Если < нач.адрес> не указан, выполнение начинается с текущей команды ( текущая команда выделена белым прямоугольником ). < Кон. адрес > можно не указывать, если используются точки прерывания. Выполняющуюся программу можно остановить нажатием любой клавиши. G без параметров можно ввести нажатием < Alt - F10 >. Можно указать только конечный адрес, но запятая должна присутствовать. Пр. : G 100 - FF0
T ON [, < файл. спец. > ]
Включить трассировку программы. По умолчанию трассировочные записи выводятся на принтер.
Т OFF
Выключить трассировку.
INТ < 0/1> = < число >
Имитировать высокий или низкий уровень на входах INT0 или
INT1 . Пр. : INT1 = 0
ВА = < адрес >
Установить новую" точку отсчета" для дисассемблирования. Эта команда полезна при просмотре таблиц, зашитых в памяти программ , когда при дисассемблировании "назад " неизвестно, откуда вести дисассемблирование.
RSTC
Сбросить счетчик времени выполнения программы.
QUIT
Выход в DOS .
RST
Имитируется сброс процессора.
N
Перезапуск FD51 .
Примечание. При вводе команд все числа должны быть шестнадцатеричными.
2 . ПОЛНОЭКРАННОЕ РЕДАКТИРОВАНИЕ
Переход в режим полноэкранного редактирования осуществляется нажатием клавиши [Enter] без ввода команды. Теперь можно перемещать курсор по экрану с помощью клавиш управления курсором и изменять содержимое регистров, памяти и флаги набором чисел на клавиатуре. Можно изменить также начальный адрес дисассемблированного текста ( текущей инструкции ) и начальные адреса окон памяти ( в первых строках окон). Полноэкранное редактирование можно производить и при десятичном , и при двоичном представлении информации на экране. Во время редактирования остаются доступными все команды, вводимые функциональными клавишами. Чтобы вернуться в командную строку, нажмите [ Enter ] снова. Для быстрого перемещния курсора по экрану можно пользоваться клавишами [ Tab ] и [ Shift ]- [ Tab ].
3. РЕЖИМ АССЕМБЛЕРА
Для перехода в режим ассемблера ( ввода команд отлаживаемой программмы в мнемонических обозначениях ) нужно в режиме полноэкранного редактирования поместить курсор в поле текущей инструкции загруженной программы . Теперь наберите мнемонику ( например, " MOV A , # 45 ) и нажмите [ Enter] . Если мнемоника верна, то соответствующие ей коды заносятся в память программы, а окно устанавливается на следующий адрес. Для выхода из режима ассемблера нажмите клавишу " Q " или уведите курсор из поля текущей инструкции.
4. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ
F1 - выполнить текущую команду загруженной программы.
F2 - выполнить программу , пока не будет достигнут адрес команды, следующей за текущей , что удобно для выполнения подпрограмм и циклов
как одной команды.
F3 - представляет числовую информацию на экране в десятичной и двоичной форме.
F4 - переключает большое окно памяти с внутренней на внешнюю и обратно.
F5 - установка точек прерывания.
F6 - переключает форму представления памяти в окне в двоичную и обратно.
F7 - листает окно памяти данных вверх на одну строку.
F8 - листает окно памяти данных вниз на одну строку.
F9 - листает окно памяти программ вверх на одну строку.
F10 - листает окно памяти программ вниз на одну строку.
[ PgDn ] - листает окно памяти программ вниз на одну страницу.