PIC 中斷觀察
今天來觀察一下中斷的工作方式,先到 Debugger | Select Tool | MPLAB SIM 選擇軟體模擬的方式,然後開啟 View | Program Memory,照以下的說明輸入組合語言程式來觀察一下吧
若要在某一個 Address 輸入程式碼,先到該 Address 按滑鼠右鍵,再選擇 Set PC at Cursor 即可
首先在 0008 輸入中斷服務常式的程式碼
BCF INTCON, 0x01
NOP
RETFIE
然後在 0020 輸入主程式的程式碼
BSF INTCON, 0x07
BSF INTCON, 0x06
BSF INTCON, 0x04
NOP
NOP
BSF INTCON, 0x01
在 View | Watch 加入 INTCON 暫存器,將指標移到 0020 (滑鼠右鍵) 就可以開始單步執行程式了
執行完前五行指令後可以發現 INTCON 已經初始化完成,接下來游標停在 002A 準備模擬中斷觸發了
中斷發生後會跳到中斷服務常式的進入點 0008,同時可以發現 GIEH (INTCON BIT7) 已經被清為 0,防止其它中斷產生造成重覆進入的問題
接著程式會清楚本身的中斷旗標 (INTCON BIT1),然後以 RETFIE 的方式返回主程式繼續執行
返回後可以發現 GIEH 又被打開了,表示又可以開始接受其它的中斷了
若要在某一個 Address 輸入程式碼,先到該 Address 按滑鼠右鍵,再選擇 Set PC at Cursor 即可
首先在 0008 輸入中斷服務常式的程式碼
BCF INTCON, 0x01
NOP
RETFIE
然後在 0020 輸入主程式的程式碼
BSF INTCON, 0x07
BSF INTCON, 0x06
BSF INTCON, 0x04
NOP
NOP
BSF INTCON, 0x01
在 View | Watch 加入 INTCON 暫存器,將指標移到 0020 (滑鼠右鍵) 就可以開始單步執行程式了
執行完前五行指令後可以發現 INTCON 已經初始化完成,接下來游標停在 002A 準備模擬中斷觸發了
中斷發生後會跳到中斷服務常式的進入點 0008,同時可以發現 GIEH (INTCON BIT7) 已經被清為 0,防止其它中斷產生造成重覆進入的問題
接著程式會清楚本身的中斷旗標 (INTCON BIT1),然後以 RETFIE 的方式返回主程式繼續執行
返回後可以發現 GIEH 又被打開了,表示又可以開始接受其它的中斷了
留言