|
我把ESP8266模块用电脑发送AT指令倒是很正常工作,可是接到单片机上过后它把AT指令执行完过后,它就会一直向串口发送数据,,这是为什么,,,源码写的有点乱刚学没有多久,,,,希望大家可以帮帮我
#include <reg52.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
void Send_Hex(uchar b);
void Send_ASCII(uchar *b);
void CLR_Buf(void);
sbit led=P1^0;
int Buf_Max;
char Rec_Buf[20],t;
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void UART_init()
{
/* TMOD = 0x20; //T1工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd; //比特率9600
TR1 = 1; //启动T1定时器
SM0 = 0;
SM1 = 1; //串口工作方式1 10位异步
REN = 1; //串口允许接收
EA = 0; //关总中断
ES = 0; //串口中断关闭 */
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 0;
ES = 0;
TR1 = 1;
}
void main()
{
UART_init(); //串口初始化
delay(3000);
Send_ASCII("AT"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
delay(3000);
CLR_Buf();//清除返存
Send_ASCII("AT+CWJAP=lify5288,q16888888"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
delay(10000);
CLR_Buf();//清除返存
Send_ASCII("AT+CIPMUX=1"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
CLR_Buf();//清除返存
delay(3000);
Send_ASCII("AT+CIPSERVER=1,1000"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
CLR_Buf();//清除返存
delay(3000);
while(1)
{
t = SBUF;
if(RI==1) // 是否有数据到来
{
RI = 0;
Send_ASCII("AT+CIPSEND=0,5"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
CLR_Buf();//清除返存
delay(1500);
Send_ASCII("TTTTT"); //发送联机指令
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
CLR_Buf();//清除返存
}
}
}
void Send_Hex(uchar b) //发送
{
RI = 0;
SBUF = b;
while(!TI);
TI = 0;
}
void UART() interrupt 4
{
}
void CLR_Buf(void)//清除
{
unsigned char k;
for(k=0;k<Buf_Max;k++) //将缓存内容清零
{
Rec_Buf[k] = 0;
}
}
void Send_ASCII(unsigned char *b) //字节发送
{
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
}
|
|