对于Arduino新手来说,刚开始使用实例的Blink亮灯代码,其实就开始进入了定时器的世界,因为其中的delay()函数就是通过定时定时器实现的,不过这些都被Arduino的封装库隐藏起来了,为了让使用者更快更便捷地开发项目,除了delay()函数,millis() ,micros() ,delayMicroseconds() ,PWM波生成的analogWrite()和tone() ,同时Servo库里面也使用了定时器。
接下来就进入Arduino定时器的世界,我同为新手,整理一下我的一些认识。
定时器的作用
定时器对于单片机来说就类似我们现实生活中的时钟,记录很多和时间相关的事件。
Arduino中的定时器
我主要使用的Arduino单片机为UNO,NANO和MEGA 2560。
UNO和NANO都使用的是ATmega328芯片,这款芯片有3个定时器,Timer0,Timer1,
Timer2,其中Timer0和Timer2都是8位寄存器(256),Timer1是16位寄存器(65536),意味着更高的分辨率。
mege2560使用的是ATmege2560芯片,这款芯片有6个定时器,在328的基础上,增加了Timer3,Timer4,Timer5。这三个定时器都是16位的寄存器。
用表格整理如下
定时器 | 位数 | 封装函数 | mega2560引脚对应 |
---|---|---|---|
Timer0 | 8bit | delay() , millis() 和 micros()等 | 4,13 |
Timer1 | 16bit | UNO的servo库 | 11,12 |
Timer2 | 8bit | tone()等 | 9,10 |
Timer3 | 16bit | 2,3,5 | |
Timer4 | 16bit | 6,7,8 | |
Timer5 | 16bit | mega2560的servo库 | 46,45,44 |
具体使用
可以到网上下载TimerOne, TimerThree等库文件,TimerOne.h就对应为timer1定时器。
TimerOne.h的下载链接:
https://www.arduinolibraries.info/libraries/timer-one
附上代码
#include<TimerOne.h>
#define state digitalRead(13) //读出引脚13的状态
int i=1; //记录次数
void setup()
{
Timer1.initialize(100000); //设置中断速度 1s
Timer1.attachInterrupt(tongxun); //关联中断函数
Serial.begin(115200); //设置串口波特率
interrupts(); //开启中断
}
void tongxun(