搜索
bottom↓
回复: 17

串口发送浮点型数据?

[复制链接]

出0入0汤圆

发表于 2013-4-27 10:20:05 | 显示全部楼层 |阅读模式
本帖最后由 asnowgober 于 2013-4-27 10:29 编辑

串口一般是传输字符型的数据,对于浮点型数据,怎么处理比较好呢?
比如怎么传输这个数组 data[4]={1.1, 12.3, 456.4, 23.45}.....

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-4-27 10:23:12 | 显示全部楼层
float a;
uart_send((char*)&a, sizeof(a));

出70入0汤圆

发表于 2013-4-27 13:25:58 | 显示全部楼层
楼上正解,这个和数据类型没关吧!

出0入0汤圆

发表于 2013-4-27 13:33:17 | 显示全部楼层
本帖最后由 zuu0 于 2013-4-27 13:35 编辑
qllaoda1 发表于 2013-4-27 10:23
float a;
uart_send((char*)&a, sizeof(a));


看到你这句,我发现我以前做的有点笨

typedef union
{
        unsigned char CharData[4];
        unsigned int  IntData[2];
        unsigned long UnLongData;
        long        LongData;
        float  FloatData;
}DataStruct;

DataStruct DataMid;

/*****************************
串口发送浮点数
*****************************
void UartSendFloat(float fTemp)
{
  unsigned char i;
  DataMid.FloatData=fTemp;
  for(i=0;i<4;i++) send_UART(DataMid.CharData);
}


如果调试,直接printf();

出0入0汤圆

发表于 2013-4-27 13:34:16 | 显示全部楼层
自己定义格式呗!

出0入0汤圆

发表于 2013-4-27 14:41:42 | 显示全部楼层
float wtemp;
char sBuf[4];
   char* temp;
   temp=(char*)(&wTemp);
   sBuf[0] = temp[0] ;
   sBuf[1] = temp[1];
   sBuf[2] = temp[2];
   sBuf[3] = temp[3]; 和二楼原理一样

出0入0汤圆

发表于 2013-4-27 19:58:20 | 显示全部楼层
绿茶山人 发表于 2013-4-27 13:25
楼上正解,这个和数据类型没关吧!

你说的对
串口只管发送数据
至于数据是音频还是视频
那是自己定义的

出70入0汤圆

发表于 2013-4-28 08:22:18 | 显示全部楼层
lxa0 发表于 2013-4-27 19:58
你说的对
串口只管发送数据
至于数据是音频还是视频


很多时候是自己想复杂了,做很多无用功!追求高级绚丽的,却把简单基本的东西忘了!

出0入0汤圆

发表于 2013-4-28 08:42:59 | 显示全部楼层
LS都说了,用 union ,让浮点数与字符数组共用4节,发完4字节就算一个浮点数,接收端注意大端小端,不同系统可能不一样。

出0入0汤圆

发表于 2013-4-28 20:12:49 | 显示全部楼层
绿茶山人 发表于 2013-4-28 08:22
很多时候是自己想复杂了,做很多无用功!追求高级绚丽的,却把简单基本的东西忘了! ...

呵呵
谁都有犯迷糊的时候~~~~~~~~~

出0入0汤圆

发表于 2013-4-28 20:15:32 | 显示全部楼层
两面是同样的cpu 的话,就直接按字节传就行了。

出0入0汤圆

发表于 2013-4-28 22:24:51 | 显示全部楼层
直接转化成char类型的话会涉及到一个大小端的问题,不过暂时还不用去考虑

出5入42汤圆

发表于 2013-4-28 23:33:49 来自手机 | 显示全部楼层
六楼第四行 为什么定义的指针是一个单独的变量,在下面可以直接当数组使用,请讲讲。

出0入0汤圆

发表于 2013-4-29 08:31:18 来自手机 | 显示全部楼层
将浮点数转成字符型就0K了

出0入0汤圆

 楼主| 发表于 2013-4-29 11:49:32 | 显示全部楼层
benqme 发表于 2013-4-29 08:31
将浮点数转成字符型就0K了

你指的是以下哪种情况:
  • 1
123.4——>'1' '2' '3' '.' '4'
  • 2
float a=123.4; char b[4];
b=(char *)&a;

出0入0汤圆

发表于 2013-4-29 13:30:34 | 显示全部楼层
本帖最后由 guxingganyue 于 2013-4-29 13:34 编辑
asnowgober 发表于 2013-4-29 11:49
你指的是以下哪种情况:
  • 1


  • lz明白了没

    我还是没有理解

    如下面的语句:按照2楼的意思,我怎么输出一个一个的字符 1.23456呢
    1. #include <stdio.h>
    2. #include <stdlib.h>

    3. int main()
    4. {
    5.   float a=1.23456;

    6.     printf("%c ",???);
    7.   return 0;
    8. }
    复制代码

    出0入0汤圆

    发表于 2013-4-30 17:19:43 | 显示全部楼层
    guxingganyue 发表于 2013-4-29 13:30
    lz明白了没

    我还是没有理解

    按这个写就可以了
    void comm(char *parr)
    {
            do
            {
                    SBUF=*parr++;  //字符发送
                    while(!TI);
                    TI=0;
            }while(*parr);
    }
    main()
    {
            uchar i;
            float a=1.23456;
            uchar buff[7];    //字符数组
            init();
            while(1)
            {
                   
                   
                    sprintf(buff,"%f",a);
                    comm(buff);
                   
            }
    }

    出0入0汤圆

    发表于 2013-4-30 23:38:10 | 显示全部楼层
    benqme 发表于 2013-4-30 17:19
    按这个写就可以了
    void comm(char *parr)
    {

    用sprintf函数确实可以实现。

    但是怎么用2楼的意思实现呢?
    1. float a;
    2. uart_send((char*)&a, sizeof(a));
    复制代码
    回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

    GMT+8, 2024-7-23 16:12

    © Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

    快速回复 返回顶部 返回列表