C 重置AVR定时器溢出寄存器

C 重置AVR定时器溢出寄存器,c,avr,C,Avr,我有一个计时器,我正在尝试设置一个计时器中断,这样,如果一个进程花费太长时间,它就会关闭 我使用以下设置计时器: void init_software_interupt(double time) { OCR1A = time; TCCR1A = 0; TCCR1B = 0; TCCR1B |= (1 << WGM12); TCCR1B |= (1<<CS10); TCCR1B |= (1<<CS12);

我有一个计时器,我正在尝试设置一个计时器中断,这样,如果一个进程花费太长时间,它就会关闭

我使用以下设置计时器:

void init_software_interupt(double time)
{
    OCR1A = time;
    TCCR1A = 0;
    TCCR1B = 0;
    TCCR1B |= (1 << WGM12);
    TCCR1B |= (1<<CS10);
    TCCR1B |= (1<<CS12);
    TIMSK |= (1 << OCIE1A);
    sei();
}
问题是我可能会在1秒溢出计数中调用函数unlock_door()750ms,它只允许操作耗时250ms,这不够长

我试图在调用函数之前设置输出比较寄存器,但似乎没有任何影响:

OCR1A = 7812;
unlock_door();
但它不会改变当前的溢出


如何在调用函数之前重置溢出计时器以确保它将花费1秒的时间?

看起来您使用的是比较中断,而不是溢出中断
OCR1A
存储与计数器进行比较的值,我相信
TCNT1
存储实际的计时器值。尝试:

TCNT1 = 0;
unlock_door();

顺便说一句,这里有一个。它被称为“AVR定时器新手指南”,但它也可以作为参考。

为什么不使用看门狗定时器?
TCNT1 = 0;
unlock_door();