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

[复制链接]
大个子 发表于 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。
df_flying 发表于 2016-12-20 19:47 | 显示全部楼层
放大倍数 然后分批发送
coody 发表于 2016-12-20 23:35 | 显示全部楼层
我都是开接收缓冲数组,然后直接强转,简单明了。
duanxinwen74 发表于 2016-12-21 08:17 | 显示全部楼层
可考虑使用联合数据结构。在联合数据内部设两种数据类型:一种为浮点型;另一种为字节型。一个浮点数和四个字节型数据可相互转换。串口发送时,先转换成四个字节;接收时,在转换成浮点数。ok!
baoren 发表于 2016-12-22 09:15 | 显示全部楼层
我一般是先将它转化为整数,然后发送,接收到后再还原
 楼主| suntechnology 发表于 2016-12-31 23:52 | 显示全部楼层
最近太忙了,没有及时回复,问题解决了,谢谢大家!
gaojiaxin 发表于 2017-1-1 21:24 | 显示全部楼层
用指针,比如float是四个字节的,那就声明一个四字节的数组
u8 FLOAT[4];
然后声明一个指向float类型的指针,并指向数组
float *flo = (float *)&FLOAT;
修改的时候修改*flo,发送的时候发送FLOAT
接收之后用同样的方法还原,这样,不会丢失精度
其他数据类型,double,long,等,都可以用相同的方法
在不丢失精度的情况下完全传输过去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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