Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория. Архитектура компьютеров.doc
Скачиваний:
3
Добавлен:
28.10.2018
Размер:
479.74 Кб
Скачать

5. Особенности программирования

5.1. На языке Турбо-Паскаль.

5.1.1. Для чтения данных из порта и записи данных в порт ис-

пользуйте предопределенный массив Port. Например, для чтения из

порта 64H применяется выражение b:=Port[$64], а для записи в порт

60H - выражение Port[$60]:=b, где b - переменная типа byte.

5.2. На языке Турбо-Си.

5.2.1. Для обращения к портам ПЭВМ применяются функции чтения

и записи порта,которые хранятся в библиотеке < dos.h>. Библиотека

подключается директивой

#include < dos.h>

после чего, например, для записи значения b в порт 60H ис-

пользуется выражение:

outportb(0x60,b);

Для чтения из порта 64H используется выражение:

b=intportb(0x64);

где:b- переменная типа char.

6. Индивидуальные задания

6.1. Индивидуальные задание выбрать в соответствии с таблицей 3:

Таблица 3

───────────────────────────────────────────────

Номер Период задержка Наименование

в журнале автоповтора автоповтора светодиода

───────────────────────────────────────────────

1 30.0 250 NumLock

2 26.7 750 CapsaLock

3 24.0 1000 ScrollLock

4 20.0 250 NumLock

5 2.0 750 CapsaLock

6 3.0 1000 ScrollLock

7 30.0 1000 ScrollLock

8 26.7 250 NumLock

9 24.0 250 CapsaLock

10 2.0 1000 ScrollLock

11 3.0 250 NumLock

12 4.0 750 CapsaLock

13 5.0 1000 ScrollLock

14 20.0 250 NumLock

15 30.0 750 CapsaLock

16 26.7 1000 ScrollLock

───────────────────────────────────────────────

7. Содержание отчета

7.1. Тема лабораторной работы.

7.2. Цель работы.

7.3. Индивидуальное задание.

7.4. Текст программы.

7.5. Результаты работы программы.

Лабораторная работа 5 БУФЕР КЛАВИАТУРЫ ПЭВМ

1. Цель работы

Изучение организации буфера клавиатуры и приобретение практи-

ческих навыков определения хранящихся в буфере ASCII и скан-кодов

клавиш клавиатуры

2. Темы для предварительной проработки

2.1. Организация буфера клавиатуры.

2.2. Формирование ASCII кодов.

3. Описание работы

Записанная в ПЗУ BIOS подпрограмма обработки прерывания 09H,

вызванного процессором клавиатуры при нажатии (отжатии) клавиши,

читает скан-код из порта 60H и, если это скан-код клавиши-переклю-

чателя (правый Shift, левый Shift, Ctrl, Alt, ScrollLock, NumLock,

CapsLock и Insert), то изменяется содержимое ячеек памяти

0040:0017H и 0040:0018H, хранящих состояния клавиш-переключате-

лей. В буфер клавиатуры при этом ничего не пишется (исключение

составляет клавиша Insert). В таблице 1 приведен формат байта по

адресу 0040:0017H, а в таблице 2 - по адресу 0040:0018H.

Таблица 1

Формат байта по адресу 0040:0017H

──────────────────────────────────────

Бит Значение, когда бит=1

──────────────────────────────────────

0 нажата клавиша правый Shift

1 нажата клавиша левый Shift

2 нажата клавиша Ctrl

3 нажата клавиша Alt

4 режим ScrollLock включен

5 режим NumLock включен

6 режим CapsLock включен

7 режим вставки включен

────────────────────────────────────────

Таблица 2

Формат байта по адресу 0040:0018H.

───────────────────────────────────────────────

Бит Значение, когда бит=1

───────────────────────────────────────────────

0 нажаты клавиши левый Shift вместе с Ctrl

1 нажаты клавиши левый Shift вмести с Alt

2 нажата клавиша SysReq

3 нажаты клавиши Ctrl вместе с NumLock

4 режим ScrollLock включен

5 режим NumLock включен

6 режим CapsLock включен

7 режим вставки включен

───────────────────────────────────────────────

Состояния клавиш-переключателей могут быть изменены программно.

Если же это скан-код клавиши, не являющейся переключателем, то

в соответствии с ее скан-кодом и состоянием клавиш-переключателей

формируется или однобайтный ASCII код данной клавиши, который вмес-

те со скан-кодом записывается в буфер клавиатуры, или двубайтный

расширенный код, первым байтом которого является 0, а второй байт в

большинстве случаев совпадает со скан-кодом. Эти два байта также

записываются в буфер клавиатуры. При отжатии клавиши в буфер ничего

не записывается и изменяется только состояние клавиш-переключате-

лей.

Программа обработки прерывания 09H отслеживает также некоторые

комбинации клавиш. В табл.3 приведены эти комбинации и действия,

выполняемые обработчиком прерывания при их обнаружении:

Таблица 3

Функции клавиш

───────────────────────────────────────────────

Комбинация клавиш Выполняемые действия

───────────────────────────────────────────────

Ctrl-Alt-Del Сброс и перегрузка системы

Ctrl-NumLock Перевод машины в состояние ожидания

Shift-PrtSc Распечатка на принтере содержимого экрана

(обработка прерывания 05H)

Ctrl-Break Завершение выполнения программы

───────────────────────────────────────────────

Структура буфера клавиатуры изображена на рис.1. Буфер

клавиатуры расположен по адресам 0040:001H - 0040:003cH опера-

тивной памяти и позволяет накапливать данные (ASCII и скан-коды) о

15 нажатиях клавиш (на месте, предшедствующем началу строки симво-

лов в буфере хранятся ASCII код возврата каретки (ASCII 13) и скан

-код клавиши "Enter").

В ячейке 0040:001aH (указатель начала) хранится адрес перво-

го введенного символа, а в ячейке 0040:001cH (указатель хвоста) -

адрес первой свободной ячейки после последнего введенного символа.

Адреса хранятся в виде байта смещения (второй байт ячейки не ис-

пользуется). Если буфер пуст, то содержимое указателя начала сов-

падает с содержимым указателя хвоста.

15 0

┌──────────────┐

0040:003с │ │

├──────────────┤

3a │ │ Содержимое ячейки буфера

├──────────────┤

38 │ │ 15 8 7 0

├──────────────┤ ┌────────────┬────────────┐

36 │ │ │ скан-код │ ASCII │

├──────────────┤ └────────────┴────────────┘

34 │ "R" │

├──────────────┤ если ASCII код равен 0, то

32 │ "E" │ вместо скан-кода указывается

├──────────────┤ номер расширенного кода

30 │ "F" │ (в большинстве случаев сов-

├──────────────┤ падающего со скан-кодом)

2e │ "F" │

├──────────────┤

2c │ "U" │

├──────────────┤

2a │ "B" │

├──────────────┤

28 │ │

├──────────────┤

26 │ │

├──────────────┤

24 │ │

├──────────────┤

22 │ │

├──────────────┤

20 │ │

├──────────────┤

1e │ │

├──────────────┤

1c │ 36 │ Указатель хвоста

├──────────────┤

0040:001a │ 2a │ Указатель начала

└──────────────┘

Рис.1

Запись в буфер осуществляется по адресу указателя хвоста, при

этом содержимое указателя увеличивается на 2. Чтение из буфера

производится по адресу указателя начала, при этом содержимое ука-

зателя также увеличивается на 2 (если указатель содержит адрес

последней ячейки буфера - 3cH, то вместо увеличения на 2 в него

необходимо записать адрес начала буфера - 1H).