- C51单片机高效入门(第2版)
- 徐玮
- 2378字
- 2021-04-01 23:03:18
2.6 中断系统
2.6.1 中断系统结构
8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。其结构如图2-14所示。
图2-14 中断系统结构
计算机的中断系统能够加强CPU对多任务事件的处理能力。从而使它的应用范围进一步扩大。在MCS-48结构的基础上,MCS-51在增强了I/O的种类、功能和数量的同时,也增强了中断能力。MCS-51提供了5个中断源,两个中断优先级控制,可实现两个中断服务嵌套。当CPU支持中断屏蔽指令后,可将一部分或所有的中断关断,只有打开相应的中断控制位后,方可接收相应的中断请求。程序设置中断的允许或屏蔽,也可设置中断的优先级。
2.6.2 MCS-51中断源
MCS-51单片机共有5个中断源,其中2个外部中断源,3个内部中断源:
INT0:外部中断0,中断请求信号由P3.2输入。
INT1:外部中断1,中断请求信号由P3.3输入。
T0:定时/计数器0溢出中断。
T1:定时/计数器1溢出中断。
串行中断:包括串行接收中断RI和串行发送中断TI。
2.6.3 中断控制
MCS-51单片机对中断的控制主要有4个特殊功能寄存器:
定时/外部中断控制寄存器TCON;串行中断控制寄存器SCON;中断允许控制寄存器IE;中断优先级控制寄存器IP。
其中TCON和SCON只有一部分用于中断控制,通过以上4个中断控制寄存器各位进行配置,可实现各种中断控制功能。
1.定时/外部中断控制寄存器TCON(见表2-4)
表2-4 定时/外部中断控制寄存器TCON
其中断有关控制位功能如下:
IT0:外部中断0类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。当IT0=1时是边沿触发,当IT0=0时是电平触发。
IE0:外部边沿触发中断0请求标志,当引脚P.2信号有效时,触发IE0置“1”,当CPU响应该中断后,由片内硬件自动清零(只适用于边沿触发方式)。
IT1:外部中断1类型控制位,其意义和IT0一样。
IE1:外部边沿触发中断0请求标志,其意义和IE0一样。
2.串行中断控制寄存器SCON(见表2-5)
表2-5 串行中断控制寄存器SCON
各位功能如下:
RI:串行口接收中断标志。若串行口接收器允许接收,并以方式0工作,每当接收到8位数据时,RI被置1;若以方式1、2、3工作,当接收到半个停止位时,RI被置1;当串行口以方式2或3工作,且当SM2=1时,仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时,RI被置1。RI=1表示串行口接收器正向CPU申请中断。同样RI标志必须由用户软件清零。
TI:串行口发送中断标志。在串行口以方式0发送时,每当发送完8位数据后由硬件置位。如果以方式1、2、3发送时,在发送停止位的开始时TI被置1。TI=1表示串行发送器正向CPU发出中断请求,向串行口的数据缓冲器SBUF写入一个数据后就立即启动发送器继续发送。但是CPU响应中断请求后,转向执行中断服务程序时,并不清零TI,TI必须由用户的中断服务程序清零。
3.中断允许控制寄存器IE(见表2-6)
表2-6 中断允许控制寄存器IE
其各位功能如下:
EX0:外中断0中断控制位。EX1=1,允许外中断0中断;EX1=0,禁止外中断0中断。
ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断;ET1=0,禁止T0中断。
EX1:外中断1中断控制位。EX1=1,允许外中断1中断;EX1=0,禁止外中断1中断。
ET1:定时/计数器T1中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
ES:串行口中断控制位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
EA:中断总控制位。EA=1,CPU开放中断;EA=0,CPU禁止所有中断。
4.中断优先级控制寄存器IP(见表2-7)
表2-7 中断优先级控制寄存器IP
其各位功能如下:
PX0:外中断0优先级控制位。PX0=1,声明外中断0为高优先级中断;PX0=0,定义外中断0为低优先级中断。
PT0:定时器0优先级控制位。PT0=1,声明定时器0为高优先级中断;PT0=0,定义定时器0为低优先级中断。
PX1:外中断1优先级控制位。PX1=1,声明外中断1为高优先级中断;PX1=0,定义外中断1为低优先级中断。
PT1:定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断;PT1=0,定义定时器1为低优先级中断。
PS:串行口中断优先级控制位。PS=1,串行口中断声明为高优先级中断;PS=0,串行口定义为低优先级中断。
2.6.4 中断响应等待时间
正常中断响应时间至少为3~8个机器周期,如果有同级或高级中断服务,将延长中断响应时间。
2.6.5 中断撤消
中断源发出中断请求后,相应中断请求标志置“1”。CPU响应中断后,必须清除中断请求标志,否则中断响应返回后将再次进入该中断,从而进入死循环。详细说明如下:
(1)对定时/计数器T0、T1中断,CPU响应中断时就用硬件自动清除了相应的中断请求标志TF0或TF1,用户可以不必手动清除。
(2)对外部中断INT0、INT1,若采用边沿触发方式,CPU响应中断时也用硬件自动清除了相应中断请求标志IE0或IE1。
(3)对外部中断INT0、INT1,若采用电平触发方式,CPU响应中断时,虽也是用硬件自动清除了相应中断请求标志IE0或IE1,但相应引脚的低电平信号若继续保持下去,中断请求标志IE0或IE1就无法清零,也会发生再次进入中断的情况。
(4)对串行中断,CPU响应中断后并不自动清除相应的中断标志位TI或RI,用户应在串行中断服务程序中用软件清除TI或RI。
2.6.6 中断系统应用举例
C51编译器支持在C语言源程序中直接编写51单片机的中断服务程序,比汇编编写中断程序方便许多。为了能在C语言中直接编写中断服务函数,C51编译器对函数的定义有所扩展,增加了一个扩展关键字interrupt。关键字interrupt是函数定义时的一个选项,加上这个选项即可将函数定义成中断服务函数。
定义中断服务函数的一般形式为
函数类型 函数名(形式参数)[interrupt n][using n]
interrupt后面的n是中断号,n的取值范围为0~31。编译器从8n+3处产生中断向量,具体的中断号n和中断向量取决于不同的51系列单片机芯片。using n中的n表示使用的寄存器组号。在C语言中可用如下方法定义中断服务函数:
void intersvr0(void)interrupt 0 using 1//定义外部中断0,使用第一组寄存器。
51单片机常用的中断源和中断向量见表2-8。
表2-8 常用的中断源和中断向量
外部中断的应用范例:
硬件原理如图2-15所示。利用外部中断(S1)来控制P00的LED,当有外部中断时LED的状态取反。
图2-15 硬件原理
程序设计: