Осваиваю таймеры микроконтроллера. Сейчас я считаю внешние прерывания от счетчика воды. Проблема в том, что у счетчика воды дребезжат контакты и я хочу после каждого прерывания делать задержку на 300мс.
Идея такова: в обработчике внешнего прерывания, я запрещаю это прерывание и разрешаю прерывание таймера. По событию таймера я запрещаю таймер и снова разрешаю внешнее прерывание. Я сделал так:
Код: Выделить всё
...
// Timer/Counter 0 initialization
TCCR0A=0x02; // Set CTC mode(interrupt on math)
TCCR0B=0x05; // Set 1/1024 clock prescaler (0,977 kHz)
TCNT0=0x00; // Default timer0 value=0
OCR0A=0xFF; // Math A register value=FF
OCR0B=0x00; // Math A register value=FF
TIMSK=0x00; // Disable timer
...
// Interrupt from water counter.
interrupt [EXT_INT0] void ext_int0_isr(void)
{
waterCounter++;
GIMSK &= (0<<INT0);
TIMSK=0x01;
}
...
//---------- 0 output compare A----------------
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
GIMSK |= (1<<INT0);
TIMSK=0x00;
}Вопрос в том, сбрасывается ли таймер в ноль по наступлению math прерывания? Или нужно перед запуском таймера его каждый раз обнулять?


