Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Работа с клавиатурой
Управление клавиатурой в машинах класса AT построено на основе микроконтроллера Intel 8042. Контроллер клавиатуры выполняет следующие действия:
1. Прием данных от клавиатуры.
2. Проверка четности поступившего байта.
3. Трансляция (кодирование) полученной информации.
4. Помещение байта данных в выходной буфер и извещение процессора.
5. Прием байта от компьютера и передачу его во входной буфер клавиатуры.
На каждый удар по клавише клавиатура вырабатывает два кода: код нажатия и код отпускания. Коду отпускания предшествует код F0h. Контроллер преобразует коды от клавиатуры в скан - коды. Код F0h (при отпускании) преобразуется в бит 7 скан - кода. Некоторые клавиши, однако, могут быть запрограммированы только на посылку клавиши нажатия. Кроме того, при длительном удержании клавиши начинают посылать повторные коды нажатия.
Регистры контроллера клавиатуры
1. Регистр состояния контроллера клавиатуры.
Доступен для чтения по адресу 64Н:
• бит 0 — равен 0, если выходной буфер клавиатуры пуст;
• бит 1 —- состояние входного контроллера клавиатуры (равен 0, если буфер пуст);
• бит 2 — отражает тот факт, что тестирование клавиатуры прошло;
• бит 3 — указывает контроллеру, как интерпретировать полученный байт (если 1, то байт представляет собственно данные, если 0 — байт считается командой);
• бит 4 — если 0, клавиатура заблокирована;
• бит 5 — устанавливается в 1, если передача байта в клавиатуру не была завершена;
• бит 6 — устанавливается в 1, если прием байта от клавиатуры не был закончен в заданный промежуток времени;
• бит 7 — если 1, то последний принятый, байт содержал четное число единиц, т. е. произошла ошибка.
2. Входной и выходной буферы контроллера
Входной буфер доступен для записи через два порта: через порт 60Н — запись данных и команд, через порт 64Н — запись команды.
Выходной буфер доступен для чтения через порт 60Н.
3. Входной порт контроллера клавиатуры.
Доступен для чтения по команде С0Н1:
• биты 0—3 — резерв;
• бит 4 — указывает количество RAM на системной плате;
• бит 5 — значение переключателя фирмы изготовителя;
• бит 6 — определяет тип видеоадаптера;
• бит 7 — указывает, заблокирована или нет клавиатура.
Данный порт устарел и данные возможно не достоверны. -
4. Выходной порт контроллера клавиатуры.
Доступен для чтения (команда D0H) и для записи (команда D1H):
• бит 0 — подсоединен к линий сброса системы, изменение приводит к сбросу;
• бит 1 — определяет состояние дополнительной адресной линии А20;
• биты 2—3 — значения не определены;
• бит4 — содержит 1, если выходной буфер полон;
• бит 5 — равен 1, если входной буфер пуст;
• бит 6 — определяет значение линии часов при передаче данных в клавиатуру;
• бит 7 — определяет значение линии данных при передаче их в клавиатуру.
5. Порт состояния входных линий.
Значение может быть считано по команде Е0Н:
• бит 0 — состояние входной линии часов;
• бит 1 — состояние входной линии данных;
• биты 2—7 — значения не определены.
Команды контроллера клавиатуры
Как уже упоминалось, команды передаются через порт 64Н. Если у команды существует параметр, то он передается сразу после посылки команды в порт 60Н.
1. Команда 20Н. После этой команды контроллер записывает значение управляющего байта в выходной буфер.
2. Команда 60H. Запись управляющего байта контроллера (поместить в порт 60H). Значение битов управляющего байта:
• бит 0 — значение I приводит к генерированию прерывания от контроллера клавиатуры, если выходной буфер содержит данные;
• бит 1 — обычно 0;
• бит 2 — заменяет собой соответствующий бит управляющего регистра контроллера;
• бит 3 — при установке в 1 переключатель замка клавиатуры перестает действовать;
• бит 4 — при установке в 1 клавиатура отключается;
• бит 5 — режим интерфейса; при установке в 1 не выполняется проверка четности, и не преобразуются скан - коды;
• бит 6 — бит совместимости;
• бит 7 — 0.
3. Команда ААН. Внутренний тест контроллера. Если ошибок нет, то в выходной буфер посылается 55Н. После данной команды следует восстановить управляющий байт (см. команды 20Н и 60H).
4. Команда АВН. По этой команде выполняется тест интерфейса между контроллером и клавиатурой. Результат помещается в выходной буфер:
• 0 — ошибок нет
• 1 — уровень сигнала в линии часов низкий
• 2 — уровень сигнала в линии часов высокий
• 3 — уровень сигнала в линии данных низкий
• 4 — уровень сигнала в линии данных высокий
5. Команда ACH. Вызывает вывод диагностического дампа 16-байтовой памяти контроллера, текущего состояния входного и выходного порта, а также слова состояния контроллера Дамп выдается в виде
6. последовательности скан - кодов, в конце которой записана символьная строка с идентификатором фирмы-изготовителя.
7. Команда ADH. Блокировка клавиатуры.
8. Команда АЕН. Разблокировка клавиатуры.
9. Команда С0Н. Чтение входного порта. Значение порта помещается в выходной буфер.
10. Команда D0Н. Чтение выходного порта. Значение порта помещается в выходной буфер.
11. Команда D1H. Помещает байт в выходной порт контроллера клавиатуры.
12. Команда Е0Н. Команда предназначена для копирования информации о состоянии входных линий Т0 и Т1 из порта состояния входных линий в выходной буфер.
13. Команды F0H—FFH — сброс выходного порта.
Команды управления клавиатурой
Команды передаются через входной буфер 60Н. Если необходим параметр, то он передается после подтверждения получения команды. Для подтверждения того, что клавиатура приняла команду, следует прочесть из порта байт ответа клавиатуры. Ответ посылается на все команды кроме ЕЕН и FEH.
1. Команда EDH. Установка и сброс индикатора состояния. Следующий за командой параметр представляет собой байт, первые 3 бита которого определяют состояние индикаторов, а остальные равны 0:
• бит 0 — Scroll Lock
• бит 1 — Num Lock
• бит 2 — Caps Lock.
2. Команда ЕЕН. На код данной команды клавиатура откликается таким же кодом (эхо). Используется для диагностики.
3. Команды EFH и F1H. Недействительные команды.
4. Команда F0H. Установка или запрос таблицы скан-кодов. Входной параметр:
• 0 — получить номер таблицы
• I — установить таблицу 1
• 2 — установить таблицу 2
• 3 — установить таблицу 3
5. Команда F2H. Прочитать идентификатор. Сначала посылается подтверждение, а затем идентификатор — 83АВН.
6. Команда F3H. Задание частоты повтора кода клавиш и начальной задержки.
бит 7 второго байта команды:0
биты 6-5: устанавливают паузу перед началом автоповтора
• начальная задержка = (l+2*bit6+bit5)*250
00b = 250ms, 01b = 500ms, 10b = 750ms, 11= 1000ms
биты 4-0: устанавливают скорость автоповтора (символов в секунду):
• частота повтора = 4.17*(8+4*bit2+2*bitl+bit0)*2*(2*bit4+bit3)
целые значения частоты получаются при таких кодах:
00000b = 30,0 01111b = 8,0
00010b = 24,0 10010b = 6,0
00100b = 20,0 10100b = 5,0
00111b = 16,0 10111b = 4,0
01000b = 15,0 11010b = 3,0
01010b = 12,0 11111b = 2,0
01100b = 10,0
Промежуточные занчения также имеют смысл и соответствуют «нецелым» скоростям, например 00001b = 16,7
После посылки данной команды клавиатура подтверждает прием и ждет в ответ байт параметра.
7. Команда F4H. Включение клавиатуры. После этой команды клавиатура посылает подтверждение (0FAh), очищает свой внутренний буфер и переходит в состояние ожидания.
8. Команда F5H. По этой команде для всех параметров устанавливаются значения по умолчанию, затем клавиатура блокируется и ждет дальнейших команд.
9. Команда F6H. Аналогична команде F5H, но клавиатура не блокируется.
10. Команды F7H—FAH. Определяют характер реакции клавиш:
• F7H — все клавиши повторяемые
• F8H — все клавиши посылают код нажатия и код прерывания
• F9H — все клавиши посылают только код нажатия
• FАН — все клавиши повторяемые и посылают коды нажатия и прерывания
11. Команды FBH—FDH. Определение действия отдельных клавиш. В отличие от других команд эти команды изменяют характер поведения отдельных клавиш. После получения команды клавиатура подтверждает получения команды и ждет скан-код клавиши:
• FBH — клавиша повторяемая
• FCH — клавиша посылает код нажатия и прерывания
• FDH — клавиша посылает только код нажатия
12. Команда FEH. По этой команде клавиатура повторяет передачу
(посылает последний скан-код еще раз).
13. Команда FFH. Сброс клавиатуры. Выполняется внутренний тест и клавиатура посылает код ААН, если все удачно или FCH в случае ошибки.
В качестве примера работы с клавиатурой в листинге П 9.1 приведена программа, которая несколько раз периодически зажигает и гасит индикаторы клавиатуры. Еще один пример использования изложенного выше материала вы можете найти в гл. 23, где приведена простая программа тестирования клавиатуры.


