历史上的今天
返回首页

历史上的今天

今天是:2025年05月06日(星期二)

正在发生

2018年05月06日 | C51单片机是怎么存储程序和数据的

2018-05-06 来源:eefocus

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

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

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

程序存储器

51单片机的程序存储器用于存储代码和一些固定表格常数。
可寻址的程序存储器空间为64KB。

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

单片机如何执行指令?
如图:

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

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

数据存储器

51单片机内外数据存储器是两个独立的地址空间,应单独编址。
片内数据存储器地址空间"00H-FFH",RAM地址空间“00H-7FH” 特殊功能寄存器SFR地址空间“80H-FFH”
片外数据存储器地址空间“0000H-FFFFH”
如图:

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

位寻址区,地址空间20H-2FH,16个单元,共128位。

数据缓冲区,地址空间30H-7FH,共80个单元。

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

总结:对于数据存储器,则分为内部数据存储器(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个字节范围中,其余字节无定义,但是用户不能对这些字节进行“读写操作”

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


推荐阅读

史海拾趣

Caltron Devices Ltd公司的发展小趣事

在电子行业的早期阶段,Caltron Devices Ltd公司便以研发为核心,致力于开发具有竞争力的电子产品。公司投入大量资源,引进先进设备和技术,培养了一支专业的研发团队。通过不懈的努力,Caltron成功推出了一系列创新产品,不仅在国内市场取得了良好的业绩,还逐渐打开了国际市场的大门。

EICHHOFF公司的发展小趣事

品质一直是EICHHOFF公司发展的核心竞争力。为了确保产品质量的稳定性和可靠性,公司建立了一套完善的质量管理体系,并持续进行改进和优化。从原材料采购到生产加工、从产品检测到售后服务,每一个环节都严格按照质量管理体系的要求进行。

此外,EICHHOFF公司还积极引入国际先进的品质管理工具和方法,如六西格玛、精益生产等,以进一步提高产品质量和生产效率。这些努力使得EICHHOFF的产品在行业中享有很高的声誉和信誉。

永源微电子(APM)公司的发展小趣事

随着国内外市场的不断开拓和技术实力的不断提升,永源微电子开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术引进和合资合作等方式,不断提升自身的国际化水平。同时,永源微电子还注重内部管理和人才培养,通过建立完善的管理体系和激励机制,吸引和留住了一批优秀的技术人才和管理人才。在全球化战略的推动下,永源微电子实现了持续稳健的发展,成为了电子行业中一颗璀璨的明星。

以上五个故事分别从不同角度描绘了永源微电子(APM)公司的发展历程,包括创立与初步发展、技术突破与产品线拓展、市场拓展与品牌建设、A轮融资与战略合作以及全球化战略与持续发展等方面。这些故事基于事实性的描述,展现了永源微电子在电子行业中的成长轨迹和发展成就。

GS Technology公司的发展小趣事
如心电图机、脑电图机等,用于显示生物电信号。
Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

Acopian Power Supplies公司的发展小趣事

AE&ST公司深知人才是企业发展的根本。公司注重人才培养和团队建设,通过提供良好的工作环境和激励机制,吸引了大批优秀的研发和管理人才。同时,公司还积极开展员工培训和教育活动,提升员工的专业技能和综合素质。这些措施为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

求助求助

紧急求助!! 我是大专的正在弄毕业设计! 但说实话弄的什么也稀里糊涂的! 着急问个东西 我正在弄一个数字电压表的毕业设计!AT89C52单片机ADC0809芯片0~5V 差不多弄完了! 老师说缺少硬件工作过程! 我不知道怎么弄! 哪位大侠会的加我QQ ...…

查看全部问答>

到底做系统集成的方向在哪里?

是精于一方面,比如综合布线, 还是大而全? 请大家指教。…

查看全部问答>

如何在NOR Flash上使用jffs2根文件系统

Hi,guys: 基本配置: CPU:LPC2478 SDRAM:16M NOR Flash:4M kernel:uClinux(2.6.24.2) 开发板提供的根文件系统只有ROMFS,而且是通过uboot通过U盘down到SDRAM上运行的 我已经实现TFTP启动,根文件系统ROMFS,也能挂载NFS文件系统, ...…

查看全部问答>

固定电话机来电检测及其号码分析和排除怎么做程序,谁有原程序呢

我的毕业设计请求你帮我看看 谢谢拉 我都要急疯了 现在的固定电话各式各样,但是功能基本一致。要实现电话来电检测是怎么样一个过程,主要想问再程序中如何实现!是不是用单片机来实现的呢? 结合以下几点缩小了问题的范围,希望NB人士给以程序作 ...…

查看全部问答>

wince 6.0 驱动异常问题

我在wince6.0 下修改按键驱动 [/ BOOL KeyPad::IsrThreadProc(void) {         RETAILMSG (1, (TEXT(\"------------------keypad InterruptInitialize success1\\r\\n\")));     m_hevInterrupt = CreateEvent(NULL, ...…

查看全部问答>

请教大家这个电路中二极管是否能起到隔离的作用

电流源和电压源有两个不同的地。请教大家这个电路中二极管是否能起到隔离的作用,当电流源工作的时候电压不会传入电压源的两端 复件 d.jpg (949.27 KB) 下载次数:1 2010-12-28 10:34 分享本文到: ...…

查看全部问答>

EK-stm32SD卡调试

1、hw_config.c文件:修改USB时钟相关配置、USB使能脚输出模式(参考Joystick);2、usb_desc.c文件:修改PID为0x5721(或其它,0x5720似乎是内置ST-LINK的,待验证);3、msd.c文件:在u8 MSD_GoIdleState(void)函数中,MSD_CS_LOW();后 ...…

查看全部问答>

矩阵键盘检测

本人是新手,有些基本的问题弄不清楚。还有本人在做矩阵键盘检测时,不知为什么,按键按了数码管只显示0,没有反应。请各位大虾指点下。谢谢哈#include <REGX51.H>#define uint unsigned int#define uchar unsigned charsbit Key_ce=P1^3;sbi ...…

查看全部问答>