文章程式碼顯示

2018年12月27日 星期四

《高階》寫程式Arduino教學 - 10:Arduino Uno 內部定時器中斷

暫註記用

一個重點,如果在使用中斷的同時需要在中斷服務函式裡面使用通訊介面 ( 如 I2C )

則必須在中斷服務函式的 第一行加上  sei( ); 並在最後一行加上 cli();

這樣才可以在中斷裡面使用通訊介面

其原因在於,在 Arduino 的設計中,如果我們進入中斷服務函式時
它很雞婆的為了避免中斷服務函式裡面的程式沒有計算完就再次進入中斷
(也就是你的中斷觸發時間太短了,來不及算完)
所以它在你進入中斷服務函式時會自動幫你把中斷關閉,以避免上述情形

偏偏通訊介面 (如 I2C 的函式庫 Wire.h ) 需要使用到中斷來進行
但 Arduino 又把它關了
所以我們需要在一進入自己設立的中斷服務函式時就再次將中斷手動開啟

也就是 sei();

而在計算完畢後,我們也需要將它關起來

也就是 cli()


我的 Youtube 頻道,一定要訂閱
我將定期推出程式語言的新手教學影片


參考連結
【教程】關於中断(Interrupt)的一些五四三... 中斷 . .
使用TimerOne庫(Timer1)定時做多件事(教程for定时器 timer1的使用)


↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引