image.png
    AT89S52单片机存储器结构为哈佛结构,即片外程序存储器空间和数据存储器结构是各自独立的。AT89S52单片机的存储器空间划分为如下四类: 程序存储器空间单片机能够按照一定的次序工作,是由于程序存储器中存放了经过调试正确的程序。程序存储器可以分为片内和片外两个部分。
    AT89S52单片机的片内程序存储器为8KB的Flash存储器,编程和擦除完全由电气实现,且速度快。可使用编程器对其编程,也可在线编程(ISP)。
    当片内8KB的Flash存储器不够用时,用户可在片外扩展程序存储器,最多可扩展至64KB程序存储器。


    只读存储器,ROM,Read Only Memory, 具有“非易失性”只用于存放程序和表格之类的固定常数。AT89S52的程序存储器为8KB的Flash存储器,地址范围为0000H~1FFFH;AT89S52单片机有16位地址总线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。
    image.png
    当EA=1, 且PC值没有超出片内8KB Flash存储器的最大地址1FFFH时,CPU只读取片内Flash程序存储器中的程序代码;当PC值>1FFFH,CPU会自动转向读取片外程序存储器空间2000H~FFFFH内的程序代码。
    当EA
    =0,单片机的CPU只读取片外程序存储器地址范围为0000H~FFFFH中的程序代码,此时CPU不理会片内0000H~1FFFH的Flash存储器中的程序代码。
    程序存储器的某些单元被固定用于各中断源的中断服务程序的入口地址
    64KB ROM空间中有6个固定单元用于各中断源的中断服务子程序的中断入口(中断矢量)


    中断源 入口地址
    外部中断0 0003H
    定时器/计数器T0 000BH
    外部中断1 0013H
    定时器/计数器T1 001BH
    串行口 0023H
    定时器/计数器T2 002BH


    使用汇编语言编程时,通常在这些中断入口地址处存放一条跳转指令,跳向对应的中断服务子程序,而不是直接存放中断服务子程序。这是因为相邻两个入口之间只有8个单元,如果这8个单元存放中断服务子程序,有时是是不够用的。
    image.png
    AT89S52单片机复位后,程序计数器PC的内容为0000H,从程序存储器0000H处开始执行程序。由于外部中断0的中断服务程序入口地址为0003H,为使主程序不与外部中断程序发生冲突,一般在0000H单元存放一条跳转指令,转向主程序的入口地址。

    数据存储器空间数据存储器空间分为片内和片外两部分。
    AT89S52单片机内有256B的RAM,用来存放可读/写的数据。当片内RAM不够用时,可在片外扩展最多64KB的RAM。

    片内数据存储器
    AT89S52单片机的片内数据存储器(RAM,Random-Access Memory,随机存储器)共有256个单元,字节地址为00H~FFH。
    image.png
    00H~1FH 4组通用工作寄存器区,每区为8B,R7~R0。可用PSW中的RS1、RS0两位来选择。
    20H~2FH 16个单元的128位可位寻址,也可字节寻址。
    30H~7FH 用作数据缓存以及作为堆栈区。
    80H~FFH 128B的RAM区和SFR,地址相同但是两个不同的物理区域,C51中通过不同的关键字来区分。

    片外数据存储器
    (1)当片内256B的RAM不够用时,需外扩,最多可外扩64KB的RAM。
    (2)注意,片内RAM与片外RAM两个空间是相互独立的数据存储区。
    (3)片内RAM与片外RAM的低256B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。
    特殊功能寄存器区AT89S52单片机片内共有32个特殊功能寄存器(SFR,Special Function Register)。SFR实际上是片内外各外设部件的控制寄存器及状态寄存器,综合反映了单片机内部的实际工作状态及工作方式。
    image.png
    如PSW,D0H~D7H,共8个单元,8B
    image.png
    image.png
    凡是可位寻址的SFR,字节地址末位只能是0H8H位地址空间AT89S52单片机内共有219个可寻址位,构成了位地址空间。它们位于片内RAM区字节地址20H~2FH(共128位)和特殊功能寄存器区(片内RAM区字节地址80H~FFH区间内,共定义了91个可寻址位)