第二章 MCS- 51系列单片机的基本结构
MCS-51单片机基本特性
? 8 位的 CPU,片内有振荡器和时钟电路,工作频率为
1~ 12MHz( Atmel 89Cxx为 0~ 24MHz)
? 片内有 128/256字节 RAM
? 片内有 0K/4K/8K字节 程序存储器 ROM
? 可寻址片外 64K字节 数据存储器 RAM
? 可寻址片外 64K字节 程序存储器 ROM
? 片内 21/26个 特殊功能寄存器 ( SFR)
? 4个 8位 的并行 I/O口 ( PIO)
? 1个 全双工串行口 ( SIO/UART)
? 2/3个 16位 定时器 /计数器 ( TIMER/COUNTER)
? 可处理 5/6个 中断源,两级 中断优先级
? 内置 1个 布尔处理器 和 1个 布尔累加器 ( Cy)
? MCS-51指令集含 111条指令
MCS-51系列单片机配置一览表
系列
片内存储器(字节) 定时器
计数器
并行
I/O
串行
I/O
中
断
源
片内 ROM 片内
RAM无 有 ROM 有 EPROM
Intel
MCS-51
子系列
8031
80C31
8051
80C51
(4K字节 )
8751
87C51
(4K字节 )
128
字节 2x16 4x8位 1 5
Intel
MCS-52
子系列
8032
80C32
8052
80C52
(8K字节 )
8752
87C52
(8K字节 )
256
字节 3x16 4x8位 1 6
ATEML
89C系列
(常用型 )
1051(1K)/ 2051(2K)/ 4051(4K)
( 20条引脚 DIP封装) 128 2 15 1 5
89C51(4K)/ 89C52(8K)
( 40条引脚 DIP封装)
128/
256 2/3 32 1 5/6
MCS-51单片机的外部引脚及功能
MCS-51单片机 40脚
Vcc,GND 2
XTAL1,XTAL2 2
RESET 1
EA/Vpp 1
ALE/PROG 1
PSEN 1
P0.0— P0.7 8
P1.0— P1.7 8
P2.0— P2.7 8
P3.0— P3.7 8
单片机的引脚 (晶振端)
? Vcc,GND:正电源端与接地端 (+5V/3.3V/2.7V)
? XTAL1,XTAL2,片内振荡电路输入 /输出端
20~ 100pfx2 1~ 12MHz( MCS-51)
0~ 24MHz( Atmel-89C)
XTAL1
XTAL2
也可以由 XTAL2
端接入外部时钟,
此时应将 XTAL1
接地,
XTAL1
XTAL2
外部时钟
通常 外接
一个晶振
两个电容
控制引脚
引脚 RST/vPD:时钟电路工作后,加上两个机器周期的高电
平,单片机将复位。 单片机运行出错或进入死循环时,可
按复位键重新运行。
复位后,引脚由高电平变为低电平时,单片机从 0号单元取
指,开始执行程序。
复用功能:将 vPD接 +5V备用电源,一但 Vcc电位突然下降或断
电,能保护片内 RAM中的信息不被丢失,使复电后能正常工
作。
ALE/PROG,地址锁存允许信号 /编程脉冲输入端。
当单片机访问外部存储器时,P0口输出的低八位地址由 ALE
输出的控制信号锁存到片外地址锁存器,P0口输出地址低 8
位后,又能与片外存储器之间传送信息。
由于 P0口作地址 /数据复用口,那么 P0口上的信息究
竟是地址还是数据完全由 ALE来定义,ALE高电平期
间,P0口上一般出现地址信息,在 ALE下降沿时,将
P0口上地址信息锁存到片外地址锁存器,在 ALE低电
平期间 P0口上一般出现指令和数据信息 。平时不访
问片外存贮器时,该端也以六分之一的时钟频率固
定输出正脉冲。因而亦可作系统中其它芯片的时钟
源。 ALE可驱动 8个 TTL门。
对于 EPROM型单片机,在 EPROM编程时,此脚用于编
程脉冲 PROG。
PSEN,片外程序存储器选通信号,低有效。
在寻址外部程序存储器时选通外部 EPROM的 读控
制端 ( OE) 。
单片机 锁存器74LS373
P0.0-P0.7
ALE
PSEN
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE
EPROM
EA/Vpp:内部和外部程序存贮器选择信号 /编程电源
输入端。
对 8051来说,当 EA为高时,CPU访问程序存贮器有两
种情况:
① 地址小于 4K时访问内部程序存贮器。
② 地址大于 4K时访问外部程序存贮器。
当 EA接地,则不使用内部程序存贮器,不管地址大
小,取指时总是访问外部程序存贮器。
片内 无 ROM时( 8031) 必须 接地 ;
片内 有 ROM时 应当 接高电平 ;
对片内有 EPROM( 8751)编程时,编程电源 +21V加到
此端。
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
功能 1,寻址外部程序存储器时 分时 作为 输出低 8位地址
和 双向 8位数据口 复用口 ;
功能 2,不接外部程序存储器时可 作为 8位 准双向 I/O口
使用。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4
Vcc
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
1
0 0
截
止
截
止
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
1)输出方式
例,MOV P0,#DATA
1
1
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
0
1 1
截
止
导
通
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
1)输出方式 P0口能驱动 8个 LSTTL门电路。
例,MOV P0,#DATA
0
0
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
=1
截
止
三态门打开,P0.X上的输入直接送内部数据总线
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
2)输入方式
例,MOV A,P0
若锁存器原保存数据 Q=0,将使 V1导通; P0.X始
终为低电平,不能输入’ 1’信号。因此,在 P0口作
输入口使用前必须先置 1。
V1
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 1) 输出地址 /数据 =0时
1
0
1
1
=0
导
通
截
止=0
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 2) 输出地址 /数据 =1时
1
1
0
0
=1
截
止
导
通=1
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口。
2
1
D Q
CK /Q
读引脚 =1
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 3) 输入数据时,输入指令将使引脚与内部总线直通
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口;不接外部程序存储器
时可作为 8位 准双向 I/O口 使用。
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口 (内置了上拉电阻)
只有一种功能:数据的输入 /输出
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 出 数据 = 1 时
1 1
0
截
止
=1
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口 (内置了上拉电阻)
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 出 数据 = 0 时
0 0
1
=0
导
通
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口( 内置了上拉电阻 )
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。 P1口能驱动 4个 LSTTL门电路。
2
1
D Q
CK /Q
读引脚 =1
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 入 数据时,要先对其写,1”
1 1
0
截
止
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口( 内置了上拉电阻 )
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
功能 1,寻址外部程序存储器时 输出高 8位地址 ;
功能 2,不接外部程序存储器时可 作为 8位 准双
向 I/O口 使用。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚
P2.X3
内部上拉电阻
Vcc
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚 P2.X
控制 =0时,此脚作通用 输出口,
输出 =1时
1
1 0 截
止3
内部上拉电阻
1 1
Vcc
=1
=0
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
作为 8位 准双向 I/O口 使用。
转换开关打到 Q端,其功能与 P1相同,作输入或输出使用,
能驱动 4个 LSTTL负载。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚 P2.X
控制 =0时,此脚作通用 输出口,
输出 =0时
0
0 1 导
通3
内部上拉电阻
0 0
Vcc
=0
=0
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
作为 8位 准双向 I/O口 使用。
转换开关打到 Q端,其功能与 P1相同,作输入或输出使用,
能驱动 4个 LSTTL负载。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制 =1
引脚 P2.X
控制 =1 时,此脚作 高 8位地址 A8— A15输出口:
当 输出 =1 时
1
0 截
止3
内部上拉电阻
1
=1
Vcc
=1
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
寻址外部程序存储器时 输出高 8位地址 。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制 =1
引脚 P2.X
0
1 导
通3
内部上拉电阻
0
=0
Vcc
=0
控制 =1 时,此脚作 高 8位地址 A8— A15输出口:
当 输出 =0 时
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
寻址外部程序存储器时 输出高 8位地址 。
一般来说,如果系统扩展了 ROM,取指的操作将连
续不断,P2口也需要不断输出高 8位地址,此时和
P0口一样,P2口也不再作通用的 I/O接口使用。
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
它 具有特定的第二功能 。在不使用它的第二功
能时它就是普通的 通用准双向 I/O口 。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
第二功能输出
引脚
P3.X3
内部上拉电阻
Vcc
第二功能输入
4
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
第二功能输出
( WR,RD,TxD)
引脚
P3.X3
内部上拉电阻
Vcc
4
第二功能输出时,内部自动 D=1
1 1
1
反相器
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
1)特定的第二功能信号输出时
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
此端自动= 1
引脚 P3.X3
内部上拉电阻
Vcc
第二功能输入 ( RxD,
T0,T1,INT0,INT1)
4
第二功能输入时,信号经
缓冲器 4 直接进入内总线
1
1
1 0 截
止
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
2)特定的第二功能信号输入时
P3口第二功能表 ( P.24 表 2- 11)
引 脚 第 二 功 能
P3.0 RxD,串行口接收数据输入端
P3.1 TxD,串行口发送数据输出端
P3.2 INT0,外部中断申请输入端 0
P3.3 INT1,外部中断申请输入端 1
P3.4 T0,外部计数脉冲输入端 0
P3.5 T1,外部计数脉冲输入端 1
P3.6 WR,写外设控制信号输出端
P3.7 RD,读外设控制信号输出端
MCS-51内部结构框图
按功能划分,由微处理器( MPU)、存储器,I/O端
口、定时器 /计数器和中断系统等 5部分组成。
一、微处理器
1,运算器
运算器由 8位算术逻辑运算单元 ALU,8位累加器
ACC,8位寄存器 B、位处理器,8位暂存寄存器 TMP1
和 TMP2等组成。
2.控制器
主要由程序计数器 PC,指令寄存器 IR,指令译码器
ID,振荡器 OSC及定时控制逻辑等组成 。 是单片机的
神经中枢, 以主频率为基准控制 MPU的时序, 发出各
种控制信号 。
3、专用寄存器组
包括程序计数器 PC、累加器 ACC、通用寄存器 B、程
序状态寄存器 PSW、堆栈指针 SP和数据寄存器 DPTR。
( 1) PC 16位的程序地址寄存器,用于存放下一条
将要执行指令在程序存储器中的地址。 PC自动加 1,
这样连续完成指令的执行过程。
一切 分支 /跳转 /调用 /中断 /复位 等操作的 本质 就是,
改变 PC 值
( 2) ACC 专门用于存放操作数或运算结果。
( 3) B 专门为乘除法设置的寄存器,在乘除法之前
用于存放乘数或除数,运算后存放乘积的高 8位或除
法的余数。
D7 D6 D5 D4 D3 D2 D1 D0
CY AC F0 RS1 RS0 OV — P
① CY,进位标志位。加减运算时有进 /借位 CY=1;否则
CY=0。
② AC,辅助进位标志。加减运算时低 4位数向高 4位有
进 /借位 AC= 1;否则 AC= 0。
③ F0:用户标志位。由用户定义的一个状态标志。
( 4) PSW 8位的标志寄存器,位于单片机内的特殊功
能寄存器区 SFR,字节地址 D0H。存放指令执行后的有
关状态信息。
⑤ OV:溢出标志位。运算结果超出 8位带符号数的表示范
围,-128~ 127,运算结果出错,则 OV= 1;否则 OV= 0。
⑥ P:奇偶标志位。 ACC中 1的个数为奇数时,P=1;偶数时
P=0。用于检验数据传输的正确性。
RS1 RS0 选择工作寄存器组
0 0 0组( 00H~ 07H)
0 1 1组( 08H~ 0FH)
1 0 2组( 10H~ 17H)
1 1 3组( 18H~ 1FH)
④ RS1 RS0:寄存器选择位。 8051共有 8个 8位工作寄存器:
R0~ R7,分为 4组,4种不同编码决定当前使用的工作
寄存器的不同区域(物理地址)。
( 5) 堆栈 指针 SP
堆栈是内存中预留出来的数据存储器 RAM的区域,用于存放
中间结果或程序执行过程中的返回地址。以, 先进后出, 的
方
式进行数据操作。其中栈底位置固定不变,操作由栈顶地址
指示,SP则用于存放栈顶地址,是一个 8位寄存器。
系统复位后,SP初始为 07H;
实际使用时设置区域为 30H~ 7FH,由专门指令访问。
( 6)数据指针 DPTR
16位的专用寄存器,由两个 8位寄存器 DPL和 DPH组成。主要
用于保存 16位地址(对外部数据存储器或外部程序存储器操
作时)。
( 7)端口 P0~ P3
专用寄存器 P0~ P3分别是 I/O口 P0~ P3的锁存器。在 MCS51
中,可以把 I/O口当作一般专用寄存器使用,端口操作指令与
访存指令统一 (采用 MOV)。
( 8)串行数据缓冲器 SBUF
由两个独立的寄存器组成,分别负责发送和接收。
( 9)定时 /计数器
MCS51中有两个 16位的 T0和 T1,它们各由两个独立的 8位寄存
器组成,TH0,TL0和 TH1,TL1。不能把 T0和 T1作为 16位寄存
器来寻址。
( 10)其他控制寄存器
IP,IE中断系统; TMOD,TCON 定时 /计数器; SCON 串行
口; PCON电源控制
MCS- 51单片机的存储器结构
几个有关的概念:
? 数据存储器 —— RAM( Random Access Memory)
? 程序存储器 —— ROM( Read Only Memory)
? 闪速存储器 —— Flash Memory( 89C51 ROM采用)
? EPROM—— 可擦除可编程 ROM
? 按字节寻址:每个字节 (8个位 )占一个地址
? 按位寻址:有的存储器每一个位就有一个地址
MCS51单片机存储器配置
? 片内 RAM 128字节( 00H— 7FH);
片内 RAM前 32个单元是工作寄存器区 (00H— 1FH)
片内 RAM有 128个可按位寻址的位,占 16个单元。
位地址编号为,00H— 7FH,分布在 20H— 2FH单元
? 片内 21个特殊功能寄存器 (SFR)除 PC外与片内 RAM
统一编址( 80H-FFH),其中:地址号能被 8整除的
SFR中的各位 也可 按位寻址 ( P.18-19)
? 可寻址片外 RAM 64K字节 ( 0000H— FFFFH)
? 可寻址片外 ROM 64K字节 ( 0000H— FFFFH EA=0)
? 片内 ROM 4K字节 ( 0000H— 0FFFH EA=1)
存储器配置 ( 片内 RAM)
? 片内 RAM 128字节 ( 00H— 7FH)
在物理地址上分为 3个不同的块:
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SFR分布在 80H-
FFH
其中 26B有定义
83个位可位寻址80H
FFH
所有的 RAM区 (包括位
寻址区、工作寄存器
区)都可以用于存放
数据,故也称为 数据
缓存寄存器
51子系列
128字节
用 MOV指令在 00H-7FH范围内字节寻址
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区 R0
R2
R1
R3
R4
R5
R6
R707H
02H
01H
00H
06H
04H
05H
03H
08H
1FH 工作寄存器区 3
工作寄存器区 2
工作寄存器区 1
工
作
寄
存
器
区
0
0FH10H
17H
18H
? 片内 RAM前 32个单元是 工作寄存器区
(00H— 1FH)
存储器配置 ( 片内 RAM)
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
27H
22H
21H
20H
26H
24H
25H
23H
28H
2FH
单元地址
07 06 05 04 03 02 01 00
0F 0E 0D 0C 0B 0A 09 08
17 16 15 14 13 12 11 10
1F 1E 1D 1C 1B 1A 19 18
27 26 25 24 23 22 21 20
2F 2E 2D 2C 2B 2A 29 28
37 36 35 34 33 32 31 30
3F 3E 3D 3C 3B 3A 39 38
47 46 45 44 43 42 41 40
7F 7E 7D 7C 7B 7A 79 78
位地址
总共
128
个可
按位
寻址
的位
? 片内 RAM中有 128个可按位寻址的位。 P20表 2- 5
位地址,00H— 7FH
分布在,20H— 2FH单元
存储器配置 ( 片内 RAM)
? 可寻址片外 RAM 64K字节 ( 0000H— FFFFH); 采用 MOVX指令字节寻址。
? 可寻址片外 ROM 64K字节 ( 0000H— FFFFH); EA=0。
? 片内 ROM 4K字节 ( 000H— FFFH); EA=1,8031无片内 ROM。
采用 MOVC指令对 ROM寻址。
FFFFH
0000H
可寻址
片外
RAM
64K
字节
FFFFH
0000H
可寻址
片外
ROM
64K
字节FFFH
000H
可寻址
片内
ROM
4K
字节
8051
7FH
00H
片内 RAM
128字节
FFH
80H
存储器配置(片外 RAM/ROM)
? 程序存储器中有 7个单元有特殊用途:
0000H单元:系统复位后 PC=0000H,从 0000H单元开始执行程序。
其它 6个单元地址作为中断矢量:
中断矢量, MCS-51单片机的 5 个中断源分别对应有各自的 中断
服务程序入口地址 —— 中断矢量
000BHTF0定时 /计数器 0(T0)
002BHTF2定时 /计数器 2(T2)
0023HRI/TI串行口接收 /发送
001BHTF1定时 /计数器 1(T1)
0013HIE1外部中断 1( INT1)
0003HIE0外部中断 0( INT0)
中断优先级中断矢量申请标志中 断 源
最高优先级
最低优先级
堆栈,
在 片内 RAM中,常常要指定一个专门的区域来
存放某些 特别的 数据,它遵循 顺序存取 和 后进
先出 (LIFO/FILO)的原则,这个 RAM区 叫 堆栈 。
功用,
1)子程序调用 和 中断服务 时 CPU自动将当前 PC
值 压栈保存,返回时自动将 PC值弹栈。
2)保护现场 /恢复现场
3)数据传输
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP
栈顶 下一个进栈的数据将存在此
数据
进栈
已经进栈的数
据存放在此
初始
SP
复位后 SP=07H,数据进栈时,首先
SP+1指向 08H单元,第一个放进堆栈
的数据将放进 08H单元,然后 SP再自
动增 1,仍指着栈顶 ……
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
从堆栈取出数据时, 取出的数据是
最近放进去的一个数据,也就是当
前栈顶的数据。然后 SP再自动减 1,
仍指着栈顶 ……
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP
栈顶 当前要出栈的数据
数据
出栈
SP-1指向下一个
将要出栈的数据
初始
SP
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
从堆栈取出数据时, 取出的数据是
最近放进去的一个数据,也就是当
前栈顶的数据。然后 SP再自动减 1,
仍指着栈顶 ……
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP-1 指向新的
栈顶,也就是下
一个将要出栈的
数据
数据
出栈
初始
SP
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
特殊功能寄存器 SFR
本质是一些具有特殊功能的 片内 RAM单元,离散分布
在 80H-FFH地址范围内。每个 SFR占一个 RAM单元。
8051/8031,21个 SFR
8052,26个 SFR (增加了 P18表 2- 4中带 *的 5个寄存器)
对于 21个 SFR,用户可以通过直接寻址方式进行字节寻
址;其中的 11个 SFR还可以进行位寻址(其最低的位地
址等于其字节地址,且其字节地址的末位都为 0H或 8H)。
注:对未定义的空闲地址的访问是无意义的;
PC 不是 一个特殊功能寄存器 SFR。
特殊功能寄存器地址及功能表
MCS-51单片机的工作方式
1、复位方式
1) 复位电路
单片机复位电路包括片内、片外两部分。外部复位
电路就是为内部复位电路提供两个机器周期以上的
高电平而设计的。 MCS-51单片机通常采用上电自动
复位和按键手动复位两种方式。如图 2-12所示。
2)单片机复位后的状态
单片机运行出错或进入死循环时,可按复位键重新
运行。 21个特殊功能寄存器复位后的状态为确定值,
如表 2-7所示。
+5V
10uF
8.2KΩ
Vcc
RST
GND
上电复位
10uF
1KΩ
Vcc
RST
GND
手动 &上电复位
10Ω
+5V
上电复位,上电瞬间,电容两端电压不能突变,此时 RST端 为高电平,
随着+ 5V通过电阻给电容充电, RST端 电位逐步降低。保持两个以上机
器周期,单片机即复位。
手动 &上电复位,只要将键按下,RST为高电平,复位有效。
8051,8031的 PC与 SFR复位状态表
寄存器 复位状态 寄存器 复位状态
PC 0000H TMOD 00H
ACC 00H TCON 00H
B 00H TH0 00H
PSW 00H TL0 00H
SP 07H TH1 00H
DPTR 0000H TL1 00H
P0-P3 FFH SCON 00H
IP XXX00000B SBUF XXH
IE 0XX00000B PCON 0XXXXXXXB
2、程序执行方式
可分为 单步执行 和 连续执行 两种方式。
( 1) 单步执行
通过控制面板上的单步执行键控制下逐条执行用户指令。
主要用于用户调试程序。单步执行方式是利用单片机外
部中断功能实现的。
( 2) 连续执行
单片机复位后,从 0000H单元执行程序;预先在 0000H单
元存放一条转移指令,跳转到 0000H-FFFFH的任一地址
连续执行 ROM中的用户程序。
3、省电工作方式
一种减少单片机功耗的工作方式,可分为:
( 1)空闲方式
通过指令 对电源控制寄存器 PCON置位,使 CPU进入休
眠状态,不工作。其他片内外设可继续工作,片内
RAM和 SFR内容保持不变,功耗降低。
由中断源发出中断请求或硬件复位退出此方式。
( 2)掉电模式
通过指令 对电源控制寄存器 PCON置位,使振荡器停
止振荡,片内所有器件停止工作,片内 RAM和 SFR内
容保持不变,功耗降低。
由硬件复位退出此模式。
MCS-51单片机的工作时序
时序,CPU执行指令时所需控制信号的时间顺序。
CPU发出的时序信号有两类:
1、用于片内各功能部件的控制
2、用于片外存储器或 I/O端口的控制
牢牢记住 以下重要概念
振荡周期,为单片机提供时钟信号的振荡源的周期 。
振荡周期 =晶振频率 fosc( 或外加频率 ) 的倒数
时钟周期:又称为状态周期 是振荡源信号经二分频
后形成的时钟脉冲信号。
1个时钟周期分为 2个振荡周期:节拍 1和节拍 2,分
别用 P1和 P2表示。
机器周期,通常将完成一个基本操作所需的时间称
为机器周期。
MCS- 51的 机器周期 由 6个时钟周期 ( 12个振荡周期 )
组成,分为 6个状态 ( S1-S6),每个状态又分为 P1和
P2两拍。则一个 机器周期 中的 12个振荡周期 可表示
为,S1P1,S1P2,…,S6P1,S6P2。
指令周期,是指 CPU执行一条指令所需要的时间。一
个指令周期通常含有 1~ 4个机器周期。
其中一个机器周期的指令称为 单周期指令 。
包含两个机器周期的指令称为 双周期指令 。
四周期指令 只有 乘法 和 除法 两条 。
MCS-51单片机各种周期的相互关系
P2 P1P1 P2
S1
P2
振荡周期
时钟周期
机器周期 机器周期
指令周期
XTAL2
(OSC)
S2 S3 S4 S5 S6 S1 S2 S4 S5S3 S6
P1 P1 P1 P1 P1 P1 P1 P1 P1 P1P2 P2 P2 P2 P2 P2 P2 P2 P2
? 若 MCS-51单片机外接晶振为 12MHz时, 则单片
机的四个周期的具体值为:
? 振荡周期= 1/12MHz= 1/12μs = 0.0833μs
? 时钟周期= 1/6μs = 0.167μs
? 机器周期= 1μs
? 指令周期= 1~ 4μs
在 MCS-51指令系统中,单字节、双字节指令占绝大多数,
三字节指令很少( 13条)。单字节或双字节指令可能是
单周期或双周期的,三字节指令是双周期的,乘除指令
是四周期的,因此,振荡频率为 12MHz时,指令执行时间
分别为 1μs, 2μs, 4μs 。
MCS-51单片机指令的取指和执行时序
图
2-
15MCS
-
51
单
片
机
典
型
指
令
的
取
指
和
执
行
时
序
再读下一
条指令
再读下一
条指令
XTAL2
(OSC)
P2
S1
ALE
读操作码 读下一个操作码 ( 丢弃 )
读第二字节
( a) 单字节, 单周期指令 例,MOV A R1
( d) 单字节, 双周期指令, 如 MOVX
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P2
S5
P2
S6
P2
S1
P1 P1 P1 P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P2
S6
P2
S1 S2
P1 P1 P1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1
P2
S1
读操作码
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1
读下一个操作码 ( 丢弃 )
( b) 双字节, 单周期指令 例,ADD A dir
( c) 单字节, 双周期指令 例,INC DPTR
读操作码
( MOVX)
读下一个操作码
( 丢弃 )
无取指无 ALE 无取指
地址 数据 ( DATA)
访问外部存储器
P2
S1
读操作码
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1
P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1
MCS-51单片机基本特性
? 8 位的 CPU,片内有振荡器和时钟电路,工作频率为
1~ 12MHz( Atmel 89Cxx为 0~ 24MHz)
? 片内有 128/256字节 RAM
? 片内有 0K/4K/8K字节 程序存储器 ROM
? 可寻址片外 64K字节 数据存储器 RAM
? 可寻址片外 64K字节 程序存储器 ROM
? 片内 21/26个 特殊功能寄存器 ( SFR)
? 4个 8位 的并行 I/O口 ( PIO)
? 1个 全双工串行口 ( SIO/UART)
? 2/3个 16位 定时器 /计数器 ( TIMER/COUNTER)
? 可处理 5/6个 中断源,两级 中断优先级
? 内置 1个 布尔处理器 和 1个 布尔累加器 ( Cy)
? MCS-51指令集含 111条指令
MCS-51系列单片机配置一览表
系列
片内存储器(字节) 定时器
计数器
并行
I/O
串行
I/O
中
断
源
片内 ROM 片内
RAM无 有 ROM 有 EPROM
Intel
MCS-51
子系列
8031
80C31
8051
80C51
(4K字节 )
8751
87C51
(4K字节 )
128
字节 2x16 4x8位 1 5
Intel
MCS-52
子系列
8032
80C32
8052
80C52
(8K字节 )
8752
87C52
(8K字节 )
256
字节 3x16 4x8位 1 6
ATEML
89C系列
(常用型 )
1051(1K)/ 2051(2K)/ 4051(4K)
( 20条引脚 DIP封装) 128 2 15 1 5
89C51(4K)/ 89C52(8K)
( 40条引脚 DIP封装)
128/
256 2/3 32 1 5/6
MCS-51单片机的外部引脚及功能
MCS-51单片机 40脚
Vcc,GND 2
XTAL1,XTAL2 2
RESET 1
EA/Vpp 1
ALE/PROG 1
PSEN 1
P0.0— P0.7 8
P1.0— P1.7 8
P2.0— P2.7 8
P3.0— P3.7 8
单片机的引脚 (晶振端)
? Vcc,GND:正电源端与接地端 (+5V/3.3V/2.7V)
? XTAL1,XTAL2,片内振荡电路输入 /输出端
20~ 100pfx2 1~ 12MHz( MCS-51)
0~ 24MHz( Atmel-89C)
XTAL1
XTAL2
也可以由 XTAL2
端接入外部时钟,
此时应将 XTAL1
接地,
XTAL1
XTAL2
外部时钟
通常 外接
一个晶振
两个电容
控制引脚
引脚 RST/vPD:时钟电路工作后,加上两个机器周期的高电
平,单片机将复位。 单片机运行出错或进入死循环时,可
按复位键重新运行。
复位后,引脚由高电平变为低电平时,单片机从 0号单元取
指,开始执行程序。
复用功能:将 vPD接 +5V备用电源,一但 Vcc电位突然下降或断
电,能保护片内 RAM中的信息不被丢失,使复电后能正常工
作。
ALE/PROG,地址锁存允许信号 /编程脉冲输入端。
当单片机访问外部存储器时,P0口输出的低八位地址由 ALE
输出的控制信号锁存到片外地址锁存器,P0口输出地址低 8
位后,又能与片外存储器之间传送信息。
由于 P0口作地址 /数据复用口,那么 P0口上的信息究
竟是地址还是数据完全由 ALE来定义,ALE高电平期
间,P0口上一般出现地址信息,在 ALE下降沿时,将
P0口上地址信息锁存到片外地址锁存器,在 ALE低电
平期间 P0口上一般出现指令和数据信息 。平时不访
问片外存贮器时,该端也以六分之一的时钟频率固
定输出正脉冲。因而亦可作系统中其它芯片的时钟
源。 ALE可驱动 8个 TTL门。
对于 EPROM型单片机,在 EPROM编程时,此脚用于编
程脉冲 PROG。
PSEN,片外程序存储器选通信号,低有效。
在寻址外部程序存储器时选通外部 EPROM的 读控
制端 ( OE) 。
单片机 锁存器74LS373
P0.0-P0.7
ALE
PSEN
P2.0-P2.4
8D 8Q
OE
A8-A12
A0-A7
D0-D7
G
EA OE
CE
EPROM
EA/Vpp:内部和外部程序存贮器选择信号 /编程电源
输入端。
对 8051来说,当 EA为高时,CPU访问程序存贮器有两
种情况:
① 地址小于 4K时访问内部程序存贮器。
② 地址大于 4K时访问外部程序存贮器。
当 EA接地,则不使用内部程序存贮器,不管地址大
小,取指时总是访问外部程序存贮器。
片内 无 ROM时( 8031) 必须 接地 ;
片内 有 ROM时 应当 接高电平 ;
对片内有 EPROM( 8751)编程时,编程电源 +21V加到
此端。
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
功能 1,寻址外部程序存储器时 分时 作为 输出低 8位地址
和 双向 8位数据口 复用口 ;
功能 2,不接外部程序存储器时可 作为 8位 准双向 I/O口
使用。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4
Vcc
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
1
0 0
截
止
截
止
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
1)输出方式
例,MOV P0,#DATA
1
1
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
0
1 1
截
止
导
通
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
1)输出方式 P0口能驱动 8个 LSTTL门电路。
例,MOV P0,#DATA
0
0
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址 /数据 控制
引脚 P0.X
3
4 0
0
=1
截
止
三态门打开,P0.X上的输入直接送内部数据总线
=0 Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
不接外部程序存储器时可作为 8位 准双向 I/O口 使用。
2)输入方式
例,MOV A,P0
若锁存器原保存数据 Q=0,将使 V1导通; P0.X始
终为低电平,不能输入’ 1’信号。因此,在 P0口作
输入口使用前必须先置 1。
V1
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 1) 输出地址 /数据 =0时
1
0
1
1
=0
导
通
截
止=0
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 2) 输出地址 /数据 =1时
1
1
0
0
=1
截
止
导
通=1
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口。
2
1
D Q
CK /Q
读引脚 =1
读锁存器
写锁
存器
内部
总线
地址 /数据 控制 =1
引脚 P0.X
3
4
控制 =1时,此脚作地址 /数据 复用口,
( 3) 输入数据时,输入指令将使引脚与内部总线直通
Vcc
单片机的引脚 ( P0口)
? P0.0— P0.7,双向 I/O (内置 场效应管 上拉)
寻址外部程序存储器时分时作为 双向 8位数据口
和 输出低 8位地址 复用口;不接外部程序存储器
时可作为 8位 准双向 I/O口 使用。
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口 (内置了上拉电阻)
只有一种功能:数据的输入 /输出
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 出 数据 = 1 时
1 1
0
截
止
=1
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口 (内置了上拉电阻)
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 出 数据 = 0 时
0 0
1
=0
导
通
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口( 内置了上拉电阻 )
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。 P1口能驱动 4个 LSTTL门电路。
2
1
D Q
CK /Q
读引脚 =1
读锁存器
写锁
存器
内部
总线
Vcc
引脚 P1.X
内部上拉电阻
输 入 数据时,要先对其写,1”
1 1
0
截
止
单片机的引脚 ( P1口)
? P1.0— P1.7,准双向 I/O口( 内置了上拉电阻 )
输出时一切照常,仅在作 输入口 用时要先对其
写,1” 。
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
功能 1,寻址外部程序存储器时 输出高 8位地址 ;
功能 2,不接外部程序存储器时可 作为 8位 准双
向 I/O口 使用。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚
P2.X3
内部上拉电阻
Vcc
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚 P2.X
控制 =0时,此脚作通用 输出口,
输出 =1时
1
1 0 截
止3
内部上拉电阻
1 1
Vcc
=1
=0
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
作为 8位 准双向 I/O口 使用。
转换开关打到 Q端,其功能与 P1相同,作输入或输出使用,
能驱动 4个 LSTTL负载。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制
引脚 P2.X
控制 =0时,此脚作通用 输出口,
输出 =0时
0
0 1 导
通3
内部上拉电阻
0 0
Vcc
=0
=0
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
作为 8位 准双向 I/O口 使用。
转换开关打到 Q端,其功能与 P1相同,作输入或输出使用,
能驱动 4个 LSTTL负载。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制 =1
引脚 P2.X
控制 =1 时,此脚作 高 8位地址 A8— A15输出口:
当 输出 =1 时
1
0 截
止3
内部上拉电阻
1
=1
Vcc
=1
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
寻址外部程序存储器时 输出高 8位地址 。
2
1
D Q
CK /Q
读引脚 =0
读锁存器
写锁
存器
内部
总线
地址高 8位 控制 =1
引脚 P2.X
0
1 导
通3
内部上拉电阻
0
=0
Vcc
=0
控制 =1 时,此脚作 高 8位地址 A8— A15输出口:
当 输出 =0 时
单片机的引脚 ( P2口)
? P2.0— P2.7,双向 I/O (内置了上拉电阻)
寻址外部程序存储器时 输出高 8位地址 。
一般来说,如果系统扩展了 ROM,取指的操作将连
续不断,P2口也需要不断输出高 8位地址,此时和
P0口一样,P2口也不再作通用的 I/O接口使用。
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
它 具有特定的第二功能 。在不使用它的第二功
能时它就是普通的 通用准双向 I/O口 。
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
第二功能输出
引脚
P3.X3
内部上拉电阻
Vcc
第二功能输入
4
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
第二功能输出
( WR,RD,TxD)
引脚
P3.X3
内部上拉电阻
Vcc
4
第二功能输出时,内部自动 D=1
1 1
1
反相器
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
1)特定的第二功能信号输出时
2
1
D Q
CK /Q
读引脚
读锁存器
写锁
存器
内部
总线
此端自动= 1
引脚 P3.X3
内部上拉电阻
Vcc
第二功能输入 ( RxD,
T0,T1,INT0,INT1)
4
第二功能输入时,信号经
缓冲器 4 直接进入内总线
1
1
1 0 截
止
单片机的引脚 ( P3口)
? P3.0— P3.7,双功能口 (内置了上拉电阻)
2)特定的第二功能信号输入时
P3口第二功能表 ( P.24 表 2- 11)
引 脚 第 二 功 能
P3.0 RxD,串行口接收数据输入端
P3.1 TxD,串行口发送数据输出端
P3.2 INT0,外部中断申请输入端 0
P3.3 INT1,外部中断申请输入端 1
P3.4 T0,外部计数脉冲输入端 0
P3.5 T1,外部计数脉冲输入端 1
P3.6 WR,写外设控制信号输出端
P3.7 RD,读外设控制信号输出端
MCS-51内部结构框图
按功能划分,由微处理器( MPU)、存储器,I/O端
口、定时器 /计数器和中断系统等 5部分组成。
一、微处理器
1,运算器
运算器由 8位算术逻辑运算单元 ALU,8位累加器
ACC,8位寄存器 B、位处理器,8位暂存寄存器 TMP1
和 TMP2等组成。
2.控制器
主要由程序计数器 PC,指令寄存器 IR,指令译码器
ID,振荡器 OSC及定时控制逻辑等组成 。 是单片机的
神经中枢, 以主频率为基准控制 MPU的时序, 发出各
种控制信号 。
3、专用寄存器组
包括程序计数器 PC、累加器 ACC、通用寄存器 B、程
序状态寄存器 PSW、堆栈指针 SP和数据寄存器 DPTR。
( 1) PC 16位的程序地址寄存器,用于存放下一条
将要执行指令在程序存储器中的地址。 PC自动加 1,
这样连续完成指令的执行过程。
一切 分支 /跳转 /调用 /中断 /复位 等操作的 本质 就是,
改变 PC 值
( 2) ACC 专门用于存放操作数或运算结果。
( 3) B 专门为乘除法设置的寄存器,在乘除法之前
用于存放乘数或除数,运算后存放乘积的高 8位或除
法的余数。
D7 D6 D5 D4 D3 D2 D1 D0
CY AC F0 RS1 RS0 OV — P
① CY,进位标志位。加减运算时有进 /借位 CY=1;否则
CY=0。
② AC,辅助进位标志。加减运算时低 4位数向高 4位有
进 /借位 AC= 1;否则 AC= 0。
③ F0:用户标志位。由用户定义的一个状态标志。
( 4) PSW 8位的标志寄存器,位于单片机内的特殊功
能寄存器区 SFR,字节地址 D0H。存放指令执行后的有
关状态信息。
⑤ OV:溢出标志位。运算结果超出 8位带符号数的表示范
围,-128~ 127,运算结果出错,则 OV= 1;否则 OV= 0。
⑥ P:奇偶标志位。 ACC中 1的个数为奇数时,P=1;偶数时
P=0。用于检验数据传输的正确性。
RS1 RS0 选择工作寄存器组
0 0 0组( 00H~ 07H)
0 1 1组( 08H~ 0FH)
1 0 2组( 10H~ 17H)
1 1 3组( 18H~ 1FH)
④ RS1 RS0:寄存器选择位。 8051共有 8个 8位工作寄存器:
R0~ R7,分为 4组,4种不同编码决定当前使用的工作
寄存器的不同区域(物理地址)。
( 5) 堆栈 指针 SP
堆栈是内存中预留出来的数据存储器 RAM的区域,用于存放
中间结果或程序执行过程中的返回地址。以, 先进后出, 的
方
式进行数据操作。其中栈底位置固定不变,操作由栈顶地址
指示,SP则用于存放栈顶地址,是一个 8位寄存器。
系统复位后,SP初始为 07H;
实际使用时设置区域为 30H~ 7FH,由专门指令访问。
( 6)数据指针 DPTR
16位的专用寄存器,由两个 8位寄存器 DPL和 DPH组成。主要
用于保存 16位地址(对外部数据存储器或外部程序存储器操
作时)。
( 7)端口 P0~ P3
专用寄存器 P0~ P3分别是 I/O口 P0~ P3的锁存器。在 MCS51
中,可以把 I/O口当作一般专用寄存器使用,端口操作指令与
访存指令统一 (采用 MOV)。
( 8)串行数据缓冲器 SBUF
由两个独立的寄存器组成,分别负责发送和接收。
( 9)定时 /计数器
MCS51中有两个 16位的 T0和 T1,它们各由两个独立的 8位寄存
器组成,TH0,TL0和 TH1,TL1。不能把 T0和 T1作为 16位寄存
器来寻址。
( 10)其他控制寄存器
IP,IE中断系统; TMOD,TCON 定时 /计数器; SCON 串行
口; PCON电源控制
MCS- 51单片机的存储器结构
几个有关的概念:
? 数据存储器 —— RAM( Random Access Memory)
? 程序存储器 —— ROM( Read Only Memory)
? 闪速存储器 —— Flash Memory( 89C51 ROM采用)
? EPROM—— 可擦除可编程 ROM
? 按字节寻址:每个字节 (8个位 )占一个地址
? 按位寻址:有的存储器每一个位就有一个地址
MCS51单片机存储器配置
? 片内 RAM 128字节( 00H— 7FH);
片内 RAM前 32个单元是工作寄存器区 (00H— 1FH)
片内 RAM有 128个可按位寻址的位,占 16个单元。
位地址编号为,00H— 7FH,分布在 20H— 2FH单元
? 片内 21个特殊功能寄存器 (SFR)除 PC外与片内 RAM
统一编址( 80H-FFH),其中:地址号能被 8整除的
SFR中的各位 也可 按位寻址 ( P.18-19)
? 可寻址片外 RAM 64K字节 ( 0000H— FFFFH)
? 可寻址片外 ROM 64K字节 ( 0000H— FFFFH EA=0)
? 片内 ROM 4K字节 ( 0000H— 0FFFH EA=1)
存储器配置 ( 片内 RAM)
? 片内 RAM 128字节 ( 00H— 7FH)
在物理地址上分为 3个不同的块:
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SFR分布在 80H-
FFH
其中 26B有定义
83个位可位寻址80H
FFH
所有的 RAM区 (包括位
寻址区、工作寄存器
区)都可以用于存放
数据,故也称为 数据
缓存寄存器
51子系列
128字节
用 MOV指令在 00H-7FH范围内字节寻址
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区 R0
R2
R1
R3
R4
R5
R6
R707H
02H
01H
00H
06H
04H
05H
03H
08H
1FH 工作寄存器区 3
工作寄存器区 2
工作寄存器区 1
工
作
寄
存
器
区
0
0FH10H
17H
18H
? 片内 RAM前 32个单元是 工作寄存器区
(00H— 1FH)
存储器配置 ( 片内 RAM)
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
27H
22H
21H
20H
26H
24H
25H
23H
28H
2FH
单元地址
07 06 05 04 03 02 01 00
0F 0E 0D 0C 0B 0A 09 08
17 16 15 14 13 12 11 10
1F 1E 1D 1C 1B 1A 19 18
27 26 25 24 23 22 21 20
2F 2E 2D 2C 2B 2A 29 28
37 36 35 34 33 32 31 30
3F 3E 3D 3C 3B 3A 39 38
47 46 45 44 43 42 41 40
7F 7E 7D 7C 7B 7A 79 78
位地址
总共
128
个可
按位
寻址
的位
? 片内 RAM中有 128个可按位寻址的位。 P20表 2- 5
位地址,00H— 7FH
分布在,20H— 2FH单元
存储器配置 ( 片内 RAM)
? 可寻址片外 RAM 64K字节 ( 0000H— FFFFH); 采用 MOVX指令字节寻址。
? 可寻址片外 ROM 64K字节 ( 0000H— FFFFH); EA=0。
? 片内 ROM 4K字节 ( 000H— FFFH); EA=1,8031无片内 ROM。
采用 MOVC指令对 ROM寻址。
FFFFH
0000H
可寻址
片外
RAM
64K
字节
FFFFH
0000H
可寻址
片外
ROM
64K
字节FFFH
000H
可寻址
片内
ROM
4K
字节
8051
7FH
00H
片内 RAM
128字节
FFH
80H
存储器配置(片外 RAM/ROM)
? 程序存储器中有 7个单元有特殊用途:
0000H单元:系统复位后 PC=0000H,从 0000H单元开始执行程序。
其它 6个单元地址作为中断矢量:
中断矢量, MCS-51单片机的 5 个中断源分别对应有各自的 中断
服务程序入口地址 —— 中断矢量
000BHTF0定时 /计数器 0(T0)
002BHTF2定时 /计数器 2(T2)
0023HRI/TI串行口接收 /发送
001BHTF1定时 /计数器 1(T1)
0013HIE1外部中断 1( INT1)
0003HIE0外部中断 0( INT0)
中断优先级中断矢量申请标志中 断 源
最高优先级
最低优先级
堆栈,
在 片内 RAM中,常常要指定一个专门的区域来
存放某些 特别的 数据,它遵循 顺序存取 和 后进
先出 (LIFO/FILO)的原则,这个 RAM区 叫 堆栈 。
功用,
1)子程序调用 和 中断服务 时 CPU自动将当前 PC
值 压栈保存,返回时自动将 PC值弹栈。
2)保护现场 /恢复现场
3)数据传输
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP
栈顶 下一个进栈的数据将存在此
数据
进栈
已经进栈的数
据存放在此
初始
SP
复位后 SP=07H,数据进栈时,首先
SP+1指向 08H单元,第一个放进堆栈
的数据将放进 08H单元,然后 SP再自
动增 1,仍指着栈顶 ……
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
从堆栈取出数据时, 取出的数据是
最近放进去的一个数据,也就是当
前栈顶的数据。然后 SP再自动减 1,
仍指着栈顶 ……
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP
栈顶 当前要出栈的数据
数据
出栈
SP-1指向下一个
将要出栈的数据
初始
SP
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
从堆栈取出数据时, 取出的数据是
最近放进去的一个数据,也就是当
前栈顶的数据。然后 SP再自动减 1,
仍指着栈顶 ……
00H
20H
2FH
7FH
1FH
30H
80H
FFH
52子系列才
有的 RAM区
普通 RAM区
位寻址区
工作寄存器区
SP-1 指向新的
栈顶,也就是下
一个将要出栈的
数据
数据
出栈
初始
SP
堆栈区由特殊功能寄存器 堆栈指针 SP管理
堆栈区可以安排在 RAM区任意位置,一般不安排在
工作寄存器区和可按位寻址的 RAM区,通常 放在 RAM
区的 靠后 的位置。
特殊功能寄存器 SFR
本质是一些具有特殊功能的 片内 RAM单元,离散分布
在 80H-FFH地址范围内。每个 SFR占一个 RAM单元。
8051/8031,21个 SFR
8052,26个 SFR (增加了 P18表 2- 4中带 *的 5个寄存器)
对于 21个 SFR,用户可以通过直接寻址方式进行字节寻
址;其中的 11个 SFR还可以进行位寻址(其最低的位地
址等于其字节地址,且其字节地址的末位都为 0H或 8H)。
注:对未定义的空闲地址的访问是无意义的;
PC 不是 一个特殊功能寄存器 SFR。
特殊功能寄存器地址及功能表
MCS-51单片机的工作方式
1、复位方式
1) 复位电路
单片机复位电路包括片内、片外两部分。外部复位
电路就是为内部复位电路提供两个机器周期以上的
高电平而设计的。 MCS-51单片机通常采用上电自动
复位和按键手动复位两种方式。如图 2-12所示。
2)单片机复位后的状态
单片机运行出错或进入死循环时,可按复位键重新
运行。 21个特殊功能寄存器复位后的状态为确定值,
如表 2-7所示。
+5V
10uF
8.2KΩ
Vcc
RST
GND
上电复位
10uF
1KΩ
Vcc
RST
GND
手动 &上电复位
10Ω
+5V
上电复位,上电瞬间,电容两端电压不能突变,此时 RST端 为高电平,
随着+ 5V通过电阻给电容充电, RST端 电位逐步降低。保持两个以上机
器周期,单片机即复位。
手动 &上电复位,只要将键按下,RST为高电平,复位有效。
8051,8031的 PC与 SFR复位状态表
寄存器 复位状态 寄存器 复位状态
PC 0000H TMOD 00H
ACC 00H TCON 00H
B 00H TH0 00H
PSW 00H TL0 00H
SP 07H TH1 00H
DPTR 0000H TL1 00H
P0-P3 FFH SCON 00H
IP XXX00000B SBUF XXH
IE 0XX00000B PCON 0XXXXXXXB
2、程序执行方式
可分为 单步执行 和 连续执行 两种方式。
( 1) 单步执行
通过控制面板上的单步执行键控制下逐条执行用户指令。
主要用于用户调试程序。单步执行方式是利用单片机外
部中断功能实现的。
( 2) 连续执行
单片机复位后,从 0000H单元执行程序;预先在 0000H单
元存放一条转移指令,跳转到 0000H-FFFFH的任一地址
连续执行 ROM中的用户程序。
3、省电工作方式
一种减少单片机功耗的工作方式,可分为:
( 1)空闲方式
通过指令 对电源控制寄存器 PCON置位,使 CPU进入休
眠状态,不工作。其他片内外设可继续工作,片内
RAM和 SFR内容保持不变,功耗降低。
由中断源发出中断请求或硬件复位退出此方式。
( 2)掉电模式
通过指令 对电源控制寄存器 PCON置位,使振荡器停
止振荡,片内所有器件停止工作,片内 RAM和 SFR内
容保持不变,功耗降低。
由硬件复位退出此模式。
MCS-51单片机的工作时序
时序,CPU执行指令时所需控制信号的时间顺序。
CPU发出的时序信号有两类:
1、用于片内各功能部件的控制
2、用于片外存储器或 I/O端口的控制
牢牢记住 以下重要概念
振荡周期,为单片机提供时钟信号的振荡源的周期 。
振荡周期 =晶振频率 fosc( 或外加频率 ) 的倒数
时钟周期:又称为状态周期 是振荡源信号经二分频
后形成的时钟脉冲信号。
1个时钟周期分为 2个振荡周期:节拍 1和节拍 2,分
别用 P1和 P2表示。
机器周期,通常将完成一个基本操作所需的时间称
为机器周期。
MCS- 51的 机器周期 由 6个时钟周期 ( 12个振荡周期 )
组成,分为 6个状态 ( S1-S6),每个状态又分为 P1和
P2两拍。则一个 机器周期 中的 12个振荡周期 可表示
为,S1P1,S1P2,…,S6P1,S6P2。
指令周期,是指 CPU执行一条指令所需要的时间。一
个指令周期通常含有 1~ 4个机器周期。
其中一个机器周期的指令称为 单周期指令 。
包含两个机器周期的指令称为 双周期指令 。
四周期指令 只有 乘法 和 除法 两条 。
MCS-51单片机各种周期的相互关系
P2 P1P1 P2
S1
P2
振荡周期
时钟周期
机器周期 机器周期
指令周期
XTAL2
(OSC)
S2 S3 S4 S5 S6 S1 S2 S4 S5S3 S6
P1 P1 P1 P1 P1 P1 P1 P1 P1 P1P2 P2 P2 P2 P2 P2 P2 P2 P2
? 若 MCS-51单片机外接晶振为 12MHz时, 则单片
机的四个周期的具体值为:
? 振荡周期= 1/12MHz= 1/12μs = 0.0833μs
? 时钟周期= 1/6μs = 0.167μs
? 机器周期= 1μs
? 指令周期= 1~ 4μs
在 MCS-51指令系统中,单字节、双字节指令占绝大多数,
三字节指令很少( 13条)。单字节或双字节指令可能是
单周期或双周期的,三字节指令是双周期的,乘除指令
是四周期的,因此,振荡频率为 12MHz时,指令执行时间
分别为 1μs, 2μs, 4μs 。
MCS-51单片机指令的取指和执行时序
图
2-
15MCS
-
51
单
片
机
典
型
指
令
的
取
指
和
执
行
时
序
再读下一
条指令
再读下一
条指令
XTAL2
(OSC)
P2
S1
ALE
读操作码 读下一个操作码 ( 丢弃 )
读第二字节
( a) 单字节, 单周期指令 例,MOV A R1
( d) 单字节, 双周期指令, 如 MOVX
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P2
S5
P2
S6
P2
S1
P1 P1 P1 P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P2
S6
P2
S1 S2
P1 P1 P1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1
P2
S1
读操作码
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1
读下一个操作码 ( 丢弃 )
( b) 双字节, 单周期指令 例,ADD A dir
( c) 单字节, 双周期指令 例,INC DPTR
读操作码
( MOVX)
读下一个操作码
( 丢弃 )
无取指无 ALE 无取指
地址 数据 ( DATA)
访问外部存储器
P2
S1
读操作码
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1
P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1 P2
S3
P1 P2
S4
P1 P2
S5
P1 P2
S6
P1 P2
S1
P1 P2
S2
P1