2) Режим N-клавишного нажатия (нет блокированных клавиш). В этом режиме нажатие каждой клавиши фиксируется независимо от состояния остальных клавиш. Когда клавиша нажата, пропускаются два цикла опроса клавиатуры, а затем проверяется, осталась ли данная клавиша нажатой. Если да, то ее код заносится в FIFO ввода (формат данных представлен на рис. 15). При одновременном нажатии распознавание клавиш производится в порядке их опроса в цикле сканирования клавиатуры. Опознание всех клавиш ведется независимо. На каждое нажатие код клавиши вводится только один раз. Напомним, что при сканировании клавиатуры возможен специальный режим ошибки (рис. 16).
Формат команды «Чтение ОЗУ ввода/FIFO» приведен на рис. 23. Эта команда должна предшествовать чтению данных из памяти клавиатуры. Если бит AI установлен, то следующие команды чтения данных будут вызывать автоматическое увеличение адреса. Например, если необходимо прочитать всю память клавиатуры, то это можно сделать, загрузив команду «Чтение ОЗУ ввода/FIFO» с установленным битом AI и затем 8 раз считать данные из ККД.
ЗАДАНИЕ. Введите в память УМПК программу, которая определяет код нажатой клавиши. Факт нажатой клавиши определяется при помощи сигнала прерывания IRQ.
000 |
05 |
EN I |
; |
Разрешение внешнего прерывания |
|
001 |
04 |
05 |
JMP STOP |
; |
Переход на STOP |
003 |
04 |
30 |
JMP PRER |
; |
Переход на подпрограмму обработки прерывания |
005 |
04 |
05 |
STOP: JMP STOP |
; |
Останов |
030 |
В8 |
FF |
PRER: MOV R0,#0FFH |
; |
Режим «Команда» (А0=1) |
032 |
9A |
FC |
ANL P2,#0FCH |
; |
Адрес ККД |
034 |
23 |
40 |
MOV A,#40H |
; |
Запись команды «Чтение ОЗУ |
036 |
90 |
MOVX @R0,A |
; |
ввода/FIFO» |
|
037 |
C8 |
DEC R0 |
; |
Режим «Данные» (А0=0) |
|
038 |
80 |
MOVX A,@R0 |
; |
Чтение кода клавиши |
|
039 |
AA |
MOV R2, A |
; |
Запись кода в R2 |
|
03А |
93 |
RETR |
; |
Возврат |
Примечание. Перед выполнением программы необходимо убедиться, что переключатель S1.2 замкнут (в верхнем положении).
Выполните программу. В результате выполнения в регистр R2 заносится код нажатой клавиши; код имеет формат, описанный выше (см. рис. 15).
Введите в память УМПК аналогичную программу, которая определяет факт нажатия клавиши при помощи программного опроса слова состояния.
010 |
В8 |
FF |
MOV R0,#0FFH |
; |
Режим «Команда» (А0=1) |
012 |
9A |
FC |
ANL P2,#0FCH |
; |
Адрес ККД |
014 |
80 |
M1: MOVX A,@R0 |
; |
Чтение слова состояния |
|
015 |
53 |
0F |
ANL A, #0FH |
; |
ОЗУ ввода |
017 |
C6 |
36 |
JZ M1 |
; |
не содержит информации? |
019 |
23 |
40 |
MOV A,#40H |
; |
Запись команды «Чтение ОЗУ |
01B |
90 |
MOVX @R0,A |
; |
ввода/FIFO» |
|
01C |
C8 |
DEC R0 |
; |
Режим «Данные» (А0=0) |
|
01D |
80 |
MOVX A,@R0 |
; |
Чтение кода клавиши |
|
01E |
AA |
MOV R2, A |
; |
Запись кода в R2 |
|
01F |
04 |
1F |
STOP: JMP STOP |
; |
Останов |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.