
相同点:都是让CPU从主程序转去执行子程序,执行完毕又返回主程序。
不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以RETI结束,而一般子程序以RET结束。RETI除将断点d回PC动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。
CALL调用子程序只需要保护断点,即该指令的下一条指令的地址(段内调用只保护IP,段间调用要保护CS和IP);
中断调用子程序不但要保护断点(即该指令的下一条指令的CS和IP),还要保护标志寄存器FLAGS。
差别:
⑴ 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。
⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。
⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。
RET用于一般程序的返回
RETI用于中断函数的返回
以上是一般单片机书籍简绍的,然而在实际应用中,我发现,在程序返回中一样可以使用RETI,而在中断返回中却无法使用RET,究其原因是因为RETI比RET多做一件事情就是将“优先级生效”触发器清零
原来在8051构架中--中断系统中含有两个不可寻址的“优先级生效”触发器。一个用于指出CPU是否正在执行高优先级的中断服务程序,这个触发器为1时,系统将屏蔽所有的中断请求;另一个则指出CPU是否正在执行低优先级中断服务程序,该触发器为1时,将阻止除高优先级以外的一切中断请求。由此可见,若要响应同级甚至是低级中断请求,必须使得该“优先级生效”触发器清零。但该触发器又是不可寻址的,所以无法用软件直接清零。”
以上就是关于中断服务子程序与普通子程序有哪些异同之处全部的内容,包括:中断服务子程序与普通子程序有哪些异同之处、用CALL调用子程序和用中断调用子程序有什么区别、在单片机中子程序与中断服务程序的异同点。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)