1、什么是中断?
当CPU正在执行程序时,由于系统出现了某种需要处理的紧急事件,CPU就会暂停正在执行的程序,去执行紧急事件,执行结束再执行原本正在执行的程序,这就是中断。
1.1、中断的作用?
中断增加系统对紧急事件执行的能力,提高了CPU的工作效率。`
1.2、中断源配置介绍
STC89C51RC系列单片机一共有8个中断请求源,分别是外部中断0(INT0),定时器0中断(Timer 0),外部中断1(INT1),定时器1中断(Timer 1),UART串口中断,定时器2中断(Timer 2),外部中断2(INT2),外部中断3(INT3)配置如下:
中断源 | 中断向量 地址 | 查询次序 | IPH,IP | 请求标志位 | 允许控制位 |
INT0 | 0003H | 0(highest) | PX0H,PX0 | IE0 | EX0/EA |
Timer 0 | 000BH | 1 | PT0H,PT0 | TF0 | ET0/EA |
INT1 | 0013H | 2 | PX1H,PX1 | IE1 | EX1/EA |
Timer 1 | 001BH | 3 | PT1H,PT1 | TF1 | ET1/EA |
UART | 0023H | 4 | PSH,PS | RI+TI | |
Timer 2 | 002BH | 5 | PT2H,PT2 | TF2+EXF2 | ET2/EA |
INT2 | 0033H | 6 | PX2H,PX2 | IE2 | EX2/EA |
INT3 | 003BH | 7(lowest) | PX3H,PX3 | IE3 | EX3/EA |
1.3、中断结构图介绍
如图所示:当中断发生时,中断请求会经过中断允许控制寄存器 IE和中断优先级控制寄存器IPH,
进入CPU内部按照中断源优先级处理不同中断请求。
上图4个外部中断INT0,INT1,INT2,INT3请求中断时,需要先设置相应的触发方式。分别由 TCON和XICON控制。Timer 0,Timer 1,Timer 2则直接指向IE的bit1,bit3,bit5位。UART指向SCON串行口控制寄存器TI和RI。
TCON:定时器/计数器T0、T1的控制寄存器
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | LE0 | IT0 |
IE1:外部中断1请求源标志位 IE1=1,外部中断1向CPU请求中断,当响应中断时,由硬件清“0”。
IE0:外部中断0请求源标志位 IE0=1,外部中断0向CPU请求中断,当响应中断时,由硬件清“0”。
IT1:外部中断1触发方式控制位。当IT1=0时,对应的外部中断触发类型为低电平触发;IT1=1时,对应的外部中断触发类型为跳变沿触发方式。
IT0:外部中断0触发方式控制位。当IT0=0时,对应的外部中断触发类型为低电平触发;IT0=1时,对应的外部中断触发类型为跳变沿触发方式。
XICON:附加的中断控制寄存器(可位寻址)
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
-- | -- | IE3 | IT3 | -- | -- | IE2 | IT2 |
IE2:外部中断1请求源标志位 IE2=1,外部中断2向CPU请求中断,当响应中断时,由硬件清“0”。
IE3:外部中断0请求源标志位 IE3=1,外部中断3向CPU请求中断,当响应中断时,由硬件清“0”。
IT2:外部中断2触发方式控制位。当IT2=0时,对应的外部中断触发类型为低电平触发;IT2=1时,对应的外部中断触发类型为跳变沿触发方式。
IT3:外部中断3触发方式控制位。当IT3=0时,对应的外部中断触发类型为低电平触发;IT3=1时,对应的外部中断触发类型为跳变沿触发方式。
SCON:串口控制寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
SMO | SMI | SM2 | REN | TB8 | RB8 | T1 | R1 |
SM0、SM1:串行口工作方式控制位。一般来说串口配置常用工作方式1,具体配置:SCON=0X50;(SM0=0,SM1=1,SM2=0,REN=1)
SMO | SMI | 工作方式 | 功能 |
0 | 0 | 方式0 | 8位同步移位寄存器 |
0 | 1 | 方式1 | 10位UART |
1 | 0 | 方式2 | 11位UART |
1 | 1 | 方式3 | 11位UART |
SM2:多机通信控制位。
多机通信是工作于方式2和方式3,当SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接收到的数据放弃。当SM2=0时,就不管第9位数据是0还是1,都会将数据送入SBUF,并发出中断申请。
REN:允许接受位。当REN=1:允许接收;当REN=0:禁止接收。
TB8:发送数据位8
在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
RB8:接收数据位8(一般配置为0)
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
TI: 发送中断标志位。在一帧数据发送完时置位。TI=1,申请中断,说明发送缓冲器SBUF已空,CPU可以发送下一帧数据。中断被响应后,TI不能自动清零,必须由软件清零。 ,
RI: 接收中断标志位。在接收到一帧有效数据后,由硬件置位。RI=1,申请中断,表示一帧数据接收结束,并已装入接收缓冲器SBUF中,CPU响应中断,取走数据。RI不能自动清零,必须由软件清零。
IE:中断允许寄存器
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
EA | -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA: CPU的总中断允许控制位。
ET2:定时/计数器T2的溢出中断允许位。
ES :串行口1中断允许位。
ET1:定时/计数器T1的溢出中断允许位。
EX1:外部中断1中断允许位。
ET0: T0的溢出中断允许位。
EX0:外部中断0中断允许位。
注:以上各bit位,都置1时,允许中断发生;都置0时,禁止中断发生。其中各个bit位置1且EA=1时,中断才会发生。EA相当于电路中的总开关。
IPH:中断优先级控制寄存器(不可位寻址)
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
PX3H | PX2H | PT2 | PSH | PT1H | PX1H | PT0H | PX0H |
IP:中断优先级控制寄存器(不可位寻址)
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
PX3 | PX2 | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
通过IPH和IP上各位配置:例如bit0位:(PX0=0,PX0H=0);(PX0=0,PX0H=1);(PX0=1,PX0H=0);(PX0=1,PX0H=1); 按从低到高优先级分被别是:(0,0);(0,1);(1,0);(1,1)即所有的中断都具有4个优先级。
通过设置IPH相应位,可将优先级分为4级;如果只更改IP或者XICON,中断优先级只有2级。
以下是中断查询序号:
2、配置中断初始化程序步骤
2.1、配置定时器0中断初始化程序步骤:
2.1配置串口中断初始化程序步骤:
3、配置定时器0中断程序,实现led2在每间隔0.5s的亮灭同时,led1每隔1s亮灭。