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

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

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

Автор: 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



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

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

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