打印
[51单片机]

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

[复制链接]
3005|26
手机看帖
扫描二维码
随时随地手机跟帖
沙发
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倍变成浮点数。

使用特权

评论回复
5
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

使用特权

评论回复
6
suntechnology|  楼主 | 2016-12-20 10:54 | 只看该作者
ningling_21 发表于 2016-12-20 10:10
x=235
bw= x/100;
sw= x%100/10;

程序好像没接收到数据。

receive_date.png (281.91 KB )

receive_date.png

使用特权

评论回复
7
NE5532| | 2016-12-20 11:05 | 只看该作者
把你串口上发的原始帧数据发出来瞧瞧呢。

使用特权

评论回复
8
suntechnology|  楼主 | 2016-12-20 11:18 | 只看该作者
NE5532 发表于 2016-12-20 11:05
把你串口上发的原始帧数据发出来瞧瞧呢。

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

串口.png (288.79 KB )

串口.png

使用特权

评论回复
9
suntechnology|  楼主 | 2016-12-20 11:21 | 只看该作者
NE5532 发表于 2016-12-20 11:05
把你串口上发的原始帧数据发出来瞧瞧呢。

要是把这段程序屏蔽了,改为接收一个字节的数据就可以收到。

使用特权

评论回复
10
ningling_21| | 2016-12-20 11:22 | 只看该作者
suntechnology 发表于 2016-12-20 11:21
要是把这段程序屏蔽了,改为接收一个字节的数据就可以收到。

串口助手不支持发送浮点数,你先转换为字符型,再发送到MCU
或者 改串口助手发送ASCII码的形式

使用特权

评论回复
11
suntechnology|  楼主 | 2016-12-20 11:38 | 只看该作者
ningling_21 发表于 2016-12-20 11:22
串口助手不支持发送浮点数,你先转换为字符型,再发送到MCU
或者 改串口助手发送ASCII码的形式
...

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

我是想做一个使用串口调试助手发送0-100之间的整数和浮点数(xx.5)通过串口控制单片机的DAC输出相应的电压,最终通过放大电路控制一个电动机。如果转换为字符型,再发送到MCU或者 改串口助手发送ASCII码的形式
会不方便。

使用特权

评论回复
12
ningling_21| | 2016-12-20 11:55 | 只看该作者
suntechnology 发表于 2016-12-20 11:38
串口调试助手不支持发送浮点数,是这样

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

浮点数转换为4字节的字符型很简单,用联合体一条语句解决了

使用特权

评论回复
13
suntechnology|  楼主 | 2016-12-20 12:02 | 只看该作者
ningling_21 发表于 2016-12-20 11:55
浮点数转换为4字节的字符型很简单,用联合体一条语句解决了

我试试看吧。

使用特权

评论回复
14
songchenping| | 2016-12-20 12:59 | 只看该作者
要学会变通啊。只要通信协议合适,什么数都不是问题啊

使用特权

评论回复
15
huarana| | 2016-12-20 13:02 | 只看该作者
用ascii吧  很简单

使用特权

评论回复
16
ayb_ice| | 2016-12-20 15:07 | 只看该作者
typedef union{float fv;  char send[4]} float_t;当浮点数时使用fv,发送时使用send即可

使用特权

评论回复
17
1223657347| | 2016-12-20 15:41 | 只看该作者
字符串转浮点,想那么多干啥

使用特权

评论回复
18
55854234| | 2016-12-20 16:00 | 只看该作者
8051处理浮点数据很麻烦
一般的的做法就是  先花整发送数据然后再还原

使用特权

评论回复
19
ta1ent| | 2016-12-20 17:04 | 只看该作者
用union就好了。还不会损失精度。

使用特权

评论回复
20
皈依| | 2016-12-20 17:15 | 只看该作者
变成整数发送,再按照变整数的方法接收到之后逆向还原

使用特权

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

本版积分规则

4

主题

103

帖子

0

粉丝