答:对于51系列的单片机而言,当中端响应发生时,会将相应的优先级有效触发器职位;当退出中断时,执行RETI,单片机又自动将优先级有效触发器清0。因此,如果直接使用跳转指令从中断子程序出来的话,单片机没有清0优先级有效触发器,下一次中断发生时就不能响应了。
如果要从高优先级中断程序返回主程序的话,必须执行两条RETI指令,才可以清除高/低优先级有效触发器。具体的程序可以是: MOV DPTR, #LABLE1
POP ACC;将高优先级子程序返回地址出栈 POP ACC
PUSH DPL;将LABLE1地址入栈
PUSH DPHRETILABLE1:
POP ACC;将低优先级子程序返回地址出栈 POP ACC
MOV DPTR, #LABEL2
PUSH DPL;将LABLE2,即需要返回的主程序地址入栈 PUSH DPHRETI
暂无评论