存储器
引
上一篇中提到,有些51机型没有片内ROM,所以需要外加ROM,这个将会在后续谈到芯片扩展时讲解。现在不妨以有片内ROM的51为例了解51的存储器结构。
51存储器结构采用的是哈弗结构。即,数据与程序指令分开存储。所以对应的,会有一个专门存储程序指令的ROM,以及一个专门存放数据的RAM。
ROM
上一篇提到,51与52的区别只有4kB和8kB的区别。所以:
8031/8032 | 80(7、9)51 | 80(7、9)52 |
---|---|---|
0 | 4kB | 8kB |
注意,这里提到的都只是片内自带的内部ROM。如果考虑到扩容片外ROM。所有的51系列最大都能扩展一个64kB的片外ROM。这是由与51的程序计数器寄存器IP长度为2Byte,
2
16
=
64
∗
1024
2^{16}=64*1024
216=64∗1024。
这样的话就有可能出现片内与片外ROM共同存在的情况。而CPU不可能同时读取或写入两个ROM,所以51有一个
E
A
‾
\overline{EA}
EA引脚,用于选择ROM。
E A ‾ = 0 \overline{EA}=0 EA=0 | E A ‾ = 1 \overline{EA}=1 EA=1 |
---|---|
访问外部ROM | 在内部ROM地址范围内访问内部ROM,超出范围访问外部ROM |
RAM
与ROM相同,除片内RAM外,可以扩容片外RAM。一般51系列会有128kBRAM,52系列会有256kBRAM。片外扩容最大也是64kB。
片内RAM一般会分为以下部分:
注意,旁边标注的是RAM的地址,每个地址对应1字节,而非1bit。
名称 | 地址范围 | 作用 |
---|---|---|
通用寄存器组区 | 00H-1FH | 4组(每组8B)通用寄存器 |
位寻址区 | 20H-2FH | 这部分128bit可以按位寻址 |
一般RAM区 | 30H-7FH(FFH) | 用户自定义 |
上面提到的可以按位寻址区可以直接寻址到位。20H最低一位为00H,依次增加。
除此之外,51中还有很多特殊功能寄存器。他们虽然与RAM统一编址,比如说E0H为累加器A。但他们实际上不位于RAM中。比如说,51系列中没有高128字节,RAM中根本就没有E0H;即便52中有高128字节,这些特殊功能寄存器也不位于RAM中。52为了避免混淆,特殊功能寄存器只能直接寻址,高128字节只能通过RI间接寻址。至于这些特殊功能寄存器到底在哪儿?他们分布于51各个部分,很多寄存器就位于CPU中(A、B、PSW、SP、DPTR),统一编制只是为了方便使用。