在单片机中子程序与中断服务程序的异同点。

在单片机中子程序与中断服务程序的异同点。,第1张

差别:

⑴ 中断请求信号可以由外部设备发出,是随机的;程序调用却是由软件编排好的。

⑵ 中断响应后由固定的矢量地址转入中断服务程序,而子程序地址由软件设定。

⑶ 中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。

一般中断处理的主要步骤分别是中断请求、中断判优、中断响应、中断处理和中断返回。

在微机系统中,对于外部中断,中断请求信号是由外部设备产生,并施加到CPU的NMI或INTR引脚上,CPU通过不断地检测NMI和INTR引脚信号来识别是否有中断请求发生。对于内部中断,中断请求方式不需要外部施加信号激发,而是通过内部中断控制逻辑去调用。无论是外部中断还是内部中断,中断处理过程都要经历以下步骤:请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。

请求中断

当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止。

中断响应

CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期。

关闭中断

CPU响应中断后,输出中断响应信号,自动将状态标志寄存器FR或EFR的内容压入堆栈保护起来,然后将FR或EFR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断。因为CPU刚进入中断时要保护现场,主要涉及堆栈 *** 作,此时不能再响应中断,否则将造成系统混乱。

保护断点

保护断点就是将CS和IP/EIP的当前内容压入堆栈保存,以便中断处理完毕后能返回被中断的原程序继续执行,这一过程也是由CPU自动完成。

中断源识别

当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器。CPU转入相应的中断服务子程序开始执行。

保护现场

主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。

中断服务

中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行。

恢复现场

当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容d出,即恢复主程序断点处寄存器的原值。

中断返回

在中断服务子程序的最后要安排一条中断返回指令IRET,执行该指令,系统自动将堆栈内保存的IP/EIP和CS值d出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。

你的外部中断应该是属于下降沿触发,当有一个下降沿到来时外部中断请求标志IE0或IE1(外部中断0或外部中断1请求中断标志,下面简称为IEx)就会置1,当进入中断程序后IEx由硬件归零。也就是说单片机当检测到IEx为1的时候就会进入到外部中断程序。

现在来分析一下为什么你的程序会执行两次中断。

当单片机外部中断引脚第一次接收到一个下降沿时,IEx被置1,进入中断程序,随即IEx被硬件清零。然而由于你用杜邦线接触P32口存在抖动(你感觉不到),外部中断引脚再次接受到一个下降沿,IEx又被置1,单片机又要响应中断,但此时由于上一个中断程序未执行完,单片机将等待外部中断程序执行完(你可以理解为有两个中断事件,但这两个事件优先级相同,所有按顺序响应)。在这个过程中,你的接触仍然会产生很多下降沿,但因为IEx只有响应了中断事件后才会清零,因此IEx一直为1。当第一次的中断程序执行结束后,单片机检测到IEx又是1,马上又再次进入中断。因为你的接触时间远远小于你的中断程序执行时间,因此在第二次执行中断程序前已不存在下降沿,所以进入第二次中断程序后,IEx就被清零了,这样执行完第二次中断程序后就不会再次进入中断了。

说了那么多希望你能明白吧。不明白可以翻查相关单片机外部中断相关资料。

区别:

1、程序是否提前安排好:

中断服务程序

是随机的,而普通

子程序

是预先安排好的。

2、结束程序不同:中断服务子程序以RETI结束,而一般子程序以RET结束。

3、结束动作不同:中断服务子程序RETI除将断点d回PC动作外,还要清除对应的中断优先标志位,以便新的

中断请求

能被响应。一般子程序则无此项 *** 作。

扩展资料:

当CPU正在处理内部数据时,会发生外部紧急情况,需要CPU暂停当前工作以处理紧急情况。返

回到原来

的中断地址以恢复原来的工作的过程称为中断。

组件实现这个函数被调用

中断系统

,应用CPU中断调用的请求源

中断源

,单片机的中断系统通常允许多个中断源,当多个中断源请求中断CPU的同时,有一个

中断优先级

的问题。通常,根据中断源的优先级,给予处理最

紧急事件

的中断请求源优先级,即最先响应最高级别的中断请求。

中断处理:

(1)保护中断的进程现场。为了使进程在中断处理后准确地返回到断点,系统必须保存当前处理器的

程序状态字

PSW、

程序计数器

PC等的值。

(2)分析中断的原因,go执行相应的中断处理程序。当多个中断请求同时发生时,来自最高

优先级中断

源的中断请求被处理。

(3)恢复中断的进程站点,CPU

继续执行

原来中断的进程。

参考资料来源:

百度百科

-中断服务程序

相同点:都是让CPU从主程序转去执行子程序,执行完毕又返回主程序。

不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以RETI结束,而一般子程序以RET结束。RETI除将断点d回PC动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。

以上就是关于在单片机中子程序与中断服务程序的异同点。全部的内容,包括:在单片机中子程序与中断服务程序的异同点。、一般中断处理的主要步骤是什么、51单片机外部中断子程序为什么会执行两次呢(我只触发一次) 下面是我的程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存