Глава 2. Таймеры и звук.
Раздел 1. Установка и чтение таймера.
2.1.4 Установка/чтение часов реального времени.
Часы реального времени имеют свой собственный процессор, который может подсчитывать время не влияя на другие компьютерные операции. Они имеют также независимый источник питания, используемый когда компьютер выключен. Программно можно как читать, так и устанавливать часы рельного времени. Обычно имеется дополнительное программное обеспечение, которое устанавливает счетчик времени суток BIOS и переменную даты DOS таким образом, чтобы они соответствовали текущим показаниям часов реального времени. Hо можно программно проверить соответствие между ними и при обнаружении разногласий принять необходимые меры.
Различные установки времени и даты осуществляются через набор адресов портов. Многие многофункциональные платы расширения для IBM PC имеют часы реального времени, но, к сожалению, нет стандартной микросхемы и диапазона адресов портов. AT оборудуется часами реального времени, основанными на микросхеме MC146818 фирмы Motorola, которые используют те же регистры, что и микросхема, содержащая данные о конфигурации системы. Доступ к этим регистрам можно получить, послав сначала номер требуемого регистра в порт 70H, а затем прочитав значение регистра через порт 71H. Регистры, связанные с часами, следующие:
Hомер регистра Функция 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. Kак уже говорилось выше, вектор прерывания 4AH должен указывать на процедуру обработки тревоги. Отметим, что если часы не работают (наиболее вероятно, из-за отсутствия питания), то выполнение функций 2, 4 и 6 устанавливает флаг переноса.
<~-2.1.3 Установка/чтение даты.
Содержание
2.1.5 Задержка программных операций.-~>