一、单片机存储器组织结构

C51单片机存储器分类:
物理结构:ROM(一般放程序)RAM(一般放数据)
功能角度:程序存储器、数据存储器(51单片机数据存储器又分:普通数据存储器、位寻址存储器、特殊功能寄存器存储器)
所在位置:片内存储器、片外存储器

二、程序存储器

程序存储器空间:
23UGI_2Y3{JA`B4NT144)DP.png
一般将所有程序都放片内程序存储器

三、片外、片内数据存储器

片外数据存储器空间:
用DPTR直接访问
5P%UXD2F6G2]M{D)JV)6EJU.png
整个256个字节的片内数据存储器空间【可以使用R0/R1寄存器间接访问(地址存于R0/R1,再找到该地址访问)】:
8L0VBR4Y5A@@NUMTUBA[[)7.png](https://cdn.nlark.com/yuque/0/2022/png/21690577/1648970936664-bb531e03-0a0d-4eab-b79a-7c19eccfd6e0.png#clientId=u1e72f926-6554-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=145&id=ZXUX7&margin=%5Bobject%20Object%5D&name=8L0VBR4Y5A%40%40NUMTUBA%5B%5B%297.png&originHeight=181&originWidth=607&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85503&status=done&style=none&taskId=ucbc02dd4-3045-4888-9cda-f19396b42be&title=&width=485.6)<br />低128BRAM区(可以直接寻址,也可以用R0/R1间接访问):<br />![@`OZ)%3C$TC%O]058)G)1`G.png

  1. 数据缓冲区80B(30H~7FH)——和高128B空间一起用于存放程序运行的临时变量或用作堆栈
  2. 位寻址区16B(20H~2FH)
  3. 工作寄存器区32B(00H~1FH)——改变PSW状态寄存器的RS1和RS0选择工作寄存器

注:
1、由于高128字节区的物理地址同时也是特殊功能寄存器(SFR)的物理地址,为了避免混乱
我们规定:对于80H~FFH,

  • 直接寻址,则访问SFR区
  • 间接寻址,则访问高128BRAM区

2、使用关键字指定变量存放空间
data:变量位于可直接寻址的片内数据存储器区域:char data i;
idata:变量位于可间接寻址的片内数据存储器区域:char idata i;
bdata:变量位于位寻址区
char bdata i;
sbit k = i^2; //把i的第二位的值赋给k,通过k改变该位的值
k = 0;
xdata:变量位于整个片外存储器区域
pdata:变量位于片外存储器低256字节范围

四、特殊功能寄存器

寻址方式:按字节直接寻址
1、使用物理地址
2、使用寄存器标号:
sfr P1 = 0x90H //sfr定义的变量指向特殊功能寄存器,P1代表指向P1区
P1 = 25;