写了个接光谱仪数据的代码
if(command3[0]==0x57&&command3[1]==0xaa&&command3[2]==0x68&&command3[3]==0x02&&command3[4]==0x16&&command3[5]==0x16)
{ TIM3_Int_Init(4,7199);//10Khz的计数频率,计数到5为5ms
// TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms
// waiting=0;
fpga_int();
ziwaiint(); //紫外初始化
for(t=0;t<6;t++) //向fpga发送命令
{
USART_SendData(USART1, fpga5[t]); //向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
USART_RX_STA=0;
while(command3[4]==0x16) ///测试循环
{
ceshi(); //调用标定函数
calculate(); //计算函数
for(t=0;t<6;t++) //向fpga发送命令2 ,请求发送红外数据
{
USART_SendData(USART1, fpga6[t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
USART_RX_STA=0;
do
{
}
while((USART_RX_STA&0x8000)!=0); //等待返回红外数据
GPIO_SetBits(GPIOA,GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_12);///让红外采背景值
for(i=0;i<12;i++)
{
hongwai=USART_RX_BUF;
}
// leida_Receive_Data(leida_BUF,&lei);
//
//
//
// // leida_BUF[0]=0x31;
//
//
// if(leida_BUF[0]==0x20)
// {
// v11[0]=0x00;
// v12[0]=(((leida_BUF[1]-(0x30))<<4)|(leida_BUF[2]-(0x30)));
// }
// else
// {
//
// v11[0]= ((leida_BUF[0]-(0x30))<<8);
// v12[0]=(((leida_BUF[1]-(0x30))<<4)|(leida_BUF[2]-(0x30)));
// }
//
// zhouqi=0;
// TIM4_Int_Init(49,7199);
//// zhouqi=0;
//// TIM4_Int_Init(4,7199);
// while(zhouqi!=184);
//
// leida_Receive_Data(leida_BUF,&lei);
//
//
// if(leida_BUF[0]==0x20)
// {
// v21[0]=0x00;
// v22[0]=(((leida_BUF[1]-(0x30))<<4)|(leida_BUF[2]-(0x30)));
//
// }
// else
// {
//
// v21[0]= ((leida_BUF[0]-(0x30))<<8);
// v22[0]=(((leida_BUF[1]-(0x30))<<4)|(leida_BUF[2]-(0x30)));
// }
if(tcp_server_sta&(1<<7))
{
tcp_server_databuf[0]=0x57;
tcp_server_databuf[1]=0xaa;
tcp_server_databuf[2]=0x68;
tcp_server_databuf[3]=0x0c;
tcp_server_databuf[4]=0xb6;
tcp_server_databuf[5]=( NO&0x00ff);
tcp_server_databuf[6]=((NO>>8)&0x00ff);//NO低八位在前高八位在后
tcp_server_databuf[7]=hongwai[5];
tcp_server_databuf[8]=hongwai[6];
tcp_server_databuf[9]=hongwai[7];
tcp_server_databuf[10]=hongwai[8];
tcp_server_databuf[11]=hongwai[9];
tcp_server_databuf[12]=hongwai[10];
tcp_server_databuf[13]=ziwairesult[3]&0x00ff;;
tcp_server_databuf[14]=(ziwairesult[3]>>8)&0X00FF;
tcp_server_databuf[15]=(carpasstime1&0x000000ff);
tcp_server_databuf[16]=((carpasstime1>>8)&0x000000ff);
tcp_server_databuf[17]=v11[0];
tcp_server_databuf[18]=v12[0];
tcp_server_databuf[19]=v21[0];
tcp_server_databuf[20]=v22[0];
// tcp_server_databuf[17]=((carpasstime1>>16)&0x000000ff);
// tcp_server_databuf[18]=((carpasstime1>>24)&0x00000ff) ;//现发送前16位,最大时间为65秒
tcp_server_databuf[21]=(tcp_server_databuf[4]+tcp_server_databuf[5]+tcp_server_databuf[6]+tcp_server_databuf[7]+tcp_server_databuf[8]+tcp_server_databuf[9]+tcp_server_databuf[10]+tcp_server_databuf[11]+tcp_server_databuf[12]+tcp_server_databuf[13]+tcp_server_databuf[14]+tcp_server_databuf[15]+tcp_server_databuf[16]+tcp_server_databuf[17]+tcp_server_databuf[18]+tcp_server_databuf[19]+tcp_server_databuf[20]) ;
// tcp_server_databuf[22]=g;
tcp_server_sta|=1<<5;
tcp_server_databuf[199]=22;
}
delay_ms(200);
uip_polling();
if(tcp_server_tsta!=tcp_server_sta)//TCP Server状态改变 //时时监测命令
{
if(tcp_server_sta&(1<<6)) //收到新数据
{
command3[0]=tcp_server_databuf[0];
command3[1]=tcp_server_databuf[1];
command3[2]=tcp_server_databuf[2];
command3[3]=tcp_server_databuf[3];
command3[4]=tcp_server_databuf[4];
command3[5]=tcp_server_databuf[5];
command3[6]=tcp_server_databuf[6];
command3[7]=tcp_server_databuf[7];
tcp_server_sta&=~(1<<6); //标记数据已经被处理
}
tcp_server_tsta=tcp_server_sta;
}
for(i=0;i<6;i++)
{
command3=0; ///一直测试
}
command3[4]=0x16;
}
进了循环之后就循环两次 请问这是为什么呢 |