第六章
单片机的中断与
定时系统
6.1 中断的基本概念
单片机在某一时刻只能处理一个任务,当多个任务同时要
求单片机处理时,这一要求应该怎么实现呢?通过中断可以实
现多个任务的资源共享。
所谓的中断就是,当 CPU正在处理某项事务的时候,如果
外界或者内部发生了紧急事件,要求 CPU暂停正在处理工作而
去处理这个紧急事件,待处理完后,再回到原来中断的地方,
继续执行原来被中断的程序,这个过程称作中断。
从中断的定义我们可以看到中断应具备中断源、中断响应、
中断返回这样三个要素。中断源发出中断请求,单片机对中断
请求进行响应,当中断响应完成后应进行中断返回,返回被中
断的地方继续执行原来被中断的程序。
6.2.1 MCS-51单片机的中断源
1,外部中断源
外部中断 0( 2.3P
3.3P
):来自 引脚,采集到低电平或者下降
沿时,产生中断请求。
外部中断 1(
0INT
):来自 引脚,采集到低电平或者下降
沿时,产生中断请求。 1INT
2,内部中断源
定时器 ∕计数器 0(
0T
):定 时功能时,计数 脉冲来自片内;
计数功能时,计数脉冲来自片外 4.3P 引脚。发生溢出时,产生中
定时器 ∕计数器 1(
1T
):定时功能 时,计数 脉 冲来自片内;
计数功能时,计数脉冲来自片外 5.3P 引脚。发生溢出时,产生中
串行口:为完成串行数据传送而设置。单片机完成接受或发
送 一组数据时,产生中断请求。
断请求。
断请求
6.2.2 中断控制的专用寄存器
1,定时器控制寄存器( TCON)
该寄存器用于保存外部中断请求以及定时器的计数溢出。进行
字节操作时,寄存器地址为 88H。按位操作时,各位的地址为 88H
~ 8FH。寄存器的内容及位地址表示如下:
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
? IT0 和 IT1——外部中断请求触发方式控制位
IT0 ( IT1)= 1 脉冲触发方式,下降沿有效
IT0 ( IT1)= 0 电平触发方式,低电平有效
? IE0和 IE1——外中断请求标志位
当 CPU采样到
0INT
(或
1INT
)端出现有效中断请求时,IE0
( IE1)位由硬件置,1”。当中断响应完成转向中断服务程序
时,由 硬件把 IE0(或 IE1)清零。
? TR0 和 TR1——定时器运行控制位
TR0 ( TR1 )= 0 定时器 /计数器不工作
TR0 ( TR1 )= 1 定时器 /计数器开始工作
? TF0和 TF1——计数溢出标志位
当计数器产生计数溢出时,相应的溢出标志位由硬件置,1”。
当转向中断服务时,再由硬件自动清,0”。计数溢出标志位
的使用有两种情况:采用中断方式时,作中断请求标志位
来使用;采用查询方式时,作查询状态位来使用。
2,串行口控制寄存器( SCON)
进行字节操作时,寄存器地址为 98H。按位操作时,各位的 地
址为 98H~9FH。寄存器的内容及位地址表示如下:
位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI
其中与中断有关的控制位共 2位:
? TI——串行口发送中断请求标志位
当发送完一帧串行数据后,由硬件置,1”;在转向中断服务
程序 后,用软件清,0”。
? RI——串行口接收中断请求标志位
当接收完一帧串行数据后,由硬件置,1”;在转向中断服务
程序后,用软件清,0”。串行中断请求由 TI和 RI的逻辑或得
到。
3,中断允许控制寄存器( IE)
进行字节操作时,寄存器地址为 0A8H。按位操作时,各位的地
址为 0A8H~0AFH。寄存器的内容及位地址表示如下:
位地
址 0AFH 0AEH 0ADH
0AC
H 0ABH 0AAH 0A9H 0A8H
位符
号 EA / / ES ET1 EX1 ET0 EX0
其中与中断有关的控制位共 6位:
? EA——中断允许总控制位
EA= 0 中断总禁止,禁止所有中断
EA= 1 中断总允许,总允许后中断的禁止或允许由各中断
源的中断允许控制位进行设置。
? EX0和 EX1——外部中断允许控制位
EX0( EX1)= 0 禁止外部中断
EX0( EX1)= 1 允许外部中断
? ET0和 ET1——定时器 /计数器中断允许控制位
ET0( ET1)= 0 禁止定时器 /计数器中断
ET0( ET1)= 0 允许定时器 /计数器中断
? ES——串行中断允许控制位
ES=0 禁止串行中断
ES=1 允许串行中断
4,中断优先级控制寄存器( IP)
IP寄存器地址 0B8H,位地址为 0BFH~ 0B8H。寄存器的内容
及位地址表示如下:
位地
址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H
位符
号 / / / PS PT1 PX1 PT0 PX0
其中:
PX0——外部中断 0优先级设定位;
PT0——定时中断 0优先级设定位;
PX1——外部中断 1优先级设定位;
PT1——定时中断 1优先级设定位;
PS——串行中断优先级设定位。
以上各位设置为,0”时,则相应的中断源为低优先级;设置为
“1”时,则相应的中断源为高优先级。
优先级的控制原则是:
? 低优先级中断请求不能打断高优先级的中断服务;但 高优先级
中断请求可以打断低优先级的中断服务,从而实现中断嵌套。
? 如果一个中断请求已被响应,则同级的其它中断服务将被禁止。
即同级不能嵌套。
? 如果同级的多个中断同时出现,则按 CPU查询次序确定哪个中
断请求被响应。其查询次序为:外部中断 0→ 定时 中断 → 外部中
断 → 定时中断 → 串行中断。
上述四个专用寄存器的用途可以用图 6.1说明。
源码
源码
0
I N T
1
I N T
0
TF
1
TF
TI
RI
0
IE
1
IE
0
EX
0
ET
1
EX
1
ET
ES
EA
IP
优先级
查询电路
高优先级
中断请求
低优先级
中断请求
中断程序
入口
中断程序
入口
源允许 总允许
图 6.1 MCS-51中断系统
6.2.3 中断初始化与中断控制寄存器状态设置
比如,使用外部中断 0(
0INT
)和外部中断 1( 1INT ),0INT
为高优先级,电平触发方式,
1INT
为低优先级,下降沿触发方式。
则初始化程序如下:
MOV IP,#01H
MOV TCON,#04H
SETB EA
SETB EX0
SETB EX1
6.2.4 中断响应过程
1,中断采样
① 电平触发方式的外中断请求( IT0/IT1= 0)采样到高电平时,表
明没有中断请求,IE0或 IE1继续为,0”。采样到低电平时,IE0/IE1
由硬件自动置,1”,表明有外中断请求发生。
② 脉冲触发式的外中断请求( IT0/IT1= 1)在相邻的机器周期采样
到的电平由高电平变为低电平时,则 IE0/IE1由硬件自动置,1”,
否则为,0”。
2,中断查询
由 CPU测试 TCON和 SCON中的各个中断标志位的状态,确
定有那个中断源发生请求,查询时按 优先级 顺序进行查询,即
先询高优先级查询低优先级。
如果查询到有标志位为,1”,表明有中断请求发生,接着 就
从相邻的下一机器周期开始进行中断响应。
3,中断响应
当 CPU查询到中断请求时,由硬件自动产生一条 LCALL指令,
LCALL指令执行时,首先将 PC内容压入堆栈进行断点保护,再把
中断入口地址装入 PC,使程序转向相应的中断区入口地址。 LCALL
指令的形式如下:
LCALL addr16 ; addr16:中断入口地址
入口地址已由系统设定,如下:
中断源 入口地址
0003H
T0 000BH
0013H
T1 001BH
S 0023H
1INT
0INT
编写中断服务程序的格式一般如下:
ORG 0000H
SJMP MAIN
ORG 0003H
AJMP 1NJERRVP
MAIN,···
HERE,SJMP HERE
1NJERRVP,··· ;中断响应程序
RETI
并不是所有的请求都被响应,当遇到下列情况之一时不响应
这些中断请求:
( 1) CPU正在处理一个同级或者高级的中断服务
( 2)当前指令还没有执行完毕
( 3)当前指令是 RET,RETI或者是访问 IP,IE的指令,执行完
这些指令后,还必须再执行一条指令,才响应中断请求。
6.2.5 中断请求的撤销
1,定时中断请求的撤销
硬件自动把 TF0( TF1)清 0,不需要用户参与。
2,串行中断请求的撤销
需要软件清零。
3,外部中断请求的撤销
( 1)脉冲触发方式的外中断请求撤销
中断标志位的清零是自动的,脉冲信号过后就不存在了,因此其
撤销是自动的。
( 2)电平触发方式的外中断请求撤销
中断标志位的清零是自动的,但是如果低电平持续存在,在
以后的机器周期采样时,又会把中断请求标志位( IE0/IE1)置位。
为此,需要外加电路,把中断请求信号从低电平强制为高电平。
电路如图 6.2所示:
Q D0I NT
0.1P
外部中断
请求信号
8051 CPdS
图 6.2 电平触发方式的外中断请求撤销
6.2.6 MCS-51单步执行工作方式
所谓单步执行就是按一次键,CPU执行一条指令。假设利用
外部中断 0实现。需要做两项准备工作。
( 1)建立单步执行的外部电路,不按键时产生低电平,按键时产
生高电平。
( 2)设置 0INT 为电平触发方式。
编写
0INT
的中断服务程序
ORG 0000H
SJMP MAIN
ORG 0003H
WAIT1,JNB P3.2, WAIT1 ;若 P3.2为低电平,则原地踏步
WAIT2,JB P3.2, WAIT2 ;若 P3.2为高电平,则原地踏步
RETI
MAIN,MOV IE,#81H
CLR IT0
……
6.3 MCS-51单片机的定时器 /计数器
MCS-51单片机内部共有两个 16位可编程的定时器 /计数器,即
定时器 T0和定时器 T1它们既有定时功能又有计数功能。
6.3.1 结构
定时器 /计数器的基本结构如图 6.3所示。基本部件是两个 8位计
数器(其中 TH1和 TL1是 T1的计数器,TH0和 TL0是 T0的计数器)。
8051
1
TH
1
TL 0
TH
0
TL
T M O DT C O N
1
T 0T
)
1
(T
5.3
P )T(P
04.3
图 6.3 定时器 /计数器结构
在作定时器使用时,输入的时钟脉冲是由晶体振荡器的输出
经 12分频后得到的。
当它用作对外部事件计数时,接相应的外部输入引脚 T0( P3.4)
或 T1( P3.5)。
6.3.2 控制寄存器
1,定时器控制寄存器( TCON)
各位定义:
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF0/TF1,查询方式:禁止中断,软件查询 TF0的值,软件清,0”
中断方式:硬件查询 TF0的值,硬件自动清,0”
2,工作方式寄存器( TMOD)
功能:确定定时器的工作方式及功能选择。
不能位寻址,TMOD各位的定义:
T/C 1M 0M
D7 D6 D5 D4 D3 D2 D1 D0
GATE GATE
T/C 1M 0M
GATE:门控位
= 0:定时器 /计数器仅受 TR的控制
= 1:只有 INT 为高电平,且 TR=1时,定时器 /计数器才工作
T/C,功能选择位 = 0:定时功能
= 1:计数功能
1M 0M,工作方式选择位
= 00 方式 0
= 01 方式 1
= 10 方式 2
= 11 方式 3
3,中断允许控制寄存器( 1E)
0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H
EA / / ES ET1 EX1 EF0 EX0
每一位的内容在前面已作详细介绍,在此不作赘述。
查询方式时:关闭中断,使用软件查询 TF0/TF1
中断方式时:开放中断,使用硬件自动查询 TF0/TF1
6.3.3 工方式
MCS-51的定时器 /计数器共有四种工作方式。工作在方式 0、方
式 1和方式 2时,定时器 /计数器 0和定时器 /计数器 1的工作原理完全
一样,现以定时器 /计数器 0为例介绍前三种工作方式。
1,方式 0( M1M0=00)
( 1)电路逻辑结构
方式 0是 13位计数结构的工作方式,其计数器由 TH0全部 8位
和 TL0的低 5位构成。 TL0高三位弃之不用。图 6.4 是定时器 /计数
器 0工作在方式 0的逻辑结构。
晶体振荡器
0
M
1
M
TC
G A T E
12?
0
T
1TC ?
0TC ?
0
I NT
00
THTL
0
TF
0
TR
供中
断或
查询
使用
+
低五位 高八位
图 6.4 定时器 /计数器方式 0逻辑结构
当 0T/C ? 时,多 路 转换开关接通 振 荡 脉冲的 12分频输出,
13位计数器以此作为计数 脉冲,这时实现定时功能当 1T/C ? 时,
多路换开关接通计数引脚( T0),计 数 脉冲由外部引入,当计数
脉冲发生负跳变时,计数器加 1,这时实现计数功能。不管哪种功
能,当 13位计数 发生溢 出时,硬件自动把 13位清零,同时硬件置
位溢出标志位 TF0。
在这里需要说明门控位( GATE)的用途,当 GATE = 0时,或
输出 的高电平与
0INT
无关,此时与门的输出只受运行控制位 T R0控
制。如果 TR0=0,则与门输出为低电平,则模 拟开关断开,定时器
/计数 器不工作。如果 TR0= 1,则与门输出为高电平,则模 拟开关
闭合,定时器 /计数器工作。
当 GATE=1时,只有 TR0和
0INT
同时为高电平,定时器 /计数 器
才工作,否则,定时器 /计数器不工作。
( 2)定时和计数的应用
计数范围,1~ 213
计数计算公式:计数值= 213-计数初值
定时范围,1机器周期~ 213机器周期
定时计算公式:定时时间=( 213-定时初值) × 机器周期
如果晶振频率为 6MHz,则最大定时时间为:
213× 1/6MHz× 12= 214( )
2,方式 1( M1M0=01)
方式 1是 16位计数结构的工作方式,其计数器由 TH0全部 8位
和 TL0的全部 8位构成。其逻辑电路和工作情况与方式 0完全相同,
所不同的只是计数 器的位数。 MCS-51单片机之所以设置几乎完
全一 样 的方式 0和方式 1,是出于与 MCS-48单片机兼容的要求。
因为,MCS- 48单片机的定时器 /计数器是 13位的计数结构。
s?
定时和计数的应用
计数范围,1~ 216
计数计算公式:计数值= 216-计数初值
定时范围,1机器周期~ 216机器周期
定时计算公式:定时时间=( 216-定时初值) × 机器周期
如果晶振频率为 6MHz,则最大定时时间为:
216× 1/6MHz× 12= 217( )s?
【 例 6-1】 设单片机晶振频率为 6MHZ,使用 T1以工作方式 1,产生周
期为 500 s? 的等宽正方波,并由 0.1P 输出,以中断方式编程。
分析:题目的要求可用下图来表示。
0.1P
250 s? 250 s? 8051
由上图可以看出只要使 0.1P 的电位每隔 250
s?
取一次反即可。所s?

以定时时间应取 250 。
1)计算计数初值
设计数初值为 x,由定时计算公式知:
H83TL,F F H0TH
H83FF0x
B0 1 10,1 0 0 0,1 1 1 1,1 1 1 1x
D6 5 4 1 1x
s2 5 0s2)x2(
11
16
???
?
?
?
?????
2)专用寄存器的初始化
T/C 1M 0M TC/ 1M 0M
D7 D6 D5 D4 D3 D2 D1 D0
GATE GATE
所以,TMOD应设置为,10H
开放定时器 /计数器 1中断,所以 IE应设置为,88H
3) 编写程序
ORG 0000H
SJMP MAIN
ORG 001BH
AJMP INTT1
MAIN,MOV TMOD,#10H
MOV IE,#88H
MOV TH1,#0FFH
MOV TL1,#83H ;初始化
LOOP,SETB TR1 ;启动
HERE,SJMP HERE ;等待中断
AJMP LOOP
INTT1,MOV TH1,#0FFH ;中断响应程序
MOV TL1,#83H
CPL P1.0
RETI ;中断返回
3,方式 2( M1M0=10)
( 1)电路逻辑结构
电路逻辑结构如图 6.5所示,由图可以总结出方式 2具有以下特点:
晶体振荡器
0
M
1
M
TC
G A T E
12?
0
T
1TC ?
0TC ?
0
I NT
0
TL
0
TF
0
TR
中断
查询
0
TH






+
图 6.5 定时器 /计数器方式 0逻辑结构
? 8位计数器
? TL0作计数器,TH0作预置寄存器使用,计数溢出时,TH0中的
计数初值自动装入 TL0,即 TL0是一个自动恢复初值的 8位计数器。
? 在使用时,要把计数初值同时装入 TL0和 TH0中。
? 优点是提高定时精度,减少了程序的复杂程度。
( 2)定时和计数的应用
计数范围,1~ 28
计数计算公式:计数值= 28-计数初值
定时范围,1机器周期~ 28机器周期
定时计算公式:定时时间=( 28-定时初值) × 机器周期
【 例 6-2】 用定时器 1以工作方式 2实现计数,每计数 100,累加器进
行加 1操作,以查询方式编写程序。
解:
1)计算计数初值
CH9TLTH
CH9D1 5 6x
1 0 0x2
11
8
???
???
??
2)专用寄存器初始化
T/C
1M 0M
T/C 1M 0M
D7 D6 D5 D4 D3 D2 D1 D0
GATE GATE
0 1 1 0 0 0 0 0
所以,TMOD= 60H
使用查询方式,所以关闭中断,即 IE=00H
3) 程序设计
MOV IE,#00H ;禁止中断
MOV TMOD,#60H ; T1工作在方式 2,计数功能
MOV TH1,#9CH
MOV TL1,#9CH ;装载计数初值
START,SETB TR1 ;启动
DEL,JBC TF1,LOOP
AJMP DEL
LOOP,INC A ;溢出响应程序
AJMP START
4,方式 3( M1M0=11)
前面介绍的三种工作方式对两个定时器 /计数器而言,工作原
理是完全一样的。但在工作方式 3下,两个定时器工作原理却完全
不同,因此要分开介绍。
( 1)工作方式 3下的定时器 /计数器 0
在方式 3下,定时器 /计数器 0被拆为两个独立的 8位的计数器 TL
和 TH0。其中 TL0 既可以作为计数功能使用,又可以作定时功能使
用,享用定时器 / 计数器 0的运行控制位 TR0和溢出标志位 TF0。对
于 TH0,只能作定时器使用,由于定时器 / 计数器 0的运行控制
位 TR0和溢出标志位 TF0已被 TL0占用,因此 TH0占用了定时器 /计数
器 1的运行控制位 TR1和溢出标志位 TF1。即定时的启动和停止受
TR1的状态控制,而计数溢出时则置位 TF1。
( 2)工作方式 3下的定时器 /计数器 1
当定时器 /计数器 0工作在方式 3时,定时器 /计数器 1只能工
作在方式 0、方式 1和方式 2。在这种情况下定时器 /计数器 1只能
作波特率发生器使用,以确定串行通信的速率。作波特率发生
器使用时,只要设置好工作方式,便可自动运行。如果要停止
工作,只需要把定时器 /计数器 1设置在工作方式 3就可以了。因
为定时器 /计数器 1不能工作在方式 3下,如果硬把它设置在方式
3,它就会停止工作。
6.4 中断系统的应用举例
6.4.1 外部中断举例
【 例 6-3】 使用外部中断 0,当每次响应中断时,P1口依次输出高电
平,使 8个发光二极管依次循环熄灭闪烁。
1) 电路设计
8051
2.3
P
0.1
P
7.1
P
+ 5V
D0
D7
L E D 显示单元
2) 程序设计
ORG 0000H
LJMP MAIN ;转主程序
ORG 0003H ;外部中断 0入口地址
LJMP EXTER ;转中断程序
ORG 1000H
MAIN,SETB IT0 ;外部中断 0下降沿有效
SETB EX0 ;外部中断 0允许
SETB EA ;总中断允许
LOOP,AJMP LOOP ;等待中断
ORG 1050H ;中断程序入口
EXTER,MOV R2,#0FFH ;置循环次数
MOV A,#01H ;灯亮初值
FLASH,RR A ;右移一位
MOV R7,#0FFH ;定时
LOOP1,MOV R6,#0FFH
LOOP2,NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
MOV P1,A ;控制灯的亮灭
DJNZ R2,FLASH ;循环
RETI ;中断返回
END
+ 5V
2K
0.1
P
8051
6.4.2 定时器举例
【 例 6-4】 通过定时器 1来产生中断,控制 P1.0线上的脉冲输出,并经
三极管驱动扬声器,发出音调信号。
1) 电路设计
2) 程序设计
ORG 0000H
LJMP MAIN
ORG 001BH ;中断入口地址
CPL P1.0
RETI
ORG 1000H
MAIN,MOV R1,#00H
MOV R0,#23H
MOV TMOD,#20H ;定时器 1工作方式 2
MOV IE,#88H ;定时器 1允许中断
L1,MOV DPTR,#3FFFH
MOV A,R0 ;取数
INC R0 ;修改指针
MOVC A,@A+PC ;查表
JZ MAIN
MOV R1,A ;计算计数初值
MOV A,#0FFH
CLR C
SUBB A,R1
RL A
MOV TH1,A ;置计数初值
SETB TR1 ;开始计数
L2,CLR C
MOV A,DPL ;延时
SUBB A,#01H
MOV DPL,A
MOV A,DPH
SUBB A,#00H
MOV DPH,A
ORL A,DPL
JNZ L2
CLR TR1
SJMP L1
END
ORG 1031H ;歌曲“送别”编码
DB 33H,33H,3DH,33H,26H
DB 26H,26H,26H,2DH,2DH
DB 26H,2DH,33H,33H,33H
DB 33H,33H,33H,4DH,45H
DB 45H,45H45H,45H,45H
DB 45H,45H,33H,33H,3DH
DB 33H,26H,26H,26H,28H
DB 2DH,2DH,26H,26H,33H
DB 33H,33H,33H,45H,3DH