C51数据类型和存储空间.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C51数据类型和存储空间

关于单片机存储器的问题,idata,data,badata,xdata,pdata,code,片内存储区,片外存储区关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。下面我给楼主讲解一下:51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。51单片机有以下几个内存模块组成:1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。 程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩 片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;2】RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量, data unsigned char Var = 0; 那么,这个 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吧。51单片机定义一个大数组存在idata与xdata中有什么区别?区别如下:1、位置不同:idata定义在高128字节中,xdata定义在外部RAM中,一些单片机内部集成了外部RAM。 2、访问速度不一样:访问idata的速度稍快。 3、最后,可能也是最重要的,二者在初始化上区分很大

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档