×
嵌入式 > 技术百科 > 详情

IEEE32数据传输格式分解

发布时间:2020-05-29 发布时间:
|
   平时Modbus常用的通讯。比如传输某寄存器的数据 “0x3F” 装换成十进制后是“63”。这种类型直观、简单。但是需要处理到正负数、浮点数时就不是很方便了,即使加标志位判断,数据的范围有局限性,可移植性差。在PLC,触摸屏中它们通讯这类数据则用了另一种格式。即IEEE32数据处理格式。下边简单介绍一下,废话不多说,直接说主题。(详情百度)从名字可以看出,本数据是32位。
下边 随便写个32位数跟大家一块算    
十六进制          0x41               0xc5               0x3b              0x28 
二进制         01000001       11000101       00111011      00101000
分解             sppppppp       pzzzzzzz         zzzzzzzz        zzzzzzzz
说明  :  S表示本数据的正负,0表示本数据正数,1表示本数据为负数
            P是后面位偏移,算法是把p整合为一组转换为十进制为131,于127比较
             大4,那么待会向右位移(大几移几位),若小向左移位。
  在"S P"后面都省去“1.” 复原后为 1.1000101 00111011 00101000
                                       右移后为11000.101 00111011 00101000
 小数左边算法 1*2^4+1*2^3+0*2^2+0*2^1+0*2^0=24;
小数右边算法1*2^-1+0*2^-2+1*2^-3+0*2^-4+0*2^-5+1*2^-6……  
                    后边就不说了,结果是0.6678.
两个相加是24.6678.
可以表示任意一个数据,编写这种程序可移植性强,无局限性,比如发个整数30我们可以计算出来。              正负标志位为0,向右移动4位p的值就是127+4= 131  二进制  10000011    Z为11110000 00000000 00000000    移位整合后
    0x 41      0xf0      0x00        0x00
用KEIL编写程序时,包含math.h内有计算幂运算函数 pow(float x,float y);程序具体怎么写这里就不多说 。毕竟不是很容易写,尊重下个人成果。
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器