一、单片机中存储器结构
哈弗结构:程序空间与数据空间是分开的
冯诺依曼结构:程序空间与数据空间统一编址
二、ROM,RAM
ROM程序存储器:
先了解基本储存器容量关系
1k=1024B( byte)=4096b( bit)
RAM数据存储器
data:0x00-0x7f128个ram可以用a寄存器直接读写,速度最快生成代码最少
idata:指前面0x00-0xff的256个ram包含 data,只是访问数据方法类似c语言指针访问
STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。(变量由数据赋值处理在实际代码编写是一个确切不超过所定义变量的大小数值范围,在存储器器中存储的就只是一个变量)
但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。
51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64K 字节。这里有一点大家要明白,片内 RAM 和片外 RAM 的地址不是连起来的,片内是从 0x00 开始,片外也是从 0x0000 开始的。
还有一点,片内和片外这两个名词来自于早期的 51 单片机,分别指在芯片内部和芯片外部,但现在几乎所有的 51 单片机芯片内部都是集成了片外 RAM 的,而真正的芯片外扩展则很少用到了,虽然它还叫片外 RAM,但实际上它现在也是在单片机芯片内部的,我们的 STC89C52 就是这样。以下是几个 Keil C51 语言中的关键字,代表了 RAM 不同区域的划分,大家先记一下。
data:片内 RAM 从 0x00~0x7F
idata:片内 RAM 从 0x00~0xFF
pdata:片外 RAM 从 0x00~0xFF
xdata:片外 RAM 从 0x0000~0xFFFF