AT89S51存储器的结构
扫描二维码
随时随地手机看文章
AT89S51单片机存储器结构的特点之一是将程序存储器和数据存储器分开(称为哈佛结构),并有各自的对这两个不同的存储器空间的访问指令。
AT89S51的存储器空间可划分为如下4类。
1.程序存储器空间
单片机能够按照一定的次序工作是由于程序存储器中存放了经调试正确的程序。程序存储器可以分为片内和片外两部分。
AT89Ssl单片机的片内程序存储器为4 KB的Flash存储器,编程和擦除完全是电气实现,且速度快。可使用通用的编程器对其编程,也可在线编程。
当AT89S51片内的4 KB的Flash存储器不够用时,用户可在片外扩展程序存储器,最多可扩展至64 KB。
2.数据存储器空间
数据存储器空间分为片内与片外两部分。
AT89S51单片机内部有128 B的RAM(增强型的52子系列为256 B),用来存放可读/写的数据。
当AT89S51的片内RAM不够用时,又给用户提供了在片外可扩展至64 KB RAM的功能。至于究竟扩展多少RAM,则根据用户实际需要来定。
3.特殊功能寄存器(SFR,Special Function Register)
特殊功能寄存器实际上是AT89S51片内各功能部件的控制寄存器及状态寄存器。SFR综合反映了整个单片机基本系统内部实际的工作状态及工作方式。
4.位地址空间
AT89S51单片机内共有211个可寻址位,构成了位地址空间。它们位于内部RAM(共128位)和特殊功能寄存器区(共83位)中。
程序存储器空间
程序存储器是只读存储器(ROM),用于存放程序和表格之类的固定常数。AT89S51单片机的片内程序存储器为4 KB的Flash存储器,地址范围为0000H~0FFFH。AT89S51有16位地址线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。片内与片外扩展的程序存储器在使用时应注意以下问题:
(1)整个程序存储器空间可以分为片内和片外两部分,CPU究竟是访问片内的还是片外的程序存储器,可由EA(的反)引脚上所接的电平来确定。
EA(的反)引脚接高电平时,CPU从片内OOOOH开始取指令,当PC值没有超出OFFFH(0000H~0FFFH为片内4 KB的Flash存储器的地址范围)时,CPU只访问片内的Flash程序存储器,当PC值超出0FFFH会自动转向读取片外程序存储器空间1000H~FFFFH内的程序。
EA(的反)引脚接地时,单片机只能执行片外程序存储器(地址范围为0000H~FFFFH)中的程序。
CPU不理会片内4 KB的Flash存储器(地址范围0000H~0FFFH)。
(2)程序存储器的某些单元被固定用于各中断源的中断服务程序的入口地址。
64 KB程序存储器空间中有5个特殊单元分别对应于5个中断源的中断服务程序的人口地址,见表2-3。AT89 S51复位后,程序存储器地址指针PC的内容为OOOOH,程序从程序存储器中的OOOOH地址开始执行。一般在该单元存放一条跳转指令,跳向主程序的入口地址。
表2-3 5个中断源的中断入口地址
通常在这5个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。这是因为两个中断入口间隔仅有8个单元,如果这8个单元存放中断服务子程序,往往是不够用的,所以中断入口地址处都放一条跳转指令,来跳向对应的中断服务子程序。
数据存储器空间
该空间分为片内与片外两部分。
1.片内数据存储器
AT89S51的片内数据存储器(RAM)共有128个单元,字节地址为OOH~7FH。图2-4为AT89S51片内数据存储器的结构。
地址为00H~1FH的32个单元是4组通用工作寄存器区,每个区包含8B的工作寄存器,编号为R7~RO。用户可以通过指令改变特殊功能寄存器PSW中的RS1、RSO这两位来切换当前选择的工作寄存器区。
地址为20H~2FH的16个单元的128位可进行位寻址,也可以进行字节寻址。
地址为30H~7FH的单元为用户RAM区,只能进行字节寻址,用于存放数据以及作为堆栈区使用。
2.片外数据存储器
当片内128B的RAM不够用时,需要外扩数据存储器,AT89S51最多可外扩64KB的RAM。注意,片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低128B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。
特殊功能寄存器
AT89S51中的CPU对片内各功能部件的控制是采用特殊功能寄存器集中控制方式。特殊功能寄存器(SFR)的单元地址映射在片内RAM的80H~FFH区域中,共有26个,离散地分布在该区域中,表2-4是SFR的名称及其分布。其中有些SFR还可以进行位寻址,其位地址已在表2-4中列出。
表2-4 SFR的名称及其分布
与AT89C51相比,新增加的5个SFR是:DPIL、DPIH、AUXR、AUXR1和WDTRST,已在表2-4中标出。
从表2-4中可以发现,凡是可以进行位寻址的SFR,其字节地址的末位只能是OH或8H。
另外,若读/写没有定义的单元,将得到一个不确定的随机数。
SFR块中的累加器A和程序状态字寄存器PSW已在前面介绍过,下面简单介绍SFR块中的某些SFR。
1.堆栈指针SP
堆栈指针SP的内容指示出堆栈顶部在内部RAM块中的位置。它可指向内部RAM OOH~7FH的任何单元。AT89S51的堆栈结构属于向上生长型的堆栈(即每向堆栈压人1个字节数据时,SP的内容自动增1)。单片机复位后,SP中的内容为07H,使得堆栈实际上从08H单元开始,考虑到08H~1FH单元分别是属于1~3组的工作寄存器区,若在程序设计中用到这些工作寄存器区,最好在复位后且运行程序前,把SP值改置为60H或更大的值,以避免堆栈区与工作寄存器区发生冲突。
堆栈主要是为子程序调用和中断操作而设立的。堆栈的具体功能有两个:保护断点和现场保护。
(1)保护断点。因为无论是子程序调用操作还是中断服务子程序调用操作,最终都要返回主程序。因此,应预先把主程序的断点在堆栈中保护起来,为程序的正确返回做准备。
(2)现场保护。在单片机执行子程序或中断服务子程序时,很可能要用到单片机中的一些寄存器单元,这会破坏主程序运行时这些寄存器单元中的原有内容。所以在执行子程序或中断服务程序之前,要把单片机中有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”。
堆栈的操作有两种:一种是数据压入(PUSH)堆栈,另一种是数据弹出(POP)堆栈。每次当一个字节数据压人堆栈以后,SP自动加1;一个字节数据弹出堆栈后,SP自动减1。例如,(SP)=60H,CPU执行一条子程序调用指令或响应中断后,PC内容(断点地址)进栈,PC的低8位PCL的内容压人到61H单元,PC的高8位PCH的内容压人到62H,此时,(SP)=62H。
2.寄存器B
寄存器B是为执行乘法和除法操作设置的。在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。
乘法中,两个乘数分别在A、B中,执行乘法指令后,乘积存放在BA寄存器对中。B中放乘积的高8位,A中放乘积的低8位。
除法中,被除数取自A,除数取自B,商存放在A中,余数存放于B中。
3.AUXR寄存器
AUXR是辅助寄存器,其格式如图2-5所示。
图中:
DISALE:ALE的禁止/允许位。
DISALE=0,ALE有效,发出恒定频率脉冲。
DISALE=1,ALE仅在CPU执行MOVC和MOVX类指令时有效,不访问外部存储器时,ALE不输出脉冲信号。
DISRTO:禁止/允许WDT溢出时的复位输出。
DISRTO=0,WDT溢出时,在RST引脚输出一个高电平脉冲。
DISRTO=1,RST引脚仅为输入脚。
WDIDLE:WDT在空闲模式下的禁止/允许位。
WDIDLE=0,WDT在空闲模式下继续计数。
WDIDLE=1,WDT在空闲模式下暂停计数。
4.数据指针DPTRO和DPTR1
DPTRO和DPTR1是双数据指针寄存器。为了便于访问数据存储器,AT89S51设置了两个数据指针寄存器。DPTRO为AT89C51单片机原有的数据指针,DPTR1为AT89S51新增加的数据指针。AUXR1的DPS位用于选择这两个数据指针。当DPS=0时,选用DPTRO;当DPS=1时,选用DPTR1。AT89C51复位时,默认选用DPTRO。
DPTRO(或DPTR1)是一个16位的SFR,其高位字节寄存器用DPOH(或DPIH)表示,低位字节寄存器用DPOL(或DPIL)表示。DPTRO(或DPTR1)既可以作为一个16位寄存器使用,也可以作为两个独立的8位寄存器DPOH(或DPIH)和DPOL(或DPIL)使用。
5.AUXR1寄存器
AUXR1是辅助寄存器,其格式如图2-6所示。
图中:
DPS:数据指针寄存器选择位。
DPS=0,选择数据指针寄存器DPTRO。
DPS=1,选择数据指针寄存器DPTR1。
6.看门狗定时器WDT
看门狗定时器WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST)。当CPU由于干扰,程序陷入死循环或“跑飞”状态时,看门狗定时器WDT提供了一种使程序恢复正常运行的有效手段。
有关WDT在抗干扰设计中的应用以及低功耗模式下运行的状态,将在相应的章节中具体介绍。
上面介绍的特殊功能寄存器除了前两个SP和B以外,其余的均为AT89S51在AT89C51的基础上新增加的SFR。
位地址空间
AT89S51在RAM和SFR中共有211个寻址位的位地址,位地址范围为OOH~FFH,其中OOH~7FH这128位处于片内RAM字节地址20H~2FH单元中,见表2-5。其余的83个可寻址位分布在特殊功能寄存器SFR中,见表2-6。可被位寻址的寄存器有11个,共有位地址88个,其中5个位未用,其余83个位的位地址离散地分布于片内数据存储器区字节地址为80H~FFH的范围内,其最低的位地址等于其字节地址,并且其字节地址的末位都为OH或8H。
表2-5 AT89S51片内RAM的可寻址位及其位地址
表2-6 SFR中的位地址分布
作为对AT89S51存储器结构的总结,图2-7给出了AT89S51中各类存储器的结构图。从图2-7中可以清楚地看出AT89S51的各类存储器在存储器空间的位置。