Методические указания по лабораторным работам по курсу «Аппаратные средства компьютерных систем», страница 37

Доступ к клавиатуре через порты ввода-вывода является самым низкоуровневым методом доступа. С помощью порта 61h можно определить, доступен ли контроллер клавиатуры, и разрешить (запретить) доступ к нему. Причем, если значение, возвращаемое из порта 61h, содержит в седьмом разряде нуль, то контроллер клавиатуры не доступен. Пример работы с портом 61h (фрагмент из обработчика прерывания INT 09h):

       in    al,61h  ;прочитать состояние PPI

       mov   ah,al   ;сохранить состояние

       or    al,80h  ;разрешить работу с клавиатурой

       out   61h,al

       xchg  ah,al   ;восстановить статус

       out   61h,al

С помощью порта 64h можно читать данные с клавиатуры (коды клавиш и статус), программировать и осуществлять настройку клавиатуры.

Порт 60h предназначен для чтения данных с клавиатуры и сохранен для совместимости с клавиатурой PC XT. Рекомендуется использовать порт 60h для чтения скан-кодов, а 64h — для определения статуса и программирования клавиатуры. Такое разделение функций обеспечит максимальную гибкость программ. Пример чтения кода сканирования с помощью порта 60h:

       in   al,60h  ;прочитать скан-код

       mov  bl,al   ;в BL – скан-код

       in   al,61h  ;см. выше

       mov  ah,al

       or   al,80h

       out  61h,al

       xchg ah,al

       out  61h,al

       mov  al,20h  ; послать сигнал конца прерывания

       out  20h,al  ; в контроллер прерываний

Таблица 5.4 — Разряды портов контроллера клавиатуры

Порт

Бит

Назначение

1

(вх.)

0

Резерв изготовителя (0 – перемычка установлена, 1 – перемычка не установлена)

1-3

Зарезервированы изготовителем

4

Объем RAM на системной плате

5

Зарезервирован изготовителем

6

Тип монитора (0 – цветной, 1 – монохромный)

7

Замок клавиатуры (0 – клавиатура заблокирована, 1 – разблокирована)

2

(вых.)

0

Системный сброс

1

Линия Gate A20

2-3

Зарезервированы изготовителем

4

Выходной буфер полон

5

Входной буфер пуст

6

Синхросигнал клавиатуры (выход)

7

Данные клавиатуры (выход)

TEST

Т0

Синхросигнал клавиатуры (вход)

Т1

Данные клавиатуры (вход)