asnowgober 发表于 2013-4-27 10:20:05

串口发送浮点型数据?

本帖最后由 asnowgober 于 2013-4-27 10:29 编辑

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

qllaoda1 发表于 2013-4-27 10:23:12

float a;
uart_send((char*)&a, sizeof(a));

绿茶山人 发表于 2013-4-27 13:25:58

楼上正解,这个和数据类型没关吧!

zuu0 发表于 2013-4-27 13:33:17

本帖最后由 zuu0 于 2013-4-27 13:35 编辑

qllaoda1 发表于 2013-4-27 10:23 static/image/common/back.gif
float a;
uart_send((char*)&a, sizeof(a));

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

typedef union
{
        unsigned char CharData;
        unsigned intIntData;
        unsigned long UnLongData;
        long        LongData;
        floatFloatData;
}DataStruct;

DataStruct DataMid;

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


如果调试,直接printf();

xxoolltt 发表于 2013-4-27 13:34:16

自己定义格式呗!

jxcrg_t35 发表于 2013-4-27 14:41:42

float wtemp;
char sBuf;
   char* temp;
   temp=(char*)(&wTemp);
   sBuf = temp ;
   sBuf = temp;
   sBuf = temp;
   sBuf = temp; 和二楼原理一样

lxa0 发表于 2013-4-27 19:58:20

绿茶山人 发表于 2013-4-27 13:25 static/image/common/back.gif
楼上正解,这个和数据类型没关吧!

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

绿茶山人 发表于 2013-4-28 08:22:18

lxa0 发表于 2013-4-27 19:58 static/image/common/back.gif
你说的对
串口只管发送数据
至于数据是音频还是视频


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

无级电工 发表于 2013-4-28 08:42:59

LS都说了,用 union ,让浮点数与字符数组共用4节,发完4字节就算一个浮点数,接收端注意大端小端,不同系统可能不一样。

lxa0 发表于 2013-4-28 20:12:49

绿茶山人 发表于 2013-4-28 08:22 static/image/common/back.gif
很多时候是自己想复杂了,做很多无用功!追求高级绚丽的,却把简单基本的东西忘了! ...

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

postek 发表于 2013-4-28 20:15:32

两面是同样的cpu 的话,就直接按字节传就行了。

TROYWINDON 发表于 2013-4-28 22:24:51

直接转化成char类型的话会涉及到一个大小端的问题,不过暂时还不用去考虑

kevin_me 发表于 2013-4-28 23:33:49

六楼第四行 为什么定义的指针是一个单独的变量,在下面可以直接当数组使用,请讲讲。

benqme 发表于 2013-4-29 08:31:18

将浮点数转成字符型就0K了

asnowgober 发表于 2013-4-29 11:49:32

benqme 发表于 2013-4-29 08:31 static/image/common/back.gif
将浮点数转成字符型就0K了

你指的是以下哪种情况:

[*]1
123.4——>'1' '2' '3' '.' '4'

[*]2
float a=123.4; char b;
b=(char *)&a;

guxingganyue 发表于 2013-4-29 13:30:34

本帖最后由 guxingganyue 于 2013-4-29 13:34 编辑

asnowgober 发表于 2013-4-29 11:49 static/image/common/back.gif
你指的是以下哪种情况:

[*]1


lz明白了没

我还是没有理解

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

int main()
{
float a=1.23456;

    printf("%c ",???);
return 0;
}

benqme 发表于 2013-4-30 17:19:43

guxingganyue 发表于 2013-4-29 13:30 static/image/common/back.gif
lz明白了没

我还是没有理解


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

guxingganyue 发表于 2013-4-30 23:38:10

benqme 发表于 2013-4-30 17:19 static/image/common/back.gif
按这个写就可以了
void comm(char *parr)
{


用sprintf函数确实可以实现。

但是怎么用2楼的意思实现呢?float a;
uart_send((char*)&a, sizeof(a));
页: [1]
查看完整版本: 串口发送浮点型数据?