Аппаратное обеспечение IBM PC



         

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


Вы можете использовать часы реального времени для решения двух задач. Во-первых, часы позволяют определить текущую дату и время с точностью до секунды. Во-вторых, будильник можно использовать для выполнения каких-либо действий в заданное время или периодически.

Так как установленное время срабатывания будильника хранится в КМОП-памяти, питающейся от аккумулятора, будильник не будет сброшен при случайном выключении компьютера.

Для работы с часами реального времени мы подготовили следующую функцию:

/** *.Name timer *.Title Работа с часами реального времени * *.Descr Эта функция предназначена для обслуживания * системных часов реального времени через * прерывание INT 1Ah. * *.Proto int timer(char fn, SYSTIMER *tm) * *.Params char fn - выполняемая функция: * * RTC_GET_TIME - прочитать показания часов; * RTC_SET_TIME - установить часы; * RTC_GET_DATE - прочитать дату; * RTC_SET_DATE - установить дату; * RTC_SET_ALARM - установить будильник; * RTC_CLEAR_ALARM - сбросить будильник. * * Все эти константы описаны в файле sysp.h * * SYSTIMER tm - структура, содержащая данные * для установки часов или * показания часов: * * typedef struct _SYSTIMER_ { * * char hour; // часы * char min; // минуты * char sec; // секунды * unsigned year; // год * char month; // месяц * char day; // число * char daylight_savings; // флаг * // использование * // летнего времени * // (для включения режима * // должен быть равен 1) * * } SYSTIMER; * *.Return 0 - успешное выполнение функции; * -1 - часы реального времени отсутствуют * в компьютере; * *.Sample setalarm.c **/

#include <stdio.h> #include <dos.h> #include "sysp.h"

union REGS reg;

int timer(char fn, SYSTIMER *tm) {

reg.h.ah = fn;

switch (fn) {

case RTC_SET_TIME:

reg.h.ch = tm->hour; reg.h.cl = tm->min; reg.h.dh = tm->sec; reg.h.dl = tm->daylight_savings;

break;

case RTC_SET_DATE:

reg.x.cx = tm->year; reg.h.dh = tm->month; reg.h.dl = tm->day;

break;

case RTC_SET_ALARM:

reg.h.ch = tm->hour; reg.h.cl = tm->min; reg.h.dh = tm->sec;




Содержание  Назад  Вперед