Справочник программиста на персональном компьютере фирмы IBM. Таймеры и звук
Страница 5. Установка/чтение часов реального времени


     2.1.4 Установка/чтение часов реального времени.


   Часы реального времени имеют свой собственный процессор, кото-
рый может подсчитывать время не влияя на другие компьютерные опе-
рации. Они имеют также независимый источник питания, используемый
когда компьютер  выключен.   Программно  можно  как читать, так и
устанавливать часы рельного времени.  Обычно имеется дополнитель-
ное программное обеспечение, которое устанавливает счетчик време-
ни  суток  BIOS и переменную даты DOS таким  образом,  чтобы  они
соответствовали текущим  показаниям  часов реального времени.  Но
можно  программно проверить соответствие между ними и при обнару-
жении разногласий принять необходимые меры.
   Различные установки времени и даты  осуществляются через набор
адресов  портов.  Многие многофункциональные платы расширения для
IBM PC имеют часы реального  времени,  но, к сожалению, нет стан-
дартной  микросхемы и диапазона адресов портов.   AT  оборудуется
часами  реального  времени,  основанными  на  микросхеме MC146818
фирмы  Motorola, которые используют те же регистры, что и микрос-
хема, содержащая данные  о  конфигурации  системы.  Доступ к этим
регистрам можно получить, послав сначала номер требуемого регист-
ра в порт 70H, а затем прочитав значение регистра через порт 71H.
Регистры, связанные с часами, следующие:

           Номер регистра              Функция

                00H                  Секунды
                01H                  Секундная тревога
                02H                  Минуты
                03H                  Минутная тревога
                04H                  Часы
                05H                  Часовая тревога
                06H                  День недели
                07H                  День месяца
                08H                  Месяц
                09H                  Год
                0AH                  регистр статуса A
                0BH                  регистр статуса B
                0CH                  регистр статуса C
                0DH                  регистр статуса D

   Биты  четырех статусных регистров выполняют различные функции,
из которых интерес для  программистов  могут представлять следую-
щие:
   Регистр A: бит 7   1 = идет модификация времени (надо ждать
                          значения 0, чтобы читать)
   Регистр B: бит 6   1 = разрешено периодическое прерывание
              бит 5   1 = разрешено прерывание тревоги
              бит 4   1 = разрешено прерывание конца модификации
              бит 1   1 = часы считаются до 24, 0 = до 12
              бит 0   1 = разрешено запоминание времени суток

   Часы  реального времени на AT могут вызывать аппаратное преры-
вание IRQ8. Программа может установить вектор этого прерывания на
любую процедуру, которую требуется выполнить в определенное время
[1.2.3].  Используйте вектор  4AH.   Операции в реальном времени,
производимые  таким  образом, менее хлопотны, чем  обсуждаемые  в
[2.1.7] (хотя и ценой  компактности  программ).  Прерывание может
вызываться одним из трех способов, каждый из которых запрещен при
старте.   Периодическое прерывание происходит через  определенные
интервалы времени.   Периодичность приближенно равна одной милли-
секунде.   Прерывание тревоги происходит когда значение трех  ре-
гистров тревоги совпадает со значениями соответствующих временных
регистров.  Прерывание конца модификации происходит после каждого
обновления значений регистров микросхемы.
   Прерывание 1AH расширено в BIOS AT, чтобы оно позволяло читать
и устанавливать часы реального времени.  Поскольку показания  ни-
когда не состоят более чем их  двух  десятичных цифр, то значения
времени  выдаются в двоично-кодированной десятичной форме  (BCD),
когда байт делится на  две  половины  и  каждая  десятичная цифра
представляется  четырьмя  битами.  Такой формат  позволяет  легко
переводить числа в форму ASCII.  Программе  нужно только сдвинуть
половину байта в младший конец регистра и добавить 48 для получе-
ния кода ASCII,  соответствующего  данному числу. Для всех IBM PC
функции  0 и 1 прерывания 1AH читают и устанавливают счетчик вре-
мени суток BIOS.  Для  часов  реального  времени AT имеется шесть
новых функций:

   Функция 2:  Чтение времени из часов реального времени
               При возврате: CH = часы в BCD
                             CL = минуты в BCD
                             DH = секунды в BCD
   Функция 3:  Установка времени часов реального времени
               При входе: CH = часы в BCD
                          CL = минуты в BCD
                          DH = секунды в BCD
                          DL = if daylight savings, else 1
   Функция 4:  Чтение даты из часов реального времени
               При возврате: CH = век в BCD (19 или 20)
                             CL = год в BCD (с 1980)
                             DH = месяц в BCD
                             DL = день месяца в BCD
   Функция 5:  Установка даты часов реального времени
               При входе:    CH = век в BCD (19 или 20)
                             CL = год в BCD (с 1980)
                             DH = месяц в BCD
                             DL = день месяца в BCD
   Функция 6:  Установка тревоги для часов реального времени
               При входе: CH = часы в BCD
                          CL = минуты в BCD
                          DH = секунды в BCD
   Функция 7:  Сброс тревоги (нет входных регистров)

Тревога устанавливается как  смещение,  относительно текущего мо-
мента времени. Максимальный период равен 23:59:59.  Как уже гово-
рилось выше, вектор прерывания  4AH должен указывать на процедуру
обработки тревоги.  Отметим, что если часы не работают  (наиболее
вероятно, из-за отсутствия питания), то выполнение функций 2, 4 и
6 устанавливает флаг переноса.

 
« Предыдущая статья   Следующая статья »