PIC 中斷程式寫法

程式碼的框架如下

#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 波形的關係 (要先將中斷點清除)

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯