Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Avdeev

.pdf
Скачиваний:
158
Добавлен:
01.06.2015
Размер:
1.99 Mб
Скачать

195

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

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

8.3. Клавиатура PC/XT

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

При нажатии или отпускании клавиши клавиатурой формируется и передается байтный код, называемый скэн-кодом. В скэн-коде нажатия 7 разряд равен 0, а в скэн-коде отпускания 7 разряд равен 1. Младшие 7 бит (разряды 0–6) скэн-кода определяют номер, присвоенный каждой клавише. Клавиша символа А имеет порядковый номер 30 (16-ричное значение 1Е), поэтому скэн-код нажатия этой клавиши равен 00011110, а скэн-код отпускания – 10011110. В ПК IBM AT принят другой формат представления скэн-кода клавиши. Если клавиша выполняет отжатие, то перед скэн-кодом передается код F0H. Рассмотрим принцип работы клавиатуры РС/ХТ.

Из клавиатуры скэн-код клавиши выводится последовательным кодом в адаптер клавиатуры, который преобразует его в параллельный код и передает в порт А (адрес 60Н, где Н – 16-ричное значение) микросхемы Intel 8255 (КР580 ВВ55), содержащей три порта: А, В и С. Одновременно с передачей кода в порт А адаптер клавиатуры формирует сигнал прерывания IRQ1 (второй по приоритетности сигнал прерывания), поступающий в программируемый контроллер прерывания, в микросхему Intel 8259 (КР1810 ВН59А). Наивысший по приоритету сигнал прерывания IRQ0 формирует таймер, чтобы сохранить верными показания системных часов.

196

Контроллер прерывания передает в процессор код типа (номера) прерывания (прерывание 9, прерывание от клавиатуры), который вызывает программу обработки прерывания (драйвер), выполняющий чтение скэн-кода из порта А, чтобы определить, какая клавиша нажата (отпущена). Каждому прерыванию (внешнему или внутреннему) поставлено в соответствие число (номер прерывания), например, прерыванию от клавиатуры – 9, для управления устройством печати – 15 и так далее. Кроме того, любому прерыванию соответствуют два слова (ячейки) памяти, в которых хранится вектор прерывания. В первом слове хранится значение IP (указателя команды), а во втором – CS (сегмент кода), определяющие адрес программы, обслуживающей прерывание. Чтобы найти место вектора прерывания в памяти, необходимо номер прерывания умножить на 4, так как под каждый вектор отводится 4 байта. Например, для прерывания 9 вектор имеет адрес 9 4=36 (0024Н). Таким образом, стартовый адрес подпрограммы обработки прерывания от клавиатуры хранится в двух ячейках памяти, адрес первой из которых – 0024Н.

Из подпрограммы обработки прерывания скэн-код передается в ROM–BIOS (базовую систему ввода-вывода), в которой подпрограммы, обслуживающие клавиатуру, переводят его в 2-байтный код. Для клавиш первого типа (клавиш ASCII) младший байт 2-байтного кода содержит код ASCII, а старший – скэн-код нажатой клавиши (скэн-код отжатой клавиши отбрасывается). Например, клавише Р, порядковый номер которой 25, 2-байтный код равен 80:25, где 80 – код ASCII символа Р, а 25 – скэн-код клавиши Р. Специальным клавишам второго типа (комбинациям клавиш) соответствуют 2-байтные расширенные коды. Например, клавише Del, порядковый номер которой 83, соответствует 2-байтный расширенный код 0:83, где 83 – скэн-код клавиши Del. При преобразовании скэн-кода решается задача нахождения соответствующего ему кода ASCII или расширенного кода. Задача поиска кода ASCII решается с помощью таблицы, размещенной в сегменте данных. Если скэн- кодбылравен32,тоиз256-байтнойтаблицыберетсябайтномер32,равный68(44Н) и соответствующий D.

Затем подпрограммы ROM–BIOS помещают 2-байтный код в буфер клавиатуры (область памяти с младшими адресами 0000:041Е), имеющий емкость до 15 вводимых символов. В буфере коды ожидают своей очереди, пока не будут запрошены программой, ожидающей ввода информации с клавиатуры.

197

Перевод (трансляция) скэн-кода выполняется не для всех клавиш.

При поступлении скэн-кодов от клавиш регистров Shift, Alt, Ctrl и клавиш переклю-

чателей (Caps Lock, Scroll Lock, Num Lock)в байты памяти с адресами 417Н и 418Н

записывается информация о состоянии этих клавиш. Например, в байте состояния с адресом 417Н, если разряд 3 равен 1, это указывает на активное состояние клавиши Alt (клавиша нажата). Если разряд 3 равен 0, то это соответствует неактивному (отжатому) состоянию клавиши Alt.

При поступлении скэн-кода ROM–BIOS сначала анализирует состояние клавиш регистров и переключателей, чтобы определить код а или А, и только после этого код символов помещается в буфер клавиатуры.

Кроме того, ROM-BIOS при трансляции скэн-кодов проверяет их на различные комбинации клавиш переключателей и регистров, например, Ctrl–Alt–Del, Ctrl– Num Lock и Shift–Prt Sc.

Эти клавишные наборы заставляют ROM–BIOS выполнить определенные действия без записи скэн-кодов в буфер клавиатуры. Так, комбинация Ctrl–Alt–Del, как известно, выполняет перезагрузку DOS, комбинация Ctrl–Num Lock – приостановку работы программы (фиксация клавиатуры) до тех пор, пока не будет нажата клавиша с печатаемым символом, комбинация Shift–Prt Sc выводит содержимое экрана на устройство печати. Если клавиша нажата больше полсекунды, то клавиатура, следящая за длительностью нажатия, с частотой 10 раз в секунду, генерирует скэн-код нажатия этой клавиши без промежуточных скэн-кодов отжатия, что позволяет упростить драйвер, который распознает разницу между нажатием и автоматическим повторением. Если, например, клавиша С удерживается долго, то ROM– BIOS формирует серию символов С, которые будут переданы программе.

С другой стороны, если удерживается долго клавиша регистра, то ROM–BIOS анализирует только первый скэн-код этой клавиши, а все остальные коды она игнорирует.

Клавиатура имеет много повторяющихся клавиш: две клавиши Shift, по две цифры, два плюса (минуса), две точки и т.д.

Скэн-коды повторяющихся клавиш разные, но ROM–BIOS транслирует их (скэн-коды) в одни и те же коды ASCII, и для их различия в старшем (вспомогатель-

198

ном) байте сохраняется значение скэн-кода. Только для клавиш Shift в байте состояния с адресом 417Н отмечается в разряде 1 состояние левой клавиши Shift, а в разряде 0 – состояние правой клавиши Shift. На рис. 8.1 показана схема связи клавиатуры и процессора.

Клавиатура

В [6] = 1 - разрешение

8048 (1816 ВЕ48)

формиров. синхросигналов

 

 

Последовательный скэн-код

 

В [7] = 1 - сброс адаптера

2

и синхросигналы

 

В [7] = 1 - разрешение

1

 

 

Адаптер

 

работы адаптера

 

 

 

клавиатуры

 

 

 

 

IRQ1

1

8

Параллельный

2

 

 

 

 

скэн-код

 

3

 

 

2

 

 

 

 

 

 

 

Контроллер

 

Трехканальный порт

 

прерывания

 

8255 (580 ВВ55)

 

8259 (1810 ВН59А)

 

Порт А

Порт В

 

INTR

Номер

Паралл.

B [6,7]

 

прерыв. (9) скэн-код

 

4

5

 

8

 

9

 

 

Процессор

 

 

 

7

6

 

10

 

 

 

Вектор

Адрес вектора

2 - байтный код

 

прерывания

прерывания

 

в буфер клавиатуры

 

IP , CS

(24Н)

 

 

 

 

 

Рис. 8.1. Схема связи клавиатуры и процессора

Клавиатура содержит контроллер i8048, представляющий собой однокристальную микроЭВМ, в состав которой входят внутренние ОЗУ емкостью 64 байта, 8-разрядное АЛУ, ППЗУ и три 8-разрядных порта с тремя состояниями. Перед установкой в клавиатуру микроЭВМ программируется и обеспечивает: управление схемой опроса матрицы клавиш, прием и анализ состояния опрашиваемой клавиши, устранение эффекта дребезга контактов, буферизацию кодов клавиш, выполнение

199

протокола связи; осуществление автотестирования матрицы клавиш с целью обнаружения залипших клавиш и контроля ОЗУ. В ПК АТ используют другой

контроллер i8042, который выполняет почти те же функции, что и контроллер ПК РС/ХТ.

Вработе схемы (см. рис. 8.1) можно выделить следующие основные моменты (цифры показывают последовательность действий в схеме).

Процессор осуществляет прием скэн-кода и после этого производит сброс регистра адаптера клавиатуры и сигнала прерывания IRQ1. Этот сброс процессор выполняет с помощью разряда 7 порта В (B[7]=1) микросхемы 8255 (580 ВВ55), называемой иногда трехканальным портом. Процессор сначала устанавливает B[7]=1, а затем сбрасывает этот разряд B[7]=0 (разрешает работу адаптера клавиатуры). Порт

Вимеет адрес 061h. Кроме того, процессор через разряд 6 порта В (B[6]=1) разрешает формирование сигналов синхронизации со стороны клавиатуры.

Процессор выполняет по таблице преобразование скэн-кода в 2-байтный код с кодом ASCII или расширенным кодом или установку соответствующих бит в байтах состояния для клавиш регистров и переключателей. Процессор записывает 2- байтный код клавиши в буфер клавиатуры, если имеется свободное место.

Между прерываниями клавиатуры процессор может выполнять десятки тысяч команд, так что прерывания не отнимают у него слишком много времени. Хорошая машинистка способна вводить до 400 символов в минуту, т.е. через каждые 150 мс процессор должен успевать считывать и запоминать символ. Благодаря механизму прерывания, процессор выполняет чтение скэн-кода из регистра адаптера за 10 мкс, а в оставшееся от 150 мс время он осуществляет другие действия.

ВклавиатуреПКРС/АТуправлениеееработойвыполняетсячерезпортвводавывода (64Н или 60Н), предназначенный для вывода команд и данных и для чтения состояния клавиатуры. Приведем некоторые команды контроллера клавиатуры: сброс и запуск теста (0FFН), привести клавиатуру в исходное состояние и разрешить сканирование (0F6Н), запись в порт вывода (0D1Н), чтение порта ввода (0С0Н) и так далее.

8.4. Клавиатура PC/AT

200

Клавиатура является основным устройством ввода алфавитно-цифровых и управляющих данных, необходимых для функционирования ПК. Известны несколько типов клавиатур с различными функциональными возможностями. Например, 83-клавишная клавиатура РС/ХТ, реализованная на базе контроллера 8048, имеет ограниченные средства по диагностике и обнаружению ошибок. В РС/АТ 84клавишная клавиатура использует микросхему 8042 с расширенными функциями. Эта клавиатура характеризуется другим расположением отдельных клавиш, наличием программного доступа и дополнительных средств по обнаружению и анализу ошибок. Расширенная 101-клавишная клавиатура использует также микросхему I8042 и употребляется в ПК РС/АТ и PS/2. Дальше будет рассматриваться только 101(102)-клавишная клавиатура.

На рис. 8.2 изображена схема связи клавиатуры и контроллера (I8042), размещенного на системной плате.

 

CLK

 

J22

 

 

 

1

CLK

 

DATA

 

 

 

2

DATA

 

 

Контроллер

Клавиатура

 

3

 

GND

(i8042)

 

 

4

GND

 

5B

 

 

 

5

5B

 

 

 

Рис. 8.2. Схема связи клавиатуры и контроллера

Клавиатура подключена к контроллеру системной платы 4-проводным экранированным кабелем. Два двунаправленных провода предназначены для передачи синхросигналов (CLK) и данных (DATA). Третий провод является сигнальным заземлением (GND), а четвертый - линией питания (5В).

По линии DATA передаются данные в виде последовательных кодовых посылок (команды, параметры, коды нажатия и отжатия, коды подтверждения), причем каждый бит данных сопровождается битом синхронизации по линии CLK.

201

Для управления работой клавиатуры контроллер посылает по ли-

нии DATA команды (установки и сброса индикаторов состояния, прочитать индикатор задания частоты повтора клавиши и т.д.). Клавиатура после приема команды отвечает кодом подтверждения, т.е. обмен осуществляется по принципу запрос-от- вет. Если после команды со стороны контроллера поступает параметр, то клавиатура также устанавливает код подтверждения. Аналогичным образом клавиатура передает в контроллер по линии DATA код нажатия (отжатия) клавиши с обратным получением кода подтверждения. Обмен данными между клавиатурой (контроллером) и системным процессором выполняется в режимах прерывания (IRQ1) и опроса битов готовности, размещенных в байте по адресу 0040:0097h, в котором значение 10h означает полученное подтверждение, а значение 20h - повторение передачи.

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

Режим 1 задается командой F0h с байтом конфигурации (параметром) 01h. В этом режиме используются 9-битовые коды нажатия (отжатия) клавиш клавиатуры PC/XT, которые не требуют преобразования и используются непосредственно про-

цедурой INT 16h BIOS c функциями 00h, 01h и 02h.

Режим 2 устанавливается по умолчанию и употребляет 11-битовые последовательные кодовые посылки нажатия (отжатия), которые преобразуются контроллером в корды, необходимые BIOS. Для обработки данных новых клавиш, которых нет в клавиатуре PC/XT, следует использовать функции 10h, 11h и 12h процедуры INT 16h BIOS.

Режим 3 использует специальные коды клавиш, которые могут быть преобразованы только прикладными программами. Этот режим устанавливается командой F0h с байтом конфигурации 3.

202

Конструктивно клавиатура выполнена в виде отдельного устройства, содержащего набор клавиш, матрицу переключателей клавиш, микропроцессор (МП), буфер (FIFO) на 17 байтов, генератор синхросигналов (ГС), индикацию и интерфейс связи с контроллером (I8042), размещенных на системной плате (рис.

Контроллер i8042

Системная плата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Клавиатура

 

 

 

 

 

 

 

Интерфейс связи

 

 

 

 

 

 

 

 

 

 

 

 

Клавиши

 

 

 

 

 

 

 

 

Индикация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(светодиоды)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

МП

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ГС

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Матрица

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переключателей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Буфер FIFO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8.3).

Рис. 8.3. Структурная схема клавиатуры

Данные в режиме 2 передаются по линии DATA 11-битной последовательной кодовой посылкой, имеющей стартстопный формат, причем каждый бит данных сопровождается синхросигналом на линии CLK. В кодовой посылке 1 бит является стартовым, затем следует 8 битов данных, которые замыкают биты паритета (нечет) и стоповый (рис. 8.4).

CLK

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

0

1

0

0

1

0

 

1

 

 

 

 

DATA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Стартовый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D0

D1

D2

D3

D4

D5

D6

D7

 

Бит Стоповый

 

бит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

паритета бит

Рис. 8.4. Формат 11-битовой кодовой посылки данных

203

В режиме 1 используется 9-битовая кодовая посылка без битов паритета и стопового, а стартовый бит равен 1.

Есликлавишанажата,то клавиатурапередает в контроллер скэн-кодэтойкла- виши. Скэн-код - это порядковый номер нажатой клавиши. Кроме того, клавиатура выводит этот же скэн-код при отпускании клавиши, но предварительно передается код F0h.

Кроме того, если клавиша удерживается нажатой, то клавиатура генерирует скэн-код с программируемой скоростью и задержкой повторения.

Микропроцессор (МП) клавиатуры (I8042) выполняет следующие основные функции:

-автотестирование матрицы переключателей клавиш, внутренних ПЗУ и ОЗУ

спередачей кода ААh в системную плату при успешном результате или кода FCh - в случае ошибки;

-опрос состояний DATA и CLK, чтобы определить отсутствие запрета;

-сканирование переключателей клавиш с целью установления факта нажатия или отпускания какой либо клавиши;

-выбор таблицы скэн-кодов;

-реализацию протокола связи с контроллером;

-буферизацию кодов клавиш;

-формирование последовательных кодовых посылок при нажатии или отпускании клавиш;

-задание частоты повтора кода клавиши.

Буфер FIFO («первый вошел - первый ушел») предназначен для временного

хранения кодов нажатия и отжатия до принятия их контроллером. При переполнении буфера в его фиксированную ячейку помещается код FFh в режиме 1 или код 00h - в режимах 2 и 3, и очередной скэн-код в этом случае не выводится.

Светодиоды индикации отображают состояние, например, включения клавиш Num Lock (блокировки цифр), Caps Lock (блокировки прописных букв) или Scroll Lock (блокировки прокрутки).

Генератор синхросигналов используется для синхронизации работы МП клавиатуры.

204

Клавишам соответствует определенный тип переключателя. Различают механические переключатели, электрические, использующие эффект Холла, индуктивные, сенсорные, емкостные и мембранного типа. Переключатели представлены в виде матрицы, которую МП последовательно опрашивает с целью обнаружения нажатия какой либо клавиши.

На рис. 8.5 показана схема взаимодействия компонентов, связанных с обработкой клавиатурных данных.

DATA

 

XD0-XD7

 

2-байтовый код

Клавиатура

CLK

Контроллер

IRQ 1

Процессор

адрес вектора

 

 

 

 

 

прерывания

 

 

 

A0, CS

 

0000:0024h

 

 

RD, WR, RESET, CLK

 

ROM-BIOS

 

 

RAM

 

состояния

 

 

 

 

Обработчик

 

стартовый

Вектор

 

 

INT 9h

 

адрес

прерывания

 

 

Обработчик

 

 

Байты

 

 

INT 16h

 

 

состояния

 

 

 

 

 

Буфер

 

 

 

 

 

клавиатуры

 

 

Рис. 8.5. Схема взаимодействия компонентов ПК Клавиатура имеет собственное программное обеспечение, выполняющее пе-

речисленные выше функции МП. При выводе данных клавиатура опрашивает состояние линий DATA и CLK с открытым коллектором. Если на линии CLK установлен контроллером запрещающий низкий уровень, то данные, например, коды нажатия, не передаются в контроллер, а посылаются в буфер FIFO на временное хранение (см. рис. 8.3). Коды нажатия (отжатия) из буфера FIFO посылаются в контроллер при возникновении на линии CLK высокого разрешающего уровня напряжения. Так достигается согласование во времени работы клавиатуры и контроллера, связанной с обменом данными. Если данные клавиатуры получены с ошибкой паритета, то контроллеравтоматическипосылаеткоманду RESEND(повторить).Всвоюочередь,когда контроллер готов к передаче данных в клавиатуру, он устанавливает на линии DATA низкий уровень стартового бита и разрешает (увеличением уровня напряжения) формирование синхросигналов CLK со стороны клавиатуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]