Страница 5 из 19
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 устанавливает флаг переноса.
|