2.4 MCS-51单片机存储器结构

从物理地址空间看,MCS-51单片机的存储器主要有4个存储器地址空间,即片内数据存储器(idata)区、片外数据存储器(xdata)区、片内程序存储器和片外程序存储器(程序存储器合称为code)区。程序存储器为只读存储器(ROM),数据存储器为随机存取存储器(RAM)。其存储器的空间分布情况如图2-5所示。

图2-5 单片机存储器空间分布

2.4.1 程序存储器

程序存储器主要用来存放编好的程序和一些固定表格常数。在8051/8751单片机的内部带有4KB的ROM/EPROM程序存储器(code区),4KB可存储约两千多条指令,对于一个小型的单片机控制系统来说容量已够,不必另加程序存储器;若空间不够,可选8KB或16KB内存容量的单片机,如89C52等,也可以采用外部扩展存储器的方式。

2.4.2 数据存储器

数据存储器通常用来存放程序运行中所需要的常数和变量。8051单片机内部共有256个单元的数据存储器,通常把这256个单元按其功能划分为两部分:低128单元和高128单元。

1.内部数据存储器低128单元(data区)

片内RAM的低128个单元用于存放程序执行过程中的各种变量和临时数据,称为data区,按其用途可划分为3个区域:工作寄存器区、位寻址区和用户数据缓冲区。

(1)工作寄存器区:分为4组——第0组(00H~07H)、第1组(08H~0FH)、第2组(10H~17H)和第3组(18H~1FH),每组包括8个存储单元,共计32个寄存器,用来存放操作数及中间结果等。在任一时刻,CPU只能使用其中的一组寄存器,并且把正在使用的那组寄存器称为当前寄存器组,当前工作寄存器到底是哪一组,由程序状态字寄存器PSW中RS1和RS0位的状态组合来决定。

(2)位寻址(bdata)区:内部RAM的20H~2FH单元,共占16个单元。既可作为一般RAM单元使用,进行字节操作,又可对单元中的每一位进行位操作,因此把该区称为位寻址区。

(3)用户数据缓冲区:工作寄存器和位寻址区除外,还剩下80个单元,单元地址为30H~7FH,是供用户使用的一般RAM区。对它的使用没有任何规定或限制,但在一般应用系统中常用做堆栈区域。

2.内部数据存储器高128单元

内部RAM的高128单元地址为80H~FFH,其中有21个存储单元是供给专用寄存器SFR(Special Function Register,也称为特殊功能寄存器)使用的,其名称、符号及地址如表2-2所示。

特殊功能寄存器在MCS-51单片机中扮演着非常重要的角色,凡是要使用单片机的定时器/计数器、串行口、中断等功能,都必须先设置特殊功能寄存器中的各相关控制寄存器才能工作,如何设置我们将在后续内容中做详细介绍。

表2-2 MCS-51单片机特殊功能寄存器

其中,标有位地址或位名称的特殊功能寄存器既可以按字节方式寻址,又可以按位寻址,即实现对某一位的控制。