PIC 中斷程式寫法
程式碼的框架如下
若程式編譯沒問題,就可以準備來觀察了,首先把 Watch Dog Timer 關掉,它會影響程式的執行
到 Configure | Configuration Bits 開啟,將上方的 Configuration Bits set in code 的選項清除掉
選擇 WDT disabled 後,再將上面的 Configuration Bits set in code 的選項打勾。
接下來是設定模擬的中斷信號 INT0,設定初始值為 High,然後以 100 cycles 為變化週期
將 INT0 的波形加入觀察,在第 25 行設定中斷點,當程式執行後就可以發現每次 INT0 在上升緣時就會產生中斷,也可以用 Debugger | Animate 的方式觀察程式碼執行與 INT0 波形的關係 (要先將中斷點清除)
#include <myapp.h> void HISR(); // 高優先權中斷服務常式宣告 void LISR(); // 低優先權中斷服務常式宣告 #pragma config PBADEN = OFF // 將 Port B 類比輸入的功能關閉 // 設定為數位輸入 #pragma code P008 = 0x000008 // 將高優先權中斷服務常式的位置固定在 0x0008 void P008(void) { _asm goto HISR _endasm; // 因空間有限,故跳到實際的中斷服務常式 } #pragma code P018 = 0x000018 // 將低優先權中斷服務常式的位置固定在 0x0018 void P018(void) { _asm goto LISR _endasm; // 跳到實際的中斷服務常式 } #pragma code // 固定程式碼結束標記 #pragma interrupt HISR // 宣告此函式為中斷服務常式,會自動保存暫存器 void HISR() // 並以中斷的方式返回 (重啟 GIE) { CLR(INTCON,BIT1); // 清除中斷旗標 } #pragma interruptlow LISR void LISR() { CLR(INTCON,BIT1); } void main() { SET(INTCON, BIT7 | BIT6 | BIT4); // 初始化 INT0 中斷 while (1) { } }
若程式編譯沒問題,就可以準備來觀察了,首先把 Watch Dog Timer 關掉,它會影響程式的執行
到 Configure | Configuration Bits 開啟,將上方的 Configuration Bits set in code 的選項清除掉
選擇 WDT disabled 後,再將上面的 Configuration Bits set in code 的選項打勾。
接下來是設定模擬的中斷信號 INT0,設定初始值為 High,然後以 100 cycles 為變化週期
將 INT0 的波形加入觀察,在第 25 行設定中斷點,當程式執行後就可以發現每次 INT0 在上升緣時就會產生中斷,也可以用 Debugger | Animate 的方式觀察程式碼執行與 INT0 波形的關係 (要先將中斷點清除)
留言