ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ



4. ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ 

4.1. Прочитать показания часов реального времени

4.2. Установить часы реального времени

4.3. Прочитать дату из часов реального времени

4.4. Установить дату в часах реального времени

4.5. Установить будильник

4.6. Сброс будильника

4.7. Использование часов реального времени



Компьютеры IBM AT и PS/2 оснащены часами реального времени. Эти часы питаются от аккумулятора, поэтому их показания не пропадают при выключении компьютера.

Доступ к часам реального времени возможен либо через ячейки КМОП-памяти, либо через специальные функции BIOS (что более предпочтительно с точки зрения независимости работы программы от особенностей аппаратуры).

Использование регистров КМОП-памяти часами реального времени приведено в таблице:

РегистрНазначение
0счетчик секунд
1регистр секунд будильника
2счетчик минут
3регистр минут будильника
4счетчик часов
5регистр часов будильника
6счетчик дней недели (1 - воскресенье)
7счетчик дней месяца
8счетчик месяцев
9счетчик лет (последние две цифры текущего года)
  • 0aH регистр состояния A
7 6 5 4 3 2 1 0 T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ LT+T+-+T+T+-+-+T- ¦ L=T=- L=====¦= переключатель скорости (установлен в 0110) ¦ L=========== 22-разрядный делитель (установлен в 010) L=============== Флаг обновления, 0 означает готовность данных для чтения.
  • 0bH регистр состояния B
7 6 5 4 3 2 1 0 T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ LT+T+T+T+T+T+T+T- ¦ ¦ ¦ ¦ ¦ ¦ ¦ L= 1 - использование летнего времени ¦ ¦ ¦ ¦ ¦ ¦ ¦ (daylight savings enable); ¦ ¦ ¦ ¦ ¦ ¦ ¦ 0 - стандартное время (установлен в 0) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L=== 12 или 24-часовой режим. 0 - 12-часовой ¦ ¦ ¦ ¦ ¦ ¦ режим (установлен в 1) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L===== режим данных BCD. 1 - двоичный, 0 - BCD. ¦ ¦ ¦ ¦ ¦ (установлен в 0) ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L======= разрешение прямоугольной волны. ¦ ¦ ¦ ¦ 1 - включение прямоугольной волны. ¦ ¦ ¦ ¦ (установлен в 0) ¦ ¦ ¦ ¦ ¦ ¦ ¦ L========= разрешение прерывания по окончанию ¦ ¦ ¦ изменения данных (установлен в 0) ¦ ¦ ¦ ¦ ¦ L=========== разрешение прерывания будильника ¦ ¦ (установлен в 0) ¦ ¦ ¦ L============= разрешение периодических прерываний ¦ (установлен в 0) ¦ L=============== флаг обновления, 0 означает готовность данных для чтения КМОП-памяти. 0cH регистр состояния C. Биты состояния прерывания, их можно только читать. 0dH регистр состояния D. Если бит 7 равен 0, это означает, что разрядился аккумулятор, питающий КМОП-память.

Часы реального времени вырабатывают аппаратное прерывание IRQ8, которому соответствует прерывание с номером 70h. Это прерывание может вырабатываться по трем причинам:

  • Прерывание по окончанию изменения данных. Вырабатывается при установленном в 1 бите 4 регистра состояния B после каждого обновления регистров часов.
  • Прерывание будильника вырабатывается при совпадении регистров часов и регистров будильника и при установленном в 1 бите 5 регистра состояний B.
  • Периодическое прерывание вырабатывается с интервалом примерно 1 миллисекунда при установленном в 1 бите 6 регистра состояний B.

При срабатывании будильника BIOS вырабатывает прерывание INT 4Ah. Программа может подготовить собственный обработчик для этого прерывания.

Для работы с часами реального времени вы можете обращаться непосредственно к перечисленным выше ячейкам КМОП-памяти, используя порты 70h и 71h. Однако лучше всего воспользоваться функциями 2 - 7 прерывания 1Ah, описанными ниже.



Содержание раздела