Время суток
Канал 0 таймера 8253 имеет специальное назначение в IBM PC. Выход
этого канала таймера подключен к уровню прерывания 0 микросхемы
8259. Это означает, что всякий раз, когда выход канала 0 имеет
активный уровень сигнала, возникает прерывание (при условии, что
все остальное установлено корректно). Процедура самопроверки при
включении питания инициализирует канал 0 таймера, загружая в него
число 0. Это дает наибольшее (не наименьшее) значение счетчика,
которое может записать в него программа. Имея на входе частоту 1.19
МГц, счетчик считает обратно к нулю чуть быстрее, чем за 55
миллисекунд. Программа инициализации устанавливает таймер таким
образом, что он считает непрерывно. Это означает, что прерывание 0
возникает 18.2 раза в секунду.
Как мы увидим в следующей главе, встроенная система программ
BIOS использует это постоянное прерывание от таймера, чтобы следить
за текущим временем. BIOS продвигает часы текущего времени вперед
всякий раз, когда возникает прерывание. Затем, с помощью
соответствующих вычислений, Вы можете преобразовать число циклов
таймера в часы, минуты и секунды.
Почему же выбрано значение 18.2? Почему счетчик не
программируется так, чтобы давать прерывание 20 раз в секунду, или
другое "хорошее" число раз? Это объясняет следующий пример.
Системный таймер может выполнять функцию измерения времени
отличного от времени дня. Время дня прекрасно подходит для
определения интервалов времени, измеряемых в секундах или минутах.
Но в некоторых ситуациях, возникающих при управлении
вводом-выводом, нужно определять интервалы времени порядка одной -
двух миллисекунд. Обычно программы отсчитывают такие интервалы с
помощью временного цикла. Программа для такого цикла выглядит
примерно так:
MOV CX, LOOP_VALUE
HERE:LOOP HERE
Вы выбираете константу LOOP_VALUE так, что цикл выполняется в
Содержание Назад Вперед