Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
154
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

54 Организация ввода данных с клавиатуры.

На электронном уровне клавиатура IBM/PC представляет собой небольшой самостоятельный компьютер. Внутри блока клавиатуры размещается микропроцессор 8048 фирмы "Интел", который выполняет задачу слежения за нажатиями клавиш и передачи их состояния. Микропроцессор 8048 выполняет различные функции, включая самодиагностику (после включения питания компьютера), проверку нажатия клавиш и противодребезговую защиту (что не позволяет воспринимать одну нажатую клавишу как две).

Микропроцессор 8048 позволяет также буферизовать до 20 нажатий клавиш, если центральный процессор не может их принять сразу. Обычно этот буфер совершенно пуст, поскольку ситуации, когда центральный процессор не успевает отреагировать на запрос клавиатуры.

Вы, вероятно, слышали предупреждающий звуковой сигнал, когда нажатие Вами клавиш опережало возможности программы по их вводу. Это не связано с заполнением буфера клавиатуры. Процедура ввода с клавиатуры системы BIOS в ПЗУ имеет собственный буфер и звуковой сигнал раздается в случае заполнения этого буфера. Буфер клавиатуры может содержать 20 символов, а буфер системы BIOS - только 15. По мере изучения клавиатуры мы рассмотрим как код нажатой клавиши попадает сначала в буфер клавиатуры, затем в буфер BIOS и, наконец, в программу.

Блок клавиатуры не связывает с клавишами никаких конкретных значений. Вместо этого, блок клавиатуры идентифицирует по ее номеру или коду сканирования. Все клавиши имеют коды сканирования от 1 до 83.

При нажатии клавиши блок клавиатуры передает ее код сканирования центральному процессору. Когда клавиша отпускается, клавиатура снова передает ее код, но увеличенный на 128 (или шестнадцатиричное значение 80). Таким образом, имеются различные коды для нажатия и освобождения клавиш.

Для работы с клавиатурой используются порты и прерывания. Когда выполняется какое-либо действие с клавишей (нажатие или освобождение), процессор клавиатуры обнаруживает его и запоминает в своем буфере. Затем, процессор клавиатуры формирует прерывание с номером 9. В ответ на прерывание служебная процедура системы BIOS в ПЗУ считывает код сканирования клавиши из порта клавиатуры (порт номер 96) и затем пересылает в порт клавиатуры команду очистить буфер процессора клавиатуры. Если системный блок не реагирует на прерывания клавиатуры, то коды сканирования накапливаются в буфере процессора клавиатуры, хотя при нормальной работе этого не должно происходить. Специальный код сканирования 255, шестнадцатиричное значение FF, используется блоком клавиатуры, для сообщения, что его буфер заполнен.

Поскольку информация о нажатии клавиши поступает в системный блок от клавиатуры через порт, любая программа, имеющая доступ к порту, может непосредственно общаться с клавиатурой. На практике, однако, это неприменимо, так как блок клавиатуры вырабатывает еще и прерывания, которые обрабатываются системой BIOS в ПЗУ.

Клавиатура IBM/PC выполняет еще и функцию повторения клавиши. Блок клавиатуры следит за тем, сколько времени клавиша остается нажатой и формирует сигнал повторения. Функция повторения распространяется на все клавиши блока клавиатуры.

Процедуры системы BIOS в ПЗУ могут распознавать отличие повторных нажатий клавиши от повторения сигнала удерживаемой в нажатом состоянии клавиши, путем анализа кодов сканирования освобожденной клавиши. Если для одной и той же клавиши получены два кода нажатой клавиши и между ними не было кода освобожденной клавиши, значит клавиша удерживается процедурами системы BIOS для подавления функции повторения тех клавиш, которым она не нужна, таких как, например, клавиша смещения (shift).

Теперь Вам должны быть понятны основы того, как IBM/PC работает с клавиатурой. Блок клавиатуры сообщает, что происходит с клавиатурой: какие клавиши нажимаются, какие освобождаются и, через определенный промежуток времени, какие удерживаются в нажатом состоянии. Система BIOS в ПЗУ интерпретирует получаемую от блока клавиатуры информацию,

придавая ей определенный смысл. Таким образом, имеет место очень ясное и четкое разделение труда. Блок клавиатуры занимается физической стороной, механизмом функционирования клавиатуры, а программы системы BIOS в системном блоке выполняют все логические операции по интерпретации действий клавиатуры.

Большинство пользователей даже не знает, что клавиатура IBM/PC передает сигналы не только о нажатии, но и об освобождении клавиши, поскольку такая информация обычно скрыта от пользователя. Ее можно увидеть, запустив тест клавиатуры из набора диагностических программ IBM/PC. Если присмотреться, можно заметить, что изображение на экране меняется при каждом нажатии, освобождении клавиши или когда клавиша удерживается в нажатом состоянии достаточно долго для того, чтобы начала действовать функция повторения.

  1. Функции BIOS и операционной системы при работе с клавиатурой.

Рассмотрим теперь служебные процедуры системы BIOS, позволяющие осуществлять доступ к клавиатуре.

Процедуры обслуживания клавиатуры в системе BIOS вызываются с помощью прерывания номер 22, шестнадцатиричное значение 16. Таких процедур всего три, поскольку не слишком много функций можно запросить для клавиатуры.

Первая процедура, имеющая код 0, возвращает очередной принятый от блока клавиатуры символ. Эта процедура возвращает управление вызывающей программе только тогда, когда будет введен символ, так что программе не приходится проверять, был ли действительно введен символ. Код обычного символа возвращается в регистре AL, но если содержимое AL равно нулю, то в регистре АН находится код специального символа. Эти регистры соответствуют первому и второму байтам, упоминавшимся выше, при рассмотрении кодов специальных символов. Ниже описана логика процесса распознавания получаемых символов:

если AL=0 то

начало

спец_символ:= истина;

введенный_символ:= АН

конец

иначе

начало

спец_символ:= AL

конец;

Можно сделать ряд интересных замечаний, касающихся значений, возвращаемых этой процедурой. Если введен обычный код АSCII (то есть, AL не равняется нулю), то в регистре АН содержится код сканирования для нажатой клавиши. Но, если код ASCII был введен с помощью клавиши "Alt", то в регистре АН будет ноль. Эту информацию программа может использовать для определения способа вода символа. Некоторые символы кода ASCII встречаются на клавиатуре IBM/PC дважды.

Функции BIOS для работы с клавиатурой Прерывание 16 BIOS имеет функции для различных типов клавиатур: обычной — 84 клавиши и двух типов расширенной клавиатуры — 101\102 и 122-клавишной.

Проверка наличия символа (01h, 11h, 21h int 16h)

Получение состояния флагов клавиатуры (02h, 12h, 22h int 16h) Запись символа в буфер клавиатуры (05h int 16h)

Функции MS DOS для ввода данных с клавиатуры Для ввода данных с клавиатуры можно использовать два вида функций: универсальную функцию 3fh (ввод из файла) и группу специализированных функций MS DOS ввода с клавиатуры. Подробно использование функции 3fh для ввода данных рассматривается в главе 7, а здесь сосредоточимся на второй группе функций, в которую входит семь функций, отличающихся друг от друга следующими характеристиками:

  • ожиданием ввода при отсутствии символа в буфере клавиатуры или только проверкой буфера на наличие символов для ввода;

  • количеством вводимых символов; наличием эха при вводе, то есть дублированием вводимого с клавиатуры символа на экране;

  • восприимчивостью к сочетанию клавиш Ctrl+C (код 03h).

Чтение с эхом символа с клавиатуры (10h int 21h) Прямой ввод с эхом символа с клавиатуры (06h int 21h) Чтение без эха символа с клавиатуры (07h int 21h) Чтение без эха символа с клавиатуры (08h int 21h) Получить состояние клавиатуры (0Bh int 21h) Получить состояние клавиатуры (0Bh int 21h)