第六章
单片机的中断与
定时系统
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
单片机的中断与
定时系统
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