请设想一个场景:你正在公司码字,上司说开会。你有两个选择,一是继续码字,二是去会议室开会。大脑大概率会停下手头工作,转去开会。这就是一个简单的中断。假设没有中断系统,你会继续码字,结局会不太好看。这个世界缺少中断系统,会变得不堪设想,人们只会把一件事做完做完才去做别的事。如果某人正在吃饭,厨房炉里的水沸腾,没有中断,这就可能酿成大祸。这只是中断的一个小场景。中断系统的重要性大家已经知道了。单片机是一个微型处理器,也具有中断系统,下面来介绍89c52的中断系统。
定义
cpu在处理某一件事a时,发生了另一件事b,请求cpu迅速去处理(中断发生);cpu暂时停止当前的工作(中断响应),转去处理事件b(中断服务);待cpu将事件b处理完毕后,再回到原来事件a被中断的地方继续处理事件a(中断返回)。流程图如下
中断嵌套
当CPU响应某一中断时,若有优先权高的中断源发出中断请求,则CPU能中断正在进行的中断服务程序,并保留这个程序的断点(类似于子程序嵌套),响应高级中断,高级中断处理结束以后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才能去处理新的中断请求。流程图如下
结构
看完中断的知识点后,来了解一下中断的内部结构
中断系统有四个特殊功能寄存器
- 定时器控制寄存器TCON
- 串行口控制寄存器SCON
- 中断允许寄存器IE
- 中断优先级寄存器IP
下面来各个击破
定时器控制寄存器
定时器控制寄存器TCON在特殊功能寄存器中,字节地址为88H,位地址
为88H~8FH(低至高),可进行位寻址(对为地址中的内容进行微操作的寻址方式称为位寻址)。单片机复位时,TCON全部被清零,其各位定义如下图。
TF1:定时器 1 溢出标志。当定时器/计数器 1 溢出时,由 硬件置位;当主机响应中断,转向中断服务程序时,由硬件清零。
TR1:定时器 1 运行控制位, 由软件置位/ 复位来开启或关闭定时器/计数器 1。
TF0:定时器 0 溢出标志。当定时器/计数器 0 溢出时,由 硬件置位;当主机响应中断,转向中断服务程序时,由硬件清零。
TR0:定时器 0 运行控制位,由 软件置位/ 复位来开启或关闭定时器/计数器 0。
IE1:外部中断 1 跳变中断请求标志,当检测到 INT1 发生 1 到 0 的跳变时,由硬件置位硬件置位;当主机响应中断, 转向中断服务程序时,由硬件清零。
IT1:外部中断 1 触发方式控制位,由 软件置位或清零来选择外部中断 1 的跳变/电平触发中断请求。IT1=0 时,外部中断 1 为电平触发方式,当 INT1 输入低电平时,置位 IE1。采用电平触发方式时,外部中断源必须保持低电平有效,直到该中断被 CPU 响应,同时在该中断服务程序执行完之前,外部中断源必须被清除,否则将产生另一次中断。IT1=1 时,外部中断 1 为边沿触发方式,在对 INT1 的相邻两次采样中,如果一个周期中为高电平,接下来的周期为低电平,则置位 IE1,表示外部中断 1 正在向 CPU 申请中断。直到该中断被CPU 响应时,才被 硬件清零。
IE0:外部中断 0 跳变中断请求标志,当检测到 INT1 发生 1 到 0 的跳变时,由硬件置位硬件置位;当主机响应中断, 转向中断服务程序时,由硬件清零。
IT0:外部中断 0 触发方式控制位,应用同 IT1。
标题串行口控制寄存器 SCON
串行口控制寄存器 SCON在特殊功能寄存器中,字节地址为98H,可位寻址。单片机复位时,SCON全部被清零,各位定义如下。
SM0:串行口工作方式控制位。
SM1:串行口工作方式控制位,和 SM0 一起来选择工作方式。
SM2:多机通信控制位。
REN:允许串行接收控制位。由软件来设置,置 1 时允许接收,清零时禁止接收。
TB8:串行发送数据的第 9 位,由设置 0 或者 1。
RB8:串行接收数据的第 9 位。
TI:发送中断标志位,由片内硬件在方式 0 串行发送第 8 位结束时置位,或在其它方式串行发送停止位的开始时置位。 在中断服务程序中要清零才能发送下一次数据。
RI:接收中断标志位,由片内硬件在方式 0 串行接收到第 8 位结束时置位,或在其它方式串行接收到停止位的中间时置位。 在中断服务程序中要清零才能接收下一次数据。
中断允许寄存器IE
中断允许寄存器IE用来设定各中断源的打开和关闭。IE在特殊功能寄存器中,字节地址为A8H.IE寄存器可位寻址。单片机复位时,寄存器全部被清零,各位定义如下。
EA:CPU 的中断开放标志,EA=1,开放所有中断;EA=0,屏蔽所有的中断。
ET2:定时器/计数器 T2 溢出中断允许位,ET2=1,允许 T2 中断;ET2=0,禁止T2中断。在 C51 、S51 和 和 C2051 中没有 T2 ,所以 C51 、S51 和 和 C2051 中的 IE 寄存器 ET2 位无定义。
ES:串行口中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
ET1:定时器/计数器 T1 溢出中断允许位,ET1=1,允许 T1 中断;ET1=0,禁止 T1中断。
EX1:外部中断 1 中断允许位。EX1=1,允许外部中断 1 中断;EX1=0,禁止外部中断 。
ET0:定时器/计数器 T0 溢出中断允许位,ET0=1,允许 T0 中断;ET0=0,禁止 T0中断。
EX0:外部中断 0 中断允许位。EX0=1,允许外部中断 0 中断;EX0=0,禁止外部中断 0 中断。
中断优先级寄存器IP
中断优先级寄存器IP字节地址为B8H,用来设定各中断源属于两级中断的哪一级。中断优先级寄存器IP可位寻址。单片机复位时中断优先级寄存器IP全部清零。
IP 中的某位如果为 1,则该位所对应的中断定义为高优先级中断;反之,IP 中的某位如果为 0,则该位所对应的中断定义为低优先级中断(PT2、PS、PT1、PX1、PT0、PX0 分别对应定时器 T2 中断、串行口中断、定时器 T1 中断、外部中断 1、定时器 T0 中断、外部中断 0)。 其中 PT2 位在 C51 、S51 和 和 C2051 中无定义。中断优先级如下。
这里解释一下中断优先级,及同一时刻发生两个中断,那么先执行哪个中断?,取决于中断源优先级。
这些寄存器位置与功能并不需要强记,这些在数据手册都会有说明,只要会用就行。
内部结构
看完寄存器,再来了解中断系统内部结构。内部结构如图所示。
看到电路图不用害怕,慢慢看下去就会觉得不难。首先明白数据为1时,开关闭合,为0时,开关断开。以T1定时器为中断源来看一篇电路图。
1.打开总中断(EA),全局中断允许位置1
2.打开定时器中断,定时器中断允许位置1
3.T1定时器数据溢出,引起TF1置1,申请中断。
4.如果有两个中断同时产生,判断中断优先级,选择发生哪个中断请求
5.中断请求
总结
单片机中断系统已经介绍完毕,相信大家或多或少都有理解一些内容。只要认真看完,这些都不是难事。仅仅一个中断系统是完成不了什么的,它还需要其他如计数器,串口等等才能完成功能。