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();