Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

5.Средства ввода информации

Ввод информации в программу может быть выполнен на трех уровнях:

обращением к функциям операционной системы;

обращением к функциям BIOS;

физическим доступом к аппаратным средствам.

Ввод на уровне ОС позволяет пропустить сигналы от клавиатуры через инсталируемые драйверы, обеспечивает отслеживание нажатия Ctrl+C (Ctrl+Break), стандартную обработку ошибок. На этом уровне работают функции ввода из стандартного файла stdin, функции консольного ввода getcН(), getcНe().

Доступ к клавиатуре на уровне BIOS позволяет отслеживать нажатие всех клавиш, выполнять управление аппаратурой клавиатуры. Интерфейс с BIOS реализует функция Borland C bioskey(), которая выполняет функции 00..02Н прерывания 16Н.

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

5.1.Аппаратные и программные средства ввода информации с клавиатуры

Клавиатура содержит специализированный микропроцессор, который при каждом нажатии и отпускании клавиши определяет ее порядковый номер и помещает его в порт 64Н (или 60Н) программируемого периферийного интерфейса Intel 8042. Младшие 7 бит содержат номер клавиши, а старший бит устанавливается в нуль при нажатии (прямой скэн-код) и единицу при отпускании (обратный скэн-код) клавиши. Когда скэн-код записан в порт 64Н программируемого периферийного интерфейса, выдается сигнал подтверждения и генерируется прерывание 09Н для вызова стандартного обработчика прерываний от клавиатуры. BIOS анализирует скэн-код и преобразует его.

Если клавиша нажата дольше времени задержки (delay value), микропроцессор клавиатуры генерирует с заданной частотой (typematic rate) прямой скэн-код клавиши.

Контроллер клавиатуры генерирует прерывание по линии 1 (IRQ1) на каждое нажатие и отпускание клавиши. IRQ1 распределена за обработчиком прерывания 09Н и обслуживается BIOS.

Порт 60Н является только записываемым и поддерживается для совместимости с ранними моделями персональных компьютеров.

Порт 64Н служит для записи команд и данных, а также для чтения статуса клавиатуры. Перед посылкой команды клавиатуре BIOS тестирует ее состояние командой in AL,64Н для предотвращения ситуаций переполнения буфера или нажатия на клавишу.

Чтобы избежать критических ситуаций, например, при установке частоты генерации кода, следует установить небольшую задержку между двумя операциями записи в порт:

mov al,cmd_code

out 64Н,al

mov cx,2000Н ;приблизительное значение

delay: loop delay

mov al,data_value

out 64Н,al

Для управления клавиатурой применяются команды:

0FFН - восстановление клавиатуры и запуск диагностики;

0FEН - повторная передача последнего сообщения;

0FDН..0F7Н - зарезервировано;

0F6Н - установить состояние клавиатуры по умолчанию и продолжить ввод;

0F5Н - установить состояние клавиатуры по умолчанию и отменить ввод;

0F4Н - клавиатура доступна. Выполняется посылка 'ACK', очищается буфер и запускается ввод;

0F3Н - установить частоту генерации и время задержки. Сначала посылается команда 0F3Н, а затем байт данных:

Частота генерации устанавливается в соответствии с таблицей 4. Недостающие значения определяются интерполяцией.

Таблица 4 – Частота генерации символов

Первоначально для клавиатуры устанавливается время задержки 0.5 с и частота повторений 10 символов/с.

Задержка и частота повторения могут устанавливаться через функцию AН = 03Н прерывания 16Н BIOS.

0F2Н..0EFН - зарезервировано;

0EEН - эхо. Просто посылает значение 0EEН;

0EDН - управление триггерными клавишами и индикаторами. Посылается 0EDН, а затем байт, в котором используются только биты 0..2