Arduino定时器中断,无引脚控制

时间:2017-12-29 17:11:09

标签: timer arduino interrupt

请使用Arduino定时器中断帮助我。

如何在没有引脚控制的情况下启动定时器OCR0A或OCR2A以启动我的自定义功能output1Display()?间隔为1毫秒。

ATmega328P,8MHz石英。

1 个答案:

答案 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;这可以通过串行命令

给出