51单片机是怎样存储程序和数据的?

发布者:HeavenlyJoy444最新更新时间:2021-03-17 来源: eefocus关键字:51单片机  存储程序  数据 手机看文章 扫描二维码
随时随地手机看文章

MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。


好,说回MCS-51。


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


对于数据存储器,则分为内部数据存储器(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地址。


所以说,MCS-51读写IDATA区的速度是最快的,而且访问方法也是最多的。访问XDATA区的速度相对就要慢很多。MCS-51的堆栈要优先开辟在IDATA区中,并且在IDATA区中开辟的堆栈,可以使用栈指针寄存器SP来控制。如果栈实在太大,只能开辟在XDATA区中,那么CPU的SP寄存器就很难借力,只能由我们自己来构造堆栈结构和堆栈指针。既然外部程序空间和数据空间都是0-64K(0x0000-0xFFFF),那么我实际上可以为了省事/方便改写程序等原因,外部的CODE和DATA就可以共用一个可擦写存储器了(比如各种RAM什么可擦可写的)。比如系统有64K的外扩MEMORY,低32K我用作保存CODE,并让单片机在这32K之中读取程序运行,高32K我作为用户数据的保存处,完全可以。只是此时本来完全独立的CODE和DATA空间,因为在硬件芯片上共用了一个MEMORY,所以他们之间就可能互相影响了,程序就能自己改写程序了。比如0x0020处是一个指令,我通过MOVX把0x0020处改写了,那么再利用MOVC把0x0020处读取出来,数据就和原来不一样了。


易混淆的症结在于,单片机存储空间是一个逻辑上的概念,是人为划分出来的两个相互独立的空间。而硬件电路上的MEMORY芯片则是现实中的概念,单片机的存储空间最终会落实在电路层面的芯片上,所以逻辑上的存储空间会因为物理上的电路连接而发生重叠。但是在逻辑层面上,这两个空间还是完全独立的。


附:各类存储空间名称的定义:


data:固定指前面0x00-0x7f的128个RAM,可以用a寄存器直接读写的,速度最快,生成的代码也最小。


idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mov ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,我不太会,所以这里不提。


关键字:51单片机  存储程序  数据 引用地址:51单片机是怎样存储程序和数据的?

上一篇:51单片机存储程序和数据的介绍
下一篇:51单片机闪烁灯制作

推荐阅读最新更新时间:2024-11-02 11:36

stm32串口中断接收一帧数据
最近用到stm32的串口,中断一个字符一个字符接收好心累,网上度了一下发现了一篇好的帖子,和大家分享一下,原贴地址:http://www.51hei.com/bbs/dpj-39885-1.html 再次感谢原贴楼主的分享,为了方便大家,我把原文复制过来》 今天说一下STM32单片机的接收不定长度字节数据的方法。由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的ARM单片机。 IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据
[单片机]
stm32串口中断接收一帧<font color='red'>数据</font>
51单片机--堆栈
子程序或中断程序时保护现场,因为51单片机的寄存器是十分有限的,而相对来说普通数据存储器更充足,通过入栈将寄存器中的内容临时保存到堆栈中(普通数据存储器),这是一个用时间换取空间的编程方式。 51单片机的堆栈是向上生长的,就是堆栈不为空时,栈底地址小于栈顶地址,当将数据入栈时,栈顶地址增加。还有一个技巧是,堆栈是数据存储器的一部分,也就是说堆栈除了利用push和pop访问,也可以通过普通的选址方法访问,例如mov。有时我们想访问堆栈数据,但不想改动变动栈顶,这时可以通过mov来访问数据。还有一个书上很少提到的知识点是出栈之后,原来那个栈顶的内容并不会清零,所以我们依然可以像对待普通数据存储器一样访问。 下面通过教科书上的一个变
[单片机]
风河联合5家公司合作推出Fusion互联车辆数据管理平台
Airbiquity、Cloudera、NXP、Teraki和风河等5家公司近日发布了汽车产业协同计划The Fusion Project,旨在定义一整套高效数据生命周期平台,推进集成化互联车辆发展。这套预集成的硬件和软件解决方案整合了领先企业的创新技术,支持汽车制造商高效地收集、分析和管理互联车辆数据,从而确保功能开发、部署和升级的持续进行。 随着互联车辆技术的不断进步,围绕汽车产生的数据量呈指数级增长。汽车制造商由此能够以数据为中心为消费者提供新功能,同时为自己创造新的营收机会。然而,他们也面临着前所未有的挑战,这就是如何有效地收集、分析和管理车辆数据,因为相关的解决方案目前还支离破碎,机器学习模型偏于僵化,智能边缘计算能
[嵌入式]
风河联合5家公司合作推出Fusion互联车辆<font color='red'>数据</font>管理平台
AT89C51单片机智能语音拨号报警系统
随着人们生活水平的提高和安防意识的增强, 急需开发面向大众、价格低廉、运行可靠的自动报警系统。鉴于住宅电话和移动通信设备的普及, 以及电话语音报警的快捷、有效及价格低廉等优点, 公共通信网成了报警系统的最佳传输媒介。本文介绍的报警系统就是在此基础上发展起来的一种智能语音拨号报警系统, 该系统可广泛用于各种对安防要求较高的场合, 如智能楼宇、商场、银行和工厂等。 电话自动报警的主要功能为: 用户根据需要把自己的手机号码、办公室电话或报警监控中心的电话预存入报警主机。报警主机不断地对所监控的设备( 门禁、烟雾探测器、窗磁、摄像头等) 状况进行巡检, 当有不安全情况( 如火灾、非法入室、视频丢失等) 发生时, 报警主机拨通预先存
[单片机]
AT89C<font color='red'>51单片机</font>智能语音拨号报警系统
基于CDMA的移动无线数据传输系统
摘要:介绍一种以C8051F020 MCU为控制核心、结合CDMA业务和GPS系统开发的移动无线数据传输系统,整个系统由移动终端、CDMA网络、Internet网络、信息管理中心服务器四部分组成;重点描述移动终端的硬件组成、软件设计。系统可用于移动状态下无线数据传输,例如车辆调度管理,停车场所和交通监测数据的传输,金融系统POS联网,气象站数据采集,各种分布式遥测遥控系统等。实验结果表明,本系统应用于各种移动场合的数据传输是目前最好的选择。 关键词:CDMA GPS 数据业务 C8051F020 ME45 引 言   目前,移动无线传输数据的方式主要有3种:GSM短消息、GPRS和CDMA。它们的特点比较如下:   ① 移
[单片机]
stc51单片机硬件SPI驱动nrf24l01程序
stc51系类单片机大多数带SPI模块,例如STC12C5608AD,就带有SPI口,可以直接用此SPI口驱动nrf24l01,省去模拟SPI的麻烦。 spi初始化代码如下: void SPI_Init(void) { SPSTAT |= 0XC0; // 清高两位, SPCTL = 0XD0; // 设置为主模式,开SPI } spi收发数据代码如下: uchar SPI_RW(uchar tr_data) { uchar i=0; SPSTAT |= 0Xc0; // 清高两位, SPDAT=tr_data; while(((SPSTAT&0X80)!=0X80)&&(i 20)) { i++; delay_ms(1)
[单片机]
基于AVR和51单片机的机器鱼语音控制系统设计与实现
近年来,海洋资源开发日趋焦点,机器鱼作为一项现代化的新成果,具有广泛的现实意义,它可以更逼真的模拟鱼的游动原理,在水下的运动更符合流体力学原理,具有更好的加速和转向能力,利用它可以探测海洋资源,寻找和检测海域中受污染的地方,也可以用来勘探地形等等。随着科技的发展,人类对智能化产品的研究步伐在不断加快。但是,作为一项比较新的产品,机器鱼的智能化程度还远远不够,伴随着研究的加深,机器鱼的功能也会更趋完善。语音识别作为一门交叉学科,它的出现实现了长期以来人们渴望与机器交流的梦想。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。近年来,语音识别技术发展迅速,取得显著进步,并且已经开始被应用于通信、家庭服
[单片机]
基于AVR和<font color='red'>51单片机</font>的机器鱼语音控制系统设计与实现
新品发布 | 研华新一代CXL 2.0内存,数据中心效率大革新!
2024 年 10 月, 研华科技宣布推出新一代SQRAM CXL 2.0 Type 3 内存模块。Compute Express Link (CXL) 2.0 是内存技术的下一代进化产品,可通过高速、低延迟的互连实现内存扩展和加速,满足大型 AI 训练和高性能计算集群的需求 。 CXL 2.0 建立在 CXL 规范的基础上,引入了内存共享和扩展等高级功能,使异构计算环境中的资源利用效率更高,在当今高性能计算领域引起了广泛关注。 通过 E3.S 2T 规格扩展内存 在传统的内存架构中,固定的内存分配常常导致资源利用率低下,以及在处理大量数据时出现瓶颈。现在,基于EDSFF标准的E3.S规格带来了革命性的改变。搭载CX
[工业控制]
新品发布 | 研华新一代CXL 2.0内存,<font color='red'>数据</font>中心效率大革新!
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved