Код: Выделить всё
#pragma vector = INT1_vect // INT1 (
__interrupt void MY_INT1 (void) // стандартная запись)
{
if ((MCUCR & Bit(ISC10)) != 0) // прерывание произошло по нарастающему фронту
{ TCCR1B = Bit(CS11); // запуск таймера c clk/8
MCUCR &= ~Bit(ISC10); // сбрасываем бит в регистре MCUCR для инициализации следующего прерывания по спадающему фронту
}
else // прерывание произошло по спаду
{ TCCR1B = 0; // останов таймера
MCUCR |= Bit(ISC10); // устанавливаем бит в регистре MCUCR для инициализации следующего прерывания по нарастающему фронту
g_fors_time = g_time_ovf;
g_fors_time = g_fors_time <<16> 28) // 2 сек нет сигнала - 7372800/8/65536 = 14 (раз) - это 1 сек.(примерно)
{TCCR1B = 0; // останов таймера
MCUCR |= Bit(ISC10); // устанавливаем бит в регистре MCUCR для инициализации следующего прерывания по нарастающему фронту
TCNT1 = 0; g_time_ovf=0;
g_eesave_en=1; // ставим флаг для сохранения по этому событию в EE
}
}


