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