1
/
3
Arduino
的定时器中断
当你想让代码在一个不变的时间间隔后执行时,你可以很简易的用
delay()
函数来实现。但是,这只是让程序暂停一个特定的时间段。特别是如果你需要
同时让处理器做其他处理时,这么做同时也是一种浪费。
这时候就是定时器(
Timer
)和中断(
Interrupt
)的用武之地了。
Arduino UNO
有三个
timer
timer0 -
一个被
Arduino
的
delay()
,
millis()
和
micros()
使用的
8
位定时器
timer1 -
一个被
Arduino
的
Servo()
库使用的
16
位定时器
timer2 -
一个被
Arduino
的
Tone()
库使用的
8
位定时器
“Arduino Mega“
板有另外三个可使用的
timer3,4,5
,而不是只有
timer0,1,2
在以下的例子中,我们将在我们的中断使用
timer1
。显然,如果你用了
Servo()
库就会有冲突,所以你应该选择其他
timer
。
下面是一个基本的中断驱动程序。这是基本的
LED
闪光灯程序。但是现在
我们用中断而不是
delay()
来每半秒开启和关闭
LED
灯一次,从而实现让
LED
每
秒闪一次的效果。
/*
timer1
中断实例
LED
闪光灯每秒闪亮一下
*/
#define ledPin 13 //
设置输出口为
13
口
int timer1_counter;
void setup()
{