打印

51单片机数据处理问题

[复制链接]
2822|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大佬们好,最近在学习modbus通信协议,废了老大劲终于把数据从传感器里面读出来了,但是卡在数据处理这一步了处理方法说明书上写的很详细,可是这部分代码实在是不会写,希望有大佬指点一二。
比如这个例子,读到的数据顺序为 66 66 42 7B,需要将其转为二进制后分成1位符号位、8位指数位和23位尾数,然后分别化为整数后再计算===========================================
步骤1:66 66 42 7B对应0x427B6666
将二进制数分成符号、指数和尾数
0 10000100 11110110110011001100110
1为符号+ 8位指数+ 23为尾数
S:0 二进制 = 0 (正符号)
E:10000100 二进制 = 1*27 + 0*26 + 0*25 + 0*24 + 0*23 + 1*22 + 0*21 + 0*20

= 128 + 0 + 0 + 0 + 0 + 4 + 0 + 0

= 132
M:11110110110011001100110 二进制 = 8087142
步骤2:计算十进制数
D = (-1)S * (1.0 + M/223) * 2E-127
= (-1)0 * (1.0 + 8087142/223) * 2132-127
= 1 * 1.964062452316284 * 32
= 62.85
===================================
如果有大佬愿意指点一下,小弟感激不尽

使用特权

评论回复

相关帖子

沙发
hao2014| | 2022-7-23 20:34 | 只看该作者
51很吃力,这种大的运算

使用特权

评论回复
板凳
Diyer123| | 2022-7-23 20:56 | 只看该作者
楼主该补补数电了……
这是典型的32bit浮点数,根本不需要想你发的这么费劲,只需要将读到的寄存器值当做浮点数来处理就好了:
假如你的MCU是大端模式:
unsigned short int regbuff[2];
modbus_read(addr,regbuff,2);//读两个寄存器
float *pf = (float*)buff;//转为浮点数指针
然后在需要用到数据的地方,直接用*pf就可以了,例如:
printf("%f",*pf);
就会输出:
62.85

假如你的系统是小端模式,则需要将浮点数的4个字节点到一下顺序。

使用特权

评论回复
地板
Diyer123| | 2022-7-23 21:00 | 只看该作者
续上,小端模式颠倒字节顺序:
float f;
unsigned char *pa = (unsigned char *)&f;
unsigned char *pb = (unsigned char *)regbuff;
pa[0] = pb[3];
pa[1] = pb[2];
pa[2] = pb[1];
pa[3] = pb[0];
printf("%f",f);
输出:
62.85

使用特权

评论回复
5
R2D2| | 2022-7-23 22:15 | 只看该作者
hao2014 发表于 2022-7-23 20:34
51很吃力,这种大的运算

单片机很吃力,但是写程序的很省力,他的格式符合IEEE754单精度标准,支持float类型的编译器都要在库里面把转换功能做出来。

使用特权

评论回复
6
爱电子的化学人|  楼主 | 2022-7-24 14:46 | 只看该作者
Diyer123 发表于 2022-7-23 20:56
楼主该补补数电了……
这是典型的32bit浮点数,根本不需要想你发的这么费劲,只需要将读到的寄存器值当做浮 ...

确实是这样的,不需要这么费劲,直接转为浮点数就行,非常感谢指导

使用特权

评论回复
7
hao2014| | 2022-7-24 15:06 | 只看该作者
R2D2 发表于 2022-7-23 22:15
单片机很吃力,但是写程序的很省力,他的格式符合IEEE754单精度标准,支持float类型的编译器都要在库里面 ...

是的,如果两个数相乘那更吃力

使用特权

评论回复
8
coody| | 2022-7-24 17:30 | 只看该作者
hao2014 发表于 2022-7-23 20:34
51很吃力,这种大的运算

怎么会吃力?单精度浮点运算而已。现在的51有很快速的,比如STC的。

使用特权

评论回复
9
coody| | 2022-7-24 17:31 | 只看该作者
楼主,单精度浮点运算而已,直接强转即可。

使用特权

评论回复
10
gim008| | 2022-7-31 14:44 | 只看该作者

51单片机数据处理问题

最新的stc已经很强了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝