第 2章 MCS-51单片机的硬件结构片内结构如图 2-1所示,
介绍图 2-1中的各功能部件:
1.CPU(微处理器)
2.数据存储器( RAM)
片内为 128个字节( 52子系列的为 256个字节)
3.程序存储器( ROM/EPROM)
8031:无此部件;
8051:4K字节 ROM;
8751:4K字节 EPROM ;
89C51:4K字节闪存。
4.中断系统
5.定时器 /计数器
6,串行口
1个全双工的异步串行口,具有四种工作方式。
7,P1口,P2口,P3口,P0口为 4个并行 8位 I/O口。
8,特殊功能寄存器( SFR)
共有 21个,是一个具有特殊功能的 RAM区。
2.2 MCS-51的引脚
40只引脚双列直插封装( DIP)。
44只引脚方形封装方式( 4只无用)
40只引脚 按功能分为 3类,
( 1) 电源及时钟引脚,Vcc,Vss; XTAL1,XTAL2。
( 2) 控制引脚,PSEN*,EA*,ALE,RESET ( 即
RST) 。
( 3) I/O口引脚,P0,P1,P2,P3,为 4个 8位 I/O口的外部引脚 。
2.2.1 电源及时钟引脚
1,电源引脚
( 1) Vcc( 40脚 ),+5V电源;
( 2) Vss( 20脚 ),接地 。
2,时钟引脚
( 1) XTAL1( 19脚 ),如果采用外接晶体振荡器时,
此引脚应接地 。
( 2) XTAL2( 18脚),接外部晶体的另一端。
2.2.2 控制引脚提供控制信号,有的引脚还具有复用功能。
(1) RST/VPD(9脚 ):复位与备用电源 。
(2) ALE/PROG*( 30脚 ),第一功能 ALE为地址锁存允许,可驱动 8个 LS型 TTL负载 。
PROG*为本引脚的第二功能 。 为编程脉冲输入端 。
(3) PSEN* ( 29脚 ),读外部程序存储器的选通信号 。
可以驱动 8个 LS型 TTL负载 。
(4) EA*/VPP (Enable Address/Voltage Pulse of
Programing,31脚 )
EA*为内外程序存储器选择控制端。
EA*=1,访问片内程序存储器,但在 PC( 程序计数器 ) 值超过 0FFFH( 对于 8051,8751) 时,即超出片内程序存储器的 4K字节地址范围时,将自动转向执行外部程序存储器内的程序 。
EA*=0,单片机则只访问外部程序存储器 。
VPP为本引脚的第二功能。用于 施加编程电压 (例如
+21V或 +12V)。对 89C51,加在 VPP脚的编程电压为
+12V或 +5V。
2.2.3 I/O口引脚
(1) P0口,双向 8位三态 I/O口,此口为地址总线
(低 8位)及数据总线分时复用口,可驱动 8个 LS
型 TTL负载。
(2) P1口,8位准双向 I/O口,可驱动 4个 LS型 TTL
负载 。
(3) P2口,8位准双向 I/O口,与地址总线 ( 高 8
位 ) 复用,可驱动 4个 LS型 TTL负载 。
(4) P3口,8位准双向 I/O口,双功能复用口,可驱动 4个 LS型 TTL负载 。
要特别 注意准双向口与双向三态口的差别 。
当 3个准双向 I/O口作输入口使用时,要向该口先写
,1”,另外准双向 I/O口无高阻的,浮空,状态 。
2.3 MCS-51的 CPU
由 运算器 和 控制器 所构成
2.3.1 运算器对操作数进行 算术,逻辑运算和位操作 。
1.算术逻辑运算单元 ALU
2.累加器 A
使用最频繁的寄存器,也可写为 Acc。
A的作用:
( 1) 是 ALU单元的输入之一,又是运算结果的存放单元 。
( 2) 数据传送大多都通过累加器 A。 MCS-51增加了一部分可以不经过累加器的传送指令,即可加快数据的传送速度,又减少了累加器的,瓶颈堵塞,现象 。
A的进位 标志 Cy是特殊的,同时又是 位处理机的位累加器。
3.程序状态字寄存器 PSW
( 1) Cy( PSW.7) 进位标志位
( 2) Ac(PSW.6)辅助进位标志位
( 3) F0( PSW.5) 标志位由用户使用的一个状态标志位。
( 4) RS1,RS0( PSW.4,PSW.3),4组工作寄存器区选择控制位 1和位 0。
RS1 RS0 所选的 4组寄存器
0 0 0区(内部 RAM地址 00H~ 07H)
0 1 1区(内部 RAM地址 08H~ 0FH)
1 0 2区(内部 RAM地址 10H~ 17H)
1 1 3区(内部 RAM地址 18H~ 1FH)
( 5) OV( PSW.2)溢出标志位指示运算是否产生溢出。各种算术运算指令对该位的影响情况较复杂,将在第 3章介绍。
( 6) PSW.1位,保留位,未用
( 7) P(PSW.0)奇偶标志位
P=1,A中,1”的个数为奇数
P=0,A中,1”的个数为偶数
2.3.2 控制器
1,程序计数器 PC( Program Counter)
存放下一条要执行的指令在程序存储器中的地址 。
基本工作方式有以下几种:
( 1) 程序计数器 自动加 1
( 2) 执行 有条件或无条件转移 指令时,程序计数器将被置入新的数值,从而使程序的流向发生变化 。
( 3) 在执行调用 子程序调用或中断调用,完成下列操作:
① PC的现行值保护
② 将子程序的入口地址或中断向量的地址送入
PC。
2.指令寄存器 IR、指令译码器及控制逻辑电路
2.4 MCS-51存储器的结构哈佛( Har-vard)结构存储器空间可划分为 5类:
1.程序存储器
8031无内部程序存储器。
2.内部数据存储器
3.特殊功能寄存器 ( SFR-Special Function
Register)
4.位地址空间
211个可寻址位。
5.数据寄存器片外可扩展 64K字节 RAM。
2.4.1 程序存储器存放应用程序和表格之类的固定常数。
分为片内和片外两部分,由 EA*引脚上所接的电平确定。
程序存储器中的 0000H地址是系统程序的启动地址
5个单元具有特殊用途表 2-1 5种中断源的中断入口地址外中断 0 0003H
定时器 T0 000BH
外中断 1 0013H
定时器 T1 001BH
串行口 0023H
2.4.2 内部数据存储器
128个,字节地址为 00H~ 7FH。
00H~ 1FH,32个单元是 4组通用工作寄存器区
20H~ 2FH,16个单元可进行共 128位的位寻址
30H~ 7FH:用户 RAM区,只能进行字节寻址,用作数据缓冲区以及堆栈区。
2.4.3 特殊功能寄存器( SFR)
CPU对各种功能部件的控制采用特殊功能寄存器采用集中控制方式,共 21个 。
有的 SFR可进行 位寻址 。
表 2-2(P21)是 SFR的名称及其分布。
其字节地址的末位是 0H或 8H。
下面介绍 SFR块中的某些寄存器。
1.堆栈指针 SP
指示出堆栈顶部在内部 RAM块中的位置复位后,SP中的内容为 07H。
( 1)保护断点
( 2)现场保护堆栈 向上生长
2,数据指针 DPTR
高位字节寄存器用 DPH表示,低位字节寄存器用
DPL表示。
3,I/O端口 P0~ P3
P0~ P3分别为 I/O端口 P0~ P3的锁存器。
4.寄存器 B
为执行乘法和除法操作设置的 。
在不执行乘、除的情况下,可当作一个普通寄存器来使用。
5.串行数据缓冲器 SBUF
存放欲发送或已接收的数据,一个字节地址,物理上是由两个独立的寄存器组成,一个是发送缓冲器,
另一个是接收缓冲器。
6.定时器 /计数器两个 16位 定时器 /计数器 T1和 T0,各由两个独立的 8位寄存器组成,TH1,TL1,TH0,TL0,只能字节寻址,但不能把 T1或 T0当作一个 16位寄存器来寻址访问 。
2.4.4 位地址空间
211个( 128个 +83个)寻址位 。位地址范围为:
00H~ FFH。
内部 RAM的可寻址位 128个 (字节地址 20H~ 2FH)
见 表 2-3( P24) 。
特殊功能寄存器 SFR为 83个 可寻址位,见 表 2-4
( P24) 。
2.4.5 外部数据存储器最多可 外扩 64K字节 的 RAM或 I/O 。
使用各类存储器,注意几点:
(1) 地址的重叠性表 2-3
表 2-4
程序存储器( ROM)与数据存储器( RAM)全部 64K
字节地址空间重叠 )。
(2)程序存储器( ROM)与数据存储器( RAM)在使用上是严格区分的 。
(3)位地址空间共有两个区域,
(4)片外数据存储区中,RAM与 I/O端口统一编址。
所有外围 I/O端口的地址均占用 RAM地址单元,使用与访问外部数据存储器相同的传送指令。
图 2-6为各类存储器在存储器空间的位置的总结。
2.5 并行 I/O端口
4个双向的 8位并行 I/O端口 (Port),记作 P0~ P3
属于特殊功能寄存器,还可位寻址。
2.5.1 P0端口
P0口某一位的电路包括:
(1) 一个数据输出锁存器,用于数据位的锁存
(2) 两个三态的数据输入缓冲器 。
(3) 一个多路转接开关 MUX,设置多路转接开关的目的,P0口既作通用 I/O口,又可作为系统的地址 /数据线口 。
(4) 数据输出的驱动和控制电路,由两只场效应管
( FET) 组成,上面的场效应管构成上拉电路 。
P0口传送地址或数据 时,CPU发出控制信号为 高电平,
打开上面的与门,使 多路转接开关 MUX打向上边,使内部地址 /数据线与下面的场效应管处于反相接通状态 。 这时的输出驱动电路由于上下两个 FET处于反相,
形成推拉式电路结构,大大提高负载能力 。
P0口作通用的 I/O口使用 。 这时,CPU发来的,控制,
信号为 低电平,上拉场效应管截止,多路转接开关
MUX打向下边,与 D锁存器的 Q*端接通 。
( 1) 作输出口使用来自 CPU的,写入,脉冲加在 D锁存器的 CP端,内部总线上的数据写入 D锁存器,并向端口引脚 P0.x输出 。
注意:由于输出电路是漏极开路 ( 因为这时上拉场效应管截止 ),必须外接上拉电阻才能有高电平输出 。
( 2) 作输入口使用应区分,读引脚,和,读端口,( 或称,读锁存器,) 。
,读引脚,信号把下方缓冲器打开,引脚上的状态经缓冲器读入内部总线;
,读锁存器,信号打开上面的缓冲器把锁存器 Q端的状态读入内部总线 。
2.5.2 P1端口字节地址 90H,位地址 90H~ 97H。
P1口只作为通用的 I/O口使用,在电路结构上与 P0口有两点区别,
( 1) 因为 P1口只传送数据,不再需要多路转接开关
MUX。
( 2) 由于 P1口用来传送数据,因此 输出电路中有上拉电阻,这样电路的输出不是三态的,所以 P1口是准双向口 。
因此:
( 1) P1口作为输出口使用时,外电路无需再接上拉电阻 。
( 2) P1口作为输入口使用时,应先向其锁存器先写入
,1”,使输出驱动电路的 FET截止 。
2.5.3 P2端口字节地址为 A0H,位地址 A0H~ A7H。
在实际应用中,因为 P2口用于为系统提供高位地址,
有一个多路转接开关 MUX。 但 MUX的一个输入端不再是,地址 /数据,,而是单一的,地址,,因为
P2口只作为地址线使用 。
当 P2口用作为高位地址线使用时,多路转接开关应接向,地址,端 。 正因为只作为地址线使用,口的输出用不着是三态的,所以,P2口也是一个准双向口 。
P2口也可以作为通用 I/O口使用,这时,多路转接开关接向锁存器 Q端 。
2.5.4 P3端口
P3口的字节地址为 B0H,位地址为 B0H~ B7H
P3口的 第二功能 定义,应熟记 。
表 2-2 P3口的第二功能定义口引脚 第二功能
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* (外部数据存储器读选通)
第二功能信号 有 输出 和 输入 两类:
( 1)对作为 第二功能输出 的引脚,当作通用的 I/O
口使用时,电路中的,第二输出功能,线应保持高电平,与非门开通,以使锁存器的 Q端输出通路保持畅通。 当输出第二功能信号,该锁存器应预先置,1”,使与非门对,第二输出功能,信号的输出是畅通的,从而实现第二功能信号的输出。
( 2)对作为 第二功能输入 的引脚,在口线引脚的内部增加了一个缓冲器,输入的信号就从这个缓冲器的输出端取得。而作为通用的 I/O口线使用的输入,仍取自三态缓冲器的输出端。 P3口无论是作为输入口使用还是第二功能信号的输入,锁存器输出和,第二输出功能,线都应保持高电平。
2.5.5 P0~ P3端口功能总结使用中应注意的问题:
( 1) P0~ P3口都是并行 I/O口,都可用于数据的输入和输出,但 P0口和 P2口除了可进行数据的输入 /输出外,通常用来构建系统的数据总线和地址总线,
所以在电路中有一个多路转接开关 MUX,以便进行两种用途的转换 。 而 P1口和 P3口没有构建系统的数据总线和地址总线的功能,因此,在电路中没有多路转接开关 MUX。 由于 P0口可作为地址 /数据复用线使用,需传送系统的低 8位地址和 8位数据,因此
MUX的一个输入端为,地址 /数据,信号 。 而 P2口仅作为高位地址线使用,不涉及数据,所以 MUX的一个输入信号为,地址,。
( 2) 在 4个口中只有 P0口是一个真正的双向口,
P1~ P3口都是准双向口 。 原因,P0口作为系统的数据总线使用时,为保证数据的正确传送,需要解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态 。 为此,要求 P0口的输出缓冲器是一个三态门 。
在 P0口中输出三态门是由两只场效应管( FET)组成,
所以是一个真正的双向口。而其它的三个口 P1~
P3中,上拉电阻代替 P0口中的场效应管,输出缓冲器不是三态的,因此不是真正的双向口,只能称其为准双向口
( 3) P3口的口线具有第二功能,为系统提供一些控制信号 。 因此在 P3口电路增加了第二功能控制逻辑 。
这是 P3口与其它各口的不同之处 。
2.6 时钟电路与时序时钟电路用于产生 MCS-51单片机工作所必需的时钟控制信号 。
2.6.1 时钟电路时钟频率直接影响单片机的 速度,电路的质量直接影响系统的 稳定性 。 常用的时钟电路有两种方式,内部时钟 方式和 外部时钟 方式 。
一、内部时钟方式内部有一个用于构成振荡器的高增益反相放大器,反相放大器的输入端为芯片引脚 XTAL1,输出端为引脚
XTAL2。
C1和 C2典型值通常选择为 30pF左右。
晶体的振荡频率在 1.2MHz~ 12MHz之间。
某些高速单片机芯片的时钟频率已达 40MHz。
二、外部时钟方式常用于多片 MCS-51单片机同时工作。
三、时钟信号的输出为应用系统中的其它芯片提供时钟,但需增加驱动能力。
2.6.2 机器周期、指令周期与指令时序单片机执行的指令的各种时序均与时钟周期有关一、时钟周期单片机的 基本时间单位 。若时钟的晶体的振荡频率为 fosc,则时钟周期 Tosc=1/fosc。如 fosc=6MHz,
Tosc=166.7ns。
二、机器周期
CPU完成一个基本操作所需要的时间称为 机器周期 。
执行一条指令分为几个机器周期 。 每个机器周期完成一个基本操作 。 MCS-51单片机每 12个时钟周期为一个机器周期,
一个机器周期又分为 6个状态,S1~ S6。 每个状态又分为两拍,P1和 P2。因此,一个机器周期中的 12
个时钟周期表示为,S1P1,S1P2,S2P1、
S2P2,…,S6P2。
三、指令周期执行任何一条指令时,都可分为取指令阶段和指令执行阶段 。
取指令阶段,PC中地址送到程序存储器,并从中取出需要执行指令的操作码和操作数。
指令执行阶段,对指令操作码进行译码,以产生一系列控制信号完成指令的执行。
ALE信号是为地址锁存而定义的,以时钟脉冲 1/6的频率出现,在一个机器周期中,ALE信号两次有效
(但要注意,在执行访问外部数据存储器的指令
MOVX时,将会丢失一个 ALE脉冲)
2.7 复位操作和复位电路
2.7.1 复位操作单片机的初始化操作,摆脱死锁状态。
引脚 RST加上 大于 2个机器周期(即 24个时钟振荡周期)的高电平就可使 MCS-51复位。 复位时,PC初始化为 0000H,使 MCS-51单片机从 0000H单元开始执行程序。
除 PC之外,复位操作还对其它一些寄存器有影响,
见 表 2-6(P34)。
SP=07H,P0-P3的引脚均为高电平 。
在复位有效期间,ALE脚和 PSEN*脚均为高电平,内部 RAM的状态不受复位的影响。
2.7.2 复位电路片内复位结构:
复位电路通常采用 上电自动复位 和 按钮复位 两种方式。
最简单的上电自动复位电路,
按键手动复位,有 电平方式 和 脉冲方式 两种。
电平方式:
脉冲方式:
两种实用的兼有上电复位与按钮复位的电路。
图 2-19中 ( b) 的电路能输出高,低两种电平的复位控制信号,以适应外围 I/O接口芯片所要求的不同复位电平信号 。
74LS122为单稳电路,实验表明,电容 C的选择约为
0.1?F较好 。