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

C8051F系列单片机串口接收小数,比如33.5?

zzzqiu 2017-06-28 浏览量:1042
求指导该怎样操作
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  •      可考虑使用联合数据结构。在联合数据内部设两种数据类型:一种为浮点型;另一种为字节型。一个浮点数和四个字节型数据可相互转换。串口发送时,先转换成四个字节 

    typedef union{float f; char send[4]} float_t;当浮点数时使用f,发送时使用send即可

    • 发布于 2017-06-28
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 先定义一个float 类型变量从sbuf中取出数据。

    float val;

    val  = SBUF;

    • 发布于2017-06-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先你要明白一点,串口中传输的数据全部都是二进制,不存在什么小数整数的说法,因此,第一步要确定的就是那个小数到底是如何以二进制的数的形式来表示的,比方说一个八位的字节,它可能前面几位代表整数部分,后面几位代表小数部分,然后将这个二进制数接收之后再进一步处理
    • 发布于2017-06-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 根据你要求的小数精度,把小数乘以个倍数吧。

    0.1*10=1

    0.0001*10000=1


    读取到数据后,在将数据除以倍数。

    • 发布于2017-06-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以定个数据协议,就好像AD转换器中的MSB,LSB一样,比如8位,MSB代表符号,下一位代表最大量程a的1/2,下一位1/4.第三位1/8,以此类推,MSB位最大量程a/2e7=a/128,如果用16位就比较精确了,这是角度学传输的一般做法。
    • 发布于2017-06-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 您是33.5是一組char字元組嗎?

    如果是,直接接收char字元組後在依序計算值就可

    1. 找到字串中的小數點'.'

    2. 小數點以前的依照2^0,2^1,2^2...依序遞增加總

    3. 小數點之後的依照2^-1,2^-2,2^-3,...依序加總

    只後由float變數計算加總後結果

    以上

    • 发布于2017-06-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

C8051F系列单片机串口接收小数,比如33.5?