цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Программная реализация часов реального времени

Программная реализация часов реального времени

Автор: Mike(admin) от 25-01-2014, 13:57

Часы реального времени (Real Time Clock или RTC) являются полезным элементом в случае, когда нужно вести учёт хронометрических данных. Но, к сожалению, не во всех вычислительных устройствах есть этот элемент.


Тем не менее, RTC можно реализовать программным способом, что и представляет собой код на языке C, приведенный ниже.



typedef struct t_smalltm{
u16 year;
u8 mon;
u8 day;
u8 hour;
u8 min;
u8 sec;
} t_smalltm;

t_smalltm rtc;
//*****************************************************************************
// вызываем эту функцию каждую секунду из обработчика прерываний таймера
// для быстрого быполнения кода rtc будут помещены во внутреннюю оперативную память
//*****************************************************************************
void realTimeClock(void)
{u8 rest;

if (++rtc.sec==60) // секунда
{
rtc.sec=0;
if (++rtc.min==60) // минута
{
rtc.min=0;
if (++rtc.hour==24) // час
{
rtc.hour=0;
rtc.day++; // день
rest=rtc.year%4;
if ((((rest==0 && rtc.year%100!=0) || rtc.year%400==0)
&& rtc.mon==2 && rtc.day==30)
|| (rest && rtc.mon==2 && rtc.day==29)
|| ((rtc.mon==4 || rtc.mon==6 || rtc.mon==9 || rtc.mon==11)
&& rtc.day==31)
|| (rtc.day==32))
{
rtc.day=1;
if (++rtc.mon==13) // месяц
rtc.mon=1, rtc.year++; // С новым годом ! :)
}
}
}
}
}
//**************************************************************
// функция чтения RTC
void getRTC(t_smalltm* stm)
{
disableInterrupts();
memcpy(stm,&rtc,sizeof(t_smalltm));
enableInterrupts();
}
//**************************************************************
// функция настройки RTC
void setRTC(u16 year, u8 mon, u8 day, u8 hour, u8 min, u8 sec)
{
disableInterrupts();
rtc.year=year;
rtc.mon=mon;
rtc.day=day;
rtc.hour=hour;
rtc.min=min;
rtc.sec=sec;
enableInterrupts();
}



Перевод © digitrode.ru


<Источник>


Теги: язык C




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий