|
前段时间做了一块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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|