1子程序调用是预先安排好的,程序中断是随机发生的;
2调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
中断是单片机的一个重要功能,中断子程序专为执行中断功能,它是在发生中断后,自动执行的,不需要主程序调用;普通子函数要主程序调用才能执行。
汇编里的区别:
普通子函数用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从主程序转去执行子程序,执行完毕又返回主程序。
不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以reti结束,而一般子程序以ret结束。reti除将断点d回pc动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。
中断调用和子程序调用两个过程是完全不同的概念,但它们也有许多相似之处。
两者都需要保护断点(即下一个指令地址),跳转到子例程或中断服务程序,保护场景,子程序,
或中断处理,恢复,恢复断点(即返回主程序)。
两者都可以嵌套,也就是说,正在执行的子程序或正在处理的中断程序被另一个新的中断请求打断,嵌套可以是多级的。
差别:
⑴ 中断请求信号可以由外部设备发出,是随机的;子程序调用却是由软件编排好的。
⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。
⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。
中断程序其实是子程序中的特殊的一种。两则都是程序调用,区别在于子程序是和PLC的扫描时间挂钩,如同你理解的那样。但是中断程序和PLC的扫描时间无关,可以随时触发调用。因为它们是调用1MS单位的时间继电器来触发中断,时间一到,不管主程序扫描到哪,立即调用执行中断程序,能最大限度的保证所处理的中断程序的时间的准确性,一般用于PID,编码器等对处理时间要求很严格的事件。
所以,如果中断事件对时间要求不高,也可以当成子程序来调用。
基本没有区别!都会在返回时恢复压栈的PC指针并继续执行程序。
中断处理程序实际上也可以看做是一个普通的子程序,只是它的调用是预先设定的地址入口,并且它的调用时由中断触发的;而子程序是我们人为地调用的。
但是中断子程序的返回有时要考虑对中断的处理(如开关中断允许、初始化数据-----比如计数器或者定时器的初始值处理等等)。
以上就是关于单片机调用中断服务子程序和调用子程序的区别是什么全部的内容,包括:单片机调用中断服务子程序和调用子程序的区别是什么、c语言中中断服务子程序与其他子程序的区别、子程序与中断服务程序的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)