AT89S51的存储结构
本文主要涉及8051单片机的存储结构,它的存储结构主要包括四部分,分别是出程序存储空间、数据存储卡空间、特殊功能寄存器、位地址空间四部分,下面将会展开描述。
文章目录
- AT89S51的存储结构
- 一、 程序存储空间
- 二、 数据存储空间
- 2.1 片内数据存储器
- 2.2 片外数据存储器
- 三、特殊功能寄存器
- 3.1 堆栈指针SP
- 3.2 寄存器B
- 3.3 AUXR寄存器
- 3.4 数据指针DPTR0和DPTR1
- 3.5 AUXR1寄存器
- 3.6 看门狗定时器WDT
- 四、位地址空间
存储器结构特点之一是将 程序存储器和数据存储器分开( 哈佛结构),并有各自的访问指令。【哈佛结构的优势在于同时读取程序和数据,可以提高数据传输带宽。】
存储器空间可分为4类:程序存储器、空间数据存储器、空间特殊功能寄存器、SFR位地址空间。
1.程序存储器空间
片内和片外
两部分。
片内程序存储器为4KB
的Flash存储器,编程和擦除全是电气实现,且速度快。可用通用编程器编程,也可在线编程。
当片内的4KB的Flash存储器不够用时,用户可在片外可扩展程序存储器,最多可扩展至64KB
程序存储器。
2.数据存储器空间
片内与片
外两部分。
(51)片内有128
B RAM(52子系列为256B)。
片内RAM不够用时,在片外可扩展至64KB RAM 。
3.特殊功能寄存器SFR (Special Function Register)
片内各功能部件的控制寄存器
及状态寄存
器。SFR综合反映了整个单片机基本系统内部实际的工作状态及工作方式。
4.位地址空间
共有211个
可寻址位,构成了位地址空间。它们位于内部 RAM
(共128位
)和特殊功能寄存器区
(共83
位)中。
一、 程序存储空间
存放程序和表格之类的固定常数。片内为4KB的 Flash
,地址为0000H~0FFFH
。16位地址线,可外扩的程序存储器空间最大为64KB
,地址为0000H~FFFFH。
使用应注意以下问题
(1)分为
片内
和片外
两部分,访问片内的还是片外的程序存储器,由EA*引脚电平确定。
EA*=1时
,CPU从片内0000H开始取指令,当PC值没有超出0FFFH时,只访问片内Flash 存储器,当PC值超出0FFFH自动转向读片外程序存储器空间1000H~FFFFH 内的程序。
EA*=0时
,只能执行片外程序存储器(0000H~FFFFH)中的程序。不理会片内4KB Flash 存储器。(2)程序存储器某些固定单元用于各中断源中断服务程序入口。
64KB程序存储器空间中有5个特殊单元分别对应于5个中断源的中断入口地址,见表2-3。
通常这5个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。
二、 数据存储空间
片内和片外两部分
2.1 片内数据存储器
片内数据存储器(RAM)共128个单元,字节地址为00H~7FH。图2-4为片内数据存储器的结构。
00H~1FH 的32个单元是4组通用工作寄存器区,每区包含8B,为R7~R0。可通过指令改变RS1、RS0两位来选择。
20H~2FH的16个单元的128位可位寻址,也可字节寻址。
30H~7FH的单元只能字节寻址,用作存数据以及作为堆栈区。
2.2 片外数据存储器
当片内128B的RAM不够用时,需外扩,最多可外扩64KB的RAM。注意,片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低128B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。
三、特殊功能寄存器
采用特殊功能寄存器集中控制各功能部件。特殊功能寄存器映射在片内RAM的 80H~FFH 区域中,共26个。表2-4是SFR的名称及其分布。有些还可位寻址,位地址见表2-4。
与AT89C51相比,新增5个SFR:DP1L、DP1H、AUXR、AUXR1和WDTRST,已在表2-4中标出。
凡是可位寻址的SFR,字节地址末位只能是0H或8H。另外,若读/写未定义单元,将得到一个不确定的随机数。
3.1 堆栈指针SP
指示堆栈顶部在内部RAM块中
的位置。
堆栈结构–向上生长型
。
"向上生长型"是指在堆栈结构中,堆栈的内存空间是从低地址向高地址增长的。在这种情况下,堆栈的栈底位于较低的内存地址,而栈顶则位于较高的内存地址。当新的数据被推入堆栈时,堆栈指针向高地址方向移动;当数据被弹出堆栈时,堆栈指针向低地址方向移动。
单片机复位后,SP为07H,使得堆栈实际上从08H单元开始,由于08H~1FH单元分别是属于1~3组的工作寄存器区,最好在复位后把SP值改置为60H或更大的值
,避免堆栈与工作寄存器冲突。
堆栈主要是为子程序调用和中断操作而设。保护断点和现场
- (1)保护断点。无论是子程序调用操作还是中断服务子程序调用,最终都要返回主程序。应预先把主程序的断点在堆栈中保护起来,为程序正确返回做准备。
- (2)现场保护。执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。要把有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”。
两种操作:数据压入(PUSH)堆栈,数据弹出(POP)堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。
3.2 寄存器B
为执行乘法和除法而设。在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。
乘法,两乘数分别在A、B
中,执行乘法指令后,乘积在BA
中,[高八位在B中,低八位在A中]
除法,被除数取自A,除数取自B,商存放在A中,余数存B中。
3.3 AUXR寄存器
AUXR是辅助寄存器,其格式如图2-5:
DISALE:ALE的禁止/允许位。
- 0:ALE有效,发出脉冲;
- 1:ALE仅在执行MOVC和MOVX类指令时有效,不访问外部存储器时,ALE不输出脉冲信号;
DISRTO:禁止/允许WDT溢出时的复位输出。
- 0:WDT溢出时,在RST引脚输出一个高电平脉冲;
- 1:RST引脚仅为输入脚。
WDIDLE:WDT在空闲模式下的禁止/允许位。
- 0: WDT在空闲模式下继续计数;
- 1: WDT在空闲模式下暂停计数。。
3.4 数据指针DPTR0和DPTR1
双数据指针寄存器
,便于访问数据存储器
-片外RAM。
DPTR0:AT89C51单片机原有的数据指针,
DPTR1:新增加的数据指针。
AUXR1的DPS位用于选择两个数据指针。
当DPS=0时,选用DPTR0;当DPS=1时,选用DPTR1。
数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。
3.5 AUXR1寄存器
AUXR1是辅助寄存器,格式如图2-6:
DPS:数据指针寄存器选择位。
- 0:选择数据指针寄存器DPTR0;
- 1:选择数据指针寄存器DPTR1。
3.6 看门狗定时器WDT
包含1个14位计数器
和看门狗定时器
复位寄存器(WDTRST)。
用于当CPU由于干扰,程序陷入死循环
或跑飞状态时
,WDT提供了一种使程序恢复正常运行的有效手段。
上面介绍的特殊功能寄存器,除了前两个SP和B以外,其余的均为AT89S51在AT89C51基础上新增加的SFR
。
四、位地址空间
211个
寻址位的位地址,位地址范围为 00H~FFH
,其中 00H~7FH
这128位处于片内RAM 字节
地址 20H~2FH 单元中,如表2-5所示。
其余的83个可寻址位分布在特殊功能寄存器SFR中,如表2-6。
可被位寻址的特殊寄存器有11个
,共有位地址88个,5个位未用,其余83个位的位地址离散地分布于片内数据存储器区字节地址为80H~FFH的范围内,其最低的位地址等于其字节地址,且其字节地址的末位都为0H或8H。