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