关于带小数点的数据串口通信问题

  • 大核桃
  • LV2工程师
  • |      2016-04-08 14:03:01
  • 浏览量 2069
  • 回复:9

刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,今天在论坛得到了很多朋友的帮助,解决了很多的困惑,目前我对如何通过串口通信发送带小数点的(要求精确到小数点后两位)数据有一些疑惑,希望各位朋友帮助。

1,【转换成整型,根据你要的浮点精度来处理,*10、*100,在接收端再转成小数。】这句话没看明白,请问这里的转换思路是什么,具体该用什么方法?如果目的是发送8位AD采集的数据,那如何将此8位char型数据根据此方法处理?

2,如果采用的8位以上的AD采集的数据,那应该如何处理?


由于我的水平不高,因此问题中可能会有描述不清的地方,麻烦各位朋友指出。

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:11
大核桃 2016-04-08
非常感谢这一天的指导!!!解决了我的问题
0   回复
举报
发布
汉云 2016-04-08
上位机再除以100吧,单片机上这么处理费时间 ,反正你上位机要比单片机强大得多。
0   回复
举报
发布
大核桃 2016-04-08

懂了,AD采集的电压范围为0~5V,在*后面就写5.0,AD是8位的,在/后面就写256,这样得到了带小数点的值,然后我的目的是取小数点后两位,那就再将这个值乘以100,取其整数部分,通过串口发送到上位机,上位机再除以100,赋值到float变量中显示就可以了是吧?

还是在串口通信过程中,将数据/100和%100,通过串口发送数据包,在数据包中将/100和%100分别发送过去?

0   回复
举报
发布
汉云 2016-04-08

5.0就是5V

严格意义上应该是写成256.0的。

数据类型还是隐性的转换。写成256应该也行。

*5.0/256.0表示每一位AD值代表的电压值。

0   回复
举报
发布
大核桃 2016-04-08

我在天翔老师的书里看到一段代码

ad_vo=(float)ad_val*5.0/256;

请问/256和*5.0,分别代表什么意思?*5.0写成*5或/256写成/256.0有区别么?

0   回复
举报
发布
汉云 2016-04-08

你收到的AD结果一定是整型的,你要 是为了提高精度,要强制转化成浮点的。这256个值要对应到电压上,一定有个系数吧,你的AD值要除这个系数,那么一除就会降低精度。所以要用浮点数。

char x;

float f;

f=(float)x;


0   回复
举报
发布
大核桃 2016-04-08

感谢!你的回答我懂了,我现在理解小数部分是怎么转化的了,但是这个小数部分是怎么来的我还是比较困惑。

我学天翔老师视频的时候,学的是8位AD,就拿这个8位AD举例,采集1~5V电压有256个值,是不是我定义为char型的话,这256个值就都是整型,而我定义float型的话,这256个值就是带小数点的?


0   回复
举报
发布
冰山一角 2016-04-08

类型转换 可以强制性转换

你的那个分离数么?分离就是除10的倍数,放大则反之。

0   回复
举报
发布
fighter 2016-04-08
可以放大再缩小
0   回复
举报
发布
Eagleson 2016-04-08
我想就是把整数部分和小数部分分开吧,基本思想就是 *10、*100  然后在取余 和 取模 然后在接收端在转换成浮点数据 也就是 在除以相应的值吧
0   回复
举报
发布
查看更多
x
收藏成功!点击 我的收藏 查看收藏的全部帖子