单片机中子程序和中断服务程序有何异同为什么子程序返回指令RET和中断返回指令RETI不能相互替代

单片机中子程序和中断服务程序有何异同为什么子程序返回指令RET和中断返回指令RETI不能相互替代,第1张

程序是一段程序代码,是独立的一个执行部分,你主程序调用就执行,不调用就不执行;而中断服务程序也是是一段程序代码,是独立的一个执行部分;但是只在你主程序开了中断,并且有中断条件(不如中断口接收到低电平,定时时间到了)才会去执行,并且中断服务程序会将你主程序运行时的PC指针寄存器,A累加器就信息都会入栈保护;退出中断后又会出栈进行还原;而子程序则不会;

这两类型的子程序区别在于如下几点:

中断服务子程序有5个中断源

中断服务子程序不需要在主程序中被调用,而是满足条件自动触发

指令上看中断用RETI,子程序用RET

在调用普通子程序时有可能被优先级高的中断子程序打断

两者入口地址不同,中断有固定入口地址

相同:都是子程序

不同:普通子程序 按程序执行顺序一步步执行 到他了 他才运行 不到他 他老实的等着

中断服务子程序 可以根据中断请求快速执行,比如外部下降沿中断,单片机在检测到他的管脚突然由高电平变成低电平的时候就会放弃现在正在执行的普通子程序,调用你的中断服务程序。检测和调用过程都是单片机自动完成的,你只要给他初始化了然后写好中断后要调用的子程序就不用你管了。

再举个简单的例子。

比如你们的单片机老师在给你们讲课,讲课的内容可以是第一节 第二节,这就是一个个的子程序,普通子程序。突然地震了,就要执行应急程序,指挥你们撤离,你老师就得放弃现在正在执行的这些普通子程序去执行撤离这个级别比较高的中断服务程序。

差别:

⑴ 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。

⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。

⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。

中断服务子程序入口地址相对某一中断是固定的,调用子程序的偏移地址是随机的,基本过程差不多,返回时,中断服务子程序用的是reti

调用子程序是ret

调用中断服务子程序和调用子程序都会把当前偏移地址的下一地址压栈,但调用子程序的返回指令ret不影响标志位,reti从中断程序返回,并会清除内部相应的中断状态寄存器。

我说的是80c51的

它们的主要差异有:\x0d\1、 子程序调用一定是程序员在编写程序时事先安排好的,是可知的,而中断是由中断源根据自身的需要产生的,是不可预见的(用指令INT引起的中断除外) \x0d\2、 子程序调用是用CALL指令来实现的,但没有调用中断的指令,只有发出中断请求的事件(指令INT是发出内部中断信号,而不要理解为调用中断服务程序); \x0d\3、 子程序的返回指令是RET,而中断服务程序的返回指令是IRET/IRETD。 \x0d\4、 在通常情况下,子程序是由应用程序开发者编写的,而中断服务程序是由系统软件设计者编写的。 \x0d\5、中断方式具有实时性,其可以在函数中的任意位置产生。而子程序调用是编程着写的在程序的特定位置其特定功能的函数。

以上就是关于单片机中子程序和中断服务程序有何异同为什么子程序返回指令RET和中断返回指令RETI不能相互替代全部的内容,包括:单片机中子程序和中断服务程序有何异同为什么子程序返回指令RET和中断返回指令RETI不能相互替代、单片机程序中,中断服务子程序与其他普通程序有什么不同、单片机问答题:比较中断服务子程序与普通子程序的异同等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9519089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存