差别:
⑴ 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。
⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。
⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。
相同:都是子程序
不同:普通子程序 按程序执行顺序一步步执行 到他了 他才运行 不到他 他老实的等着
中断服务子程序 可以根据中断请求快速执行,比如外部下降沿中断,单片机在检测到他的管脚突然由高电平变成低电平的时候就会放弃现在正在执行的普通子程序,调用你的中断服务程序。检测和调用过程都是单片机自动完成的,你只要给他初始化了然后写好中断后要调用的子程序就不用你管了。
再举个简单的例子。
比如你们的单片机老师在给你们讲课,讲课的内容可以是第一节 第二节,这就是一个个的子程序,普通子程序。突然地震了,就要执行应急程序,指挥你们撤离,你老师就得放弃现在正在执行的这些普通子程序去执行撤离这个级别比较高的中断服务程序。
中断调用和子程序调用两个过程是完全不同的概念,但它们也有许多相似之处。
两者都需要保护断点(即下一个指令地址),跳转到子例程或中断服务程序,保护场景,子程序,
或中断处理,恢复,恢复断点(即返回主程序)。
两者都可以嵌套,也就是说,正在执行的子程序或正在处理的中断程序被另一个新的中断请求打断,嵌套可以是多级的。
子程序是一段程序代码,是独立的一个执行部分,你主程序调用就执行,不调用就不执行;而中断服务程序也是是一段程序代码,是独立的一个执行部分;但是只在你主程序开了中断,并且有中断条件(不如中断口接收到低电平,定时时间到了)才会去执行,并且中断服务程序会将你主程序运行时的PC指针寄存器,A累加器就信息都会入栈保护;退出中断后又会出栈进行还原;而子程序则不会;
中断是单片机的一个重要功能,中断子程序专为执行中断功能,它是在发生中断后,自动执行的,不需要主程序调用;普通子函数要主程序调用才能执行。
汇编里的区别:
普通子函数用RET返回;中断子程序用RETI返回,RETI返回时要清除中断标志的;
普通子函数调用时直接进入函数入口地址,中断函数在中断发生时先进中断入口
03H、08H、13H、18H、23H后随即写一个跳转指令,再跳转到相应语句。
C语言区别:
普通子函数用的是C语言里的主函数调用子函数的方法,子函数可以有参数,有返回值;中断函数没有参数,没有返回值;
中断函数的写法也不一样,以80c51为例:
void
INT0()
interrupt
0
using
1
{
}
interrupt
0不是是外部中断0引发的中断,必须写;
using
1
表示在中断函数里用第一组寄存器R0-R7这个可以省略。
以上就是关于在单片机中子程序与中断服务程序的异同点。全部的内容,包括:在单片机中子程序与中断服务程序的异同点。、单片机问答题:比较中断服务子程序与普通子程序的异同、简述中断的工作过程,说明中断调用和子程序调用有什么异同等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)