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).这段程序编译没有问题,但是无法按照预期跳转。
|