Код
ISR(SIG_OVERFLOW2)
{
clock_++;
if (clock_==128)
{
clock_=0;
hour[h_sek]++;
}
}
{
clock_++;
if (clock_==128)
{
clock_=0;
hour[h_sek]++;
}
}
Функция часов
Код
if (hour[h_sek]==60)
{
hour[h_sek] =0;
hour[h_min]++;
….
{
hour[h_sek] =0;
hour[h_min]++;
….
Сделал
Код
ISR(SIG_OVERFLOW2)
{
clock_++;
if (clock_==128)
{
clock_=0;
isr_1sek_=1;
}
}
{
clock_++;
if (clock_==128)
{
clock_=0;
isr_1sek_=1;
}
}
Код
void clock(void){
cli();
if ( isr_1sek_ )//прошла секунда
{
isr_1sek_=0;
sei();
if (++hour[h_sek]==60)
{
hour[h_sek] =0;
hour[h_min]++;
if (hour[h_min]==60)
….
sei();
cli();
if ( isr_1sek_ )//прошла секунда
{
isr_1sek_=0;
sei();
if (++hour[h_sek]==60)
{
hour[h_sek] =0;
hour[h_min]++;
if (hour[h_min]==60)
….
sei();
Часы начали отставать. Не могу понять почему? Ведь событие происходит раз в секунду, пропустить его ни как нельзя, даже если программа зависнет на пол секунды, чего нет на самом деле. Вот, чешу репу, чего я не так сделал?