不能跳转到子程序或从一个子程序跳转到另一个子程序,这主要是牵涉到子程序的调用有现场保护也就是堆栈的问题,如果跳转到其他子程序,那么返回时就会破坏这个被保护的现场,出现一些未知的结果。
修改堆栈数据,令中断返回时,从堆栈d出的地址(修改的数据)刚好就是指定的子程序入口 地址。就实现了你的要求
例:
指定返回入口地址:
LOOP:
中断返回如下编程:
pop acc ;腾出返回位置
pop acc
mov dptr,#loop ;读取返回入口地址
push dpl ;低位在前,压入返回地址
push dph ;高位在后
reti;返回喽!
中断服务子程序,你指的的是哪部分的?如果是产生中断后,硬件自动跳转到中断服务入口处,执行的那个程序的话,必须加跳转。因为每个中断入口后仅分配给该中断服务程序8字节的指令空间,只能用于保护现场并跳转到真正的中断服务程序,执行完后用RET指令跳回这里,再用RETI指令跳回主程序。
当然,在真正的中断服务程序中也可以加跳转指令,而且跳转指令作用很多,可以用于多路分支程序和查表程序
以上就是关于51单片机汇编程序跳转问题,全部的内容,包括:51单片机汇编程序跳转问题,、单片机中断返回/跳转子程序、请问51单片机的中断服务子程序中能否加跳转指令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)