
- •Методические указания к лабораторной работе №2 Контроллер клавиатуры
- •Цель лабораторной работы
- •Основные сведения
- •Кодирование символов в пэвм
- •Клавиатура ibm pc
- •Функции rom bios для клавиатуры
- •Буфер клавиатуры
- •Программирование клавиатуры на физическом уровне
- •Контрольные вопросы
- •Порядок проведения лабораторной работы
- •Содержание отчета
- •2) Цель лабораторной работы;
Буфер клавиатуры
Одной из основных функций контроллера клавиатуры является запись кода нажатой клавиши в буфер клавиатуры. Любое периферийное устройство или программа может прочитать код нажатой клавиши только из буфера клавиатуры.
Буфер устроен, как циклическая очередь, которую называют буфером FIFO (первый вошел - первый ушел), поэтому определенной ячейки памяти для символа нет. При вводе происходит изменение адресов одного и того же символа. Первый записанный символ называется "головой",последний - "хвостом". Для контроля начала и конца введенной строки символов в буфере организованы два байта (указатели), в которых хранится адрес "головы" и "хвоста" введенной строки символов. Указатели расположены по адресам (0040:00А1 - "голова"; 0040:001С - "хвост"). Ниже приведенный рисунок иллюстрирует работу буфера клавиатуры.
А |
C |
E |
20 |
22 |
24 |
25 |
28 |
2A |
2C |
2E |
20 |
32 |
34 |
36 |
38 |
3A |
34 |
28 |
|
|
|
|
|
‘A’ |
‘B’ |
‘C’ |
‘D’ |
‘X’ |
‘Y’ |
‘Z’ |
|
|
|
Под указатели отведены по два байта, но используется по одному. Буфер может накапливать до 15 нажатий на клавишу. На каждый символ отводится два байта ( код ASCI I и скан-код ). Когда буфер заполнен, новые вводимые символы игнорируются. При достижении верхней границы буфера начинается запись новых клавиш с начала буфера. Поэтому голова буфера может иметь меньший адрес, чем его хвост. Буфер считается заполненным, когда его голова и хвост находятся в соседних позициях.
В программное обеспечение к лабораторной работе входит файл KEY.EXE, демонстрирующий работу буфера клавиатуры. Загрузите файл в оперативную память и выполните предложенные процедуры, поясняющие работу буфера клавиатуры.
Программирование клавиатуры на физическом уровне
Довольно часто системному программисту для организации обмена клавиатуры с системным блоком приходится разрабатывать либо драйвер, либо собственные процедуры (функции). Для этой цели в контроллере предусмотрена возможность доступа к аппаратной части.
В IBM AT контроллер выполнен на основе микропроцессора INTEL 8042, имеющий свои память, систему прерывания я систему команд. Обращение к микропроцессору осуществляется через порты. Порт 60Hиспользуется для совместимости в ХТ, порт 64Н для AT.
Перед организацией обмена через эти порты необходимо прочитать состояние микропроцессора командой (INAL, 64H) и убедиться, что не была нажата клавиша или не переполнен буфер. Если эту процедуру не выполнить, то существует вероятность сбоя обмена. Для программной организации обмена используется система команд микропроцессора клавиатуры. Команды могут иметь однобайтовый и двухбайтовый формат. При двухбайтовом формате первый байт код команды, а второй байт содержит данные для выполнения этой команды.
Если команда микропроцессора состоит из двух байт, то необходимо осуществить побайтовую передачу через порт. Для выравнивания скоростей работы микропроцессора клавиатуры и центрального микропроцессора, необходима некоторая задержка между обращениями. Нижеприведен фрагмент программы с командой имеющей двухбайтовый формат.
MOVAL, код команды
OUT64H, AL
MOVCX, 2OOOH;задержка 10 msи более
DELAY: LOOPDELAY
MOV AL, DATA; операнд команды
OUT 64H,AL
Ниже приведены коды основных команд микропроцессора клавиатуры, используемые в работе.
0FFH - сброс клавиатуры и запуск внутренней диагностик»
0FEH- сброс последнего обмена
0FDH–0F7Н- нет операций
0F6H- продолжить сканирование
0F5H- запретить сканирование
0F4H - восстановить сканирование. МП очищает внутренний буфер и начинает сканирование
0F3H- установить скорость нажатия на клавиши и время промежутков между нажатиями. Двухбайтовая команда. Второй байт данных – код установки скорости нажатия в секунду (0- 4) (табл. 6).
Таблица 6
Данные |
Скорость |
Данные |
Скорость |
0 1 2 4 5 |
30,0 26,7 24,0 20,0 16,0 |
0AH 0DH 10H 14H 1FH |
10,0 9,2 7,5 5,0 2,0 |
(5 - 6) – установка задержки перед первым нажатием.
00 – 250 ms; 01 – 500 ms; 10 – 750 ms; 11 - 1000 ms
7 – всегда 0.
0F2H – 0EFH – нет операции.
0EEH – дополнительная диагностика. Возврат 0EEH
0EDH–переключить световые индикаторы. Двухбайтовая команда. Второй байт данных: биты.
0:1 – включить SCROLLLOCK, 0 – выключить
1:1 – включить NUMLOCK, 0 - выключить
2:1 – включить CAPSLOCK, 0 - выключить
Биты 3-7 не используются.