Arduino定时器中断:修訂版本之間的差異

出自YFRobotwiki
跳轉到: 導覽搜尋
(以“当你想让代码在一个固定的时间间隔后执行时,你可以很容易的用delay()函数来实现。但是,这只是让程序暂停一个特定的时...”为内容创建页面)
(沒有差異)

2019年7月18日 (四) 17:20的修訂版本

當你想讓代碼在一個固定的時間間隔後執行時,你可以很容易的用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()