Сообщение
uk8amk »
Часовой кварц 32768Гц.
Код: Выделить всё
/*----------------------------------------------
RTC IRQ (1 sec)
------------------------------------------------*/
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
OCR2A = 0;//sync process
rtc_irq = TRUE;//было прерывание от секунд
/*== time correction ==*/
if( rtc_corr_cnt < 0 )//negative correction
{
++rtc_corr_cnt;
return;
}
if( ( rtc_sec == 0 ) && ( rtc_min == 0 ) && ( rtc_hour == 0 ) )//коррекция запускается в полночь
{
if( rtc_corr > 0 )//positive correction
{
rtc_sec = rtc_corr;//значение коррекции (+/- секунд)
return;
}
else
{
rtc_corr_cnt = rtc_corr;
}
}
/*====*/
++rtc_sec;
if( rtc_sec>59 )
{
rtc_sec = 0;
++rtc_min;
if( rtc_min>59 )
{
rtc_min = 0;
++rtc_hour;
if( rtc_hour>23 )
rtc_hour = 0;
};
};
}
инициализаця таймера:
Код: Выделить всё
// Timer/Counter 2 initialization
// Clock source: Crystal on TOSC1 pin
// Clock value: PCK2/128
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x20;
TCCR2A=0x00;
TCCR2B=0x05;
TCNT2=0x00;
Читать раздел даташита
Asynchronous operation
of the Timer/Counter
Asynchronous Operation of
Timer/Counter2
До полного понимания сути процесса.