百科狗-知识改变命运!
--

关于单片机存储器的问题,idata,data,badata,xdata,pdata,code,片内存储区,片外存储区都是些什么关系啊

小肉包1年前 (2023-12-15)阅读数 7#综合百科
文章标签单片机变量

关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。

下面我给楼主讲解一下:

51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。

51单片机有以下几个内存模块组成:

1ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。

程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩

片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;

2RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,

data unsigned char Var = 0;

关于单片机存储器的问题,idata,data,badata,xdata,pdata,code,片内存储区,片外存储区都是些什么关系啊

那么,这个 Var变量就是放在内部的低128位Ram中

-------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,

idata unsigned char Var = 0;

那么,这个 Var变量就是放在内部的高128位Ram中

-------特殊功能寄存器(SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,

Sfr unsigned char Var = 0x90;

那么,这个 Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险

------外部RAM 64K(0000-FFFF)

外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用

pdata来修饰的,当然,也可以用xdata来修饰。

除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;

回过头来讨论pdata和xdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?

答案是Pdata,因为Xdata修饰的变量,用的是DPTR寻址,Pdata用的是R0和R1.DPTR因为是16位的,所以可以覆盖整个的64K外部Ram,R0和R1是8位,所以只能寻址最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多

楼主又疑惑了,好多地址是重复的,比如,我向80H地址写一个数值,单片机怎么知道读的是内部的高128位RAM?还是SFR?还是外部64K的RAM呢?

答案是用指令,如果是直接寻址,那么访问的就是SFR,如果是R0或者R1间接寻址,就是内部高128位RAM,如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令,那么就是访问外部64KRAM中的第80H个地址。

概括一下来说,51的内存由以下组成:

1----程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom,C语言用Code定义)

2----内部低128位Ram,C语言用data定义

3---内部高128位Ram,C语言用idata定义

4---内部SFR,C语言用Sfr定义

5---外部65536个Ram(通常,很多单片机厂家不会给你扩展那么多的,一般来说扩展256个字节或者1024个字节就差不多了,最近宏晶的出了个扩展4096字节的。这65536字节的Ram,前256个可以用Pdata修饰,也可以用Xdata修饰,超过256个之后的,只能用Xdata修饰)

以上所说的只是针对51内核的单片机,其他内核的,像ARM之类的,不是这种结构的。

最后,回答楼主的问题:

片外存储区是什么?

这个问题太模糊,答案可以是外扩的Flash,也可以说是外扩的RAM,

如果问题是这么问的:

程序或者常量存储在片外存储区,这个片外存储区指的是什么?

答案是外扩Flash;

如果问题是---变量存储在片外存储区,这个片外存储区指的是什么?

答案是外扩RAM;

一般来说,如果不指明的话,外内存储区,行业内人士指的是外部的Ram。

片内存储器是什么?是不是就是内部的E2PROM?

片内存储区一般来说,指的是内部的Ram,包括高128位(idata)和低128位(data)

片内存储器,这个说法我没听说过,可能是EEPROM吧。

单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此形成51单片机内部ram和外部ram的区别。

一、从使用字节区别。标准 51单片机的片内 RAM 地址从 0x00H~0x7F 共 128 个字节。而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。而片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64K 字节。

二、从连接地址区别。片内 RAM 和片外 RAM 的地址不是连起来的,片内是从 0x00 开始,片外也是从 0x0000 开始的,分别形成data,即片内 RAM 从 0x00~0x7F;idata,即片内 RAM 从 0x00~0xFF;pdata,即片外 RAM 从 0x00~0xFF;xdata,即片外 RAM 从 0x0000~0xFFFF。

一般情况下,使用 data 区域,data 不够用了,就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的 51 系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。

扩展资料:

51单片机对所有兼容Intel 8031指令系统的统称,8004单片机成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机属于基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

51单片机的RAM用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据,ROM用以存放程序、一些原始数据和表格。四个8位并行I/O口,既可用作输入,也可用作输出。T/C包括两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式。

百度百科-51单片机

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)