第五章 中断系统、定时器 /计数器和串行口
§ 5-1 MCS-51的中断系统
§ 5-2 定时 /计数器
§ 5-3 MCS-51单片机的串行口
§ 5-1 MCS-51的中断系统
一, 中断概述
1,中断源
中断源 指引起正在执行的程序中断, 转而执行中
断服务程序的设备或事件 。
可分为硬中断, 软中断 。
MCS-51单片机的 5个中断源,
① 外部中断 2个:,, 中断请求信号分
别由 P3.2,P3.1输入,低电平有效, 脉冲下降沿有效可
选 。
入口地址,0003H,0013H。
② 定时 /计数溢出中断 2个, T0,T1,计数溢出时置
,1”TF0,TF1位, 从而发出内部中断请求 。
入口地址,000BH,001BH。
1INT 0INT
③ 串行中断 1个,串行接收或发送完一帧数据时就产
生一个内部中断请求 RI或 TI。
入口地址,0023H。
2,中断处理过程
包含:中断请求, 中断响应, 中断服务, 中断返
回四个阶段,
① 中断请求:中断源将相应请求中断的标志位置
, 1”,表示发出请求, 并由 CPU 查询 。
② 中断响应:在一条指令的最后一个周期按优先级
顺序查询中断标志, 为, 1”并满足 响

条件 时响应 。
响应操作, 断点压栈 → 撤除中断标志 → 关闭低同级
中断允许 → 中断入口地址送 PC。
实际上响应中断的主要操作是有硬件自动产生一
条长调用指令 LCALL。
③ 中断服务:根据入口地址转中断服务程序, 包含
保护现场, 执行中断主体, 恢复现场 。
④ 中断返回,断点出栈 → 开放中断允许 → 返回原程序 。
3,中断优先级及其嵌套
优先级 2个 ---高优先级, 低优先级, 可通过 SFR
寄存器 IP设置 。
中断嵌套 原则为高优先级的中断不能被低优先
的中断所中断, 同级中断不能相互中断 。
4,中断控制的特点
① 中断是随机发生的, 并且是可编程的 。
② 通过执行特定功能的程序段而获得预定目的 。
5,MCS-51中断汇集
二, 中断控制
通过对特殊功能寄存器 TCON,SCON,IE,IP等
四个寄存器的设定而实现 。
1,中断请求控制
( 1) 定时中断, 外中断请求控制寄存器 TCON
字节地址 88H,位地址 8FH~88H,与中断请求有
关的各位表示如下,
TF1,TF0,T1/T0溢出中断请求标志 。
IE1,IE0:外中断 /请求标志 。
IT1,IT0:外中断 /触发方式定义位,, 1”— 后沿触发
( 2) 串行中断请求控制寄存器 SCON
串行中断请求由 TI,RI的逻辑, 或, 得到 。 即不

是发送标志还是接收标志, 都将发生串行中断请求 。
字节地址 98H,位地址 9FH~98H,与中断请求有
关的各位表示如下,
TI为发送中断, RI为接收中断, 为, 1”时, 请
求中断, 响应后必须由用户软件清零 。
( 3) 中断请求的撤销
中断响应后, 必须及时清除 TCON,SCON中的
已响应中断请求标志, 否则, 会引起中断的重复查
询和响应 。
① 外中断请求的撤销,
对于边沿触发方式:由于触发信号过后就消失, 撤
销自然也就是自动的 。
对于电平触发方式:需通过软硬件结合的方法来实
现撤销 。
② 定时中断请求的撤销:定时中断后, 硬件自动清
, 0”。
③ 串行中断请求的撤销:不能自动清, 0”,须用软件
的方法在中断服务子程序中进
行清, 0”。
2,中断允许控制
由 SFR寄存器 IE设置, 分二级允许控制 。 以 EA位
作为总控, 以各中断源的允许位作为分控 。
IE字节地址 A8H,位地址 AFH~A8H,与中断允
许有关的各位表示如下,
单片机复位后, ( IE) =00H,因此, 整个中断系
统为禁止状态 。
3,中断优先级控制
由 SFR寄存器 IP设置, 有 2个优先级, 相应位置
,1”,为高优先级 。 相应位置, 0”,为低优先级 。
IP字节地址 B8H,位地址 BFH~B8H,与中断允许
有关的各位表示如下,
注意,5个中断允许位全部置, 1”时, 和全部清 0效
果一样, 为同优先级中断, 按自然优先级处理, 即为
→ T0→ →T 1→ 串行口, 优先级依次从高到低 。
三, 中断应用
1,中断应用的准备工作
1INT0INT
( 1) 中断初始化设置:定义 SP,IP,IE和外中断触发
方式选择;
( 2) 中断服务程序:中断入口, 现场保护, 中断主体
程序, 恢复现场返回 。
2,应用举例
例 5-1 通过 P1.0~P1.7控制发光二极管, 输出两种节
日灯, 并利用外中断 P3.2,在两种状态之间切换 。
分析,主程序中状态:亮 1灯左移循环, 中断程序
中的状态:以 1秒间隔 8灯依次亮起, 再依次熄灭,循环
3次后返回 。
主 流程图 ( 略 ), 程序如下,
ORG 0000H
LJMP MAIN
ORG 0003H ;中断入口
LJMP 0100H
ORG 0030H
START,MOV SP,#60H
SETB IT0 ;设定下跳有效
SETB EX0 ;开中
SETB EA
MOV IP,#01H
MOV A,#01H
LOOP,MOV P1,A
RL A
LCALL DELAY
AJMP LOOP
中断服务程序流程图,
中断服务程序,
ORG 0100H
PUSH ACC
CLR A
MOV R0,#00H
LOOP1,SETB C
RLC A
MOV P1,A
LCALL DELAY
JNB ACC.7,LOOP1
LOOP2,CLR C
RLC A
MOV P1,A
LCALL DELAY
JB ACC.7,LOOP2
INC R0
CJNE R0,#03H,LOOP1
POP ACC
RET
DELAY,( 略 ) ; 1秒延时
§ 5-2 定时 /计数器
一, 定时 /计数器构成
1,定时方法
软件延时 通过执行循环而获得延时, 短时间延时;
硬件延时 由硬件电路实现延时, 长时间延时;
可编程定时 通过对系统时钟脉冲的计数而获得延时 。
2,MCS-51单片机的定时 /计数器
16位定时 /计数器 T0,T1,分别由 4个 8位计数器
组成, 均属 SFR寄存器 。
T0由 TH0,TL0构成, 字节地址为 8CH,8AH;
T1由 TH1,TL1构成, 字节地址为 8DH,8BH;
MCS-51单片机定时器结构示意图
3,MCS-51单片机定时 /计数器的功能
归根结底是计数器 。
( 1) 定时功能 对片内机器周期进行计数, 即每
个机器周期产生一个计数脉冲, 计数加 1。
( 2) 计数功能 对片外从 T0( P3.4), T1( P3.5) 引
脚输入的外部脉冲信号进行计数, 下降沿计数加 1。
二, 定时 /计数器的控制寄存器
与定时 /计数器有关的控制寄存器有 3个,
1,定时器控制寄存器 TCON( 88H)
SFR寄存器 TCON既参与定时控制又参与中断控
制, 有关定时控制的有 4位, 表示如下,
TF1/TF0:当 T1/T0的计数器计数溢出时, 该位置
,1”。
TR1/TR0,T1/T0运行控制位 。 软件将其置, 1”时, 启
动 T1/T0工作 。
2,设定定时器工作方式寄存器 TMOD( 89H)
SFR寄存器 TMOD用于 2个定时器 /计数器 T1/T0的
工作方式设定, 各位的含义表示如下,
GATE:门控位, 定义 T1/T0的启动方式, 逻辑如图,
C/,定时 /计数功能选择位 。
为, 0”,作定时器用;为, 1”,作计数器用 。
M1M0:工作方式选择位 。
00 方式 0 13位计数器
01 方式 1 16位计数器
10 方式 2 初值自动重装 8位计数器
T
11 方式 3 2个 8位计数器, 仅适用于 T0
3,中断允许控制寄存器 IE( A8H)
三, 定时器 /计数器工作方式
1,工作方式 0 M1M0=00 —— 13位计数器
( 1) 结构
由 TH0的全部 8位和 TL0的低 5位构成, 如下页图 。
当 TL0低 5位计数满时直接向 TH0进位, 并当全部 13位
计数满溢出时, TF0置, 1”。
( 2) TMOD值,
作定时器,TMOD=0000 0 0 00=00H
作计数器,TMOD=0000 0 1 00=04H
( 3) 计数初值
最大计数值为 213=8192
△ T=( 213 — 计数初值 ) × 机器周期 ( 12/fosc)
计数初值 =213 — 欲计数脉冲数 =213 — △ T/ 机器周期
2,工作方式 1 M1M0=01—— 16位计数器
方式 1时的电路逻辑结构如图所示
作定时器, TMOD=01H;
作计数器, TMOD=05H;
△ T=( 216 — 计数初值 ) × 机器周期 ( 12/fosc)
计数初值 =216 — 欲计数脉冲数 =216 — △ T/ 机器周期
例如:定时 500us,fosc=6MHz时,
初值 =216— 500/2=65536-250=65286=FF 06H
那么,TH0=FFH,TL0=06H
3,工作方式 2 M1M0=10—— 自动复位的 8位计数器
以 TL0作计数器, 而 TH0作为预置寄存器 。 当计数满溢出
时, TF0置, 1”,同时 TH0将计数初值以硬件方法自动装入 TL0。
逻辑结构, 如图所示,
作定时器, TMOD=02H;
作计数器, TMOD=06H;
最大计数值为 28=256,若 fosc=12MHz,则方式 2的最大定
时时间为 256us。 当作为定时器用时, 定时时间的计算公式,
△ T=( 28 — 计数初值 ) × 机器周期 ( 12/fosc)
计数初值 =28 — 欲计数脉冲数 =28 — △ T/ 机器周期
例如:定时 500,fosc=6MHz时, 初值 =28— 500/2=6= 06H
则,TH0=TL0=06H
4,工作方式 3 M1M0=11—— 2个 8 位计数器 ( 仅限于 T0)
在 T0方式 3下, T0,T1的设置和使用是不同的 。
( 1) T0方式 3
TL0,使用 T0原有控制资源, 功能与方式 0,1相同 。
TH0,借用 T1的 TR1,TF1,只能对片内机器周期脉冲计数,
作 8位定时器 。
T0方式 3时的 T0,T1电路逻辑结构, 如图所示
T0方式 3时的 T0初值计算完全同方式 2
( 2) T0方式 3下的 T1
T0方式 3时, T1仍然可工作于方式 0~方式 2,如
上页图所示 。 C/ 控制位仍可使 T1工作在定时器或计
数器方式, 只是由于其 TR1,TF1被 T0的 TH0占用,
因而没有计数溢出标志可供使用, 计数溢出时只能将
输出结果送至串行口, 即用作串行口波特率发生器 。
T0方式 3下的 T1方式 2,因定时初值能自动恢复,
用作波特率发生器更为合适 。
四, 定时 /计数器的应用
【 例 5-2】 已知 fosc=6MHz,利用 T1定时 500us,在 P1.0
口输出周期为 1ms的方波脉冲, 使用方式 0~方式 2编程 。
T
解,1) 方波波形如图所示,
2) 计数初值,
方式 0:计数初值 =213 — 欲计数脉冲数 =213 — △ T/ 机器周期
=213-500/2=1F06H
∴ TH1=F8H,TL1=06H
方式 1,计数初值 =216 — 欲计数脉冲数 =216 — △ T/ 机器周期
=216-500/2=FF06H
∴ TH1=FFH,TL1=06H
方式 2:计数初值 =28 — 欲计数脉冲数 =28 — △ T/ 机器周期
=28-500/2=06H
∴ TH1=TL1=06H
3) 定时到达 P1.0的翻转方法:查询方式, 中断方式
4) 流程, 程序如下,
方式 0:采用查询方式
程序,流程,
ORG 0030H
START,MOV TMOD,#00H
MOV TH1,#0F8H
MOV TL1,#06H
MOV IE,#00H
SETB TR1
WT,JNB TF1,WT
CPL P1.0
CLR TF1
MOV TH1,#0F8H
MOV TL1,#06H
SJMP WT
方式 1:采用中断方式
ORG 0000H
LJMP START
ORG 001BH
LJMP 0100H
ORG 0030H
START,MOV TMOD,#10H
MOV TH1,#0FFH
MOV TL1,#06H
MOV IE,#88H
MOV IP,#0000 1000B
SETB TR1
SJMP $
中断服务程序,
ORG 0100H
CPL P1.0
MOV TH1,#0FFH
MOV TL1,#06H
RETI
方式 2:采用中断方式
ORG 0000H
LJMP START
ORG 001BH
LJMP 0100H
ORG 0030H
START,MOV TMOD,#20H
MOV TH1,#06H
MOV TL1,#06H
MOV IE,#88H
MOV IP,#08H
SETB TR1
SJMP $
中断服务程序,
ORG 0100H
CPL P1.0
RETI
【 例 5-3】 用软件延时和定时器中断方式, 查询方式
定时的方法编程, 试设计控制六盏 LED灯的程序,
设晶振 fosc=12MHZ,要求,
1) K合上后, L1 ~ L6轮流点亮 1秒, 如此循环
2) K断开后, 全灭, 等待下次启动
3) 要求用 T0定时器, 软件程序延时两种方案实现
解,( 1) 硬件原理图及 I/O分配, 如图所示;
( 2) 用定时器 T0方式 1实现延时,
① 定时器 T0初值,
定时时间,tmax=65536× 1us=65.536ms,取 50ms
1秒延时实现,50ms延时 20次
T0 的 初值,=216-50000us/1us =15536 =3CB0H
TMOD =( 0000 0001) B =01H
② 控制流程
查询方式:通过对 TF0的查询, 获得 50ms延时, 并循环
20次, 获得 1S延时
中断方式:通过 T0溢出中断, 获得 50ms延时, 并循环 20
次, 获得 1S延时
③ 指令代码(略)
( 3)用软件程序延时
ORG 0000H
LJMP START
ORG 0030H
START,MOV P3,#04H
MOV A,#01H
LOOP1,MOV P1,#00H
WT, JB P3.2,WT
LOOP2,MOV P1,A
MOV R7,#10
DL3,MOV R6,#200
DL2,MOV R5,#125
DL1,JNB P3.2,LOOP1
DJNZ R5,DL1
DJNZ R6,DL2
DJNZ R7,DL3
JB ACC.5,JP1
RL A
AJMP LOOP2
JP1, MOV A,#01H
AJMP LOOP2
§ 5-3 MCS-51单片机的串行口
一, 串行通信基本概念
1,并行通信和串行通信
通信的基本方式,
并行通信,数据的各位同时送出 。 传送距离:小于 30米 。
串行通信,数据的各位逐位送出, 只需一对传送线即可完成传
送 。 传送距离:几米 ~几千公里 。
2,串行通信
( 1) 串行通信的数据传送方向 。
单工, 半双工, 全双工三种方式
( 2) 串行通信的工作方式
同步方式:数据按块传送, 包括同步字符, 数据块 。
异步方式:数据按字符传送, 每一个字符均按固定的字符格
式传送, 又被称为帧, 如图 。
包含字符的起始位, 数据位, 校验位, 停止位四个部分 。
3,串行通信的波特率 ( Baud rate)
( 1) 波特率:传送数据位的速率, 一般指每秒种传送二进
制代码的位数 。 单位,bps。
( 2) 通用异步接收 /发送器 ( UART),用于数据串, 并转
换的串行接口电路 。
包括串行化电路 ( 发送器 ), 并行化电路 ( 接收器 ),
控制电路 3部分 。
二, MCS-51单片机的串行口
全双工的串行口 ( P3.0,P3.1), 能同时进行发送和接
收 。 既可 作 UART用, 也可 作同步移位寄存器 使用, 还可用
于网络通信, 其 帧格式可有 8位, 10位和 11位, 并能设置各种
波特率 。
1,串行口的结构
MCS-51单片机的串
行口主要由 2个物理上独
立的串行数据缓冲器 SBUF
,输入移位寄存器和控制
器 等组成 。
还有 2个 SFR寄存器
SCON和 PCON,用于串行
口的初始化编程 。
结构如图所示 。
串行口的发送和接收是以 SBUF的名义进行 读或写, 它
们共用一个地址 99H。
发送:执行 写 命令 MOV SBUF,A指令, 发送完后使中
断标志 TI置, 1”。
接收,当 RI=0时, 置, 1”允许接收位时, 即启动接收,
并时使 RI=1。 执行 读 命令 MOV A,SBUF时, 即可从接收
SBUF取出信息并由内部总线送 CPU。
2,串行口控制寄存器
SCON用于存放串行口的控制和状态信息, PCON用于改
变串行口的通信波特率, 波特率发生器可由定时器 T1方式 2
构成 。
( 1) 串行控制寄存器 SCON
单元地址 98H,位地址 9FH~98H。 寄存器及位地址表示如下,
SCON,
( 2) 电源控制寄存器 PCON
字节地址 87H,不可位寻址 。 它的 D7位 SMOD为串行口
波特率控制位, 可由软件置位或清零 。 若 SMOD=1,则使工
作在方式 1,2,3时的波特率加倍 。
3,串行工作方式 0 —— 同步移位寄存器方式
方式设定,SM0SM1=00,通过执行 MOV SCON,#00H。
此时,RXD( P3.0),数据的发送或接收口 。
TXD( P3.1),输出同步移位脉冲 。
发送, 接收的是 8位数据, 不设起始位和停止位, 低位
在前, 波特率固定为 fosc/12。。
在串行方式 0时, 是将串行口变成并行口使用 。 并要有
串并转换芯片 74LS164,74LS165转换 。
三, MCS-51串行口方式 0驱动数码管
1,LED数码管
( 1) 结构
COM:显示器位选线 a~dp:显示器段选线
发光管驱动额定电流,10~40mA,静态取下限 。
( 2) 静态显示及其段码
静态显示:利用 8位锁存功能的 I/O口线驱动一个数码管, 多
个数码管同时显示, 需增加 I/O口线 。
段码形成:在 COM送入低电平或高电平, 然后控制个各笔
段引脚电平, 即可形成相应段码 。
【 例 5-4】,利用 P1口并行输出控制八段数码管, 设小数点暗,
采用 共阳顺序, 共阴顺序, 共阴逆序 确定 0~9的显示程序为,
解,1) 共阳顺序显示硬件结构如图,
2) 共阳顺序, 共阴顺序, 共阴逆序的段码如下,
共阳顺序段码, C0H,F9H,A4H,B0H,99H,92H,82H,
F8H,80H,90H
共阴顺序段码,3FH,06H,5BH,4FH,66H,6DH,7DH,
07H,7FH,6FH( Dp→a )
共阴逆序段码,FCH,60H,DAH,F2H,66H,B6H,BEH,
E0H,FEH,F6H( a→Dp )
2) 并行输出, 循环显示 0~9秒的显示程序,
DIR,MOV R0,#0
MOV DPTR,#TAB
LOOP,MOV A,R0
MOVC A,@ A+DPTR
MOV P1,A
LCALL DELAY
INC R0
CJNE R0,#0AH,LOOP
AJMP DIR
TAB,DB C0H,F9H,A4H
DB B0H,99H,92H
DB 82H,F8H,80H,90H
2,串行口方式 0驱动数码管
( 1) 串行口与并行口转换控制
① 串入并出移位寄存器 74LS164 图 ( a)
② 并入串出移位寄存器 74LS165 图 ( b)
( 2) 利用 74LS164驱动共阴数码管
【 例 5-5】,利用 8031串行口控制八段数码管, 设小数点暗,
采用共阴逆序, 设计循环显示 0~9秒的程序 。
解,1) 硬件结构图 ( 共阴逆序, 小数点暗 )
2) 控制流程, 程序
START,MOV SCON,#00H
MOV R0,#00H
CLR ES ;禁止中断
MOV DPTR,#TABLE
LOOP,MOV A,R0
MOVC A,@ A+DPTR
CLR TI
MOV SBUF,A
LCALL DELAY
INC R0
CJNE R0,#10,LOOP
MOV R0,#00H
AJMP LOOP
TABLE,DB 0FCH,60H,0DAH,0F2H,66H
DB 0B6H,0BEH,0E0H,0FEH,0F6H
ORG 0100H
DELAY,1秒延时程序 ( 略 )
RET
本章小结
1,定时器 /计数器的工作方式和初值设定, 方式 0~方式 2
应用和定时编程举例
2,中断及中断请求源, 特殊功能寄存器 IP,IE,简单应用
3,串行口的组成和功能, 串行口的工作方式及波特率方式 0
应用及简单编程举例
重点:掌握定时器 /计数器的初值计算及定时程序编制, 串行口
工作于方式 0的发送 /接收数据 。
难点:对 TMOD,SCON等特殊功能寄存器参数设定, 中断系
统现场保护 。