浮点型数据通过串口发送

2020-02-06 09:59发布

最近用到一款KELLER的压力温度传感器,它发回的数据是16进制的数,然后根据公式可以计算出温度或者压强,但是计算结果是浮点型数据,串口好像直接发送不了!
小弟刚入行,经验不足,试了很多方法都不行,后来想到转化成字符串发送,于是找到了sprintf函数,真是太好用了。相关代码如下:
                //sum是浮点型数
                sum=pow(-1,s)*(1+sum/8388608)*pow(2,m-127);//最终压力值,单位是bar
                    sprintf(a,"%10.8f",sum);
                /******************************************************************
                这一句至关重要,因为串口不能识别浮点型数据,所以用sprintf函数
                将浮点型转换为一个字符串放到预设数组a[10]中,最后再将数组以ACII输出
                *******************************************************************/
       
                for(i=0;i<10;i++)
                    {
                        U1TXREG=a[i];//max485发送数据
                        while(U1STAbits.TRMT==0);//等待发送完毕,这一句不可少,若没有这一句
                                                                        //则会出现数据丢失的现象,仅能发4位数据
                }


我用到的是PIC30F4011单片机!有不妥的地方,还请大神指正!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
往事如烟
1楼-- · 2020-02-07 10:28
q457344370 发表于 2016-12-18 11:53
用共用体或者指针不更简单,4个字节就行了

是用这个函数吗?
void float_char(float f,unsigned char *s)
 { 
         unsigned char *p;   
         p = (unsigned char *)&f; 
        *s = *p; 
            *(s+1) = *(p+1);     
        *(s+2) = *(p+2);     
        *(s+3) = *(p+3); 
}
我试了一下,这个貌似不太好用!
往事如烟
2楼-- · 2020-02-07 15:16
 精彩回答 2  元偷偷看……
往事如烟
3楼-- · 2020-02-07 20:12
pengchhui 发表于 2016-12-18 12:31
知道精度的话乘以倍数转化为int型,拆分为8位传送也方便吧

我计算的结果是浮点型数据,如果将其乘以10的倍数,再将其强制转化为整型,再按位发送的话,我在串口调试助手上面能看到浮点型乘以10的倍数的数据吗?
往事如烟
4楼-- · 2020-02-07 22:55
q457344370 发表于 2016-12-18 11:53
用共用体或者指针不更简单,4个字节就行了

比方说,计算结果是1.2345的浮点数,按照指针的那个方法发送,我在串口调试助手上面能看到1.12345这个数吗?

是下面这个函数吗?
void float_char(float f,unsigned char *s)

        unsigned char *p;   
         p = (unsigned char *)&f;     
        *s = *p; 
            *(s+1) = *(p+1);     
        *(s+2) = *(p+2);     
        *(s+3) = *(p+3); 
}

我试了一下,不大好使!
gliet_su
5楼-- · 2020-02-07 23:59
不用转成字符,使用共用体union
union senddata{
float a;
uint8_t b[4];
}
发送b[0]~b[4]。
snail_dongbin
6楼-- · 2020-02-08 03:26
gliet_su 发表于 2016-12-18 19:36
不用转成字符,使用共用体union
union senddata{
float a;

这叫联合体吧,我以前也这样用,往eprom里面存浮点数

一周热门 更多>