没有引脚控制的Arduino定时器中断
Arduino timer interrupt without pin control
请帮我解决 Arduino 定时器中断问题。
如何在没有引脚控制的情况下启动定时器 OCR0A 或 OCR2A 来启动我的自定义功能 output1Display()
? 1毫秒的间隔
ATmega328P,8MHz 石英。
首先,您应该搜索并下载 328P 数据表,其中包含定时器设置的详细信息。我建议您只使用 Timer2,因为 Timer0 用于其他您可能不想搞砸的事情。
由于数据表在您开始时可能会造成混淆,因此您需要以下内容:首先,您需要 select 一个时钟定标器。 Timer2 可以直接对主时钟计数,或者除以 8、32、64、128、256 或 1024 以获得较慢的速率。请注意,Timer2 使用 8 位计数器,因此您可以获得的最慢(负载为 255)是预分频时钟的 256 个滴答。如果你有一个 8 MHz 的时钟并且想要一个 1 毫秒的定时器间隔,你可以将预分频器设置为 1/32 以获得 250000 Hz 的计数器时钟,然后用 249 加载 OCR2A 以获得 1000 Hz 中断的 250 分频速度。设置代码如下所示:
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
}
请注意,如果需要,可以根据串行命令在主循环中设置定时器,例如,如果您不想在获得其他需要的数据之前启动中断。或者你可以保留所有设置,除了最后的 TIMSK2 = 2;这可以通过你的串行命令给出,
请帮我解决 Arduino 定时器中断问题。
如何在没有引脚控制的情况下启动定时器 OCR0A 或 OCR2A 来启动我的自定义功能 output1Display()
? 1毫秒的间隔
ATmega328P,8MHz 石英。
首先,您应该搜索并下载 328P 数据表,其中包含定时器设置的详细信息。我建议您只使用 Timer2,因为 Timer0 用于其他您可能不想搞砸的事情。
由于数据表在您开始时可能会造成混淆,因此您需要以下内容:首先,您需要 select 一个时钟定标器。 Timer2 可以直接对主时钟计数,或者除以 8、32、64、128、256 或 1024 以获得较慢的速率。请注意,Timer2 使用 8 位计数器,因此您可以获得的最慢(负载为 255)是预分频时钟的 256 个滴答。如果你有一个 8 MHz 的时钟并且想要一个 1 毫秒的定时器间隔,你可以将预分频器设置为 1/32 以获得 250000 Hz 的计数器时钟,然后用 249 加载 OCR2A 以获得 1000 Hz 中断的 250 分频速度。设置代码如下所示:
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
}
请注意,如果需要,可以根据串行命令在主循环中设置定时器,例如,如果您不想在获得其他需要的数据之前启动中断。或者你可以保留所有设置,除了最后的 TIMSK2 = 2;这可以通过你的串行命令给出,