【发布时间】:2021-01-20 07:14:20
【问题描述】:
来自this question,我只是想知道如何计算 Atmega328 定时器在触发中断之前可以给我们的最长时间?我希望它在我的项目中每隔一小时左右触发一次,但由于 C 整数和 OCR1A 寄存器的大小有一些限制,因此要从中获得一个小时似乎还很遥远。
是否可以修改我的上一个问题代码以延迟几个小时?
【问题讨论】:
-
设置一个每分钟/秒或其他触发的定时器,在定时器中断例程中有一个从 60/3600/whatever 到 0 的计数器,当计数器达到零时,调用你想要的任何函数每小时调用一次,然后将计数器设置回 60/3600/whatever。
-
快速浏览一下数据表可以看出,它有一个 16 位计数器和一个最大值为 1024 的预分频器。而 2^16 * 1024 是 67.108.864。所以@12.000.000 Hz 定时器中断之间的时间不能超过 ~5 秒。
-
您需要在执行任何其他操作之前检查您的振荡器精度。
-
@Jabberwocky 无需调用函数,只需在 ISR 中使用计数器即可。