- •Методические указания к лабораторной работе №2 Контроллер клавиатуры
- •Цель лабораторной работы
- •Основные сведения
- •Кодирование символов в пэвм
- •Клавиатура ibm pc
- •Функции rom bios для клавиатуры
- •Буфер клавиатуры
- •Программирование клавиатуры на физическом уровне
- •Порядок проведения лабораторной работы
- •Содержание отчета
- •2) Цель лабораторной работы;
- •Контрольные вопросы
Клавиатура ibm pc
Клавиатура IBMPC включает в себя несколько компонентов: матрицу быстродействующих кнопочных контактов из 23 строк по 4 колонки. 8- разрядный микропроцессор с встроенным ПЗУ, логику управления, параллельный порт и специальный буфер клавиатуры. Клавиатура подсоединена к системному блоку пятью проводниками (линиями). Название и назначение этих линий приведены ниже.
KEYBOARD CLOCK- линия синхросигналов системного таймера;
KEYBOARD DATE - линия для обмена данными с системой в последовательном формате;
RESET - сброс регистров контроллера клавиатуры;
GND - общая линия (заземление);
+SV - питание контроллера.
Клавиши подсоединены к матрице специальными микровыключателями. При нажатии на клавишу замыкается контакт на пересечении строки X и столбца Y матрицы. Каждые 3-5 мс микропроцессор клавиатуры сканирует матрицу, проверяя, какая линия имеет низкий уровень. Координаты X и У линий с низким уровнем по существу являются кодом нажатой клавиши. Этот код называется скан-кодом. Перед тем, как передать скан- код в системный блок, микропроцессор клавиатуры выдает на линию DATE логическую единицу в течении 0,2 мс, затем 8-битовую последовательность скан-кода, начиная с младшего бита, каждый бит через 0,1 мс.
Клавиатура, как периферийное устройство, имеет наивысший приоритет обслуживания, поэтому всякий раз, когда нажимается клавиша в системе вызывается аппаратное прерывание, которое передает управление обработчику прерываний I NT 09Н. Центральный процессор прекращает работу, вызывает драйвер клавиатуры и анализирует полученный скан- код.
Если нажата символьная клавиша, то драйвер клавиатуры преобразует скан-код в код ASCII и записывает его в буфер клавиатуры с начальным адресом 0040:001Е. Если код поступает от клавишей-переключателей, то инициализируется код состояния клавиатуры, записываемый в два байта по адресу 0040:0017 и 0040:0018.Прерывание клавиатуры проверяет всякий раз содержимое этих байтов перед тем, как присвоить код введенному символу.
В таблице 3 описаны названия клавишей-переключателей и назначения битов статуса клавиатуры.
Адрес |
Бит |
Клавиша |
Значение при b=1 |
0040:0017 |
7 6 5 4 3 2 1 0 |
INSERT CAPSLOCK NUMLOCK SCROLL LOCK ALT CTRL Левый SHIFT Правый SHIFT |
Режим включен _”_ _”_ _”_ Клавиша нажата _”_ _”_ _”_ |
0040:0018 |
7 6 5 4 3 2,1,0 |
1NSERT CAPSLOCK NUMLOCK SCROLL LOCK CTRL NUMLOCK не используется |
Клавиша нажата _”_ _”_ _”_ Режим включен
|
Когда программа изменяет один из этих битов, то это интерпретируется как физическое нажатие клавиши. Поэтому работоспособность программы можно определить по включенным индикаторам клавиатуры. Кроме того, драйвер клавиатуры различает и другие типы клавишей, например:
1) функциональные клавиши;
2) комбинации клавиш.
Коды этих клавиш соответствуют скан-кодам. Коды можно прочитать в старшем байте аккумулятора (АН), если воспользоваться прерыванием INT 16H с функцией ООН.Ниже приведен фрагмент программы чтении кода.
MODELTIHY
CODE
ORB 100H
START: MOV АК, ООН
INT 16Н
MOV AH, 4CH
INT 21H
END START
В таблице 4 приведены коды часто используемых функциональных клавиш и комбинаций клавиш.
Таблица 4
Клавиши |
Код Н |
Клавиши |
Код Н |
Клавиши |
Код Н |
Клавиши |
Код Н |
F1 |
3B |
Shift-F1 |
54 |
Ctrl-F1 |
5E |
Alt-F1 |
68 |
F2 |
3C |
Shift-F2 |
55 |
Ctrl-F2 |
5F |
Alt-F2 |
69 |
F3 |
3D |
Shift-F3 |
56 |
Ctrl-F3 |
60 |
Alt-FЗ |
6A |
F4 |
3E |
Shift-F4 |
57 |
Ctrl-F4 |
61 |
Alt-F4 |
6B |
F5 |
3F |
Shift~F5 |
58 |
Ctrl-F5 |
62 |
Alt-F5 |
6C |
F6 |
40 |
Shlft-F6 |
59 |
Ctrl-F6 |
63 |
Alt-F6 |
6D |
F7 |
41 |
Shift-F7 |
5A |
Ctrl-F7 |
64 |
Alt-F7 |
6E |
F8 |
42 |
Shift-FS |
5B |
Ctrl-F8 |
65 |
Alt-F8 |
6F |
F9 |
43 |
Shift-F9 |
5C |
Ctrl-F9 |
66 |
Alt-F9 |
70 |
F10 |
44 |
Stuft-F10 |
5D |
Ctrl-F10 |
67 |
Alt-F10 |
71 |
Ввести с клавиатуры символ в выполняемую в данный момент программу можно несколькими способами:
1) путем нажатия соответствующей клавиши пишущей машинки, либо клавиши на малой цифровой клавиатуре, когда она установлена в режим ввода;
2) путем нажатия комбинации CTRL-КЛ, соответствующей символу, где КЛ - клавиша пишущей машинки;
3) путем нажатия клавиш ALT/ код ASCII в десятичной системе на малой клавиатуре и последующего отпускания клавиши ALT.
Наиболее универсальный третий способ. Он обеспечивает ввод любого символа. Код символа записывается в буфер клавиатуры. Прочитать его можно различными способами, включая средства DOS и BIOS.
Для работы с клавиатурой используются и другие средства, например, функции DOS типа дескрипторов, символьно-ориентированные функции DOS, функции драйвера клавиатуры BIOS, физический уровень.
Указанные средства обеспечивают различную степень гибкости, переносимости и аппаратной независимости.
Основным средством МS-DOS ввода с клавиатуры о помощью дескрипторов является прерывания INT 21Н с функции 3FH (чтение устройства). В качестве параметров этой функции используется дескриптор, сегмент, относительный адрес буфера и его длина. Используя это средство можно оминимальными программными затратами записывать массивы данных, а также переправлять ввод-вывод с другого устройства или файла.
Для клавиатуры система MS-DOS предоставляет программе определенные дескрипторы: 0- стандартный ввод, 1- стандартный вывод, 2- стандартная ошибка.
Ниже приведен фрагмент программы формирования массива, используя дескриптор "О" стандартного ввода.
MODEL TINY
CODE
ORG 100H '
START: JMP QD
BUFF DB 80 DUP(?) ; буферввода
GO: MOV AH, 3FH ; функциячтенияустройства
MOV AL, O ; количество прочитанных символов
MOV BX, O ; дескриптор стандартного ввода
MOV CX, 80 ; количество вводимых символов
MOV DX,OFFSET BUFF ; адрес буфера в DX
INT 21H
MOVАН,4СН
INT21H
ENDSTART
Если функция выполнена успешно, то в AL записываетсяколичество прочитанных символов и сбрасывается флаг переноса. В противном случае устанавливается флаг переноса, а в AL записывается код ошибки.
Символьно ориентированные функции MS-DOS осуществляются через прерывание INT 21H с функциями 01, 06, 07, 08, ОАН, ОВН, ОСН. В лабораторной работе эти функции не используются.
К аппаратно зависимым методам работы с клавиатурой относятся метод с обращением к драйверу клавиатуры ПЗУ BIOS по прерывания INT16H и по аппаратному прерыванию INT09H.Последний метод предполагает написание нового обработчика прерываний INT09H и прямое обслуживание прерываний контроллера клавиатуры. При этом необходимо самому программисту перевести скан-коды в коды ASCII при работе с буфером клавиатуры.Рассмотрим подробнее функции ПЗУ BIOS.
