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 и получили необходимый результат, наблюдали передачу информации с компьютера на микроконтроллер и обратно в бинарном и шестнадцатеричном виде.