IEEE754数据转换程序.doc

IEEE754数据转换程序.doc

ID:55795139

大小:220.70 KB

页数:5页

时间:2020-06-07

IEEE754数据转换程序.doc_第1页
IEEE754数据转换程序.doc_第2页
IEEE754数据转换程序.doc_第3页
IEEE754数据转换程序.doc_第4页
IEEE754数据转换程序.doc_第5页
资源描述:

《IEEE754数据转换程序.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1.问题的提出  笔者在系统开发中采用RS485实现单片机与外围设备的通信,通信采用通用串行接口协议(USS),按照串行总线的主从通讯原理来确定访问的方法。USS规定了一套严格的通信规则,关于浮点数参数值,USS规定采用IEEE-754格式进行传送。例如,浮点数50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接收外围设各的参数值时,需要解决如何实现浮点数与IEEE格式转换的问题。  2.IEEE浮点数的格式  在计算机中,浮点数的存储均采用4字节的IEEE-754格式。例如,浮点数50.0的IEEE表示形式如下:二进制:  其

2、中,最高位表示符号,"1"表示负,"0"表示正;第23~30位表示阶码。注意:阶码是以2为底的指数再加上偏移量127.第0~22位是尾数部分。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。一个浮点数计算式为:  例如,前面绘出的浮点数的表示形式中,s=0,n=132,m=(1/2+0/4+0/8+1/16+0/32+……),则计算结果为50.0.  3.浮点数与IEEE格式转换  在最初的C语言编程中,笔者根据上面介绍的IEEE表示形式,采用移位计算的方法实现浮点数和IEEE格式转换。当接收到外围设备传来的4字节IEEE格式参数值时,依次将符号、阶码、尾数通过移位取出,然后按照IEE

3、E计算规则计算出对应的浮点数。当需要发送给外围设备的浮点数时,按相反的方法将其转化为IEEE格式后再发送出去。  笔者一直感觉上述方法太麻烦,而且效率太低。后来笔者想到,既然在C语言中浮点数本身就是采用IEEE格式来存储的,能否利用C语言本身的机制来实现浮点数和IEEE格式的转换?经过尝试,发现利用unlon数据类型可以很好地完成这工作,即只需定义下面这个union类型:  注意:类型定义的后面别忘了还有个符号";",union类型虽然有两个内部变量,但两个内部变量占用同-地址空间,它只占用4个字节。内部float变量a(占用4个字节)和char数组b(同样占用4个字节)从同一个地址开始存放,

4、并共享同一块内存空间。C语言中,对于单精度浮点数a,采用四个字节(IEEE格式)来存储,依次存储在四个连续的存储单元内,低字节存储在低地址存储单元,高字节存在高地址存储单元;字符数组b也采用和a同样的存储方式。利用unlon数据类型,可以直接访问浮点数以IEEE格式存放在存储单元中的十六进制字节,通过直接读取或修改这些十六进制字节,便可以巧妙地实现浮点数与IEEE格式的转换。  (1)IEEE格式转换浮点数  当单片机接收来自USS总线的数据时,只需将4个字节的数据放到内部变量b中,再访问内部变量a,即可实现转换。下面给出示意程序,供参考。  (2)浮点数转换IEEE格式  当单片机处理好数据

5、后,需要把浮点型的数据转换成IEEE格式,输出给USS总线。只需把数据赋予内部变量a,再从内部变量b中取出对应的4个字节即可。2.1定义union数据typedefunion                                        {   floatul_Temp;   uint8 uc_Buf[4];}un_DtformConver; 2.2应用un_DtformConver   DtformConver;uint8i;int32il_Temp32;floatf_Temp;//十进制float型数据转换成IEEE754标准DtformConver.ul_Temp=220

6、.1;         il_Temp32=0; for(i=0;i<4;i++) {    il_Temp32  

7、=(int32)(DtformConver.uc_Buf[i]<<(i*8)); } //IEEE754标准转换成十进制floatil_Temp32=0x435C0000;        //实际十进制值是220 memset((uint8*)&DtformConver.uc_Buf[0],0,4);  for(i=0;i<4;i++) {    DtformConver.uc_Buf[i]=(uint8)(il_Temp32>>(i*8)); } f_Temp=DtformC

8、onver.ul_Temp;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。