浮点数在E2PROM中的存取方法.docVIP

  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文档。上传文档
查看更多
浮点数在E2PROM中的存取方法

浮点数据在E2PROM中的存取方法 摘 要 介绍了C51语言的浮点数在E2PROM中的存取方法。 关键词 浮点数 非易失存储器 存取方法 C51编程 1 引言 由于C语言的高效性和易维护性,因而C51语言在工程中得到了广泛应用。以下所讨论的问题中的程序举例就是用C51语言编写来实现其功能和目的。在我们设计产品的过程中,通常要将一些仪器参数保存起来,作为仪器正常工作的保障,这些浮点参数一般都保存在非易失性存储器(E2PROM)中,以防丢失。 2 浮点数在E2PROM中的存取 2.1 浮点数在并行E2PROM中的存取 MCS-51单片机在智能化仪器仪表的设计中得到了广泛的应用,同时C51单片机开发语言方便灵活的接口编程能力和强大的数据处理能力,在单片机的开发中占有重要地位。其特有的浮点数处理能力为智能化仪器仪表的非线性矫正、数字化校准提供了方便。在C51中,如果浮点数被分配在RAM存储空间,如6264、6116、62256、62128等,其数据的存取由C51自动编译完成,不必编写专门的程序。而非易失性存储器2817A、2864等虽然硬件接口没有特殊要求,但写周期与RAM不同,因此必须为浮点数存储编写专门的存储程序。 一般情况下,用户定义的浮点数在RAM中的地址、存储方式对用户是未知的。但是用户可以通过C51的指针实现对C51浮点数的按字节访问,C51语言的指针是它的一大特色,表现出很强的数据处理能力和灵活性。使用指针可以有效地表示复杂的数据结构,动态分配存储器,直接处理内存地址等,简化程序设计。浮点数在内存中的存储方式如表1所示。 地址 0 1 2 3 内容 MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEE 表1 浮点数在内存中的存储 其中,S 符号位,1表示负,0表示正; ????? E 阶码(在两个字节中)偏移最大为127; ????? M 23位尾数,最高位为1。 例如浮点数变量k=-12.5的十六进制表示为:0xC1 48 00 00,它按如下方式保存于内存RAM的连续4个字节中。 地址 内容 ADD+00H 0x00 ADD+01H 0x00 ADD+02H 0x48 ADD+03H 0xC1 通过以下语句可以直接对变量进行读写操作。 float xdata k, s ;定义浮点数k,s位于外部RAM k=-12.5 ;为变量k赋值为-12.5 s= k ;为变量s赋值为-12.5 由于非易失性存储器2817A、2864等的读操作与RAM类似,而擦、写时间周期比随机存储器RAM要长得多,一般一个字节的擦除和写访问时间为200μS或1 mS,最大的写入周期(包括擦除和写入)时间不超过10mS,典型时间为5mS。因此在实际应用中要满足擦、写周期时间要求,应根据芯片的要求设置等待或中断、查询。每个C51浮点数占用连续的4个字节的存储单元,浮点数的存储也必须是连续的4个字节存储单元。以上语句不能完成浮点数在2817、2864等E2PROM中的保存,因此必须为浮点数存储编写专门的存储程序。 定义ap是指向非易失性存储器2817A、2864的指针,非易失性存储器2817A、2864分配的地址为0x2200。利用指针将RAM中的浮点数依次取出,按字节依次连续存储在非易失性存储器2817A、2864中。也可以使用联合(共用体)将RAM中的浮点数依次取出,按字节依次连续存储在非易失性存储器2817A、2864中。程序执行后,浮点数s的值就自动变为-12.5,并可以由浮点变量xx直接引用或参与运算。程序流程框图如图1所示,程序如下: #include reg51.h #include math.h #include absacc.h #include defines.h #define uchar unsigned char #define uint unsigned int #define d2864 XBYTE[0x2200] N Y N Y N Y 图1 并行EEPROM2864程序框图 #define s XFLOAT[0x0880] /*4*0x880=0x2200浮点数占用4个字节*/ float xdata k=-12.5; uchar *ap=d2864; uchar *k_ap=k; float xdata xx; void delay(uint tt) /* 延迟1mS子程序*/ {

文档评论(0)

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

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

1亿VIP精品文档

相关文档