|
Интерфейс контроллера клавиатуры
Клавиатура
ВВЕДЕНИЕ
В настоящее время клавиатура (Keyboard) является основным устройством ввода информации в PC, несмотря на сильную конкуренцию со стороны мыши. Ее главенствующее положение навряд ли изменится до тех пор, пока не будет создана надежная и недорогая система распознавания человеческой речи.
ЦЕЛЬ РАБОТЫ
Изучить конструкцию и принцип работы клавиатуры.
АРХИТЕКТУРА КЛАВИАТУРЫ
Принцип действия клавиатуры
Принцип действия клавиатуры объясняется структурной схемой представленной на рис. 1. Независимо от того, как механически реализован процесс нажатия клавиш, сигнал нажатия клавиши регистрируется контроллером клавиатуры типа 8049 и передается в виде скэн-кода на материнскую плату. Скэн-код – это однобайтовое число, младшие 7 бит которого представляют идентификационный номер, присвоенный каждой клавише (табл. 1 – 5). На материнской плате PC для подключения клавиатуры также используется специальный контроллер. Для PC типа AT обычно применяется микросхема периферийного универсального интерфейса UPI (Universal Peripheral Interface) типа 8042.
Когда скэн-код поступает в интерфейс UPI, то инициализируется аппаратное прерывание (IRQ1), и выполняется процедура анализирующая скэн-код. Данное прерывание обслуживается специальной программой, входящей в состав ROM BIOS. При поступлении скэн-кода от клавиш сдвига (<Alt>, <Ctrl>) или переключателя (<Shift>, <CapsLock>) изменение статуса записывается в RAM.
Во всех остальных случаях скэн-коды трансформируются в код символа (так называемые коды ASCII или расширенные коды). При этом обрабатывающая процедура сначала определяет установку клавиш и переключателей, чтобы правильно получить вводимый код («а» или «А»). Затем введенный код помещается в буфер клавиатуры, представляющий собой область памяти, способную запомнить до 15 вводимых символов, пока прикладная программа не может их обработать. Буфер организован по принципу FIFO (первый вошел – первый вышел). Интерфейс может не только принимать, но и передавать данные, чтобы сообщить клавиатуре различные параметры, например частоту повтора нажатой клавиши и др. Контроллер клавиатуры отвечает не только за генерирование скэн-кодов, но и выполняет функции самоконтроля и проверки нажатых клавиш в процессе загрузки системы. Процесс самоконтроля отображается однократным миганием трех индикаторов LED клавиатуры во время выполнения программы POST. Таким образом, неисправность клавиатуры выявляется уже на стадии загрузки РС.
| | |
Рис. 1. Структурная схема обработки информации, вводимой с клавиатуры
Контроллер клавиатуры
Коды символов, изображенных на клавишах, формирует контроллер клавиатуры (схема шифратора контроллера показана на рис. 2), последовательно опрашивающий все клавиши с частотой около 80 Гц. Для этого в контроллере предусмотрен счетчик DD2, DD3, подсчитывающий импульсы тактового генератора, собранного на триггере Шмитта DD1.1 и работающего на частоте около 20 кГц. Число, записанное в счетчике, определяет адрес клавиши в матрице клавиатуры, т. е. номер горизонтальной (соединенной с одним из входов А – Е мультиплексора DD6) и вертикальной (соединенной с одним из выходов 0 – 15 дешифратора DD5) линий, на перекрестии которых находится замкнутая пара контактов нажатой клавиши. Для опроса клавиатуры дешифратор четырех младших разрядов адреса DD5 поочередно устанавливает низкий уровень на одной из линий матрицы клавиатуры, а мультиплексор DD6 в соответствии со значением трех старших разрядов адреса подключает одну из линий матрицы к входу S триггера DD4.2.
Если пара контактов, адрес которой записан в счетчике, разомкнута, на выходе мультиплексора установится высокий уровень напряжения, следовательно, состояние триггера не изменится. Как только в процессе опроса будет найдена замкнутая пара контактов, на прямом выходе мультиплексора DD6 появится сигнал 0, который установит триггер DD4.2 в единичное состояние. Одновременно в текущем цикле опроса через транзистор VT1 разрядится конденсатор С4, заряженный до напряжения источника питания. В этот же момент буферный регистр DD8 запоминает код, соответствующий нажатой клавише.
Для преобразования адреса клавиши в стандартный код применено постоянное запоминающее устройство DD7 с прожигаемыми перемычками. В нем хранится таблица соответствия адреса клавиши, поступающего из счетчика контроллера клавиатуры, и значения разряда контроля четности. Применение ПЗУ для перекодирования позволяет подключать клавиши в матрице произвольно, исходя из удобства монтажа. Как только триггер DD4.2 будет установлен в состояние 1, низкий уровень напряжения на входе DS0 регистра DD8 разрешит запись в него кода клавиши. После записи кода на выходе INT регистра DD8 появится высокий уровень – сигнал OBF "Готовность", сигнализирующий о необходимости передачи кода из шифратора клавиатуры в устройство-приемник информации. В свою очередь, приемник информации считывает по линиям D0 – D7 код клавиши и по завершении операции выдает в контроллер импульс STR "Принято", означающий возможность приема следующего кода. Такой вид асинхронного обмена информацией называют обменом с квитированием. Для того чтобы запретить изменение кода на выходе контроллера до считывания его приемником, низкий уровень сигнала "Готовность" поступает через диод VD2 на вход инвертора DD1.2 и не позволяет принять следующий код нажатой клавиши до тех пор, пока приемник информации не ответит сигналом STR ("Принято"). Как уже упомянуто, таблица кодов клавиш записана в ППЗУ. Для упрощения формирования кодов верхнего и нижнего регистров клавиатуры в запоминающем устройстве есть две области (страницы), выбираемые значением разряда адреса А7, т. е. состоянием триггера DD4.1. На первой из них размещена таблица для символов верхнего, а на второй – нижнего регистра.
| | | | | | | | | |
Скэн-Коды
В табл. 1 – 3 представлены скэн-коды, которые соответствуют наиболее распространенной в настоящее время клавиатуре MFII (многофункциональной клавиатуре) со 102 клавишами. Соответствие скэн-кодов клавишам клавиатуры можно узнать с помощью программы ndiags.exe, входящей в пакет Norton Utilities.
Таблица 1
Скэн-коды функциональных клавиш и специальных клавиш
Клавиша
| Скэн-код
| Клавиша
| Скэн-код
| <Esc>
|
| <Tab>
| 0F
| <F1>
| 3B
| <Caps Lock>
| 3A
| <F2>
| 3C
| <Shift> левый
| 2A
| <F3>
| 3D
| <Ctrl> левый
| 1D
| <F4>
| 3E
| <Alt>
|
| <F5>
| 3F
| <Space>
|
| <F6>
|
| <Alt>
| E038
| <F7>
|
| <Backspace>
| 0E
| <F8>
|
| <Enter>
| 1C
| <F9>
|
| <Shift> правый
|
| <F10>
|
| <Ctrl> правый
| E01D
| <F11>
|
|
|
| <F12>
|
|
|
|
Таблица 2
Скэн-коды клавиш ввода данных
Клавиша
| Скэн-код
| Клавиша
| Скэн-код
| <1>
|
| <]>
| 1B
| <2>
|
| <A>
| 1E
| <3>
|
| <S>
| 1F
| <4>
|
| <D>
|
| <5>
|
| <F>
|
| <6>
|
| <G>
|
| <7>
|
| <H>
|
| <8>
|
| <J>
|
| <9>
| 0A
| <K>
|
| <0>
| 0B
| <L>
|
| <–>
| 0C
| <;>
|
| <=>
| 0D
| <’>
|
| Окончание табл. 2
Клавиша
| Скэн-код
| Клавиша
| Скэн-код
| <Q>
|
| <Z>
| 2C
| <W>
|
| <X>
| 2D
| <E>
|
| <C>
| 2E
| <R>
|
| <V>
| 2F
| <T>
|
| <B>
|
| <Y>
|
| <N>
|
| <U>
|
| <M>
|
| <I>
|
| <,>
|
| <O>
|
| <.>
|
| <P>
|
| </>
|
| <[>
| 1A
|
|
|
Таблица 3
Скэн-коды клавиш управления курсором и цифрового поля
Клавиша
| Скэн-код
| Клавиша
| Скэн-код
| <Ins>
|
| <Num Lock>
|
| <Home>
|
| </>
|
| <Page UP>
|
| <*>
|
| <Del>
|
| <–>
| 4A
| <End>
| 4F
| <7>, <Home>
|
| <Page Down>
|
| <8>, <|>
|
| < | >
|
| <9>, <Page UP>
|
| <ß>
| 4B
| <4>, <ß>
| 4B
| < | >
|
| <5>
| 4C
| <à>
| 4D
| <6>, <à>
| 4D
|
|
| <+>
| 4E
|
|
| <1>, <End>
| 4F
|
|
| <2>, <|>
|
|
|
| <3>, <Page Down>
|
|
|
| <0>, <Ins>
|
|
|
| <.>, <Del>
|
|
|
| <Enter>
| 1C
|
Интерфейс контроллера клавиатуры
Клавиатура состоит из набора переключателей, объединенных в матрицу (рис. 3). При нажатии на клавишу контроллер клавиатуры, установленный в самой клавиатуре, определяет код нажатой клавиши в матрице. Он также определяет продолжительность нажатия и может даже обработать одновременное нажатие нескольких клавиш. В клавиатуре установлен собственный буфер емкостью 16 байт, в который заносятся данные (коды) при слишком быстрых или одновременных нажатиях на клавиши. Затем эти данные в соответствующей последовательности передаются в системный блок.
Рис. 3. Матрица контактов клавиш
Связь с системным блоком осуществляется через последовательную линию связи, данные по которой передаются «кадрами» по 11 бит, восемь из которых – информационные данные, а остальные – синхронизирующие и управляющие. Это последовательная линия связи. В системах AT контроллер, установленный в клавиатуре (типа 8049), пересылает данные в универсальный интерфейс UPI на системной плате. В компьютерах PC/XT связь была односторонней, но в компьютере AT она стала двунаправленной, т. е. клавиатура может, как передавать данные, так и принимать. Благодаря этому клавиатуру AT можно программировать.
Работу двунаправленного интерфейса иллюстрирует рис. 4а, где пунктиром помечены сигналы, формируемые контроллером, а сплошной линией – клавиатурой. В исходном состоянии обе линии «отпущены» выходными формирователями в состояние с высоким уровнем. Клавиатура может начать передачу данных в произвольный момент, когда интерфейс находится в покое. Клавиатура формирует стартовый бит (низкий уровень) на линии KB-Data и первый импульс KB-Clock, что является сигналом контроллеру о необходимости начала приема. После подъема KB-Clock она выводит 0-й бит данных на линию KB-Data, а затем и следующий импульс KB-Clock. Контроллер должен «защелкивать» принятый бит данных по спаду KB-Clock. Так передаются все 8 бит данных и бит паритета, дополняющий число единичных бит до нечетного. После синхроимпульса бита паритета контроллер клавиатуры должен сформировать импульс KB-Clock, подтверждающий прием байта (Ack). Если весь байт с битом паритета не будет получен контроллером за 2 мс, контроллер прекращает прием данного байта и фиксирует ошибку тайм-аута.
Рис. 4. Временные диаграммы интерфейса клавиатуры:
а) прием посылки от клавиатуры; б) передача команды в клавиатуру
Обратная передача – вывод команды контроллера в клавиатуру – происходит несколько сложнее (рис. 4б). Из состояния покоя контроллер устанавливает низкий уровень KB-Clock на 250 мкс и формирует старт-бит (низкий уровень) – это сигнал клавиатуре на прием команды. На него клавиатура должна ответить серией из 11 импульсов KB-Clock. По спаду очередного синхроимпульса контроллер выставляет очередной бит данных, а клавиатура его «защелкивает» по фронту формируемого ею же синхроимпульса. После бита паритета (9-й импульс) и единичного стоп-бита (10-й) на одиннадцатом импульсе клавиатура формирует нулевой бит подтверждения (Ack). После этого контроллер формирует импульс KB-Clock (60 мкс), который является запросом на прием ответа клавиатуры. Контроллер ожидает окончания ответа на этот запрос не более 20 мс и, если ответ не придет за это время, сформирует ошибку тайм-аута. Ошибка будет также в случае, если клавиатура не введет первый синхроимпульс за 15 мс от начала запроса или контроллер не примет данные, включая стоп-бит, за 2 мс с момента появления синхроимпульса бита 0.
Подключение клавиатуры
Обычно для подключения клавиатуры используется спиралевидный кабель длиной около 1 м, имеющий DIN-разъем. Обычно на клавиатуре имеется 6-контактный разъем, а на материнской плате 6-полюсное гнездо. Эти разъемы называются разъемами Mini DIN или разъемами PS/2 (рис. 5). Назначение контактов такого разъема представлено в табл. 4.
Рис. 5. 6-контактный Mini DIN разъем для подключения клавиатуры
Таблица 4
Сигналы 6-контактного разъема клавиатуры
№ контакта
| Сигнал
| Назначение
|
| Линия данных (KB Data)
| Вход/Выход
|
| Не подключен
| Резерв
|
| Корпус
| Вход
|
| + 5В
| Вход
|
| Тактовая частота (KB Clock)
| Выход
|
| Не подключен
| Резерв
|
Драйвер клавиатуры
Для того чтобы экран отображал символ, действительно набранный на клавиатуре, и, прежде всего, если вы вводите с помощью англоязычной клавиатуры русские буквы и специальные символы, необходим драйвер клавиатуры, который обычно является составной частью любой операционной системы. Драйвер клавиатуры операционной системы называется KEYB.COM. Вы можете инициализировать этот драйвер в любое время, набрав в командной строке
Keyb Ru <Enter>,
где дополнительный параметр RU означает русский язык и обозначает соответствующий набор символов, которые должна использовать операционная система. Целесообразно поместить эту командную строку в файл AUTОEXEC.BAT. В этом случае драйвер каждый раз будет загружаться автоматически. Если загружать драйвер клавиатуры через стартовый файл CONFIG.SYS, нужно занести в этот файл следующую строку:
Install = Keyb.Com Ru.
Для операционной системы неважно, какими буквами набрана команда. Драйвер клавиатуры загружается в память компьютера резидентно, т. е. в процессе работы компьютера он постоянно находится в памяти.
Альтернативой обычным драйверам клавиатуры, входящим в операционную систему, являются драйвера, разрабатываемые некоторыми фирмами. Сюда относится, например, драйвер KBD.COM, занимающий всего лишь 300 байтов в основной памяти. Эти драйверы имеют преимущество, важное для резидентных программ, – они занимают намного меньше места, чем обычный драйвер DOS.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|