Каждой клавише соответствует определённый вход порта ввода, узнать положение клавиши можно опрашивая вход порта.
R1 – R8 » 1...4,7 kOm
Нажата
Унитарный код
Позиционный код
SA1
SA2
SA3
M
M
M
SA8
Преобразование унитарного кода в позиционный.
табличный метод
метод сдвигов унитарного кода
Табличный метод.
Основан на том, что в ПЗУ имеется таблица кодов: каждому унитарному коду соответствует позиционный.
IN IPORT
CMA
CPI MASK
JZ EXIT
При выходе выбирается позиционный код, соответствующий данной маске.
MASK1 EQU 00000001B
MASK2 EQU 00000010B
M
MASK8 EQU 10000000B
IDENTIF1:
IN IPORT
CMA
Инверсия кода
CPI MASK1
JZ EXIT1
CPI MASK2
JZ EXIT2
M
CPI MASK8
JZ EXIT8
MVI B,0FFH
Если не нажата ни одна клавиша
RET
EXIT1
MVI B,00H
RET
EXIT2
MVIB,01H
RET
M
EXIT8
MVI B,07H
Метод сдвигов унитарного кода.
Исходный код после инверторов сдвигается вправо через перенос (если нажата клавиша, то флаг переноса = 1).
IDENTIF2
IN IPORT
MVI B,0
MVI C,8
CMA
Инвертировать
ORA A
Сброс CY
SHIFT
RAR
JC EXIT
INR B
DCR C
JNZ SHIFT
MVI B,OFFH
EXIT
RET
В регистре В – двоичный позиционный код.
Если возможно нажатие нескольких клавиш, то надо после программы идентификации проверить (А) и если там не 0, то было нажато два или более клавиши.
К переключателям с фиксацией относится декадные переключатели: номеронабиратели.
Цифра
Код
23
22
21
20
M
M
M
M
M
Ak:
СтЦ
МлЦ
В случае клавиш без фиксации надо уловить момент, когда кнопки нажимаются:
Программа ожидает нажатие клавиши. Программа сначала ожидает нажатие клавиши, затем защита от дребезга, затем программно ожидает отжатия клавиши, затем идентификация нажатой клавиши.
KEYBOARD
IN IPORT
CMA
ORA A
Установить флаги
JZ KEYBOARD
Цикл ожидания
PUSH PSW
CALL DELAY
WAIT
IN IPORT
CMA
ORA A
JNZ WAIT
Ожидание нажатия
CALL IDENTIF
RET
IDENTIF
POP PSW
M
Недостаток: МП постоянно ожидает нажатия клавиши.
2. Периодически вызывается подпрограмма ввода кода из порта, период должен быть достаточно малым, частота опроса порта не менее 10 раз в секунду.
Неудобство – надо периодически вызывать эту программу.
С использованием прерывания программы:
Достоинство – отсутствие потерь времени на ожидание нажатия клавиши.
Недостатком кодирующих клавиатур является большое число входов портов. В случае большого числа клавиш используют не кодирующие клавиатуры.
Не кодирующие.
Контакты клавиш присоединяются к матрице, образованной пересечением вертикальных и горизонтальных линий.
Идентификация нажатой клавиши осуществляется методом сканирования: на один ряд подается код сканирования (бегущий «0»), а с другого ряда снимается байт возврата – если не нажата ни одна клавиша в байте возврата 1, если нажата клавиша 0, в соответствующем разряде.