1
第 5章 80C51的中断系统及定时 /计数器
5.1 80C51的中断系统
5.2 80C51的中断处理过程
5.3 80C51的定时 /计数器
2
5.1 80C51的中断系统
5.1.1 80C51的中断系统结构
一、中断的概念
计算机具有实时处理能力,能对外界发生的事件进
行及时处理,这是依靠它们的中断系统来实现的。
CPU在处理某一事件 A时,发生了另一事件 B请求 CPU
迅速去处理( 中断发生 ); CPU暂时中断当前的工作,
转去处理事件 B( 中断响应和中断服务 );待 CPU将事
件 B处理完毕后,再回到原来事件 A被中断的地方继续
处理事件 A( 中断返回 ),这一过程称为 中断 。
3
引起 CPU中断的根源,称为中断源。中断源向 CPU提
出的中断请求。 CPU暂时中断原来的事务 A,转去处理事
件 B。对事件 B处理完毕后,再回到原来被中断的地方(即
断点),称为中断返回。实现上述中断功能的部件称为中
断系统(中断机构)。
主 程 序 A
响 应
返 回
断 点
R E T I


中 断 服 务 程 序 B
4
随着计算机技术的应用,人们发现中断技
术不仅解决了快速主机与慢速 I/O设备的数据
传送问题,而且还具有如下优点:
?分时操作 。 CPU可以分时为多个 I/O设备服
务,提高了计算机的利用率;
?实时响应 。 CPU能够及时处理应用系统的
随机事件,系统的实时性大大增强;
?可靠性高 。 CPU具有处理设备故障及掉电
等突发性事件的能力,从而使系统可靠性提
高。
5
二,80C51中断系统的结构
80C51的中断系统有 5个中断源,2个优先
级,可实现二级中断嵌套 。
E X 0
E A P X 0
0
1
E T 0
P T 0
0
1
E X 1
P X 1
0
1
E T 1
P T 1
0
1
E S
P S
0
1
≥ 1
R I
T I
S C O N
T C O N
I E 0
T F 0
I E 1
T F 1
1
0
1
0
1
I T 0
I T 1
I N T 0
I N T 1
T 0
T 1
R X
T X
I E
I P
1
1
1
1
1
1
1
1
0
硬 件 查 询










中 断 入 口
中 断 入 口




中 断 源
中 断 源
6
5.1.2 80C51的中断源
一、中断源
1,( P3.2)。可由 IT0(TCON.0)选择其为低电平有效
还是下降沿有效。当 CPU检测到 P3.2引脚上出现有效的中
断信号时,中断标志 IE0(TCON.1)置 1,向 CPU申请中断。
2,( P3.3)。可由 IT1(TCON.2)选择其为低电平有效
还是下降沿有效。当 CPU检测到 P3.3引脚上出现有效的中
断信号时,中断标志 IE1(TCON.3)置 1,向 CPU申请中断。
3,TF0( TCON.5),片内定时 /计数器 T0溢出中断请求标
志。当定时 /计数器 T0发生溢出时,置位 TF0,并向 CPU申
请中断。
4,TF1( TCON.7),片内定时 /计数器 T1溢出中断请求标
志。当定时 /计数器 T1发生溢出时,置位 TF1,并向 CPU申
请中断。
5,RI( SCON.0)或 TI( SCON.1),串行口中断请求标志。
当串行口接收完一帧串行数据时置位 RI或当串行口发送完
一帧串行数据时置位 TI,向 CPU申请中断。
INT0
INT1
7
二, 中断请求标志
1,TCON的中断标志
IT0( TCON.0),外部中断 0触发方式控制位。
当 IT0=0时,为电平触发方式。
当 IT0=1时,为边沿触发方式(下降沿有效)。
IE0( TCON.1),外部中断 0中断请求标志位。
IT1( TCON.2),外部中断 1触发方式控制位。
IE1( TCON.3),外部中断 1中断请求标志位。
TF0( TCON.5),定时 /计数器 T0溢出中断请求标志位。
TF1( TCON.7),定时 /计数器 T1溢出中断请求标志位。
8
2,SCON的中断标志
?RI( SCON.0),串行口接收中断标志位。当允
许串行口接收数据时,每接收完一个串行帧,由
硬件置位 RI。同样,RI必须由软件清除。
?TI( SCON.1),串行口发送中断标志位。当
CPU将一个发送数据写入串行口发送缓冲器时,
就启动了发送过程。每发送完一个串行帧,由硬
件置位 TI。 CPU响应中断时,不能自动清除 TI,
TI必须由软件清除。
9
一、中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是
由中断允许寄存器 IE控制的。
5.1.3 80C51中断的控制
?EX0(IE.0),外部中断 0允许位;
?ET0(IE.1),定时 /计数器 T0中断允许位;
?EX1(IE.2),外部中断 0允许位;
?ET1(IE.3),定时 /计数器 T1中断允许位;
?ES( IE.4),串行口中断允许位;
?EA (IE.7),CPU中断允许(总允许)位。
10
二、中断优先级控制
80C51单片机有两个中断优先级,即可实现二级中断服务
嵌套。每个中断源的中断优先级都是由中断优先级寄存器 IP中
的相应位的状态来规定的 。
?PX0( IP.0),外部中断 0优先级设定位;
?PT0( IP.1),定时 /计数器 T0优先级设定位;
?PX1( IP.2),外部中断 0优先级设定位;
?PT1( IP.3),定时 /计数器 T1优先级设定位;
?PS ( IP.4),串行口优先级设定位。
11
同一优先级中的中断申请不止一个时,则有中
断优先权排队问题。同一优先级的中断优先权排队,
由中断系统硬件确定的自然优先级形成,其排列如
所示:
12
80C51单片机的中断优先级有三条原则:
?CPU同时接收到几个中断时,首先响应优先级别最高
的中断请求。
?正在进行的中断过程不能被新的同级或低优先级的中
断请求所中断。
?正在进行的低优先级中断服务,能被高优先级中断请
求所中断。
为了实现上述后两条原则,中断系统内部设有两个
用户不能寻址的优先级状态触发器 。其中一个置 1,表
示正在响应高优先级的中断,它将阻断后来所有的中
断请求;另一个置 1,表示正在响应低优先级中断,它
将阻断后来所有的低优先级中断请求。
13
5.2 80C51单片机中断处理过程
一、中断响应条件
CPU响应中断的条件是:
? 中断源有中断请求;
? 此中断源的中断允许位为 1;
? CPU开中断(即 EA=1)。
同时满足时,CPU才有可能响应中断 。
5.2.1 中断响应条件和时间
14
CPU执行程序过程中,在每个机器周期
的 S5P2期间,中断系统对各个中断源进行
采样 。这些采样值在下一个机器周期内按
优先级和内部顺序被依次查询。
如果某个中断标志在上一个机器周期的
S5P2时被置成了 1,那么它将于现在的查
询周期中及时被发现。接着 CPU便执行一
条由中断系统提供的硬件 LCALL指令,转
向被称作中断向量的特定地址单元,进入
相应的中断服务程序。
15
遇以下任一条件,硬件将受阻,不产生 LCALL指令:
?CPU正在处理同级或高 优先级中断;
?当前查询 的机器周期 不是所执行指令的最后一个机器
周期 。即在完成所执行指令前,不会响应中断,从而保
证指令在执行过程中不被打断;
?正在执行 的指令为 RET,RETI或任何访问 IE或 IP寄存
器的指令。即只有在这些指令后面至少再执行一条指令
时才能接受中断请求。
若由于上述条件的阻碍中断未能得到响应,当条件
消失时该中断标志却已不再有效,那么该中断将不被响
应。就是说,中断标志曾经有效,但未获响应,查询过
程在下个机器周期将重新进行 。
16
二、中断响应时间
某中断的响应时序如图:
S1
保 护 断 点, 长 调 用 至 入 口 中 断 服 务
S2
S3 S4 S5 S6 S1 S2
S3 S4 S5 S6 S1 S2
S3 S4 S5
S6 S1
S2
S3 S4 S5 S6
S1
S2
S3
S4 S5 S6
标 志 查 询
标 志
锁 存
ε
中 断
有 效
M1 M2 M3 M4 M5
?若 M1周期的 S5P2前某中断生效,在 S5P2期间其中
断请求被锁存到相应的标志位中去; M2恰逢指令的
最后一个机器周期,且该指令不是 RETI或访问 IE、
IP的指令。于是,M3和 M4便可以执行硬件 LCALL
指令,M5周期将进入了中断服务程序。
?80C51的中断响应时间(从标志置 1到进入相应的中
断服务),至少要 3个完整的机器周期。
17
?将相应的优先级状态触发器置 1(以阻断
后来的同级或低级的中断请求)。
?执行一条硬件 LCALL指令,即把程序计
数器 PC的内容压入堆栈保存,再将相应的
中断服务程序的入口地址送入 PC。
?执行中断服务程序。
中断响应过程的前两步是由中断系统内部
自动完成的,而中断服务程序则要由用户
编写程序来完成。
5.2.2 中断响应过程
18
5.2.3 中断返回
RETI指令的具体功能是:
?将中断响应时压入堆栈保存的断点地址从栈
顶弹出送回 PC,CPU从原来中断的地方继续
执行程序;
? 将相应中断优先级状态触发器清 0,通知中
断系统,中断服务程序已执行完毕。
注意,不能用 RET指令代替 RETI指令。在中
断服务程序中 PUSH指令与 POP指令必须成对
使用,否则不能正确返回断点 。
19
若外部中断定义为电平触发方式,中断标志位
的状态随 CPU在每个机器周期采样到的外部中断
输入引脚的电平变化而变化,这样能提高 CPU对
外部中断请求的响应速度。但外部中断源若有请求,
必须把有效的 低电平保持到请求获得响应时为止,
不然就会漏掉; 而在中断服务程序结束之前,中断
源又必须撤消其有效的低电平,否则中断返回之后
将再次产生中断。
电平触发方式适合于外部中断输入以低电平输入且
中断服务程序能清除外部中断请求源的情况。例如,
并行接口芯片 8255的中断请求线在接受读或写操
作后即被复位,因此,以其去请求电平触发方式的
中断比较方便。
20
若外部中断定义为边沿触发方式,在相继连续的两
次采样中,一个周期采样到外部中断输入为高电平,
下一个周期采样到为低电平,则在 IE0或 IE1中将锁存
一个逻辑 1。即便是 CPU暂时不能响应,中断申请标
志也不会丢失,直到 CPU响应此中断时才清零。这
样,为保证下降沿能被可靠地采样到,外中断引脚上
的高低电平(负脉冲的宽度)均至少要保持一个机器
周期 (若晶振为 12MHz时,为 1微秒)。
边沿触发方式适合于以负脉冲形式输入的外部中断
请求,如 ADC0809的转换结束标志信号 EOC为正脉
冲,经反相后就可以作为 80C51的中断输入。
21
5.2.4 中断程序举例
22
ORG 0000H
START,LJMP MAIN ;跳转到主程序
ORG 0003H
LJMP INTO ;转向中断服务程序
ORG 0030H ;主程序
MAIN,CLR IT0 ;设为电平触发方式
SETB EA ; CPU开放中断
SETB EX0 ;允许中断
MOV DPTR,#1000H ;设置数据区地址指针
… …
ORG 0200H ;中断服务程序
INT0,PUSH PSW ;保护现场
PUSH ACC
CLR P3.0 ;由 P3.0输出 0
NOP
NOP
SETB P3.0 ;由 P3.0输出 1,撤除
MOV A,P1 ;输入数据
MOVX @DPTR,A ;存入数据存储器
INC DPTR ;修改数据指针,指向下一个单元
… …
POP ACC ;恢复现场
POP PSW
RETI ;中断返回
23
例 多外部中断源的系统示例。
设有 5个外部中断源,中断优先级排队顺序为:
XI0,XI1,XI2,XI3,XI4。试设计它们与 80C51单
片机的接口。
24
ORG 0003H
LJMP INSE0 ;转外部中断 0服务程序入口
ORG 0013H
LJMP INSE1 ;转外部中断 1服务程序入口
… …
… …
INSE0,PUSH PSW ; XI0中断服务程序
PUSH ACC
… …
… …
POP ACC
POP PSW
RETI
25
INSE1,PUSH PSW ;中断服务程序
PUSH ACC
JB P1.0,DV1 ; P1.0为 1,转 XI1中断服务程序
JB P1.1,DV2 ; P1.1为 1,转 XI2中断服务程序
JB P1.2,DV3 ; P1.2为 1,转 XI3中断服务程序
JB P1.3,DV4 ; P1.3为 1,转 XI4中断服务程序
INRET,POP ACC
POP PSW
RETI
DV1,… … ; XI1中断服务程序
AJMP INRET
DV2,… … ; XI2中断服务程序
AJMP INRET
DV3,… … ; XI3中断服务程序
AJMP INRET
DV4,… … ; XI4中断服务程序
AJMP INRET
26
5.3 80C51的定时 /计数器
实现定时功能,比较方便的办法是利用单片
机内部的定时 /计数器 。也可以采用下面三种
方法:
?软件定时,软件定时不占用硬件资源,但占用了
CPU时间,降低了 CPU的利用率。
?采用时基电路定时,例如采用 555电路,外接必要
的元器件(电阻和电容),即可构成硬件定时电路。
但在硬件连接好以后,定时值与定时范围不能由软
件进行控制和修改,即不可编程。
?采用可编程芯片定时,这种定时芯片的定时值及
定时范围很容易用软件来确定和修改,此种芯片定
时功能强,使用灵活。在单片机的定时 /计数器不够
用时,可以考虑进行扩展。
27
5.3.1 定时 /计数器的结构和工作原理
一、定时 /计数器的结构
定时 /计数器的实质是加 1计数器( 16位),由高 8位和低 8
位两个寄存器组成。 TMOD是定时 /计数器的工作方式寄存
器,确定工作方式和功能; TCON是控制寄存器,控制 T0、
T1的启动和停止及设置溢出标志 。
G
A
T
E
C
/
T
M
1
M
0
G
A
T
E
C
/
T
M
1
M
0
T H 1 T L 1 T H 0 T L 0
T 1 方 式
T 0 方 式
T 1 引 脚
T 0 引 脚
机 器 周
期 脉 冲
内 部 总 线
T M O D
T C O N
外 部 中 断 相 关 位
T
F
1
T
R
1
T
F
0
T
R
0
28
二、定时 /计数器的工作原理
加 1计数器输入的计数脉冲有两个来源,一个是由
系统的时钟振荡器输出脉冲经 12分频后送来;一个
是 T0或 T1引脚输入的外部脉冲源。每来一个脉冲
计数器加 1,当加到计数器为全 1时,再输入一个脉
冲就使计数器回零,且计数器的溢出使 TCON中
TF0或 TF1置 1,向 CPU发出中断请求(定时 /计数
器中断允许时)。如果定时 /计数器工作于定时模
式,则表示定时时间已到;如果工作于计数模式,
则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加
1计数器的计数值 。
29
?设置为定时器模式时,加 1计数器是对内部机器周期
计数( 1个机器周期等于 12个振荡周期,即计数频率
为晶振频率的 1/12)。 计数值 N乘以机器周期 Tcy就
是定时时间 t 。
?设置为 计数器模式时,外部事件计数脉冲由 T0或 T1
引脚输入到计数器。在每个机器周期的 S5P2期间采
样 T0,T1引脚电平。当某周期采样到一高电平输入,
而下一周期又采样到一低电平时,则计数器加 1,更
新的计数值在下一个机器周期的 S3P1期间装入计数
器。由于检测一个从 1到 0的下降沿需要 2个机器周期,
因此要求被采样的电平至少要维持一个机器周期。当
晶振频率为 12MHz时,最高计数频率不超过 1/2MHz,
即计数脉冲的周期要大于 2 微秒 。
30
5.3.2 定时 /计数器的控制
80C51单片机定时 /计数器的工作由两个特殊功
能寄存器控制。 TMOD用于设置其工作方式;
TCON用于控制其启动和中断申请。
一、工作方式寄存器 TMOD
工作方式寄存器 TMOD用于设置定时 /计数器的
工作方式,低四位用于 T0,高四位用于 T1。其格式
如下:
31
GATE:门控位。 GATE= 0时,只要用软件使 TCON中的
TR0或 TR1为 1,就可以启动定时 /计数器工作; GATA= 1时,
要用软件使 TR0或 TR1为 1,同时外部中断引脚或也为高电
平时,才能启动定时 /计数器工作。即此时定时器的启动条
件,加上了或引脚为高电平这一条件。
:定时 /计数模式选择位。 = 0为定时模式; =1
为计数模式。
M1M0:工作方式设置位。定时 /计数器有四种工作方式,
由 M1M0进行设置。
C/T C/TC/T
32
二、控制寄存器 TCON
TCON的低 4位用于控制外部中断,已在前面介绍。 TCON的高 4位用于
控制定时 /计数器的启动和中断申请。其格式如下:
?TF1( TCON.7),T1溢出中断请求标志位。 T1计数溢出时由硬件自
动置 TF1为 1。 CPU响应中断后 TF1由硬件自动清 0。 T1工作时,CPU
可随时查询 TF1的状态。所以,TF1可用作查询测试的标志。 TF1也可
以用软件置 1或清 0,同硬件置 1或清 0的效果一样。
?TR1( TCON.6),T1运行控制位。 TR1置 1时,T1开始工作; TR1置
0时,T1停止工作。 TR1由软件置 1或清 0。所以,用软件可控制定时 /
计数器的启动与停止。
?TF0( TCON.5),T0溢出中断请求标志位,其功能与 TF1类同。
?TR0( TCON.4),T0运行控制位,其功能与 TR1类同。
33
5.3.3 定时 /计数器的工作方式
一、方式 0
方式 0为 13位计数,由 TL0的低 5位(高 3位未用)和 TH0
的 8位组成。 TL0的低 5位溢出时向 TH0进位,TH0溢出时,
置位 TCON中的 TF0标志,向 CPU发出中断请求。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
0
0
机 器 周 期
T H 0 T L 0
8 位 5 位
溢 出
T C O N
T M O D
D 0
D 7
D 7
D 0
申 请
中 断
1
34
定时器模式时 有,N= t/ Tcy
计数初值计算的公式为:
定时器的初值还可以采用计数个数直接取补法获得 。
计数模式时,计数脉冲是 T0引脚上的外部脉冲。
门控位 GATE具有特殊的作用。当 GATE=0时,经反相后使
或门输出为 1,此时仅由 TR0控制与门的开启,与门输出 1
时,控制开关接通,计数开始; 当 GATE=1时,由外中断引
脚信号控制或门的输出,此时控制 与门的开启由外中断引
脚信号和 TR0共同控制 。当 TR0=1时,外中断引脚信号引脚
的 高电平启动计数,外中断引脚信号引脚的 低电平停止计
数 。这种方式常用来测量外中断引脚上正脉冲的宽度。
13X = 2 -N
35
16X =2 -N
二、方式 1
方式 1的计数位数是 16位,由 TL0作为低 8位,TH0
作为高 8位,组成了 16位加 1计数器 。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
1
0
机 器 周 期
T H 0 T L 0
8 位 8 位
溢 出
T C O N
T M O D
D 0
D 7
D 7
D 0
申 请
中 断
计数个数与计数初值的关系为:
36
8X=2 -N
三、方式 2
方式 2为自动重装初值的 8位计数方式。
工作方式 2特别适合于用作较精确的脉冲信号发生器。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
1
0
机 器 周 期
T H 0
T L 0
8 位
溢 出
T C O N
T M O D
D 0
D 7
D 7
D 0
申 请
中 断
计数个数与计数初值的关系为,
37
四、方式 3
方式 3只适用于定时 /计数器 T0,定时器 T1处于方式 3时相当
于 TR1=0,停止计数。
工作方式 3将 T0分成为两个独立的 8位计数器 TL0和 TH0 。
T F 1
T R 1
T F 0
T R 0
G A T E
C / T
M 1
M 0
G A T E
C / T
M 1
M 0
1
&
≥ 1
1
0
T 0 引 脚
I N T 0 引 脚
1
1
机 器 周 期
T H 0
T L 0
8 位
溢 出
T C O N
T M O D
D 0 D 7
D 0
申 请
中 断
机 器 周 期
8 位
申 请
中 断
溢 出
38
5.3.4 定时 /计数器用于外部中断扩展
扩展方法是,将定时 /计数器设置为计数器方式,计数初值
设定为满程,将待扩展的外部中断源接到定时 /计数器的外部
计数引脚。从该引脚输入一个下降沿信号,计数器加 1后便产
生定时 /计数器溢出中断。
例如,利用 T0扩展一个外部中断源。将 T0设置为计数器方式,
按方式 2工作,TH0,TL0的初值均为 0FFH,T0允许中断,
CPU开放中断。 其初始化程序如下:
MOV TMOD,#06H ;置 T0为计数器方式 2
MOV TL0,#0FFH ;置计数初值
MOV TH0,#0FFH
SETB TR0 ;启动 T0工作
SETB EA ; CPU开中断
SETB ET0 ;允许 T0中断
39
5.3.5 定时 /计数器应用举例
初始化程序应完成如下工作:
?对 TMOD赋值,以确定 T0和 T1的工作方式。
?计算初值,并将其写入 TH0,TL0或 TH1,TL1。
?中断方式时,则对 IE赋值,开放中断。
?使 TR0或 TR1置位,启动定时 /计数器定时或计数。
40
例 利用定时 /计数器 T0的方式 1,产生 10ms的定时,
并使 P1.0引脚上输出周期为 20ms的方波,采用中
断方式,设系统时钟频率为 12 MHz。
解,1、计算计数初值 X:
由于晶振为 12 MHz,所以机器周期 Tcy为 1μS。
所以:
N= t/ Tcy = 10× 10- 3/1× 10- 6= 10000
X= 65536- 10000= 55536= D8F0H
即应将 D8H送入 TH0中,F0H送入 TL0中
2、求 T0的方式控制字 TMOD:
M1M0=01,GATE=0,C/T=0,可取方式控制
字为 01H;
41
ORG 0000H
LJMP MAIN ;跳转到主程序
ORG 000BH ; T0的中断入口地址
LJMP DVT0 ;转向中断服务程序
ORG 0100H
MAIN,MOV TMOD,#01H ;置 T0工作于方式 1
MOV TH0,#0D8H ;装入计数初值
MOV TL0,#0F0H
SETB ET0 ; T0开中断
SETB EA ; CPU开中断
SETB TR0 ;启动 T0
SJMP $ ;等待中断
DVT0,CPL P1.0 ; P1.0取反输出
MOV TH0,#0D8H ;重新装入计数值
MOV TL0,#0F0H
RETI ;中断返回
END
42
思考题及习题
1,80C51有几个中断源?各中断标志是如何产生的?又是如何
复位的? CPU响应各中断时,其中断入口地址是多少?
2、某系统有三个外部中断源 1,2,3,当某一中断源变低电平
时便要求 CPU处理,它们的优先处理次序由高到低为 3,2,1,
处理程序的入口地址分别为 2000H,2100H,2200H。试编写
主程序及中断服务程序(转至相应的入口即可)。
3、外部中断源有电平触发和边沿触发两种触发方式,这两种触
发方式所产生的中断过程有何不同?怎样设定?
4、定时 /计数器工作于定时和计数方式时有何异同点?
5、定时 /计数器的 4种工作方式各有何特点?
6、要求定时 /计数器的运行控制完全由 TR1,TR0确定和完全由、
高低电平控制时,其初始化编程应作何处理?