第二章 单片机硬件结构
第三节 存储器
2.3.1 51单片机存储器结构
存储器是组成计算机的主要部件,其功能是存储信息(程序和数据)。存储器可以分成两大类,一类是随机存取存储器(Random Access Memory,RAM),另一类是只读存储器(Read Only Memory,ROM)。“随机”存取是与“顺序(Serial)”存取相对而言的,意思是微处理器可以从RAM中任意地址中直接读取所需数据,而不必从头至尾一一查找,微处理器在运行时能随时进行数据的写入和读出,但在关闭电源时,其存储的信息将丢失。它用来存放暂时性的输入输出数据、运算的中间结果,或用做堆栈。ROM是一种写入信息后不易改写的存储器。断电后,ROM中的信息保留不变。ROM常用来存放固定的程序或数据,如系统监控程序和常数表格等。台式PC主板、显卡、网卡上的BIOS就是一种ROM,因此它们的程序和数据变动概率很低。可擦写ROM也必须在特定的条件下(如高电压、紫外线照射等)才能修改。
51单片机的片内存储器与台式PC的存储器配置不同。台式PC的程序存储器和数据存储器安排在同一空间(即内存中)的不同范围,称为普林斯顿结构;而51单片机的存储器在物理上设计成程序存储器和数据存储器两个独立的空间,称为哈佛结构。Intel的MCS-51系列单片机的后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
按照物理空间的不同,51单片机的存储器可分为片内RAM、片内ROM、片外RAM和片外ROM 4部分。其结构如图2-9所示。
如果按照逻辑空间划分,存储器又分为如下3个空间:片内256B数据存储器地址空间,片外64KB的数据存储器地址空间和64KB程序存储器。因为片内、片外的程序存储器地址编排是连续统一的,因而在逻辑上把它作为一个空间。51单片机的数据传送指令(如MOV、MOVX、MOVC等)就是按照逻辑空间设计的。
如果把存储器看成一个宾馆,每个存储单元就是宾馆的房间,而每个房间要有房间号,这样客人要求服务时,服务员才不至于走错房间。存储单元的房间号就是地址,它是存储单元的标识信息。
2.3.2 片内RAM
51单片机片内RAM用于暂存数据和运算的中间结果。其存储容量为128B,地址范围为00H~7FH,可分成3部分,00H~1FH是工作寄存器区;20H~2FH是位寻址区;30H~7FH是通用数据缓冲区,如图2-10所示。
内部RAM中的80H~FFH单元含有21个特殊功能寄存器(SFR)。尽管21个SFR的物理位置属于内部RAM,但一般的教材说到内部RAM的容量时并不包含80H~FFH,因为在微机原理中,SFR属于微处理器。
1.工作寄存器区
寄存器常用于存放操作数和中间结果。提到“寄存”这两个字时,有人可能会想到超市的“寄存密码箱”,寄存器的作用类似寄存密码箱,它将不用的数据暂时存放。表2-3所示的片内RAM工作寄存器的地址为00H~1FH,分4组,组号依次为0,1,2,3,每组有8个单元,各组都可用R0~R7作为单元的编号。这4组不是同时有效,可以相互切换,由PSW中的RS0、RS1决定,选中的一组称当前寄存器组。为什么要把内部RAM的最低地址部分留给工作寄存器呢?因为它为微处理器提供了就近存取的便利,有利于提高单片机的处理速度,因此,在51单片机指令中使用工作寄存器的情况特别多,且多为单字节指令,执行速度最快。
2.位寻址区
51单片机中的微处理器有别于其他微处理器的一个特点是它可以进行位操作。表2-4所示的内部RAM的20H~2FH共16个字节单元为位寻址区。其中每个字节的8位都分别编址,位地址范围为00H~7FH。该区域的16个单元可以像普通RAM单元一样进行字节操作,也可以用位操作指令对单独的位进行操作。
注意,位寻址不要和字节寻址混淆。字节寻址的操作数是一个字节,而位寻址的操作数是字节中的一位。
特殊功能寄存器(SFR)可分为5类:
(1)与运算器相关的寄存器
1)累加器ACC,又可记作A,8位,用于向ALU提供操作数,许多运算的结果也存放
加器中。
2)寄存器B,8位,主要用于乘、除法运算。也可以作为RAM的一个单元使用。它的
是:
① 可作为一般数据寄存器暂存数据。
② 乘法运算时,B中存放乘数;乘积结果高8位存放于B中。
③ 除法运算时,B中存放除数;相除的余数存放于B中。
3)程序状态字寄存器(PSW),其各位含义见表2-6。
① P:奇偶标志位。当A中1的个数为偶数时,P为0;当A中1的个数为奇数时,P为1。
② OV:溢出标志位。当运算结果超出带符号数的范围时,OV为1;当运算结果没有超出带符号数的范围时,OV为0。
③ RS0、RS1:寄存器选择位。见工作寄存器区。
④ AC:辅助进位标志位。当D3向D4无进位/借位时,AC为0;当D3向D4有进位/借位时,AC为1。
⑤ CY:进位标志位。当最高位无进位/借位时,CY为0;当最高位有进位/借位时,CY为1。
以下详细讨论一下CY和OV位,两者的现象和本质见表2-7。
【例2-1】 64H+64H后,CY和OV各是多少?
解:64H所表示的无符号数和有符号数见表2-8。
64H+64H的运算过程如图2-11所示。
因此,64H+64H后CY和OV的结果见表2-9。
【例2-2】 ABH+FFH后,CY和OV各是多少?
解:ABH和FFH所表示的无符号数和有符号数见表2-10。
因此,ABH+FFH后CY和OV的结果见表2-11。
【例2-3】 9AH +E3H后,CY和OV各是多少?
解:9AH和E3H所表示的无符号数和有符号数见表2-12所示
因此,9AH +E3H后CY和OV的结果见表2-13。
上述3个例子说明CY和OV有4种组合情况:CY=0和OV=0(运算正确情况);CY=1和OV=0; CY=0和OV=1;CY=1和OV=1。
【例2-4】 设程序执行前RS1、RS0=00,F0=0,求机器执行如下程序后:
MOV A,#0AH
ADD A,#0F7H
PSW中各位的状态是什么?
解:0AH+0F7H的指令执行过程如图2-12所示。
CY为最高位进位,CY=1;CS为次高位进位,CS=1。F0、RS0、RS1不受算术运算影响; CY=1;A3向A4有进位,故AC=1;A中1的个数为奇数,故P=1;OV=CY+CS=1+1=0。所以PSW为 11000001B。
(2)指针类寄存器
1)堆栈指针(SP),专门用来存放堆栈的栈顶地址的8位寄存器,能自动加1或减1。它总是指向栈顶。
堆栈是一个按特定顺序(后进先出或先进后出)存放临时数据的存储区,位于片内RAM中。
① 当堆栈中无数据时,栈顶和栈底重合,SP指向栈底,当有数据压入堆栈时,SP指向栈顶。
② 51系列单片机中堆栈工作方式是由低向高堆放的,属向上增长型,如图2-13所示。51单片机栈顶的变化见表2-14。
③ 堆栈地址:片内RAM中的30H~7FH。
需要说明的是,设置SP初值时要考虑其允许深度,由于堆栈的占用,会减少内部RAM的可利用单元,如果设置不当,可能引起内部RAM单元冲突。堆栈的开辟要处理好如下因素:工作寄存器使用组数;中断及子程序嵌套深度;位单元与字节单元数量,以及利用堆栈保护单元的数量与是否利用堆栈传递数据等。
堆栈开辟原则为:在确保子程序与中断调用正常执行的前提下,减少堆栈分配的盲目性,缩小预留区间;统筹协调好工作寄存器、位单元和字节单元的使用;堆栈区间有一定的弹性,预防意外透支;字节单元区间相对集中、连续,内存空间清晰。
分页 2)数据指针(DPTR),16位。其用来存放16位的地址。
它由DPH和DPL两个8位寄存器组成。间接寻址或变址寻址可访问片外的64KB范围的RAM或ROM数据。
如下两组指令等价:
①MOVDPTR,#0110H
②MOVDPH,#01H
MOVDPL,#10H
程序指针(PC)和数据指针(DPTR)有许多类似的地方,例如:
① 两者都是与地址有关的16位寄存器。其中,PC与程序存储器的地址有关,而DPTR与数据存储器的地址有关。
② 作为地址寄存器使用时,PC与DPTR都是通过P0和P2口(作为16位地址总线)输出的。但是,PC的输出与ALE及



二者的不同之处如下:
① PC位于微处理器内,而DPTR属于SFR,位于内部RAM中。因而,DPTR可以用传送指令访问,而PC是不可以访问的,这里体现了“RAM随机,ROM顺序”的特点。
② PC只能作为16位寄存器对待,由于有自动加1的功能,故又称为计数器;DPTR可以当做16位寄存器,也可以当做两个8位寄存器。
(3)与串并口相关的寄存器
并行I/O口P0、P1、P2、P3,均为8位。
串行口数据缓冲器SBUF;
串行口控制寄存器SCON。
串行通信波特率倍增寄存器PCON(一些位还与电源控制相关,所以又称为电源控制寄存器)。
(4)与中断相关的寄存器
中断允许控制寄存器IE;
中断优先级控制寄存器IP。
(5)与定时/计数器相关的寄存器
定时/计数器T0的两个8位计数初值寄存器TH0、TL0,它们可以构成16位的计数器,TH0存放高8位,TL0存放低8位;
定时/计数器T1的两个8位计数初值寄存器TH1、TL1,它们可以构成16位的计数器,TH1存放高8位,TL1存放低8位;
定时/计数器的工作方式寄存器TMOD;
定时/计数器的控制寄存器TCON。
第(3)、(4)、(5)类SFR在介绍单片机的相关功能时,再详细说明。
单片机的工作就是用一条条的指令指挥各部分硬件的动作,而这种“指挥”就是通过给特殊功能寄存器填写相应的内容来实现的。不妨将单片机画成如图2-14所示的形式,微处理器内核与特殊功能寄存器之间存在着灵活的“软件上的对应”关系,而特殊功能寄存器与接口模块或功能部件之间存在着固定的“硬件上的映射”关系。特殊功能寄存器在中间扮演着桥梁或者界面的角色。各个接口模块从外部世界采集的现场信息,经过硬件电路立即反映到与自己对应的特殊功能寄存器单元上,微处理器通过执行指令从该寄存器单元里获取相应的信息。相反,微处理器通过填写与某一接口模块对应的特殊功能寄存器单元,由该寄存器单元经过硬件电路将控制信息映射到外围模块上,再由外围模块驱动外接电路完成相应的动作,从而将微处理器的命令落到实处。
用指令编写程序时,不仅应搞清指令系统中每条指令的功能,还应弄清特殊功能寄存器与接口模块或功能部件之间的对应关系。
要理解51单片机的工作,就必须对特殊功能寄存器的工作有清楚的了解。由于这些SFR的作用,引脚在程序控制下,可有第二功能,从而使得有限的引脚能衍生出更多的功能。而且,利用SFR可完成对定时器、串行口、中断逻辑的控制,这就使得单片机可以把定时/计数器、串行口、中断逻辑等集成在一个芯片上。所以说,SFR使仅具有40条引脚的单片机系统的功能有很大的扩展。
2.3.3 片内ROM
51单片机的


MCS-51系列单片机在存储器结构上与台式PC也有不同之处,通用的微型计算机中程序存储器和数据存储器是一个地址空间(普林斯顿结构),而单片机把程序存储器和数据存储器分成两个独立的地址空间(哈佛结构),采用不同的寻址方式,使用两个不同的地址指针,PC指向程序存储器,DPTR指向数据存储器。采用这种结构主要是考虑到工业控制的特点。一般的工业控制系统,需要较大的程序存储器空间和较小的随机存储器空间,不同于台式PC需要较大的数据存储器空间。
2.3.4 片外RAM和片外ROM
1.片外RAM
片外RAM容量最多为64KB,地址范围为0000H~FFFFH,与片内RAM地址范围00H~FFH重叠,因此访问内外不同的RAM空间需要不同的指令,访问片内RAM用MOV指令,访问片外RAM用MOVX指令,这又验证了硬件决定软件的事实。
2.片外ROM
片外ROM容量最多为64KB,地址范围为0000H~FFFFH,与片内ROM地址范围0000H~0FFFH重叠,但同一时刻某一地址单元只能对应唯一的ROM地址,或为片外,或为片内,因此ROM的传送指令只有MOVC。
关于存储器扩展问题的详细说明见第8章。