C51单片机是怎么存储程序和数据的

judy的头像

初学51总是会有这样的疑问,从电脑下载程序到开发板后,程序去哪了? C51中,用户或应用程序,系统程序和数据都是存放在哪的?

51单片机从物理结构上,可分为片内,片外程序存储器,片内片外数据存储器。

51单片机从功能上,有程序存储器,片内数据存储器,特殊功能寄存器,位地址空间,片外数据存储器。

程序存储器

51单片机的程序存储器用于存储代码和一些固定表格常数。

可寻址的程序存储器空间为64KB。

51单片机的从物理角度上可分为:片内,片外程序存储器,作为编址空间,编址规律是:先片内,后片外,片内片外连续,不重叠。

如图:为51单片机程序存储器编址图。

C51单片机是怎么存储程序和数据的

单片机如何执行指令?

如图:
C51单片机是怎么存储程序和数据的

无论片内程序存储器,还是片外程序存储器,他们的地址是共享的。如果片内4K ROM的话,地址就是0x0000-0x0FFF,从0x1000-0xFFFF就是外部ROM的地址空间。可外部ROM的0x0000-0x0FFF的这一部分是否使用呢,这取决于单片机EA引脚的电平值。EA=1时就是使用内部ROM的这一部分,外部ROM的这一部分浪费不用;EA=0时就是使用外部ROM的这一部分,内部ROM浪费不用。从CODE段读取数据要使用汇编的MOVC指令,单片机会根据MOVC指令、EA状态、要读取的地址值,来自动地判断从什么存储器里取数据。

程序地址空间一般可以根据用户需要任意安排使用,但是cpu执行特殊程序的入口地址,用户必须按照规定存放相应的程序。

特殊程序入口地址如图:

C51单片机是怎么存储程序和数据的

数据存储器

51单片机内外数据存储器是两个独立的地址空间,应单独编址。

片内数据存储器地址空间"00H-FFH",RAM地址空间“00H-7FH” 特殊功能寄存器SFR地址空间“80H-FFH”

片外数据存储器地址空间“0000H-FFFFH”

如图:

C51单片机是怎么存储程序和数据的

为了使片内数据存储器的存储空间合理运用,对低128字节的RAM划分了不同的功能区。

如图:

C51单片机是怎么存储程序和数据的

C51单片机是怎么存储程序和数据的

位寻址区,地址空间20H-2FH,16个单元,共128位。
数据缓冲区,地址空间30H-7FH,共80个单元。

总结:对于数据存储器,则分为内部数据存储器(IDATA/RAM)和外部数据存储器(XDATA)两个部分,但这两个存储器就不像code存储器那样共享地址空间的了。

一般的8051芯片,内部RAM只有128B,从0x00-0x7F,而从0x80-0xFF则是SFR(CPU工作寄存器和各种外设寄存器都在此)的区域。对于8052来说,内部RAM有256B,所以0x80-0xFF是高128B的RAM在使用。可这部分不是SFR专用的吗?是SFR专用,但注意,SFR的访问只能使用“直接寻址方式”(使用特定的汇编指令来实现),区别就在这里。只有通过直接寻址访问的地址才是SFR,否则就是普通的RAM。至于外扩的RAM(XDATA),地址也是从0x0000-0xFFFF的,而且这里的0x0000和内部RAM的0x00是不同的,是完全独立的两个空间。他们的访问方法也是不同的。MCS-51使用MOVX指令,来读写XDATA区。而且,访问XDATA区,是需要DPTR寄存器来辅助的。因为只有DPTR才能装得下十六位的XDATA地址。

参考: http://blog.csdn.net/shanzhizi/article/details/8997881

特殊功能寄存器

特殊功能寄存器(SFR,Special Function Registers)别称专用寄存器,主要用于管理,控制,片内逻辑部件,并行i/o口,串行i/O口,定时器/计数器,中断系统等功能模块的工作。

51单片机中,专用寄存器与片内RAM统一编址,且作为直接寻址使用。

51单片机有18个专用寄存器,其中3个是双字节寄存器,占用21个字节。

在SFR块的地址空间80H-FFH中,仅仅只有21个字节作为特殊功能寄存器离散分布在这128个字节范围中,其余字节无定义,但是用户不能对这些字节进行“读写操作”

下图为特殊功能寄存器的名称,表示符,地址一览表。

C51单片机是怎么存储程序和数据的

转自: 爱学控制的猫