发新帖我要提问
12
返回列表
打印
[51单片机]

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

[复制链接]
楼主: suntechnology
手机看帖
扫描二维码
随时随地手机跟帖
21
大个子| | 2016-12-20 17:29 | 只看该作者 回帖奖励 |倒序浏览
这个问题是许多初学者遇到的普遍问题(我有点倚老卖老,见谅)。其实这个很简单,单片机里不用小数,要求数据0-100,带一位小数,你就用0-1000,程序里设定一个uint参数,传送时只有两字节,也不用转换。用串口调试时,设定HEX格式,传数据1000(100.0)时03 E8,500(50.0)时01 F4,305(30.5)01 31。

使用特权

评论回复
22
df_flying| | 2016-12-20 19:47 | 只看该作者
放大倍数 然后分批发送

使用特权

评论回复
23
coody| | 2016-12-20 23:35 | 只看该作者
我都是开接收缓冲数组,然后直接强转,简单明了。

使用特权

评论回复
24
duanxinwen74| | 2016-12-21 08:17 | 只看该作者
可考虑使用联合数据结构。在联合数据内部设两种数据类型:一种为浮点型;另一种为字节型。一个浮点数和四个字节型数据可相互转换。串口发送时,先转换成四个字节;接收时,在转换成浮点数。ok!

使用特权

评论回复
25
baoren| | 2016-12-22 09:15 | 只看该作者
我一般是先将它转化为整数,然后发送,接收到后再还原

使用特权

评论回复
26
suntechnology|  楼主 | 2016-12-31 23:52 | 只看该作者
最近太忙了,没有及时回复,问题解决了,谢谢大家!

使用特权

评论回复
27
gaojiaxin| | 2017-1-1 21:24 | 只看该作者
用指针,比如float是四个字节的,那就声明一个四字节的数组
u8 FLOAT[4];
然后声明一个指向float类型的指针,并指向数组
float *flo = (float *)&FLOAT;
修改的时候修改*flo,发送的时候发送FLOAT
接收之后用同样的方法还原,这样,不会丢失精度
其他数据类型,double,long,等,都可以用相同的方法
在不丢失精度的情况下完全传输过去

使用特权

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

本版积分规则