只有开机之后第一个识别消息(OK)发送一次就反应,之后就需要10次。我把"OK"改成过"CONNECT OK",就只需发两次就有反应。下面是程序代码,求助。
#define Uart2_Buf_Max 20 //串口数据缓存长度
u8 xdata Uart2_Rec_Buf[Uart2_Buf_Max]; //串口数据缓存
u8 point2 = 0; //绶存指针
bit B_TX2_Busy = 0; //发送忙标志
void main(void)
{
GPIO_config();
UartInit();
CLR_Buf();
while(1)
{
Uart2SendString("AT");
huanhang();
while(Hand("ok")==0)
delay_ms(10);
CLR_Buf();
Uart2SendString("AT+CIPSTART=\"TCP\",\"e248w87733.wicp.vip\",57902");
huanhang();
CLR_Buf();
while(Hand("ok")==0)
delay_ms(10);
CLR_Buf();
Uart2SendString("AT");
while(Hand("ok" )==0)
delay_ms(10);
CLR_Buf();
huanhang();
Uart2SendString("well") ;
huanhang();
while(Hand("ok")==0)
delay_ms(10);
CLR_Buf();
}
/*----------------------------
通过串口2发送串口数据
----------------------------*/
void Uart2SendData(unsigned char ch)
{
while(B_TX2_Busy); //不忙后发送数据
S2BUF = ch; //写数据到UART数据寄存器
B_TX2_Busy = 1;
}
/*----------------------------
通过串口2发送字符串
----------------------------*/
void Uart2SendString(char *s)
{
while (*s) //检测字符串结束标志
{
Uart2SendData(*s++); //发送当前字符
}
}
bit Uart2Hand(unsigned char *a) // 串口命令识别函数
{
if(strstr(Uart2_Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
void Uart2CLR_Buf(void) // 串口缓存清理
{
memset(Uart2_Rec_Buf, 0, Uart2_Buf_Max); //清空
point2 = 0;
}