Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
33_Metodicheskie_ukazania_po_laboratornym_rabot...doc
Скачиваний:
0
Добавлен:
07.01.2020
Размер:
706.56 Кб
Скачать

Система команд

Код команды заносится в порт 1F7h после того, как подготовлены все параметры в портах 1F2h - 1F6h. Выполнение команды начинается сразу после занесения в порт 1F7h кода команды. Команда состоит из одного байта. Старшие 4 бита содержат код требуемой операции, младшие содержат параметры.

Перечень команд с возможными значениями параметров приведен в таблице.

┌────────┬───────────────────────┬─────────────────────────────┐

│ Код │ Назначение │ Параметры │

├────────┼───────────────────────┼─────────────────────────────┤

│ 1 │ Рекалибровать (сброс │ Период импульсов сигнала │

│ │ головок на цилиндр 0) │ "шаг" │

├────────┼───────────────────────┼─────────────────────────────┤

│ 2 │ Чтение секторов │ Биты, определяющие необходи-│

├────────┼───────────────────────┤ мость повторных обращений │

│ 3 │ Запись секторов │ к диску и повторных попыток │

├────────┼───────────────────────┤ считывания при ошибках │

│ 4 │ Проверка секторов │ контрольной суммы │

├────────┼───────────────────────┼─────────────────────────────┤

│ 5 │ Форматирование дорожки│ Параметр = 0 │

├────────┼───────────────────────┼─────────────────────────────┤

│ 7 │ Поиск цилиндра │Период импульсов сигнала"шаг"│

├────────┼───────────────────────┼─────────────────────────────┤

│ 9 │ Диагностика │ Параметр = 0 │

│ ├───────────────────────┼─────────────────────────────┤

│ │ Установка параметров │ Параметр = 1 │

│ │ накопителя (максималь-│ │

│ │ ное число головок и │ │

│ │ секторов) │ │

└────────┴───────────────────────┴─────────────────────────────┘

Варианты лабораторных работ:

Варианта

Задание

1

Порты ввода-вывода : порт 320h(чтение)

2

Порты ввода-вывода : порт 321h(чтение)

3

Порты ввода-вывода : порт 322h(чтение)

4

Определение метки тома жесткого диска

5

Определение объема жесткого диска

6

Определение серийного номера жесткого диска

7

Определение производителя жесткого диска

8

Определение количества секторов жесткого диска

9

Определение количества головок жесткого диска

0

Определение количества цилиндров жесткого диска

Лабораторная работа №6. Программное тестирование портов для работы с клавиатурой

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

Для работы с клавиатурой используются порты с адресами 60h и 61h.

Порт 61h управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Этот порт доступен как для чтения, так и для записи. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована.

Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт:

.........

in al, 61h

or al, 80h

out 61h, al

.........

Для расширенного управления клавиатурой используется порт 60h в режиме записи. Этот порт используются для управления подчиненным процессором Intel 8042, ответственным за обмен данными с клавиатурным компьютером.

При использовании порта 60h на запись программа дополнительно получает следующие возможности:

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

  2. установка периода генерации скан-кода в режиме автоповтора;

  3. управление светодиодами, расположенными на лицевой панели клавиатуры - Scroll Lock, Num Lock, Caps Lock.

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

..........

mov cx,0 ; счетчик для ограничения времени

; ожидания готовности 8042

wait_loop:

; читаем порт состояния процессора 8042

in al,64h

and al,00000010b ; флаг готовности

; ожидаем готовность процессора 8042

loopnz wait_loop ; к приему команды

..........

После того, как программа дождется готовности процессора 8042, она может послать ему команду, записав ее в порт с адресом 60h:

..........

mov al,cmd ; команда для 8042

out 60h ,al ; вывод команды в 8042

..........

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

..........

mov al, cmd_byte1

out 60h, al

mov cx, 2000h

wait_loop: loop wait_loop

mov al, cmd_byte2

out 60h, al

..........

Мы приведем формат двух команд процессора 8042, имеющих отношение к работе с клавиатурой - команду установки задержки и периода автоповтора и команду управления светодиодами, расположенными на клавиатуре.

Для установки характеристик режима автоповтора в порт 60h необходимо записать код команды 0F3h, затем байт, определяющий характеристики режима:

Биты Значение

0-4 Период автоповтора:

0 - 30.0; 0Ah - 10.0;

1 - 26.7; 0Dh - 9.2;

2 - 24.0; 10h - 7.5;

4 - 20.0; 14h - 5.0;

8 - 15.0; 1Fh - 2.0.

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

посылок скан-кода, генерируемых процессором

клавиатуры в одну секунду. Можно использовать не

только те значения, которые приведены выше,

но и промежуточные, например, 9 или 15h.

5-6 Задержка включения режима автоповтора:

00 - 250 мс;

01 - 500 мс;

10 - 750 мс;

11 - 1000 мс.

7 Зарезервировано, должно быть равно 0.

Первоначально при инициализации системы период задержки для включения режима автоповтора устанавливается модулями BIOS равным 500 мс при периоде автоповтора, равном 10 повторам в секунду. Если это слишком медленно для вас, вы можете установить другие значения.

Для управления светодиодами, расположенными на лицевой панели клавиатуры, используйте команду 0EDh. Вслед за этой командой в порт 60h необходимо записать байт, имеющий следующий формат:

Биты Значение

0 1 - включить светодиод Scroll Lock;

1 1 - включить светодиод Num Lock;

2 1 - включить светодиод Caps Lock;

3-7 не используются.

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

#include <stdio.h>

void main(void);

void main(void) {

int i;

// Посылаем процессору клавиатуры

// команду управления светодиодами

outp(0x60,0xed);

// Перед посылкой второго байта команды

// выполняем небольшую задержку

for(i=0; i<4000; i++);

// Выводим второй байт команды,

// младшие три бита которого определяют

// состояние светодиодов на лицевой панели

// клавиатуры.

outp(0x60,7);

// Ожидаем нажатия на любую клавишу.

getch();

// Выключаем все светодиоды.

outp(0x60,0xed);

for(i=0; i<4000; i++);

outp(0x60,0);

exit(0);

}

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