1.問題背景
在外部中斷0的服務函數中通過嵌入匯編修改中斷產生后現場保護的主程序入口地址,以實現中斷返回后直接跳轉到用戶自定義的函數開始執行。
我的思路是,在中斷函數服務結束前,先彈出棧中的數據存放在DPH、DPL中,然后修改DPH與DPL的值,再講DPH、DPL的值壓入棧中,等待中斷服務函數結束后,單片機自行再講DPH及DPL彈出,這樣中斷恢復的主程序入口地址就被改變了。
2.問題代碼
void INT0_Service() interrupt 0 using 1
{
Menu_Status--;
if(Menu_Status<1)
{
Menu_Status = 1;
}
// 先彈出棧中的數據
#pragma ASM //匯編嵌套開始
POP DPH
POP DPL
POP ACC
//替換DPH,DPL的值
MOV DPH,#000H
MOV DPL,#00EH
PUSH ACC
PUSH DPL
PUSH DPH
#pragma ENDASM //匯編嵌套結束
LCDWriteCmd(LCD_SCREEN_CLR); //清屏
}
PS:我想讓中斷服務結束后直接跳轉到0x000E這個地址去執行程序。
3.問題求助
(1).這段程序編譯沒有問題,但是無法按照預期跳轉。
|