Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3. Алкон , Аппаратные средства IBM.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
361 Кб
Скачать
☆

5. Клавиатура ibm pc

Клавиатура – клавишное (кнопочное) устройство управления управляющей ЭВМ. Она служит для ввода алфавитно-цифровых символов (данных), а также команд управления. Его основные функции не нуждаются в поддержке специальными системными программами (драйверами). Необходимое программное обеспечение уже имеется в микросхеме ПЗУ в составе базовой системы ввода вывода (BIOS), и поэтому компьютер реагирует на нажатия клавиш сразу после включения. Принцип действия клавиатуры заключается в следующем [1].

1.При нажатии на клавишу специальная микросхема (микропроцессор в составе клавиатуры) выдает так называемый скан-код клавиши. Скан-код - это однобайтовый код, свой для каждой клавиши.

2.Скан-код по последовательному каналу связи передается на микросхему, находящуюся на материнской плате компьютера и выполняющую функции порта специального аппаратно-программного устройства, отвечающего за связь внешних устройств с процессором (порт А с адресом 60h).

3.Порт клавиатуры выдает сигнал аппаратного прерывания на контроллер прерываний, который выдает процессору cигнал требования прерывания INT и номер прерывания, равный 9 (Interrupt 9)

4.Получив прерывание процессор откладывает текущую работу, посылая в стек полный адрес команды прерванной программы и по номеру прерывания обращается в специальную область памяти (таблица векторов прерываний, адрес 0000:0000…0000:2FF) к ячейкам с адресом = 9 4= 0:36, 0:39, в которых хранится так называемый вектор прерывания по клавиатуре, представляющий полный адрес программы обслуживания прерывания. В первом слове находится смещение, а во втором - адрес сегмента системной программы обслуживания аппаратного прерывания от клавиатуры.

5.Определив адрес начала программы обработчика клавиатурного прерывания процессор переходит к ее выполнению. Программа обработки клавиатурного прерывания «зашита» в микросхему ПЗУ (область BIOS).

6.Системная программа-обработчик прерывания направляет процессор к порту клавиатуры (60h), где он находит введенный скан-код, читает его в свои регистры и под управлением программы определяют, какой код символа соответствует данному скан-коду. Соответствие между скан-кодом и символом определяется таблицей в программе обслуживания, называемой «раскладка клавиатуры». Имеется два типа кодов символов: коды ASCII и расширенные коды. Коды ASCII – это байтовые числа, соответствующие расширенному набору кодов для IBM PC: обычные символы пишущей машинки, а также 32 управляющих кода, которые обычно используются для передачи команд периферийным устройствам, а не выводятся как символы на экран; однако, каждый из них имеет соответствующий символ, который может быть выведен на дисплей с использованием прямой адресации дисплейной памяти.

Второй набор кодов, расширенные коды, присвоены клавишам или комбинациям клавиш, которые не имеют представляющего их символа ASCII. Функциональные клавиши или комбинации с клавишей Alt имеют расширенные коды длиной 2 байта, причем первый байт всегда 0, а второй байт- номер расширенного кода. Начальный ноль позволяет определить принадлежит ли данный код набору ASCII или расширенному набору.

7.Далее обработчик прерывания направляет полученный код символа в небольшую область памяти, известную как буфер клавиатуры, и прекращает свою работу, известив об этом процессор (команда iret - выход из прерывания).

8.Процессор возвращается к отложенной задаче, из которой он ушел на обслуживание прерывания.

Итог нажатия клавиши: двухбайтовый код в буфере клавиатуры. В одном байте находится скан-код, в другом код символа или нуль (для функциональных клавишей)

9.Введенный символ хранится в буфере клавиатуры до тех пор, пока его не заберет оттуда другая программа, например, текстовый редактор. Если символы поступают в буфер чаще, чем забираются оттуда, наступает эффект переполнения буфера. В этом случае программой обслуживания клавиатурных прерываний ввод новых символов на некоторое время прекращается, переполнение буфера проявляется в виде предупреждающего звукового сигнала при нажатии клавиши и отсутствия его изображения на экране.

Извлечение кодов из буфера клавиатуры выполняется посредством сервисов DOS, BIOS через программные прерывания int, включенные в состав макрокоманд.

Для этого широко используем следующие макрокоманды:

KeyTest (KeyRead) – проверка наличия кода в буфере клавиатуры

KeyTest MACRO

mov ah,1 ;функция 1, проверка буфера клавиатуры

int 16h ;программное прерывание с номером 16h

ENDM ;конец макроопределения

Результатом выполнения макрокоманды KeyTest является установка флага ZF во флаговом регистре, если буфер пуст. Данная макрокоманда позволяет обратиться к чтению буфера только при факте ввода с клавиатуры.

KeyWait – чтение кода из буфера клавиатуры с ожиданием ввода, если буфер пуст.

KeyWait MACRO

mov ah, 0 ;функция 0

int 16h ;программное прерывание номер 16h

ENDM

KeyWait MACRO

mov ah, 0 ;функция 0

int 16h ;программное прерывание номер 16h

ENDM

Данная макрокоманда переносит содержимое буфера клавиатуры в регистр АХ, причем для символьных клавишей в старшем байте регистра (ah) содержится скан-код, а в младшем байте (al) – код символа клавиши. Для функциональных клавишей в старшем байте – нуль, а в младшем – расширенный код. Если буфер пуст, процессор переходит в режим ожидания ввода с клавиатуры. Данное свойство макрокоманды позволяет останавливать выполнение программы на данной макрокоманде и продолжать ее выполнение после нажатия любой клавиши (ожидание ввода с клавиатуры).