如何写中断程序?

如何写中断程序?,第1张

中断函数不用进行函数声明,可以写在MAIN函数前面也可以写在MAIN函数后面。

一、中断服务程序,处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。

二、当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。

三、实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求。

四、保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。

五、分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。恢复被中断进程的现场,CPU继续执行原来被中断的进程。

在单片机执行任务过程中,可能会遇到其他任务需要优先执行,此时就需要引入中断。中断是广泛应用于51或ARM单片机里用于优先执行部分代码的重要功能,下图是中断过程示意图

中断流程

二、中断寄存器

中断系统组成

我们结合此图对中断系统进行介绍。根据图片可以看出,与中断有关的寄存器有TCON、IE、IP(RX和TX这里不加赘述)

TCON:

在这里插入图片描述

TF1(TF0):定时计数器溢出标志位,当定时计数器记满时会自动置1,可通过if(TF1==1)或while语句来判断是否溢出,并执行下一步 *** 作。

TR1(TR0):定时计数器的启动控制位,启动时软件编程置1

IE1(IE0):外部中断请求标志位

IT1(IT0):外部中断触发选择位,若为1,则为下降沿触发,若为0,则为低电平触发

IE:

在这里插入图片描述

EA:总中断开关,使用任何中断前要先使EA置1

ET2:52系列T2中断允许位

ES:置1时开放串行口中断

ET1(ET0):定时计数器T1(T0)溢出中断允许位,使用定时计数器时需要使其置1

EX1(EX0):外部中断INT1(INT0)允许位,使用外部中断前要使其置1

中断优先级寄存器IP:

在这里插入图片描述

51单片机有五个中断源,但只有两个优先级,必然会有几个中断请求源处于同样的优先级。当CPU同时接收到几个同优先级中断请求时,其内部会有一个硬件查询逻辑,将根据中断查询逻辑的自然优先顺序来查询。

51单片机自然优先级为:

外部中断0>定时器0>外部中断1>定时器1>串口中断>定时器2

三、中断响应过程

51单片机的CPU在每一个周期都顺序查询每一个中断源,在机器周期的S5P2状态采样并按照优先级处理所有被激活的中断请求。但是在出现以下情况时,将不会处理中断请求:

①CPU正在处理更高级或同级中断

②现在的机器周期不是所执行指令的最后一个机器周期

③正在执行的指令是RETI或正在访问IE或IP

CPU响应中断时,首先会置位相应的优先级状态触发器,以阻断同级或低级触发请求。之后会自动清除响应的中断标志,并自动保护断电程序,将pc内容压入堆栈,并把中断源对应的矢量单元地址装入pc


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

原文地址: https://outofmemory.cn/yw/12017211.html

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

发表评论

登录后才能评论

评论列表(0条)

保存