3.2 单片机的中断
单片机中只有一个8位CPU,作为单片机重要应用——中断:单片机正在执行指令运行,一旦监测到中断发生,停止执行当前指令,转去执行中断子程序,一旦中断子程序完成,重新回到之前中断的地方继续执行之前的指令运行。
51单片机共有5个中断源:外部中断0、外部中断1、定时/计数器0(T0)、定时/计数1(T1)、串行通信(RI和TI)。5个中断源分为以下三大类:.
●外部中断:INT0和INT1分别位于单片机P3.2(外部中断0)和P3.3(外部中断1)引脚。
●内部中断:T0和T1,实现计数功能时,分别接收来自单片机P3.4和P3.5引脚的脉冲信号;实现定时中断时,计数脉冲则来自于单片机内部晶体振荡器。
●串行中断:T1:串行口发送标志位(TXD);R1:串行口接收标志位(RXD)。
1.中断控制
图3-4是中断控制内部结构图。在中断控制中TCON和SCON都是特殊功能寄存器,分别用以存放中断源的中断请求信号。
图3-4 中断控制内部结构图
1)TCON定时/计数器T0、T1控制寄存器。见表3-2。
表3-2 TCON
外部中断0触发方式控制位:IT0(TCON.0)当IT0=0时,电平触发;当IT1=1时,边沿触发方式(下降沿有效)。
外部中断0中断请求标志位:IE0(TCON.1);
外部中断1触发方式控制位:IT1(TCON.2);
外部中断1中断请求标志位:IE1(TCON.3);
定时/计数器T0溢出中断请求标志位:TF0(TCON.5);
定时/计数器T1溢出中断请求标志位:TF1(TCON.7)。
2)SCON串行控制寄存器。见表3-3。
表3-3 SCON
串行接收中断标志位:RI(SCON.0)。
允许接收串行数据时,接收完1帧串行数据后,硬件置位;转向中断服务程序后,可以用指令进行软件清零(RI必须由软件清除)。
串行发送中断标志位:TI(SCON.1)。
CPU将一个发送数据写入串行发送缓存器时,启动发送过程,每发送完1帧数据,由硬件置位;在转向中断服务程序后,可以用指令来进行软件清零(TI必须由软件清零)。
3)IE中断开放和禁止。在51单片机中IE寄存器实现中断的开放和禁止,见表3-4。
表3-4 IE
外部中断0允许位:EX0(IE.0);
定时/计数T0中断允许位:ET0(IE.1);
外部中断0允许位:EX1(IE.2);
定时/计数T1中断允许位:ET1(IE.3);
串行口中断允许位:ES(IE.4);
CPU中断允许位(总允许位):EA(IE.7)。
4)IP中断优先级。51单片机有两个中断优先级,其中断系统实行两级中断嵌套控制,每一个中断源都可以通过软件设置中断优先级。低等级的中断程序运行时,高等级可以提出中断请求,强迫让CPU提前处理高等级中断,等它完成以后再继续运行低等级中断。见表3-5。
表3-5 IP
外部中断0优先级:PX0(IP.0);
定时/计数器T0优先级:PT0(IP.1);
外部中断1优先级:PX1(IP.2);
定时/计数器T1优先级:PT1(IP.3);
串行口优先级:PS(IP.4);
定时/计数器T2优先级:PT2(IP.5)。
2.中断响应过程
中断源有中断请求;此时中断源的中断允许位是1;CPU开中断(EA=1);保护断点(保存下个要执行的指令的地址)即将这个地址送入堆栈;寻找中断入口;执行中断处理程序;中断返回(返回主程序,继续执行)。
对于51单片机中断优先级有三个规则:CPU同时接收几个中断,先响应优先级别最高的请求;在进行的中断过程不可以被新的同级或者优先级比它低的中断请求所中断;在进行的低优先级中断服务可以被高优先级的中断请求所中断。
3.中断的初始化和复位
在编写单片机中断程序的时候,首先对中断系统初始化也就是对于各中断相关的特殊寄存器的有关控制位进行设置。步骤如下:
将中断允许标志位和EA进行相应的置位;设定好优先级;对定时器和计数器设置相应的工作方式;对于外部中断则设定好对应的中断请求信号形式。