第 2章 单片机系统组成原理
2.1 MCS-51单片机组成原理
2.2 单片机复位电路设计
2.3 MCS-51存储器配置
2.4 定时器 /计数器
2.5 中断系统
2.1 MCS-51单片机组成原理
MCS-51单片机的组成,
1,8位 CPU
2,片内 ROM/EPROM,RAM
3,片内并行 I/O接口
4,片内 16位定时器 /计数器
5,片内中断处理系统
6,片内全双工串行 I/O口
不同型号 MCS-51单片机 CPU处理能力和指令系统完全
兼容, 只是存储器和 I/O接口的配置有所不同 。
MCS-51单片机结构
2.2 MCS-51单片机引脚
1,I/O口线功能
4个 8位并行 I/O 接口引脚 P0.0~
P0.7, P1.0~ P1.7, P2.0~ P2.7 和
P3.0~ P3.7
为多功能引脚,可自 动切换用
作数据总线、地址总线、控制总线
和或 I/O 接口外部引脚
2.控制线
ALE,地址锁存允许信号端
PSEN,外部程序存储器读选通信
号端
EA/VPP,程序存储器选择信号端
和编程电源输入端
复位:
RST/VPD,复位信号端和后备电源输入端。 输入 10ms以
上高电平脉冲,单片机复位。 VPD使用后备电源,可实
现掉电保护 。
电源
工作电源,VCC,VSS、
复位电路:
1)上电复位
2)外部信号复位 单片机
RSTK
+5V
200Ω
1K
30μF
时钟
时钟频率, 范围要求在 1.2MHz~ 12MHz之间。
一般从外部振荡器输入时钟信号。
机器周期,完成一个基本操作所需要的时间。
一个机器周期由 12个时钟周期组成。
指令周期,一条指令的执行时间。
以机器周期为单位,单周期, 双周期 和 四周期 指令。
思考题,设应用单片机晶振频率为 12MHz,
问机器周期为多少?指令周期分别为多少?
XTAL1
单片机
XTAL2
0000H
FFFFH
0000H
FFFFH
ROM 内 RAM 外 RAM
00H
FFH
寄存器

位寻址区
数据缓
冲区
SFR
20H
30H
80H
E0H
A
2.3 MCS-51寄存器配置
物理上 4个存储器地址空间:
片内 /片外程序存储器空间
片内 /片外数据存储器空间
逻辑上 3个存储器地址空间,
64KB 程序存储器
256B 片内数据存储器
64KB 片外数据存储器
一,物理空间与地址
二,程序和数据存储器逻辑空间
普林斯顿结构,程序和数据共用一个存储器逻辑空间, 统一
编址 。
哈佛结构,程序与数据分为两个独立存储器逻辑空间,
分开编址 。
三,片内 RAM寄存器
MCS-51的寄存器在片内 RAM都有映像地址。使用时,既
可用寄存器名,也可用对应单元地址。
1,片内 RAM
工作寄存器区:
字节地址,00H~ 1FH
位寻址区:
字节地址,20H~ 2FH
位地址为,00H~ 7FH
数据缓冲区 /堆栈区:
字节地址,00H~ 7FH
一般使用 30H~ 7FH
2,特殊功能寄存器 SFR
占用字节地址,80H~ FFH
位寻址寄存器:
其字节地址可被 8整除。
?专用寄存器:
A,B,PSW,DPTR,SP
?I/O接口寄存器:
P0,P1,P2,P3,SBUF、
TMOD,TCON,SCON …
实质是计数器,脉冲每一次下降沿,计数寄存器数值将
加 1。 计数的脉冲如果来源于单片机内部的晶振,由于其周期
极为准确,这时称为定时器。计数的脉冲如果来源于单片机
外部的引脚,由于其周期一般不准确,这时称为计数器。
8031 有 2个可独立控制的 16位定时器 /计数器,T0,T1。
+1计数器 溢出 中断脉冲
控制
开关
2.4 MCS-51定时器 /计数器
2.4.1 MCS-51 计数 /定时器的原理
定时器控制、状态寄存器
1)TMOD定时器方式寄存器( 89H)
1)功能选择位 C/T:
=0,定时功能,计数内部机器周期脉冲;
=1,计数功能,计数引脚 T0(T1)输入的负脉冲。
2)方式选择位 M1,M0:
3)门控方式选择位 GATE
计数器启动方式的选择
确定定时器工作方式指令:
MOV TMOD,#方式字
例:设 T0用方式 2非门控定时,T1用方式 1门控计数。
MOV TMOD,#0D2H ; 1101 0010 B
G A T E C / T M1 M0 G A T E C / T M1 M0
T1 T0
M1 M0 方式 功能描述
0 0 0 13 位
0 1 1 16 位
1 0 2 8 位自动重装
1 1 3 T0 为两个 8 位
2.4.2 定时器工作方式
由方式选择位 M1,M0设定
一, 方式 0
13位定时 /计数器 。 THx 8位和 TLx低 5位组成 13位加 1
计数器, 此种方式与 MCS- 48系列兼容, 如果不是为了兼容
的目的, 一般不用方式 0.
方式 0的全部功能, 方式 1都可以代替 。
二, 方式 1
16位定时 /计数器 。 THx8位和 TLx8位组成 16位加 1计数器
最大计数脉冲个数,1~ 65536(216),最长定时时间 (晶振 12MHz
T=1?s),1?s ~ 65536× T= 65.54ms
非门控方式:当 GATE= 0,
控制权由 TRx 决定
TRx= 1 计数开始
TRx = 0 计数停止
门控方式:当 GATE= 1,TRx= 1
控制权由 INTx 决定
INTx= 1 计数开始
INTx = 0 计数停止
启动计数方式:
三,方式 2
用于需要重复定时和计数的场合。
最大计数值,256 (28)
最大定时时间 (晶振 12MHz时 T=1?s),256?s
自动恢复初值 8位定时 /计数器。 TLx为 8位加 1计数器,
THx为 8位初值暂存器。
四,方式 3
T0分成 2个 8位定时器,TL0定时 /计数器和 TH0定时器
TL0占用 T0控制位,C/T,TR0,GATE; TH0占用 T1控制
位,TR1。 T1不能使用方式 3工作
2.4.3 计算时间常数 X(计算初值 )
计数功能,X= 2n -计数值 n,8/13/16
定时功能,X= 2n - t/T
t,定时时间( s) T,机器周期 = 12/晶振频率
如:晶振为 12MHz时,T= 12/12 MHz= 12÷( 12× 10-6)
( 秒)= 1× 10-6= 1us
一, MCS-51定时器的应用
定时器初始化编程:使用定时器工作之前, 先写入控
制寄存器, 确定好定时器工作方式 。
初始化编程格式:
MOV TMOD,# 方式字 ;选择方式
MOV THx,#XH ; 装入 Tx时间常数
MOV TLx,#XL
SETB EA ; 开 Tx中断
SETB ETx
SETB TRx ; 启动 Tx定时器 。
例:由 P1.0输出方波信号,周期为 2ms,设 fosc=12MHz。
2ms
解:每隔 1ms改变一次 P1.0的输出状态,即形成方波,用 T0非门控方式 1
定时。
计算时间常数,X = 216 - t/T = 216 –(/1000)/10-6 = 65536-1000
= 64536 = FC18H ORG 0000H
AJMP MAIN
ORG 000BH ; T0中断硬件入口地址
AJMP PT0INT ; 跳到中断服务程序
ORG 0030H
MAIN,MOV TMOD,#01H ; 中断方式
MOV TL0,#18H ; 计数初值
MOV TH0,#0FCH
SETB EA ; 开放总中断
SETB ET0 ; 开放 T0中断
SETB TR0 ; 启动定时器
HERE,SJMP HERE ; 等待中断,相当于执行其
它任务
PT0INT,MOV TL0,#18H ;中断服务程序;置初值
MOV TH0,#0FCH
CPL P1.0 ; 取反,产生方波
RETI ; 中断返回
例 P1.7驱动 LED亮 1秒灭 1秒地闪烁,设时钟频率为 12MHz。
长定时方法:增加一个软件计数器(如 R7),记录中断次数,
计满 n个中断为 1秒。
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP PT1INT
ORG 0030H
START,MOV R7,#00H
MOV TMOD,#10H
MOV TL1,#0F0H
MOV TH1,#0D8H
SETB EA
SETB ET1
SETB TR1
HERE,SJMP HERE
PT1INT,MOV TL1,#0F0H
MOV TH1,#0D8H
INC R7
CJNE R7,#10,PEND
MOV R7,#00H
CPL P1.7
PEND,RETI
例 定时器外部引脚 T0(T1)用作外部中断信号输入端。外部负脉
冲引起中断请求,选计数方式,时间常数为 FFH。
例:门控方式测量正脉冲宽度
解,INT1引脚输入被检测信号,记录在正脉冲的时间内包含
机器脉冲个数。
设脉宽小于 65.5ms
等待查询 INT0,正脉冲过后,读出 TH1TL1。
START,MOV TMOD,#90HMOV TL1,#00H
MOV TH1,#00HWAIT1,JB P3.3,WAIT1
SETB TR1WAIT2, JNB P3.3,WAIT2
WAIT3, JB P3.3,WAIT3CLR TR1
MOV R2,TL1MOV R3,TH1

TR1=1 T1启动 TR1=0
T1停止
INT1
一,中断系统 —— 重要指标
日常生活中的中断与计算机中断的比较:
某人看书 执行主程序 日常事务
电话铃响 中断信号如 INT=0 中断请求
暂停看书 暂停执行主程序 中断响应
书中作记号 当前 PC入栈 保护断点
电话谈话 执行中断程序 中断服务
继续看书 返回主程序 中断返回












2.5 中断系统
2.5.1 中断概念
所谓“中断,,是指 CPU执行正常程序时,系统中出
现特殊请求,CPU暂时中止当前的程序,转去处理更紧
急的事件,处理完毕后,CPU返回原程序的过程。
中断与子程序的最主要区别:
子程序是预先安排好的;
中断是随机发生的。
二,中断的定义,与子程序的区别
三,MCS-51中断系统内部结构
2.5.2 中断系统控制
一、中断控制寄存器
1.中断标志位, TF1,TF0,IE1,IE0,RI, TI
登记各中断源请求信号,=1,有中断请求; = 0,无中断请求 。
CPU响应中断后,该中断标志自动清零 。 TI,RI标志必须软件清零 。
2.外部中断 触发方式选择位,IT0,IT1
=1:负边沿触发中断请求; = 0:低电平触发中断请求 。
寄存器名称 D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
T CO N (88H
)
T F 1 T F 0 I E 1 I T 1 I E 0 I T 0 定时器控制
寄存器
位地址 8 F H 8 E H 8 D H 8 C H 8 B H 8 A H 8 9 H 8 8 H
S CO N ( 9 8 H ) TI RI 串行口控制
寄存器 位地址 9 F H 9 E H 9 D H 9 C H 9 B H 9 A H 9 9 H 9 8 H
IE ( A 8 H ) EA ES E T 1 E X 1 E T 0 E X 0 中断允许
寄存器 位地址 A F H A C H A B H A A H A 9 H A 8 H
IP ( B 8 H ) PS P T 1 P X 1 P T 0 P X 0 中断优先级
寄存器 位地址 B C H B B H B A H B 9 H B 8 H
二,中断允许寄存器
寄存器名称 D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
T C O N ( 8 8 H ) T F 1 T F 0 I E 1 I T 1 I E 0 I T 0定时器控制
寄存器 位地址 8 F H 8 E H 8 D H 8 C H 8 B H 8 A H 8 9 H 8 8 H
S C O N ( 9 8 H ) TI RI串行口控制
寄存器 位地址 9 F H 9 E H 9 D H 9 C H 9 B H 9 A H 9 9 H 9 8 H
IE ( A 8 H ) EA ES ET1 E X 1 ET0 E X 0中断允许
寄存器 位地址 A F H A C H A B H A A H A 9 H A 8 H
IP ( B 8 H ) PS P T 1 P X 1 P T 0 P X 0中断优先级
寄存器 位地址 B C H B B H B A H B 9 H B 8 H
中断允许控制位,EA,ES,ET1,EX1,ET0,EX0
=1开中断; = 0关中断 。
例:允许 CPU响应 INT0的中断请求
SETB EX0
SETB EA
三,中断优先寄存器
寄存器名称 D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
T C O N ( 8 8 H ) T F 1 T F 0 I E 1 I T 1 I E 0 I T 0定时器控制
寄存器 位地址 8 F H 8 E H 8 D H 8 C H 8 B H 8 A H 8 9 H 8 8 H
S C O N ( 9 8 H ) TI RI串行口控制
寄存器 位地址 9 F H 9 E H 9 D H 9 C H 9 B H 9 A H 9 9 H 9 8 H
IE ( A 8 H ) EA ES ET1 E X 1 ET0 E X 0中断允许
寄存器 位地址 A F H A C H A B H A A H A 9 H A 8 H
IP ( B 8 H ) PS P T 1 P X 1 P T 0 P X 0中断优先级
寄存器 位地址 B C H B B H B A H B 9 H B 8 H
中断优先级控制位,PS,PT1,PX1,PT0,PX0
2级优先级,=1为高优先级, = 0为低优先级 。
同一优先级别按内部查询顺序排列优先级:
高 INT0,T0,INT1,T1,SIO 低 。
2.5.3 中断响应和中断返回
一, 中断响应周期时序
每个机器周期采样中断标志位, 若有中断请求, 将在下一
个机器周期按优先级顺序进行中断查询 。
二, 各中断源中断服务程序的入口地址
中断源 中断入口地址
I N T 0 0003H
T0 0 0 0 B H
I N T 1 0013H
T1 0 0 1 B H
S I O 0023H
三, 中断响应阻断
1, 当 CPU未执行完一条指令 。
2,当有同级或高级中断服务 。
3,执行 RETI指令或访问 IE,IP
的指令后, 不能立即响应中断 。
四, 中断返回
中断返回指令,RETI= RET指令 + 通知 CPU中断服务已
结束 。
中断响应时间:
正常中断响应时间至少为 3~ 8个机器周期, 如果有同级
或高级中断服务, 将延长中断响应时间 。
2.5.4 中断处理过程(基本理解的要求)
一, 中断响应条件
1,有中断请求信号
2,系统处于开中断状态
二,中断响应过程
1,保护断点:将断点地址压入堆栈保存,即当前 PC值入
栈。
2,寻找中断源:中断服务程序硬件入口 ?PC,转入中断
服务。
3,中断处理:执行中断源所要求的程序处理段。
4,中断返回:执行 RETI指令,栈顶内容 ?PC,程序跳转
回断点处。
2.5.5 多中断源系统
当外部中断源多于中断输入引脚时,可采取以下措施:
1.用定时器计数输入信号端 T0,T1作外部中断入口引脚
2.用串行口接收端 RXD作外部中断入口引脚
3.用一个中断入口接受多个外部中断源,并加入中断查询电路。
2.5.6 处理外部中断举例
要求每次按动按键,使外接发光二极管 LED改变一次亮灭状态。
解,INT0输入按键信号,P1.0输出改变 LED状态。
一,跳变触发:每次跳变引起一次中断请求
ORG 0000H
AJMP MAIN
ORG 0003H ; 中断入口
AJMP PINT0
ORG 0100H ; 主程序
MAIN,SETB EA ; 开总允许开关
SETB EX0 ; 开 INT0中断
SETB IT0 ; 负跳变触发中断
Here,SJMP Here ; 相当于执行其
它任务
ORG 0200H ; 中断服务程序
PINT0,CPL P1.0 ; 改变 LED
RETI ; 返回主程序
单片机
INT0
P1.0 1
+5V
1.软件等待按键释放。
2.硬件清除中断信号。
二,电平触发:避免一次按键引起多次中断响应。
单片机
INT0
P1.0 1
+5VORG 0000H;
AJMP MAIN
ORG 0003H ; 中断入口
AJMP PINT0
ORG 0100H ; 主程序
MAIN,SETB EA ; 开总允许开关
SETB EX0 ; 开 INT0中断
CLR IT0 ; 低电平触发中断
Here,SJMP Here ; 相当于执行其它
任务
ORG 0200H; 中断服务程序
PINT0,CPL P1.0 ; 改变 LED
WAIT,JNB P3.2,WAIT; 等按键释放
RETI ; 返回主程序