Аппаратное обеспечение персонального компьютера

       

Современные компьютеры


Современные компьютеры позволяют управлять скоростными характеристиками клавиатуры, а также зажигать или гасить светодиоды Scroll Lock, Num Lock и Caps Lock, расположенные на лицевой панели клавиатуры.

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

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

  • установка времени ожидания перед переходом клавиатуры в режим автоповтора;
  • установка периода генерации скан-кода в режиме автоповтора;
  • управление светодиодами, расположенными на лицевой панели клавиатуры.
  • Процессор 8042 обслуживает не только клавиатуру, но и другие системы компьютера. Через порт 64h, например, выполняется сброс (отключение) процессора 80286 для возврата из защищенного режима работы в реальный. Подробности об этом вы можете узнать из 6 тома «Библиотеки системного программиста», который называется «Защищенный режим процессоров Intel 80286/80386/80486».

    Перед тем как посылать команду процессору 8042, необходимо убедиться в том, что его внутренняя очередь команд пуста. Это можно сделать, прочитав слово состояния 8042 из порта с адресом 64h. Бит с номером 1 должен быть равен нулю.

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

    . . .

    ; Счетчик для ограничения времени ожидания готовности 8042

      mov  cx,0

    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

    Период автоповтора, который определяет количество посылок скан-кода, генерируемых процессором клавиатуры в одну секунду. Можно использовать не только те значения, которые приведены ниже, но и промежуточные, например, 9 или 15h.

    0              30.0

    1              26.7

    2              24.0

    4              20.0

    8              15.0

    0Ah         10.0

    0Dh        9.2

    10h         7.5

    14h         5.0

    1Fh         2.0

    5-6

    Задержка включения режима автоповтора, mc:

    00           250

    01           500

    10           750

    11           1000

    7

    Зарезервировано и должно быть равно нулю

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

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

    Биты

    Описание

    0

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

    0 – выключить светдиод Scroll Lock

    1

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

    0 – выключить светодиод Num Lock

    2

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

    0 – включить светодиод Caps Lock


    Содержание раздела