10 只是一个基本问题...对于arduino / avr / ATMega328,我发现了许多使用Timer1的示例(甚至有一个完整的库),但很少有使用Timer0(或Timer2)的示例。 现在,我知道使用这些定时器中的任何一个来控制ISR方法都将禁止在其相关引脚上使用PWM,但是是否有特定的原因使人们似乎远离Timer0?它是否在内部用于其他不应该惹的麻烦? 我当前的应用程序可以使用Timer1很好,我只是想知道我是否缺少其他一些经常被忽略的计时器。 arduino avr atmega interrupts — 亚当·海尔 source
16 如果问题是关于裸露的AVR微控制器,则否,使用任何计时器都没有限制。 对于Arduino,最好避免使用Timer0,因为millis(),delay()并且Arduino库中的所有内部计时都使用此计时器。更改时间常数将影响这些操作。 正如问题所指出的那样,通过诸如TimerOne库之类的库以及直接操作,Timer1是任何定时器/计数器任务的普遍首选。它是一个16位定时器,因此比8位定时器具有更好的分辨率。 tone()库使用了Timer2,但是由于使用率不高,所以还有许多人发现msTimer2库非常有用,就像TimerOne一样。直接操作Timer2也可以。 如果您使用Arduino Mega板,则Mega,Timer3,Timer4和Timer5上的其他计时器(每个都是16位计时器)也可以使用。 — 安妮多·戈什(Anindo Ghosh) source
9 除了禁用关联的PWM外,我想到的其他原因还有: TIMER0是一个8位定时器,而TIMER1是一个16位定时器。 在Arduino世界中,TIMER0用于定时器函数,如delay()和millis()。我见过的许多其他代码都以相同的方式使用它,因为8位分辨率通常足够。 TIMER2也是8位的,我想不出要专门避免只需要8位的原因。但是,它由Arduino tone()函数使用。 因此,我认为将TIMER1留为相当通用的选择,并且在需要16位定时器的情况下,它是较小的AVR的唯一选择。AVR Mega设备还包含均为16位的TIMER3-TIMER5。 — 彼得·J source