Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
labex.doc
Скачиваний:
3
Добавлен:
19.11.2019
Размер:
4.14 Mб
Скачать

3.3 Оборудование

Персональный компьютер класса AT и выше, содержащий клавиатуру; демонстрационная программа test_key.exe; осциллограф, измерительный переходник.

3.1.Задание на работу

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

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

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

Устойчивой осциллограммы добиваются путём непрерывной подстройки синхронизации развертки, когда клавиша (комбинация клавиш) постоянно нажата и клавиатура периодически выдает по линии KBD_DATA последовательную посылку. Желательно использовать двухлучевой осциллограф для одновременного наблюдения состояния линий KBD_DATA и KBD_CLK.

Варианты заданий даются преподавателем индивидуально и могут предусматривать снятие осциллограмм с линий клавиатуры при следующих ситуациях:

1) Нажатие символьной клавиши.

2) Нажатие управляющей клавиши

  1. Одновременное нажатие символьной и управляющей клавиш.

3.2.Оформление отчета

Отчет должен содержать цель работы, порядок её выполнения, функциональную схему клавиатуры, схему опыта и снятые осциллограммы линий KBD_CLK и KBD_DATA, а также характерные неисправности клавиатуры со способами их устранения.

3.3.Контрольные вопросы

1) Приведите классификацию основных типов конструкций клавиатур.

2) Какова роль контроллера i8048 в управлении клавиатурой?

3) В чём заключается назначение микросхемы LS138 (рис.3.1)?

  1. Каким способом данные передаются из клавиатуры на системную плату?

  2. Для чего используются выводы Р23..Р25 микросхемы i8048 (рис.3.1)?

  3. Каковы основные неисправности клавиатуры и способы их устранения?

  4. Каким образом устраняется загрязнение контактов клавиатуры?

ЛАБОРАТОРНАЯ РАБОТА №4

РАЗРАБОТКА программного обеспечения ТЕСТИРОВАНИЯ КЛАВИАТУРЫ

4.4.1. Цель и задачи работы

Целью работы является освоение методов тестирования клавиатуры и их реализация в тестовом программном обеспечении.

4.2. Основные теоретические положения

Взаимодействие компьютера с клавиатурой

Современные персональные компьютеры типа IBM PC AT взаимодействуют с клавиатурой с помощью микропроцессора Intel 8042 [4].

Управление клавиатурой производится обращением к порту ввода-вывода 64h. Для совместимости со старыми ПЭВМ допустимо использование порта 60h [5].

Порт 64h предназначен для вывода команд и данных и для чтения состояния клавиатуры. Общая схема посылки команд клавиатуре такова:

cli ;запрет прерываний

call wait_kbd ;ожидание готовности клавиатуры

mov al,cmd_code ;код команды

out 64h,al ;вывод в порт

sti ;разрешение прерываний

Для команд, сопровождающихся байтом данных, эта схема принимает вид:

cli

call wait_kbd

mov al,cmd_code ;код команды

out 64h,al

call wait_kbd

mov al,data_value ;байт данных

out 64h,al

sti

Проверка ожидания готовности клавиатуры может иметь вид:

wait_kbd:

mov cx,2500h ;задержка порядка 10 мсек

test_kbd:

in al,64h ;читаем состояние клавиатуры

test al,2 ;проверка бита готовности

loopnz test_kbd

ret

В таблице 4.1 приведены команды контроллера клавиатуры

Таблица 4.1 Команды контроллера клавиатуры

Код команды

Описание

1

2

0FFh

Сброс клавиатуры и запуск внутреннего теста

0FЕh

Повторить последнюю передачу

0FDh

Вызов прерывания IRQ1

0F6h

Привести клавиатуру в исходное состояние и разрешить сканирование

0F5h

Привести клавиатуру в исходное состояние и запретить сканирование

Продолжение таблицы 4.1

1

2

0F4h

Сбросить буфер клавиатуры и начать сканирование

0F3h

Задать задержку и скорость ввода символов. Первоначально клавиатура начинает повторять нажатую клавишу через 0,5 сек со скоростью 10 повторов в секунду

0EEh

Эхо (для диагностики). Просто возвращает 0ЕЕh

0EDh

Управление светодиодами клавиатуры

0DFh

 Разрешить 20-битовую адресацию

0DDh

 Запретить 20-битовую адресацию

0D1h

Запись в порт вывода 8042

0D0h

Чтение порта вывода 8042

0C0h

Чтение порта ввода 8042

0AEh

Разрешение клавиатуры

0ADh

Запрещение клавиатуры

0ACh

Чтение ОЗУ контроллера

0ABh 

Тест синхронизации и данных

0AAh

Внутренний тест клавиатуры

В команде 0F3h вы можете изменить параметры, послав байт данных следующего формата (рис.4.1) :

Количество повторов в команде 0F3h задается таблицей 4.2.

Таблица 4.2 Скорости передачи символов

Конст.

Скорость

Конст.

Скорость

Конст.

Скорость

00h

30.0

0Bh

10.9

16h

4.3

01h

26.7

0Ch

10.0

17h

4.0

02h

24.0

0Dh

9.2

18h

3.7

03h

21.8

0Eh

8.6

19h

3.3

04h

20.0

0Fh

8.0

1Ah

3.0

05h

18.5

10h

7.5

1Bh

2.7

06h

17.1

11h

6.7

1Ch

2.5

07h

16.0

12h

6.0

1Dh

2.3

08h

15.0

13h

5.5

1Eh

2.1

09h

13.3

14h

5.0

1Fh

2.0

0Ah

12.0

15h

4.6

Для включения или выключения светодиодов в команде 0EDh необходимо послать байт вида (рис. 4.2)

Программирование портов контроллера 8042

Для записи в выходной порт необходимо:

– ввести команду 01h (следующий байт – значащий) по адресу 64h.

– ввести нужное значение данных для выходного порта по адресу 60h.

Чтобы прочитать значение выходного порта 8042, нужно:

– ввести команду 00h (передать текущие значения выходного порта в выходной буфер 8042) по адресу 64h.

– прочитать выходной буфер 8042 (60h).

Перед выдачей команд и данных в порты 60h и 64h программа должна проверить, чтобы входной буфер i8042 был пуст.

Чтобы прочитать значение входного порта i8042, нужно:

– ввести команду C0h (передать текущие значения входного порта в выходной буфер 8042) по адресу 64h.

– прочитать выходной буфер i8042 (адрес порта 60h).

Чтобы прочитать значение контрольного порта TEST 8042, необходимо:

– вести команду E0h (передать текущие значения контрольного порта в выходной буфер 8042) по адресу 64h.

– прочитать выходной буфер 8042 (адрес порта 60h).

Контроллер 8042 программируется в адресном пространстве портов 60h и 64h. Перед записью команды или данных в порты 60 или 64 в регистре состояния 8042 должен быть установлен указатель «входной буфер пуст». Перед чтением данных из порта 60 необходимо проверить регистр состояния 8042, который должен указывать состояние «выходной буфер полон».

Для чтения данных из выходного буфера 8042 используется команда IN микропроцессора. Данные в выходном буфере – это данные от клавиатуры, если только 8042 не получил определенную команду, например 20h – читать байт команды.

Для передачи данных на клавиатуру используется команда OUT, если только 8042 не получил многобайтовую команду, например 60h – записать байт команды. Чтобы выдать на клавиатуру многобайтовую команду, необходимо ввести первый командный байт в порт 64, а второй командный байт – в порт 60.

Для чтения состояния 8042 и клавиатуры используется команда IN (ввод с порта 64), а чтобы дать команду на 8042, используется команда OUT (вывод в порт 64). Запись по этому адресу указывает, что следующий байт, записанный в порт 60, – команда. Большинство команд записываются за один шаг. Однако для записи некоторых команд требуется второй шаг, например последовательное чтение или запись регистра 8042.

Пример программирования 8042:

in al, 64h ; прочитать регистр состояния 8042

out 64h, al ; вывести команду из AL на 8042

in al, 60h ; прочитать данные клавиатуры

out 60h, al ; вывести данные из AL на клавиатуру

Перед отсылкой команд и данных в порты 64 и 60 программа должна предварительно проконтролировать отсутствие данных во входном буфере 8042. Состояние 8042 получается чтением порта 64.

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

1) тайм-аут в случае, если входной буфер клавиатуры всегда полон,

2) состояние, когда не приходит подтверждение обслуживания (ACK).

Необходимо использовать следующие шаги:

1) убедиться в том, что входной буфер 8042 пуст,

2) вывести команду ADh на 8042 (порт 64) для запрещения интерфейса клавиатуры,

3) прочитать код сканирования в порту 60,

4) дождаться, пока входной буфер 8042 станет пустым

5) выдать команду EDh на клавиатуру (порт 60)

6) дождаться, пока не будет получено ACK от клавиатуры (порт 60),

7) когда входной буфер 8042 станет пустым, вывести байт конфигурации,

8) дождаться, пока будет получен второй ACK,

9) когда входной буфер станет пустым, выдать команду AEh на 8042.

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