Переповнення/помилка клавіатури (00h або FFh) – для вказання перепов-
нення буфера клавіатура розміщує 00h у буфер в якості останнього символу для кодів сканування в режимах 2 і 3. Для кодів сканування в режимі 1 – використову-
ється FFh. Клавіатура передає код помилки клавіші, якщо не вдається ідентифіку-
вати замикання контактів на клавіатурі.
Підтвердження (FAh) – клавіатура видає підтвердження (АСК) у відповідь на будь-яку правильну команду, крім команд “Луна” та RESEND. Якщо клавіату- ра переривається під час передачі АСК, то АСК відміняється та клавіатура почи- нає обробку нової команди.
Код завершення ввімкнення живлення (AAh) – після вдалого завершення
ввімкнення живлення клавіатура передає системі код AAh. Передача будь-якого іншого коду після ввімкнення вказує на несправність клавіатури.
Луна (EEh) – клавіатура передає цей код у команду “Луна”.
Ідентифікатор клавіатури (83ABh) – ідентифікатор клавіатури складається з двох байтів. Клавіатура відповідає на команду “Ідентифікатор розширеної клаві- атури” підтвердженням, перериває сканування та передає два байти ідентифікато-
|
|
ра. Першим передається молодший байт. Після виводу ідентифікатора клавіатура починає сканування.
Повторне посилання (FEh) – клавіатура передає цей код після отримання неправильних вхідних даних або даних з помилкою паритету.
Засоби BIOS та MS DOS для роботи з клавіатурою
Засоби BIOS
Обробка клавіатури за допомогою переривання 16h є основним методом
читання даних з клавіатури та визначення її статусу в прикладних програмах. Переривання 16h надає користувачу наступні підфункції.
Читання даних з клавіатури з очікуванням натискання (00h):
Вхід: AH = 00h
Вихід: AL – ASCII-код клавіші;
AH – скан-код клавіші.
Ця функція бере дані з буфера клавіатури, тому з її допомогою не можна визначити натискання таких клавіш, як Alt, Shift і т. п.
Перевірка клавіатури (01h):
Вхід: AH = 01h
Вихід: ZF = ZR = 1, якщо в буфері немає символу;
AL – ASCII-код клавіші;
AH – скан-код клавіші.
Прочитати статус зсувів (02h):
Вхід: AH = 02h
Вихід: AL – статус зсувів.
Таблиця 12 – Формат байта статусу зсувів
Біт | Значення |
D0 | 1 – права клавіша Shift натиснена |
D1 | 1 – ліва клавіша Shift натиснена |
D2 | Не використовується |
D3 | 1 – будь-яка клавіша Alt натиснена |
D4 | 1 – активний режим Scroll Lock |
D5 | 1 – активний режим Num Lock |
D6 | 1 – активний режим Caps Lock |
D7 | 1 – активний режим Insert |
Встановлення швидкості генерації символів повторення та паузи (03h):
Вхід: AH = 03h
AL = 05h
BL – швидкість генерації символів
BH – затримка (0 – 0,25 с, 1 – 0,5 с, 2 – 0,75 с, 3 – 1 с)
Вихід: немає.
Функція не використовується з клавіатурою PC XT.
|
|
Записати символ у буфер клавіатури (05h):
Вхід: AH = 05h
CL – ASCII-код символу
CH – скан-код або нуль, якщо скан-код байдужий Вихід: AL = 0, якщо операція запису завершилась вдало. Функція не використовується з клавіатурою PC XT.
Читання даних з клавіатури з очікуванням натискання (10h):
Вхід: AH = 10h
Вихід: AL – ASCII-код клавіші;
AH – скан-код клавіші.
Функція є розширенням функції 00h для 101-клавішної клавіатури.
Перевірка клавіатури (11h):
Вхід: AH = 11h
Вихід: ZF = ZR = 1, якщо в буфері немає символу;
AL – ASCII-код клавіші;
AH – скан-код клавіші.
Функція є розширенням функції 00h для 101-клавішної клавіатури.
Прочитати статус зсувів (12h):
Вхід: AH = 12h
Вихід: AL – статус зсувів.
Функція є розширенням функції 00h для 101-клавішної клавіатури.
Засоби MS DOS
Функції DOS переривання 21h, як правило, використовуються програмами,
які повинні забезпечувати максимальну сумісність з усіма типами ПК самої операційної системи та її утилітами. У DOS клавіатура призначається стандарт- ним пристроєм вводу і їй присвоюється покажчик 0.
Очікування надходжень та читання символу зі стандартного пристрою вводу з луною на стандартний пристрій виводу та обробкою Ctrl + Break:
Вхід: AH = 01h
Вихід: AL – код символу; клавіші типу F11 необхідно обробляти за два виклики.
Читання зі стандартного пристрою вводу (без очікування) або запис на стандартний пристрій виводу:
Вхід: AH = 06h
DL = FFh, якщо необхідно прочитати символ
DH = 0 – FEh, якщо необхідно вивести цей код
Вихід: ZF = 0, якщо символ був прочитаний;
AL – код прочитаного символу (якщо функцію викликали з DL =
= FFh).
Очікування надходження та читання символу зі стандартного пристрою вводу без луни та обробки Ctrl + Break:
Вхід: AH = 07h
Вихід: AL – код символу; клавіші типу F11 необхідно обробляти за два виклики.
Очікування надходження та читання символу зі стандартного пристрою вводу без луни, але з обробкою Ctrl + Break:
Вхід: AH = 08h
Вихід: AL – код символу; клавіші типу F11 необхідно обробляти за два виклики.
Буферизований ввод зі стандартного пристрою вводу: Вхід: AH = 0Ah
DS:DX – адреса для запису рядка, що вводиться (в першому байті –
максимальна довжина рядка).
Вихід: немає (в другому байті буфера – довжина прочитаного рядка).
Перевірити стандартний пристрій воду: Вхід: AH = 0Bh
Вихід: AH = 00h, якщо є символ; FFh – якщо символу немає.
Очищення буфера стандартного пристрою вводу та читання символу за допомогою вказаної функції:
Вхід: AH = 0Ch
AL – номер функції DOS (01h, 06h – 08h, 0Ah)
Вихід: згідно з підфункцією, що викликається.
МЕТОДИЧНІ ВКАЗІВКИ
В даній роботі пропонується дослідити і протестувати програму, яка працює з контролером клавіатури.
Для виконання роботи необхідні грунтовні знання архітектури та принципів функціонування контролера клавіатури, а також знання та навички програмного доступу до регістрів i8042.
ЛІТЕРАТУРА
1. Гук М. Аппаратные средства IBM PC. Энциклопедия. – СПб.: “Издательс-
тво Питер”, 1999. – 816 с.
2. Гуржій А. М., Коряк С. Ф., Самсонов В. В., Скляров О. Я. Архітектура, принципи функціонування і керування ресурсами IBM PC: Навч. посібник.
Харків: ТОВ. “Компанія СМІТ”, 2003. – 512 с.
3. Зубков С. В. Ассемблер для DOS, Windows и Unix. – М.: ДМК, 1999. –
640 с.
4. Фролов А. В., Фролов Г. В. Аппаратное обеспечение персонального ком-
пьютера. – М.: ДИАЛОГ МИФИ, 1997. – 304 с.
ЗАВДАННЯ
му.
1. Дослідити програму leds. За текстом програми нарисувати схему алгорит-
2. На вінчестері створити каталог KEY.
3. За допомогою редактора середовища програмування Borland C++ 3.1
створити символьний файл тексту вивченої програми та записати його в каталог
KEY.
4. Виконати налагодження програми та запустити її на виконання.
5. Зробити висновки про власний досвід з перевірки встановлення індика-
|
|
торів на клавіатурі.
6. Розробити рекомендації з модернізації програми таким чином, щоб з її до-
помогою можна було встановити індикатори в заданому порядку.
7. Зробити висновки.
ТЕКСТИ ПРОГРАМ
// leds
MODEL TINY
CODE
ORG 100h
START:
// вимкнення всіх індикаторів
MOV DL, 0
CALL INDIKATOR
// цикл до натискання клавіші
WHILE:
// вмикає Num Lock
MOV DL, 2
CALL INDIKATOR
// затримка на 0,5 секунди
CALL TIME
// вимкнення індикатора
MOV DL, 0
CALL INDIKATOR
// вмикає Caps Lock
MOV DL, 4
CALL INDIKATOR CALL TIME
MOV DL, 0
CALL INDIKATOR
// вмикає Scroll Lock
MOV DL, 1
CALL INDIKATOR CALL TIME
MOV DL, 0
CALL INDIKATOR
// перевірка наявності символу в буфері клавіатури
MOV AH, 01h
INT 16h
MOV DL, 0
// якщо символу немає, продовжити цикл
JZ WHILE
// якщо символ є, прочитати його і очистити буфер
MOV AH, 00h
INT 16h
MOV DL, 0
CALL INDIKATOR RET
INDIKATOR PROC NEAR
// надіслати в порт команду керування світлодіодами
MOV AX, 00EDh
OUT 60h, AL
// невелика затримка
CALL DELAY
// ввімкнути або вимкнути певний індикатор
MOV AL, DL OUT 60h, AL RET
INDIKATOR ENDP
DELAY PROC NEAR
MOV CX, 4000
FOR:
LOOP FOR RET
DELAY ENDP
TIME PROC NEAR
// прочитати значення годинника реального часу
MOV AH, 0
INT 1Ah
// додати до цього значення 0,5 секунди
ADD DX, 9
// зберегти отримане значення
MOV BX, DX REPEAT:
// цикл до настання потрібного часу
INT 1Ah
CMP DX, BX
JNE REPEAT RET
TIME ENDP
END START
КОНТРОЛЬНІ ЗАПИТАННЯ
1. Яке апаратне переривання формується при натисненні та відтисканні клавіші?
2. Вкажіть призначення портів 60h, 61h, 64h.
3. Назвіть команди керування клавіатурою та їх призначення.
4. Які функції переривання 21h використовуються для керування клавіату-
рою?