用CALL调用子程序和用中断调用子程序区别为:发生时间不同、关系不同、系统不同。
一、发生时间不同
1、用CALL调用子程序:在主程序的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的。
2、用中断调用子程序:中断过程发生的时间一般是随机的,CPU在执行某一主程序时受到中断源提出的中断申请,就发生中断过程。
二、关系不同
1、用CALL调用子程序:子程序完全为主程序服务,两者属于主从关系。主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。
2、用中断调用子程序:中断服务程序与子程序二者一般是无关的,两者是平行关系。
三、系统不同
1、用CALL调用子程序:主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路。
2、用中断调用子程序:中断处理系统是一个软、硬件结合的系统,需要专门的硬件电路才能完成中断处理的过程。
当出现以下任一情况,中断响应受阻,也就是不会进入中断程序
1)同级或高级的中断服务正在进行;
2)当前的机器周期还不是当前指令的最后一个周期,指令执行完之前,不会响应任何中断请求;
3)正在执行RETI或对IE、IP进行读写 *** 作,至少要执行一条其它指令才会响应;
在每个机器周期的s5p2期间,cpu对中断源依次采样,若遇到上述情况,会把中断请求锁存在各自的中断标志位中,等下一个机器周期再按顺序查询。也就是同级中断不会被打断,在这里TI已经被清零,这个中断退出后不会再响应了
还有点小问题,中断程序一开始应该执行一个if(RI)条件判断,要不然可能会读入垃圾数据
我现在也在迷惑这个问题,看单片机的程序里,中断程序明明没有被主程序调用,然而中断程序却可以运行……按照C语言的规则,子函数必须要被主函数调用才能发挥作用,然而在52单片机里,主函数并没有调用中断函数
…………然后我查到了这个:
程序中断和调用子程序有何区别:
1子程序调用是预先安排好的,程序中断是随机发生的;
2调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
看到这个,大概意思应该是:
中断程序不同于子程序,不需要主函数main调用就能执行。
中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系
这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解
void
functionName()
interrupt
1
//using
2
类型固定为void即无返回值
中断函数名functionName只要是合法标识,不与已有的函数重名即可,且函数固定无参数
interrupt为关键字,表明当前是一个中断函数,不需要被主函数直接或间接调用,也会编译连接进程序中,一般的非中断函数如果未被主函数直接或间接调用,也不被中断函数直接或间接调用,则不会链接进程序最终代码
interrupt后的数字表明是中断号几,单片机中
51系列的有0
1
2
3
4
等几个中断,
52系列的中断可能到了7或8
中断号与中断事件是绑定的,不能随便设置,对应的中断向量会指向这个函数入口地址
可选的using
N
表示中断中使用第几个寄存器组
品牌型号:华为MateBook D15
系统:Windows 11
中断服务子程序与普通子程序的主体不同、功能不同、特点不同。
1、主体不同:中断服务子程序是一种服务,是通过执行事先编好的某个特定的程序来完成的。普通子程序是一个大型程序中的某部份代码,由一个或多个语句块组成。
2、功能不同:中断服务子程序,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作。普通子程序,负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
3、特点不同:中断服务子程序,为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。普通子程序,常被使用在汇编语言层级上。子程序的主体是一个代码区块,当被调用时就会进入运行。
以上就是关于用CALL调用子程序和用中断调用子程序有什么区别全部的内容,包括:用CALL调用子程序和用中断调用子程序有什么区别、单片机C51问题:在中断子程序中产生中断会怎么样,如下描述:、主函数中,没有调用中断子程序,中断子程序为什么能被执行何时执行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)