搜索
bottom↓
回复: 1

紧急求助:关于网口传送数据问题

[复制链接]

出0入0汤圆

发表于 2010-11-21 22:17:21 | 显示全部楼层 |阅读模式
前段时间做了一块LM3S6916的板子,各项基本功能都已通过,ADC,网口功能正常,最近在做用网口采集ADC传送到上位机时,数据老是出问题,搞了一星期没有结果,由于是在协议栈LwIP的RAW API下编程的,将板子作为TCP客户端,个人电脑上位机显示,中间的ADC数据处理部分出问题,最开始时显示乱码,字符,现在却一直是0,我不是学通信的,对这个传输协议之类的不很了解,请各位前辈帮帮忙,我把主程序附上,先谢谢啦

/****************************************Copyright (c)****************************************************
** File Name:               Main.c
** Description:            无操作系统支持的LWIP的主函数模板   支持ADC采样
*********************************************************************************************************/

#include <includes.h>
#include <adc.h>

uint16 Data[2]={0,0};

/*********************************************************************************************************
  函数声明
*********************************************************************************************************/

void delay (uint32  n)
{
    uint32 i;
    for (i = 0; i < n; i++);
}

/******* 这是一个回调函数,当TCP客户端请求的连接建立时被调用********/
err_t TcpCli_Connected(void *arg,struct tcp_pcb *pcb,err_t err)
{
   tcp_write(pcb,Data,sizeof(Data[0]),0);      //发送数据
   tcp_write(pcb,Data,sizeof(Data[1]),0);
   tcp_close(pcb);
   
   return ERR_OK;
}

/*********************************************************************************************************
** Function name:           TCP_Client_Init          
** Descriptions:            TCP客户端的初始化,当需要建立客户端连接时调用
*********************************************************************************************************/
void TCP_Client_Init()
{
  struct tcp_pcb *Clipcb;
  struct ip_addr ipaddr;
  
  IP4_ADDR(&ipaddr,192,168,1,222);
  
  Clipcb = tcp_new();                       // 建立通信的TCP控制块(Clipcb)
  
  tcp_bind(Clipcb,IP_ADDR_ANY,1026);       // 绑定本地IP地址和端口号
  
  tcp_connect(Clipcb,&ipaddr,1026,TcpCli_Connected);
}

/*********************************************************************************************************
** Function name:      mux_n
** Descriptions:       计算10的n次幂,n要大于等于0
** input parameters:   n: 10的n次幂
** output parameters:  sum: 返回运算后的结果
** Returned value:     无   
*********************************************************************************************************/
uint32 mux_n (uint8  n)
{
    uint8  i;
    uint32 sum = 10;
    for (i = 1; i < n; i++) {
        sum = sum * 10;
    }
    if (n == 0) {
        sum = 1;
    }
    return sum;
}

/*********************************************************************************************************
** Function name:      Data_ASICC
** Descriptions:       将一个最大值四位的数转换位ASICC码
** input parameters:   charge_data: 要转换的3位整数
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
uint32 Data_ASICC (uint16  charge_data)
{
    uint8  i;
    uint16 ulchar, temp;
    for (i = 0; i < 4; i++) {
        ulchar = charge_data / (mux_n(3 - i)) % 10 + '0';   /*  取出最高位                  */
        
        if (i == 0)
        {                                                                                                                                          
        ulchar=charge_data/(mux_n(3))%10+'0'+'.';                             
       }                                                  /*打印小数点                  */
        ulchar  = (ulchar - '0');                         /*  下面四条语句是将最高位消除,
                                                          为下次再取一个最高位做准备  */               
        temp    = (mux_n(3 - i));
        ulchar  = ulchar * temp;
        charge_data = charge_data - ulchar;
    }
    return ulchar;
}



/*网口发送程序*/
void Send_ADC_Data(void)
{
    Data_ASICC(Charge_Val[0]);  /*两路ADC,采样数据用Charge_Val[0],Charge_Val[1]存储*/
                                                       
    Data_ASICC(Charge_Val[1]);   

    flag_ADC_finish = 0;                        /*  清采样完成标志位            */
    delay(500000);
}



/*********************************************************************************************************
** Function name:      main          
** Descriptions:       系统主函数入口
*********************************************************************************************************/
int main()
{
  ADC_Init();
  targetInit();
  InitNic();

  while(1) {
   
        if (flag_ADC_finish) {
           TCP_Client_Init();
           Send_ADC_Data();  
           Data[0]=Data_ASICC(Charge_Val[0]);
           Data[1]=Data_ASICC(Charge_Val[1]);
        }

  
        delay(10000000);
  }
  
}

运行时

现在的显示 (原文件名:1.JPG)



先谢谢各位了,急...有哪位前辈做过的话,请多多指教!主要是数据转换那块有问题!!!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-11-22 13:28:29 | 显示全部楼层
问题已经解决,是数据处理部分除问题,呵呵,还是谢谢大家啦...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 16:47

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

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