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

(для студентов специальности 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 ] - листает окно памяти программ вниз на одну страницу.