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

Сайт управляется системой uCoz