Re: pin18f4520 TIMER0中斷與外部RB0中斷

作者 Ryang 於 2018年09月11日 10:37:10
引用:
內容大概是TIMER中斷執行LED,途中可以使用外部按鈕中斷進行我要的閃爍方式


這樣的中斷需求就基本上的認知 : 可以設定外部按鈕中斷為高優先權,而 Timer 中斷設成低優先權。讓按鍵可以以高優先權的姿態取得控制權。

以上方式似乎是很直接,但實際上的運作可能會有問題。按鍵的彈跳處理就是一例。
CPU 執行的速度是很快的,像這種 LED 顯示及按鍵的動作對 CPU 而言都是很慢的動作。既然是很慢的動作所以中斷優先就不是很重要的考量。
以我的做法我只會開啟 Timer 的中斷同時處理 LED 點亮的問題及按鍵的掃瞄及彈跳處理。

LED 計時點亮採用變數方式控制,假設 Timer 中斷是 10mS 一次。如果要點亮 1 Sec 的話,主程式只要填入 LED_On = 100 即可,其餘的就交給中斷來關閉 LED。


Timer 中斷裡:

if (LED_On) {LED = 1; LED_On--;}
else LED = 0; // LED 熄滅
:

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22408&post_id=78654