IEEE754数据转换程序

上传人:积*** 文档编号:120480944 上传时间:2022-07-17 格式:DOCX 页数:5 大小:197.58KB
返回 下载 相关 举报
IEEE754数据转换程序_第1页
第1页 / 共5页
IEEE754数据转换程序_第2页
第2页 / 共5页
IEEE754数据转换程序_第3页
第3页 / 共5页
点击查看更多>>
资源描述
1. 问题的提出笔者在系统开发中采用RS485实现单片机与外围设备的通信,通信采用通用串行接口合同(USS),按照串行总线的主从通讯原理来拟定访问的措施。USS规定了一套严格的通信规则,有关浮点数参数值,USS规定采用IEEE-754格式进行传送。例如,浮点数50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接受外围设各的参数值时,需要解决如何实现浮点数与IEEE格式转换的问题。2.IEEE浮点数的格式在计算机中,浮点数的存储均采用4字节的IEEE-754格式。例如,浮点数50.0的IEEE表达形式如下:二进制:其中,最高位表达符号,1表达负,0表达正;第2330位表达阶码。注意:阶码是以2为底的指数再加上偏移量127.第022位是尾数部分。尾数的整数部分永远为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格式参数值时,依次将符号、阶码、尾数通过移位取出,然后按照IEEE计算规则计算出相应的浮点数。当需要发送给外围设备的浮点数时,按相反的措施将其转化为IEEE格式后再发送出去。笔者始终感觉上述措施太麻烦,并且效率太低。后来笔者想到,既然在C语言中浮点数自身就是采用IEEE格式来存储的,能否运用C语言自身的机制来实现浮点数和IEEE格式的转换?通过尝试,发现运用unlon数据类型可以较好地完毕这工作,即只需定义下面这个union类型:注意:类型定义的背面别忘了尚有个符号;,union类型虽然有两个内部变量,但两个内部变量占用同-地址空间,它只占用4个字节。内部float变量a(占用4个字节)和char数组b(同样占用4个字节)从同一种地址开始寄存,并共享同一块内存空间。C语言中,对于单精度浮点数a,采用四个字节(IEEE格式)来存储,依次存储在四个持续的存储单元内,低字节存储在低地址存储单元,高字节存在高地址存储单元;字符数组b也采用和a同样的存储方式。运用unlon数据类型,可以直接访问浮点数以IEEE格式寄存在存储单元中的十六进制字节,通过直接读取或修改这些十六进制字节,便可以巧妙地实现浮点数与IEEE格式的转换。(1)IEEE格式转换浮点数当单片机接受来自USS总线的数据时,只需将4个字节的数据放到内部变量b中,再访问内部变量a,即可实现转换。下面给出示意程序,供参照。(2)浮点数转换IEEE格式当单片机解决好数据后,需要把浮点型的数据转换成IEEE格式,输出给USS总线。只需把数据赋予内部变量a,再从内部变量b中取出相应的4个字节即可。2.1 定义union数据typedef unionfloat ul_Temp;uint8 uc_Buf4;un_DtformConver;2.2 应用un_DtformConverDtformConver;uint8 i;int32 il_Temp32;float f_Temp;/十进制float型数据转换成IEEE754原则DtformConver.ul_Temp = 220.1;il_Temp32=0;for(i=0;i4;i+)il_Temp32|= (int32)(DtformConver.uc_Bufi(i*8);/IEEE754原则转换成十进制floatil_Temp32 = 0x435C0000;/实际十进制值是220memset(uint8 *)&DtformConver.uc_Buf0,0,4);for(i=0;i(i*8);f_Temp = DtformConver.ul_Temp;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!