51单片机片内外存储器统一编址包含两个部分,一个是内外ROM的统一编址,一个是片内外的RAM统一编址。
先说说内外ROM的统一编址:
你看看单片机的P3.1即EA引脚,这是片内常年供需存储器屏蔽控制端。当EA=0时,只允许使用外部的ROM。当EA为1时,允许使用片内ROM,在PC(程序计数器)值超出0fffh时,将自动转向执行外部程序存储器从0fffH单元开始的程序,不管内部程序存储器是否还有更大的空间。这就是所谓的内外ROM的统一编址。
再来说说内外RAM的统一编址:
内部的存储器的寻址地址和外部存储器的寻址地址出现重叠。比如0f00地址既是片内编址为0f00H的存储单元的地址,也是片外编址为0f00H的存储单元的地址。对它们的操作是通过不同的指令来实现区分操作的。比如要寻址片内编址为0070H的存储单元,把它的值赋给累加器A,操作指令为:mov A,70H。要寻址片外编址为0070H的存储单元,把它的值赋给累加器A,操作指令为:movx A,70H.
51单片机片外只有 数据存储器 和 程序存储器。
外接IO口,只能以 数据存储器 或 程序存储器 的 “身份”出现。
就是说:外接IO口,必须和“数据存储器 或 程序存储器”统一编址。
就是内部4K的ROM地址定义为0000~0FFF,外部扩展的60K的ROM地址接着内部ROM的地址定义为1000~FFFF。
片内外,统一编址?
一定是说 ROM。
片内 RAM、片外 RAM,是不可能统一编址的。