单片机调用中断服务子程序和调用子程序的区别是什么

单片机调用中断服务子程序和调用子程序的区别是什么,第1张

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

调用子程序是ret

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

我说的是80c51的

指令结构相同:指令 + 直接地址。

执行过程不同:调用指令要保护现场,进行堆栈 *** 作,转移指令不需要;

执行结果不同:调用指令执行后会返回执行下一条指令,程序模块没有结束;

转移指令不会返回,本条指令就是程序模块的结尾。

子程序调用一定是程序员在编写程序时事先安排好的,是可知的,而中断是由中断源根据自身的需要产生的,是不可预见的(用指令INT引起的中断除外)。

子程序调用是用CALL指令来实现的,但没有调用中断的指令,只有发出中断请求的事件(指令INT是发出内部中断信号,而不要理解为调用中断服务程序);

子程序的返回指令是RET,而中断服务程序的返回指令是IRET/IRETD。

在通常情况下,子程序是由应用程序开发者编写的,而中断服务程序是由系统软件设计者编写的。

子程序是一段程序代码,是独立的一个执行部分,你主程序调用就执行,不调用就不执行;而中断服务程序也是是一段程序代码,是独立的一个执行部分;但是只在你主程序开了中断,并且有中断条件(不如中断口接收到低电平,定时时间到了)才会去执行,并且中断服务程序会将你主程序运行时的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这个可以省略。

中断程序是在中断事件发生时调用,程序也不知道什么时候有中断事件发生。子程序是在需要的时候调用,在程序里可以预见它的使用。

因为中断是由系统调用的,不知道什么时候中断,所以你可以选择允许中断或者不允许中断,这就好比你正在干工作时,电话铃响了,你可以选择接电话也可以选择不接电话,中断就好比电话铃,你不知道电话铃什么时候响起。开放中断就是允许中断,就好比电话铃响允许你接电话,禁止中断就是不允许中断,就好比电话铃响不允许你接电话。子程序是条件调用的程序,你可以知道什么时候调用,子程序是为了优化程序结构。

简单一句,中断是随时发生的,时间不确定。而子程序则时间确定,跟系统设计顺序有关系,起简化、优化作用。用在随机事件,只是中断的一个应用。

有些中断的应用,其事件是可以预料,也能确定的,比如说定时。

子程序控制的内容与主程序是一样的,都是在扫描周期结束后才变化的,而中断就是马上去做,不等这个扫描周期结束 。

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

计算机科学术语。指处理机处理程序运行中出现的紧急事件的整个过程。

程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,处理机立即中止现行程序的运行,自动转入相应的处理程序(中断服务程序),待处理完后,再返回原来的程序运行,这整个过程称为程序中断;当处理机接受中断时,只需暂停一个或几个周期而不执行处理程序的中断,称为简单中断。

中断又可分为屏蔽中断和非屏蔽中断两类。可由程序控制其屏蔽的中断称为屏蔽中断或可屏蔽中断。屏蔽时,处理机将不接受中断。反之,不能由程序控制其屏蔽,处理机一定要立即处理的中断称为非屏蔽中断或不可屏蔽中断。

非屏蔽中断主要用于断电、电源故障等必须立即处理的情况。处理机响应中断时,不需执行查询程序。由被响应中断源向CPU发向量地址的中断称为向量中断,反之为非向量中断。向量中断可以提高中断响应速度。

参考资料

编辑委员会数学辞海北京:中国科学技术出版社,2002

中断程序强调中断,必需保存现场,而且中断程序和原运行程序没有联系,有时甚至毫不相关。

而子程序强调包含,是包含在另一个程序里的,是个包含运行的过程。并且子程序和母程序(或者主程序)是有联系的,而且是密不可分的。

以上就是关于单片机调用中断服务子程序和调用子程序的区别是什么全部的内容,包括:单片机调用中断服务子程序和调用子程序的区别是什么、简述子程序调用和执行中断服务程序的异同点与相同点、调用中断服务程序和调用子程序有何分别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9712537.html

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

发表评论

登录后才能评论

评论列表(0条)

保存