8051单片机有两个独立寻址的程序存储器和数据存储器,共有4个物理上相对独立的存储器空间:内、外程序存储器,内、外数据存储器。其组织结构如图2.9所示。
图2.9 8051的存储器结构
一、程序存储器
程序存储器用于存放编好的程序和表格常数。8051单片机片内有4KB的程序存储器,外部可扩展最多64KB的程序存储器。片内外的ROM是统一编址的。
如端保持高电平,8051的CPU执行片内ROM中的程序,当超过4KB时,将自动执行片外程序存储器中的程序;当端保持低电平时,单片机只能从外部程序存储器中取指。
单片机复位后,程序计数器PC=0000H,PC决定了程序执行的顺序,但程序存储器有一组特殊的地址空间0003H~002AH,共40个单元。这40个单元被均匀地分为5段,作为5个中断源的中断地址区。其中:
0003H~000AH 外部中断0中断地址区;
000BH~0012H 定时/计数器0中断地址区;
0013H~001AH 外部中断1中断地址区;
001BH~0022H 定时/计数器1中断地址区;
0023H~002AH 串行中断地址区。
这样若系统中使用了中断,则在0000H~0002H单元存放的是一条无条件转移指令,以便直接转去执行指定的程序。
二、数据存储器
单片机的数据存储器由读写存储器RAM组成,分为内部数据存储器和外部数据存储器两大部分,如图2.10所示。
图2.10 单片机数据存储器结构
1.内部数据存储器
共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址00H~7FH)的内部RAM区和高128单元(单元地址80H~FFH)的特殊功能寄存器区。
(1)内部数据存储器低128单元。
按其用途划分为寄存器区、位寻址区和用户RAM区三个区域如表2.9所示。
表2.9 内部RAM
①寄存器区。(www.daowen.com)
8051共有4组寄存器,占据内部RAM的00H~1FH单元,每组8个寄存单元(各为8位),各组都以R0~R7作为寄存器单元编号。寄存器常用于存放操作数、中间结果等。
②位寻址区。
内部RAM的20H~2FH单元,既可字节寻址也可位寻址区,位地址为00H~7FH,通常把该区称之为位寻址区。表2.10为位寻址区的位地址。
表2.10 片内RAM位寻址区的位地址
③用户RAM区。
供用户使用的一般RAM区,其单元地址为30H~7FH。
(2)内部数据存储器高128单元。
内部RAM的高128单元共定义了21个字节用于特殊功能的寄存器(Special Function Register),其中有11个专用寄存器是可以位寻址的。
各寄存器的字节地址及位地址并列于表2.11中。
表2.11 SFR位地址及字节地址表
续表
2.外部数据存储器
空间为64KB,地址范围是0000H~FFFFH,片内外存储器采用不同的寻址方式。存于这个空间的数据只能做读写操作,其中读、写控制信号分别由P3.7、P3.6引脚提供。
三、存储器的C51描述
在C51中可定义数据的存储类型,即指定变量的存储区域,存储类型与单片机存储器的对应关系如表2.12所示。
表2.12 存储类型与单片机存储器的对应关系表
在单片机C语言程序设计中,用户无须考虑程序的存放地址,编译程序会在编译过程中按照上述规定,自动安排程序的存放地址。
例如:C语言是从main( )函数开始执行的,编译程序会在程序存储器的0000H处自动存放一条转移指令,跳转到main( )函数存放的地址;中断函数也会按照中断类型号,自动由编译程序安排存放在程序存储器相应的地址中。因此,只需了解程序存储器的结构就可以了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。