Глава 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 Задержка программных операций.-~>