用CALL调用子程序和用中断调用子程序有什么区别

用CALL调用子程序和用中断调用子程序有什么区别,第1张

用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问题:在中断子程序中产生中断会怎么样,如下描述:、主函数中,没有调用中断子程序,中断子程序为什么能被执行何时执行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存