请使用Arduino定时器中断帮助我。
如何在没有引脚控制的情况下启动定时器OCR0A或OCR2A以启动我的自定义功能output1Display()
?间隔为1毫秒。
ATmega328P,8MHz石英。
答案 0 :(得分:0)
首先,您应该搜索并下载328P数据表,其中包含定时器设置的详细信息。我建议你只使用Timer2,因为Timer0用于你可能不想搞砸的其他事情。
由于数据表在您开始时可能会引起混淆,因此您需要:首先,您需要选择时钟缩放器。 Timer2可以直接对主时钟进行计数,或者对8,32,64,128,256或1024进行分频以获得较慢的速率。请注意,Timer2使用8位计数器,因此您可以获得的最慢(负载为255)是预分频时钟的256个滴答。如果您有一个8 MHz时钟并且希望定时器间隔为1毫秒,则可以将预分频器设置为1/32以获得250000 Hz的计数器时钟,然后使用249加载OCR2A以获得250分频以获得1000 Hz中断率。安装程序代码如下所示:
TCCR2A = 2; // Set CTC mode. Same as TCCR2A = _BV(WGM21);
TCCR2B = 3; // Prescaler to divide by 32 (CS21 and CS20 only)
TCNT2 = 0; // Clear the counter
OCR2A = 249; // Set for 1 msec rate
TIMSK2 = 2; // Set OCIE2A to begin counting with Compare A
你的中断处理程序是这样声明的,它应该出现在Setup之后和Loop:
之前ISR(TIMER2_COMPA_vect)
{
// Your code goes here
}
请注意,如果需要,可以在Serial的主循环命令中设置定时器,例如,如果您不想启动中断,直到您有其他所需的数据。或者您可以按原样保留所有设置,但最终TIMSK2 = 2;这可以通过串行命令
给出