Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по Лабе 2 Смолина.doc
Скачиваний:
21
Добавлен:
21.09.2019
Размер:
74.24 Кб
Скачать

2Часть 2

Задание 1.

Опрос матричной клавиатуры. Составить головную программу для опроса клавиатуры с помощью подпрограмму GETKEY и вывода кода нажатой клавиши на светодиодные индикаторы. Составить таблицу кодов клавиатуры.

Выполнение задания.

org 02000h ; начало SRAM ВВП

dpp data 84h ; адрес регистра dpp

KB xdata 00h ; адрес регистра клавиатуры

sv xdata 07h ; адрес региста светодиодов

L1:

call getkey ; инициализация getkey

mov r0,#sv ; загрузка в регистр r0 ...

call putbyte ; инициализация putbyte

JMP L1

putbyte:push dpp ; сохр. номер текущей страницы

mov dpp,#08d ; переход на 8-ю страницу

movx @r0,A ; запись в регистр ПЛИС

pop dpp ; восстанавление номера страницы

ret

; сохранение используемых регистров в стеке

getkey: push psw ; загрузка psw в стек

mov psw,0H ; выбрали нулевой банк

push 0H ; сохранение r0

push 1h ; сохранение r1

push b ; загрузка b в стек

push dpp ; сохранение номера страницы

; переключение на 8-ю страницы внешней памяти данных

mov dpp,#08

; сканирование клавиатуры

mov r0,#KB ; адрес регистра КВ

mov r1,#0 ; счетцик колонов = 0

mov b,#01111111b ; сканирующий (0)

KB_lp: mov a,b

rl a ; подготовка скан. (0)

mov b,a ; сохранение скан. (0)

movx @r0,a ; вывод в КВ скан. (0)

movx a,@r0 ; чтение КВ ROW

cpl a ; инверсия ROW

anl a,#0f0h ; ROW в ст. тетраде

jnz kb_cod ; если нажата кл. - переход

inc r1 ; счетчик колонок (r1)

cjne r1,#4,KB_lp ; продолжить сканирование

mov a,#0ffh ; нет нажатых клавиш

sjmp kb_end

; формирование кода нажатой клавиши

kb_cod: mov b,#0 ; очитска регистра (В)

mov c,acc.7

orl c,acc.5

mov b.2,c

mov c,acc.7

orl c,acc.6

mov b.3,c

mov a,b

add a,r1

; восстанавление использованных регистров

kb_end: pop dpp

pop b

pop 1h

pop 0H

pop psw

ret

end

Клавиша

Код

1

00000000

2

00000001

3

00000010

4

00000100

5

00000101

6

00000110

7

00001000

8

00001001

9

00001010

0

00001101

A

00000011

B

00000111

C

00001011

D

00001111

*

00001100

#

00001110

Вывод: была составлена программа для опроса клавиатуры и с помощью подпрограммы GETKEY составлена программа вывода кода нажатой клавиши на светодиодные индикаторы. Составлена таблица кодов клавиатуры.

Задание 2.

Звуковой излучатель. Набрать программу генерации звука и получить звук.

Выполнение задания

org 02000h ; начало SRAM ВВП

dpp data 84h ; указатель регистра ВПД

ena data 04h ; адрес регистра ENA

buz bit acc.3 ; бит для вывода звука

mov r0,#ena

mov a,#20h ; INT<-1

loop: setb buz ; (1) для вывода

call putbyte

call delay ; задержка

clr buz ; (0) для вывода

call putbyte

call delay

sjmp loop

;-------------------------------------------------------------------

delay: mov R1,#099h ; задержка около 150 мкс

djnz r1,$ ; цикл

ret

putbyte:push dpp ; сохранение номера текущей страницы

mov dpp,#08h ; переход на 8-ю страницу

movx @r0,A ; запись в регистр ПЛИС

pop dpp ; восстановление номера страницы

ret

end

Вывод: составлена программа генерации звука. и получить звук. Используя монитор Т2 загрузили программу в лабораторный стенд SDK1.1 и получить звук.

Задание 3.

Программирование УАПП. Набрать программу для инициализации УАПП UART_INI , набрать головную программу, принимающую байт с линии, передающую этот байт обратно с линию и на светодиодные индикаторы (эхо-печать).

Выполнение задания.

org 2000h ; начало SRAM ВВП

dpp data 84h ; указатель регистра ВПД

sv xdata 07h ; адрес регистра светодиодов

call uart_ini ; инициализация UART

; прием байта с выводом на линейку светодиодов

loop: jnb scon.0,$ ; ожидание прихода байта

mov a,sbuf ; прием байта

clr scon.0 ; сброс флага приемника

call svdisp ; вывод на светодиоды

; передача байта обратно в СОМ порм компьютера

mov sbuf,a ; передача байта обратно

jnb scon.1,$ ; ожидание конца передачи байта

clr scon.1 ; сброс флага передатчика

sjmp loop

S9600 equ 0fdh ; скорость 9,6 kb

S4800 equ 0fah ; скорость 4,8 kb

S2400 equ 0f4h ; скороcть 2,4 kb

S1200 equ 0e8h ; скорость 1,2 kb

; начальная инициализация UART

uart_ini:

mov th1,#S9600 ; скорость UART

orl tmod,#20h ; Таймер 1 — в режиме autoreload

anl pcon,#not(80h) ; скорость не удваивать

orl tcon,#40h ; запуск таймера 1

mov scon,#50h ; настрйка последовательного канала

clr ie.4 ; запред прерываний от прием/перед.

ret

svdisp:

mov r0,#sv

call putbyte

ret

putbyte:push dpp ; сохранение номера текущей страницы

mov dpp,#08d ; переход на 8-ю страницу

movx @r0,A ; запись в регистр ПЛИС

pop dpp ; восстановление номера страницы

ret

end

Вывод: набрали программу для инициализации УАПП UART_INI , набрали головную программу, принимающую байт с линии, передающую этот байт обратно с линию и на светодиодные индикаторы (эхо-печать). Используя монитор Т2 загрузили программу в лабораторный стенд SDK1.1 и получили необходимый результат, наблюдали передачу информации с компьютера на микроконтроллер и обратно в бинарном и шестнадцатеричном виде.