[51单片机] 求助:C8051F系列单片机串口怎样接收小数,比如23.5,谢谢

[复制链接]
 楼主| suntechnology 发表于 2016-12-20 09:08 | 显示全部楼层 |阅读模式
求助:C8051F系列单片机串口怎样接收小数,比如23.5
ayb_ice 发表于 2016-12-20 09:10 来自手机 | 显示全部楼层
浮点数也是4个字节,收到4个字节数后强制转换成浮点数,用联合很容易处理的
 楼主| suntechnology 发表于 2016-12-20 09:22 | 显示全部楼层
ayb_ice 发表于 2016-12-20 09:10
浮点数也是4个字节,收到4个字节数后强制转换成浮点数,用联合很容易处理的 ...

我的想法是将接收到的数   百位*100+十位*10+个位    转成整数,
比如要接收 23.5  我这样操作    2*100+3*10+5=235    但是程序没有实现数据提取, 怎么将2,3,5提取出来。
xuyaqi 发表于 2016-12-20 09:59 | 显示全部楼层
一种是对方按 浮点 IEEE 754 标准 处理与发送,你按浮点 IEEE 754 标准 接收并处理。第二种是双方约定将浮点数扩大1000倍变成整数发送,你按整数接收后缩小1000倍变成浮点数。
ningling_21 发表于 2016-12-20 10:10 | 显示全部楼层
suntechnology 发表于 2016-12-20 09:22
我的想法是将接收到的数   百位*100+十位*10+个位    转成整数,
比如要接收 23.5  我这样操作    2*100+ ...

x=235
bw= x/100;
sw= x%100/10;
gw=x%10%10
 楼主| suntechnology 发表于 2016-12-20 10:54 | 显示全部楼层
ningling_21 发表于 2016-12-20 10:10
x=235
bw= x/100;
sw= x%100/10;

程序好像没接收到数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
NE5532 发表于 2016-12-20 11:05 | 显示全部楼层
把你串口上发的原始帧数据发出来瞧瞧呢。
 楼主| suntechnology 发表于 2016-12-20 11:18 | 显示全部楼层
NE5532 发表于 2016-12-20 11:05
把你串口上发的原始帧数据发出来瞧瞧呢。

串口调试助手发的数据就是0-100之间的整数和小数(xx.5)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| suntechnology 发表于 2016-12-20 11:21 | 显示全部楼层
NE5532 发表于 2016-12-20 11:05
把你串口上发的原始帧数据发出来瞧瞧呢。

要是把这段程序屏蔽了,改为接收一个字节的数据就可以收到。
ningling_21 发表于 2016-12-20 11:22 | 显示全部楼层
suntechnology 发表于 2016-12-20 11:21
要是把这段程序屏蔽了,改为接收一个字节的数据就可以收到。

串口助手不支持发送浮点数,你先转换为字符型,再发送到MCU
或者 改串口助手发送ASCII码的形式
 楼主| suntechnology 发表于 2016-12-20 11:38 | 显示全部楼层
ningling_21 发表于 2016-12-20 11:22
串口助手不支持发送浮点数,你先转换为字符型,再发送到MCU
或者 改串口助手发送ASCII码的形式
...

串口调试助手不支持发送浮点数,是这样

我是想做一个使用串口调试助手发送0-100之间的整数和浮点数(xx.5)通过串口控制单片机的DAC输出相应的电压,最终通过放大电路控制一个电动机。如果转换为字符型,再发送到MCU或者 改串口助手发送ASCII码的形式
会不方便。
ningling_21 发表于 2016-12-20 11:55 | 显示全部楼层
suntechnology 发表于 2016-12-20 11:38
串口调试助手不支持发送浮点数,是这样

我是想做一个使用串口调试助手发送0-100之间的整数和浮点数(xx. ...

浮点数转换为4字节的字符型很简单,用联合体一条语句解决了
 楼主| suntechnology 发表于 2016-12-20 12:02 | 显示全部楼层
ningling_21 发表于 2016-12-20 11:55
浮点数转换为4字节的字符型很简单,用联合体一条语句解决了

我试试看吧。
songchenping 发表于 2016-12-20 12:59 | 显示全部楼层
要学会变通啊。只要通信协议合适,什么数都不是问题啊
huarana 发表于 2016-12-20 13:02 | 显示全部楼层
用ascii吧  很简单
ayb_ice 发表于 2016-12-20 15:07 来自手机 | 显示全部楼层
typedef union{float fv;  char send[4]} float_t;当浮点数时使用fv,发送时使用send即可
1223657347 发表于 2016-12-20 15:41 来自手机 | 显示全部楼层
字符串转浮点,想那么多干啥
55854234 发表于 2016-12-20 16:00 | 显示全部楼层
8051处理浮点数据很麻烦
一般的的做法就是  先花整发送数据然后再还原
ta1ent 发表于 2016-12-20 17:04 | 显示全部楼层
用union就好了。还不会损失精度。
皈依 发表于 2016-12-20 17:15 | 显示全部楼层
变成整数发送,再按照变整数的方法接收到之后逆向还原
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

103

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部