3363|3

68

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【串口的较复杂使用讨论】关于C2000发送float型数据的求教~~急!急!急! [复制链接]

各位坛友,最近我在看怎么用C2000发送float型数据,想实现的功能是这样的:

上位机(串口助手)以unsigned char 的形式发四个数据,C2000接收到,
并存入数组中,然后转换回float,再发送到上位机。

关于如何转换,搜索了不少资料,发现最好的方法应该是直接用IEEE745的标准:

将float转换成char:
void FloatToByte(float floatNum,unsigned char* byteArry)
{
    char* pchar=(char*)&floatNum;
    for(int i=0;i<sizeof(float);i++)
    {
     *byteArry=*pchar;
     pchar++;
     byteArry++;
    }
}

将unsigned char转换成float:
float ByteToFloat(unsigned char* byteArry)
{
  return *((float*)byteArry);
}

这两个函数都是网上的高人写的,应该没有问题。但是我在用launch pad调试的时候,遇到了很奇怪的问题:

如果我先给出一个数,例如12.12,先用floattobyte 函数转换成 uchar,
再用bytetofloat 将保存有uchar 的数组转换回 float,最后发送这个float,结果是对的;

但是,如果我先设置一个数组,uchar【4】,将从上位机接收到的数据存入这个数组,
再用bytetofloat函数转成float,则不论我怎么发,发什么数据,始终显示的是+0.000.

非常郁闷啊!这是为什么呢?可能的原因是  C2000的uchar格式是16位吗?还是这个函数我用错了?急求指点!
谢谢大家!!!!另外在坛子里貌似还没看见有人问这类问题,希望大家能多多指点~~
真是调的郁闷啊!!!!!!!求救啊!!!!!!!!!!!!!!!!!!!!1

最新回复

/****************************************************************************** 函数原型:uint8 * FtoC(fp32 fn) 函数功能:把输入的浮点数转化成四个uint8型的整数 参数说明:fp32 fn:待转化的浮点数 返回值:  * 处理完成后整数存放数组的指针 ********************************************************************************/ uint8 * FtoC(fp32 fn)    {      uint8   i,*px;      uint8   x[4];                                   //定义字符数组,准备存储浮点数的四个字节*、      void   *pf;      px=x;                                                   //px指针指向数组x      pf=&fn;                                           //void   型指针指向浮点数首地址   for(i=0;i  详情 回复 发表于 2013-4-14 14:40
 
点赞 关注

回复
举报

2606

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
最好能将你写的函数贴出来。我们看年
 
个人签名工程 = 数学+物理+经济
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
/******************************************************************************
函数原型:uint8 * FtoC(fp32 fn)
函数功能:把输入的浮点数转化成四个uint8型的整数
参数说明:fp32 fn:待转化的浮点数
返回值:  * 处理完成后整数存放数组的指针
********************************************************************************/
uint8 * FtoC(fp32 fn)   
{   
  uint8   i,*px;   
  uint8   x[4];                                   //定义字符数组,准备存储浮点数的四个字节*、   
  void   *pf;   
  px=x;                                                   //px指针指向数组x   
  pf=&fn;                                           //void   型指针指向浮点数首地址
  for(i=0;i<4;i++)   
   {
    *(px+i)=*((uint8 *)pf+i);   //强制void型指针转成char型,因为void型指针不能运算  
   }
  return px;
}
/******************************************************************************
函数原型:fp32 CtoF(uint8 *x)
函数功能:把输入的四个uint8型的整数转化成一个浮点数
参数说明:uint8 *x:待转化的整数数组指针
返回值:   处理完成后的浮点数
********************************************************************************/
fp32 CtoF(uint8 *x)
{
fp32 a;                                         //定义一个浮点数
uint8 i;
uint8        *px ;                                 //定义整型指针
void *pf;                                   //定义空指针
px=x;
pf=&a;
for(i=0;i<4;i++)
{
  *((uint8 *)pf+i)=*(px+i);
}
return a;
}


这个是我以前用的,没有问题。如果是和电脑通讯的话我记得好像有过顺序不一样的情况。就是这四个字节的顺序和电脑上的顺序不一致,具体的记不清了。VB部分的代码我现在已经没有了。

点评

恩,好的,太谢谢你啦!  详情 回复 发表于 2013-4-17 08:46
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 板凳 jishuaihu 的帖子

恩,好的,太谢谢你啦!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表