• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

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

大核桃 2016-04-08 浏览量:2274

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

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

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


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

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1、你的浮点数是12.34111,你要两个小数,12.34111*100=1234.111,再转换成整型
    float f=12.34111;
    unsigned int i;
    i=(unsigned int)(f*100.0);
    那么i=1234.
    那么接收端:
    你收到的是unsigned int的1234;
    float x,y;
    unsigned int z;
    z=1234;
    x=(float)z*0.01;

    那么x=12.34。这是你要和结果了吧。

    要是做四舍五入,就*1000,判断个位数。

    2、这与AD的位数没有关系的。12AD位按16位来处理,24位AD按32位来处理,只不过高位都是0.
    • 发布于 2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:10
  • 我想就是把整数部分和小数部分分开吧,基本思想就是 *10、*100  然后在取余 和 取模 然后在接收端在转换成浮点数据 也就是 在除以相应的值吧
    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 类型转换 可以强制性转换

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

    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

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

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


    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

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

    char x;

    float f;

    f=(float)x;


    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

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

    ad_vo=(float)ad_val*5.0/256;

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

    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 5.0就是5V

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

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

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

    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

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

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

    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 上位机再除以100吧,单片机上这么处理费时间 ,反正你上位机要比单片机强大得多。
    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 非常感谢这一天的指导!!!解决了我的问题
    • 发布于2016-04-08
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

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