Arduino Uno 的定时器
如前所述,Arduino Uno 有三个定时器:Timer0、Timer1 和 Timer2。Timer0 和 Timer2 是 8 位计数器(计数范围为 0 到 255),而 Timer1 是 16 位计数器(计数范围为 0 到 65535)。内部地,Timer0 用于 **millis()** 函数,因此建议不要修改它。您可以将 **Timer1** 和 **Timer2** 用于自定义需求。
请注意,Arduino Uno 的时钟频率为 16 MHz。因此,任何定时器的间隔都不能短于 (1/16000000)。但是,对于大多数应用程序,您需要更长的间隔(较低的频率)。换句话说,您希望计数速度比最大速率慢。为此,使用预分频器。它们将输入时钟频率除以一个系数,然后定时器使用该降低的频率进行计数。例如,Timer0 使用 64 的除数。因此,它的频率为 (16MHz/64) = 250 KHz。它每 (1/250,000) = 0.000004 秒计数一次。因此,它在 0.000004*255 = 0.00102 秒内从 0 计数到 255,这大约是 1 毫秒。现在您可以理解为什么 **millis()** 函数使用 Timer0 了。
使用 Timer1 和 Timer2 时,您可以执行类似的计算。但是,只有在手动设置寄存器时才需要执行这些计算。如果您使用的是像 **TimerOne** 这样的库,则无需担心这些计算。您只需要指定间隔,库将处理其他所有事情。
广告