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

留言

這個網誌中的熱門文章

SketchUp 如何列印 1:1 圖檔

Linux 批次檔的寫法