第2章AT89C51的结构和原理.docx
《第2章AT89C51的结构和原理.docx》由会员分享,可在线阅读,更多相关《第2章AT89C51的结构和原理.docx(23页珍藏版)》请在冰豆网上搜索。
第2章AT89C51的结构和原理
第2章AT89C51的结构和原理
难点
∙单片机的内部结构
∙程序状态字PSW
∙单片机P3口的第二功能
∙单片机的指令时序
要求
掌握:
∙单片机的引脚信号功能定义
∙单片机的工作寄存器、PSW及程序存储器中的中断入口地址
∙单片机各I/O口的特点
∙单片机的复位电路、时钟电路及指令时序
了解:
∙MCS-51系列单片机的主要型号
∙单片机的系统结构和内部结构
∙单片机的低功耗方式
2.1MCS—51系列单片机的结构原理
2.2MCS—51单片机的存储器
2.3MCS-51单片机输入/输出(I/O)口
2.4单片机的工作方式
2.1MCS—51系列单片机的结构原理
2.1.1MCS-51单片机逻辑结构
MCS-51单片机采用的是冯.诺伊曼提出的经典计算机体系结构框架,即一台计算机是由运算器、控制器、存储器、输入设备和输出设备共五个基本部分组成。
MCS-51单片机在一块芯片上集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等。
MCS-51单片机的系统结构框图如图2.1所示。
图2.1MCS-51单片机系统结构框图
由图2.1可以看出,单片机内部主要包含下列几个部件:
一个8位CPU;
一个时钟电路;
4Kbyte程序存储器;
128byte数据存储器;
两个16位定时/计数器;
64Kbyte扩展总线控制电路;
四个8-bit并行I/O端口;
一个可编程串行接口;
五个中断源,其中包括两个优先级嵌套中断。
2.1.2 MCS-51单片机内部结构
MCS-51单片机芯片内部结构框图如图2.2所示。
图2.2MCS-51单片机芯片内部结构
1.CPU
CPU即中央处理器的简称,是单片机的核心部件,它完成各种运算和控制操作,CPU由运算器和控制器两部分电路组成。
(1)运算器电路
运算器电路包括ALU(算术逻辑单元)、ACC(累加器)、B寄存器、状态寄存器、暂存器1和暂存器2等部件,运算器的功能是进行算术运算和逻辑运算。
运算电路以ALU为核心单元,可以完成半字节、单字节以及多字节数据的运算操作,其中包括加、减、乘、除、十进制调整等算术运算以及与、或、异或、求补和循环等逻辑操作,运算结果的状态由状态寄存器保存。
(2)控制器电路
控制器电路包括程序计数器PC、PC加1寄存器、指令寄存器、指令译码器、数据指针DPTR、堆栈指针SP、缓冲器以及定时与控制电路等。
控制电路完成指挥控制工作,协调单片机各部分正常工作。
程序计数器PC用来存放即将要执行的指令地址,它可以完成64K的外部存储器寻址,执行指令时,PC内容的高8位经P2口输出,低8位经P0口输出。
数据指针DPTR为16位数据指针,它可以对64K的外部数据存储器和I/O口进行寻址,它的低8位为DPL(地址82H),高8位为DPH(地址为83H)。
堆栈指针SP在片内RAM(128字节)中开辟栈区,并随时跟踪栈顶地址,它按先进后出的原则存取数据,上电复位后,SP指向07H。
2.定时器/计数器
MCS-51单片机片内有两个16位的定时/计数器,即定时器0和定时器1。
它们可以用于定时控制、延时以及对外部事件的计数和检测等。
3.存储器
MCS-51系列单片机的存储器包括数据存储器和程序存储器,其主要特点是程序存储器和数据存储器的寻址空间是相互独立的,物理结构也不相同。
对MCS-51系列(8031除外)而言,有4个物理上相互独立的存储器空间:
即内、外程序存储器和内、外数据存储器。
对于8051其芯片中共有256个RAM单元,其中后128个单元被专用寄存器占用,只有前128个单元供用户使用。
4.并行I/O口
MCS-51单片机共有4个8位的I/O口(P0、P1、P2和P3),每一条I/O线都能独立地用作输入或输出。
P0口为三态双向口,能带8个TTL门电路,P1、P2和P3口为准双向口,负载能力为4个TTL门电路。
5.串行I/O口
MCS-51单片机具有一个采用通用异步工作方式的全双工串行通信接口,可以同时发送和接收数据。
它具有两个相互独立的接收、发送数据缓冲器,两个缓冲器共用一个地址(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。
6.中断控制系统
MCS-51单片机的中断功能较强,以满足控制应用的需要。
8051共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。
所有中断分为高级和低级两个中断优先级。
7.时钟电路
MCS-51芯片内部有时钟电路,但晶体振荡器和微调电容必须外接。
时钟电路为单片机产生时钟脉冲序列,振荡器的频率范围为1.2MHz~12MHz,典型取值为6MHz。
8.总线
以上所有组成部分都是通过总线连接起来,从而构成一个完整的单片机。
系统的地址信号、数据信号和控制信号都是通过总线传送的,总线结构减少了单片机的连线和引脚,提高了集成度和可靠性。
2.1.3 引脚信号
图2.3为MCS-51系列单片机引脚图及逻辑符号,它们为标准的40脚DIP封装。
这些引脚的功能描述如下:
(a)引脚图(b)逻辑符号
图2.3MCS-51外形
1. 电源引脚Vcc和Vss
Vcc:
电源端,接+5V。
Vss:
接地端。
通常在Vcc和Vss引脚之间接0.1μ高频滤波电容。
2. 时钟电路引脚XTAL1和XTAL2
XTAL1:
接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚必须接地。
XTAL2:
接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚为外部时钟的输入端。
3. 地址锁存允许ALE
在系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用。
当单片机上电正常工作后,ALE端就周期性地以时钟频率的1/6的固定频率向外输出正脉冲信号,ALE的负载能力为8个LSTTL器件。
4. 外部程序存储器读选通信号
是读外部程序存储器的选通信号,低电平有效。
CPU从外部存储器取指令时,它在每个机器周期中两次有效。
5. 程序存储器地址允许输入端
/VPP
当
为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。
当
为低电平时,CPU只执行片外程序存储器指令。
对于8031,由于其无片内ROM,故
必须接低电平。
6. 复位信号RST
该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作。
此外,该引脚还有掉电保护功能,若在该端接+5V备用电源,在使用中若Vcc掉电,可保护片内RAM中信息不丢失。
7. 输入/输出口引脚P0、P1、P2和P3
P0口(P0.0~P0.7):
该端口为漏极开路的8位准双向口,负载能力位8高LSTTL负载,它为8位地址线和8位数据线的复用端口。
P1口(P1.0~P1.7):
它是一个内部带上拉电阻的8位准双向I/O口,P1口的驱动能力为4个LSTTL负载。
P2口(P2.0~P2.7):
它为一个内部带上拉电阻的8位准双向I/O口,P2口的驱动能力也为4个LSTTL负载。
在访问外部程序存储器时,它作存储器的高8位地址线。
P3口(P3.0~P3.7):
P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,其还具有特殊功能。
2.2MCS—51单片机的存储器
MCS-51的存储器结构与常见的微型计算机的配置方式不同,它把程序存储器和数据存储器分开,各有自己的寻址系统、控制信号和功能。
程序存储器用来存放程序和始终要保留的常数,数据存储器通常用来存放程序运行中所需要的常数或变量。
MCS-51的存储器结构如图2.4所示。
在本节中我们将对单片机的内部数据存储器、内部程序存储器和外部存储器分别作一介绍。
图2.4MCS-51存储器配置
2.2.1内部数据存储器
对于8051单片机,其内部共有256个数据存储器单元,其中低128字节(00H~7FH)为真正的用户RAM区,其空间分配如图2.5所示;高128字节(80H~FFH)为特殊功能寄存器区。
1. 内部数据存储器低128单元
在低128字节存储单元中,前32个单元(00H~1FH)作为工作寄存器使用,这32个寄存器分作4组,每组由8个通用寄存器(R0~R7)组成,组号依次为0、1、2和3。
通过对程序状态字中RS1和RS0的设置,可以决定选用哪一组工作寄存器,通常没有选中的单元也可作为一般的数据缓存使用。
系统上电复位时,默认选中第0组寄存器。
在表2-1中给出了工作寄存器地址表。
表2-1工作寄存器地址表
组号
RS1RS0
R0
R1
R2
R3
R4
R5
R6
R7
0
00
00H
01H
02H
03H
04H
05H
06H
07H
1
01
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
2
10
10H
11H
12H
13H
14H
15H
16H
17H
3
11
18H
19H
1AH
1BH
1CH
1DH
1EH
1FH
工作寄存器中R0和R1可以进行直接寻址或间接寻址,而R2~R7只可以进行直接寻址。
通用寄存器为CPU提供了数据就近存取的便利,大大提高了单片机的处理速度。
在工作寄存器后的16个数据单元(20H~2FH),它们既可以作为一般的数据单元使用,由可以按位对每个单元进行操作,因此这16个数据单元又称作位寻址区。
位寻址区共计128位,其位地址为00H~0FH,位地址表如表2-2。
表2-2内部RAM位寻址区的位地址
单元地址
MSB(最高有效位)位地址LSB(最低有效位)
2FH
7FH
7EH
7DH
7CH
7BH
7AH
79H
78H
2EH
77H
76H
75H
74H
73H
72H
71H
70H
2DH
6FH
6EH
6DH
6CH
6BH
6AH
69H
68H
2CH
67H
66H
65H
64H
63H
62H
61H
60H
2BH
5FH
5EH
5DH
5CH
5BH
5AH
59H
58H
2AH
57H
56H
55H
54H
53H
52H
51H
50H
29H
4FH
4EH
4DH
4CH
4BH
4AH
49H
48H
28H
47H
46H
45H
44H
43H
42H
41H
40H
27H
3FH
3EH
3DH
3CH
3BH
3AH
39H
38H
26H
37H
36H
35H
34H
33H
32H
31H
30H
25H
2FH
2EH
2DH
2CH
2BH
2AH
29H
28H
24H
27H
26H
25H
24H
23H
22H
21H
20H
23H
1FH
1EH
1DH
1CH
1BH
1AH
19H
18H
22H
17H
16H
15H
14H
13H
12H
11H
10H
21H
0FH
0EH
0DH
0CH
0BH
0AH
09H
08H
20H
07H
06H
05H
04H
03H
02H
01H
00H
在内部RAM的低128个单元中,剩余的80个数据单元即30H~7FH为真正的用户RAM区,对于这些区域,用户只能以存储单元的形式来使用,通常在应用中也把堆栈开辟在这段区域。
2. 内部数据存储器高128单元
内部数据存储器的高128个单元是为专用寄存器提供的,因此该区也称作特殊功能寄存器区(SFR),它们主要用于存放控制命令、状态或数据。
除去程序计数器PC外,还有21个特殊功能寄存器,其地址空间为80H~FFH,特殊功能寄存器见表2-3。
这21个寄存器中有11个特殊功能寄存器具有位寻址能力,它们的字节地址刚好能被8整除。
下面将对部分专用寄存器作简要介绍。
表2-3MCS-51单片机特殊功能寄存器表
符号
名称
地址
*ACC
累加器
E0H
*B
B寄存器
F0H
*PSW
程序状态字
D0H
SP
栈指针
81H
DPTR
数据指针(DPH,DPL)
83H,82H
*P0
P0口锁存寄存器
80H
*P1
P1口锁存寄存器
90H
*P2
P2口锁存寄存器
A0H
*P3
P3口锁存寄存器
B0H
*IP
中断优先级控制寄存器
B8H
*IE
中断允许控制寄存器
A8H
TMOD
定时/计数器工作方式、状态寄存器
89H
+*T2CON
定时/计数器2控制寄存器
C8H
*TCON
定时/计数器控制寄存器
88H
TH0
定时/计数器0(高字节)
8CH
TL0
定时/计数器0(低字节)
8AH
TH1
定时/计数器1(高字节)
8DH
TL1
定时/计数器1(低字节)
8BH
+TH2
定时/计数器2(高字节)
CDH
+TL2
定时/计数器2(低字节)
CCH
+RCAP2H
定时/计数器2记录寄存器(高字节)
CBH
+RCAP2L
定时/计数器2记录寄存器(低字节)
CAH
*SCON
串行口控制寄存器
98H
SBUF
串行数据缓冲寄存器
99H
PCON
电源控制寄存器
97H
注:
凡是“*”号的特殊功能寄存器既可按位寻址,也可直接按字节寻址,凡是标有“+”号的特殊功能寄存器仅8032/8052型才有。
累加器ACC
累加器为8位寄存器,是程序中最常用的专用寄存器,在指令系统中累加器的助记符为A。
大部分单操作数指令的操作取自累加器,很多双操作数指令的一个操作数也取自累加器。
加、减乘和除等算术运算指令的运算结果都存放在累加器A或AB寄存器中,在变址寻址方式中累加器被作为变址寄存器使用。
在MCS-51中由于只有一个累加器,而单片机中的大部分数据操作都是通过累加器进行的,故累加器的使用是十分频繁的。
B寄存器
B寄存器为8位寄存器,主要用于乘除指令中。
乘法指令的两个操作数分别取自累加器A和寄存器B,其中B为乘数,乘法结果的高8位存放于寄存器B中。
除法指令中,被除数取自A,除数取自B,除法的结果商数存放于A,余数存放于B中。
在其它指令中,B寄存器也可作为一般的数据单元来使用。
程序状态字PSW
程序状态字是一个8位寄存器,它包含程序的状态信息。
在状态字中,有些位状态是根据指令执行结果,由硬件自动完成设置的,而有些状态位则必须通过软件方法设定。
PSW中的每个状态位都可由软件读出,PSW的各位定义如表2.4。
表2.4PSW的各状态位定义
位序
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
位标志
CY
AC
F0
RS1
RS0
OV
/
P
(1) CY:
进位标志位
在执行某些算术和逻辑指令时,可以被硬件或软件置位或清零。
在算术运算中它可作为进位标志,在位运算中,它作累加器使用,在位传送、位与和位或等位操作中,都要使用进位标志位。
(2) AC:
辅助进位标志
进行加法或减法操作时,当发生低四位向高四位进位或借位时,AC由硬件置位,否则AC位被置“0”。
在进行十进制调整指令时,将借助AC状态进行判断。
(3) F0:
用户标志位
该位为用户定义的状态标记,用户根据需要用软件对其置位或清零,也可以用软件测试F0来控制程序的跳转。
(4) RS1和RS0:
寄存器区选择控制位
该两位通过软件置“0”或“1”来选择当前工作寄存器区,RS1和RS0的选择见表2.2。
(5) OV:
溢出标志位
当执行算术指令时,由硬件置位或清零来指示溢出状态。
在带符号的加减运算中,OV=1表示加减运算结果超出了累加器A所能表示的符号数有效范围(-128~+127),即运算结果是错误的,反之,OV=0表示运算正确,即无溢出产生。
无符号数乘法指令MUL的执行结果也会影响溢出标志,若置于累加器A和寄存器B的两个数的乘积超过了255,则OV=1,反之OV=0。
由于乘积的高8位存放于B中,低8位存放于A中,OV=0则意味着只要从A中取得乘积即可,否则要从BA寄存器对中取得乘积结果。
在除法运算中,DIV指令也会影响溢出标志,当除数为0时,OV=1,否则OV=0。
(6) P:
奇偶标志位
每个指令周期由硬件来置位或清零用以表示累加器A中1的个数的奇偶性,若累加器中1的个数为奇数则P=1,否则P=0。
数据指针DPTR
数据指针DPTR为一个16位的专用寄存器,其高位用DPH表示,其低位用DPL表示,它即既可以作为一个16位的寄存器来使用,也可作为两个8位的的寄存器DPH和DPL使用。
DPTR在访问外部数据存储器时既可用来存放16位地址,也可作地址指针使用。
如MOVX@DPTR,A。
I/O端口P0~P3
P0~P3为四个8位的特殊功能寄存器,分别是四个并行I/O端口的锁存器,当I/O端口的某一位用作输入时,对应的锁存器必须先置“1”。
定时器/计数器
在MCS-51中,除8032/8052外都只有两个16位定时器/计数器T0和T1,它们由两个相互独立的8位寄存器组成TH和TL,共有四个独立的寄存器TH0、TL0、TH1和TL1,只可对这四个寄存器独立寻址,而不能作为一个16位寄存器来寻址。
串行数据缓冲寄存器
串行数据缓冲器SBUF用于存放将要发送或已接收的数据,它由发送缓冲器和接收缓冲器组成,将要发送的数据被送入SBUF时进入发送缓冲器,反之进入接收缓冲器。
2.2.2 外部数据存储器
在MCS-51中,其片外数据存储器和I/O口与片内数据存储器空间0000FH~FFFFH是重叠的。
在8051单片机中采用MOV和MOVX两种指令来区分片内外RAM空间,其中片内RAM使用MOV指令,片外RAM和I/O口使用MOVX指令。
2.2.3 程序存储器
在MCS-51系列中,程序存储器被用来存放程序、常数或表格等。
在8051中,其片内有4K字节的ROM存储单元,地址为0000H~0FFFH。
8751有4K字节的EPROM,而8052和8752则有8K字节的片内存储器。
8031和8032无片内程序存储器,所以片内程序存储器的有无是区分芯片的主要标志。
对于8051和8751除了片内的4K字节的程序存储器外,片外还有16位地址扩展总线扩展64K字节的程序存储器,两者统一进行编址,当接“1”时,片内程序存储器占用0000H~0FFFH,故外部程序存储器寻址范围为1000H~FFFFH。
当接“0”时,MCS-51单片机均从片外存储器取指,这时片外程序存储器可以从0000H开始编址,对于8031和8032由于无片内程序存储器,它们的端必须接“0”。
在程序存储器中,以下6个单元具有特殊含义:
0000H:
单片机复位后,PC=0000H,程序从0000H开始执行指令。
0003H:
外部中断0入口地址。
000BH:
定时器0中断入口地址。
0013H:
外部中断1入口地址。
001BH:
定时器1中断入口地址。
0023H:
串行口中断入口地址。
在系统中断相应之后,将自动转各中断入口地址处执行程序,而中断服务程序一般无法存放于几个单元之内,因此在中断入口地址处往往存放一条无条件转移指令进行跳转,以便执行中断服务程序。
2.3MCS-51单片机输入/输出(I/O)口
在MCS-51单片机中有4个双向的8位I/O口P0~P3,在无片外存储器的系统中,这四个I/O口的每一位都可以作为准双向通用I/O口使用。
在具有片外存储器的系统中,P0口作为地址线的低8位以及双向数据总线,P2口作为高8位地址线。
这4个口除了按字节寻址外,还可以按位寻址。
2.3.1P0口
图2.6给出了P0口的逻辑结构,它由一个锁存器、两个三态输入缓冲器、一个多路复用开关以及控制电路和驱动电路等组成。
图2.6P0口位结构
P0口可以作为输入输出口,在实际应用中它通常作为地址/数据复用总线。
在访问外部存储器时,P0口为真正的双向口。
由图2.6,当P0口输出地址/数据信息时,此时控制信号为高电平“1”,模拟开关MUX将地址/数据线与场效应管T2接通,同时与门输出有效,于是输出的地址/数据信息通过与门后将去驱动T1,同时通过反相器后驱动T2。
若地址/数据线为“1”,则T1导通,T2截止,P0口输出为“1”,反之T1截止,T2导通,P0口输出为“0”。
当数据从P0口输入时,读引脚使三态缓冲器打开,端口上的数据经缓冲器后送到内部总线。
当P0口作为通用I/O口时,CPU向端口输出数据,此时MUX开关与锁存器的相连,写信号与触发器的时钟线相连,于是内部总线上的数据经反相后出现在端,再经T2反相后输出到P0端口,输出数据经过两次倒相后相位不变,但是由于T2为漏极开路输出,故此时必须外接上拉电阻。
当P0口作输入时,由于信号即加载在T2上由被送入三态缓冲器,若该接口此前刚锁存过数据“0”,则T2是导通的,T2的输出被钳位在“0”电平,此时输入的“1”无法读入,所以当P0口作为通用I/O口时,在输入数据前,必须向端口写“1”,使T2截止。
不过当在访问外部存储器时,CPU会自动向P0口写“1”。
有时我们需要先将端口的数据读入,经过修改后再输出到端口,如果此时P0口的负载正好是晶体管的基极,并且其输出为“1”,这必然导致该引脚为低,若此时读取引脚信号,则会将刚输出的“1”误读为“0”,为了避免这类误读的错误,于是单片机还提供了读锁存器的功能。
例如执行INCP0时,CPU先读P0锁存器中数据,然后再执行加1操作,最后将结果送回P0口。
这样单片机从结构上满足了“读-修改-