51单片机通过串口发送较长的AT指令给esp8266导致单片机重启是怎么回事?发送较短的AT指令却没事。
单片机指令缓冲区长度是有限的
不知道你这个问题是否已经解决, 如果还没有解决的话:把一下代码烧录单片机中
void delays(unsigned long time)//8266代码发送间隔时间
{
int i;
int j;
for(i=0;i<200;i++)
for(j=0;j<time;j++);
}
void suspend (void) interrupt 4//中断设置
{
if(RI==1)
{
RI=0;
commod=SBUF;
}
if(TI==1);
}
void send(char byte)//输出字符
{
SBUF=byte;
while(TI!=1);
TI=0;
}
void hstring(char *j)
{
while(*j!= '\0')
{
send(*j);
j++;
}
}
void inituaer()//串口初始化
{
SCON=0x50;
T2CON |=0x1<<4;
T2CON |=0x1<<5;
TH2=0xFF;
TL2=0xFD;
RCAP2H=0xFF;
RCAP2L=0xFD;
TR2=1;
IE |=0x1<<4;
IE |=0x1<<7;
}
void wifi()
{
hstring("AT+CWMODE_DEF=1\r\n")//作为设备;
delay(1000);
hstring("AT+CWJAP_DEF=\"HN10\",\"asdf1234\"\r\n");//连接热点(保证热点可用,不要中文,不要空格,不要特殊字符)
delay(500);
hstring("AT+CIPSTART=\"TCP\",\"192.168.43.31\",8888\r\n");//连接客户端
delay(200);
hstring("AT+CIPMODE=1\r\n");//开启透传模式
delay(50);
hstring("AT+CIPSEND\r\n");进入透传模式
delay(50);
}
int main()
{
inituaer();//初始化串口
wifi();//在执行8266中执行口令
while(1)
{
commod=INITIAL;
if(commod==HELLO)
{
commod=INITIAL;
hstring("hello\n");
delay();
}
else if(commod==WORD)
{
commod=INITIAL;
hstring("word\n");
delay();
}
}
return 0;
}
烧录后将8266与单片机及pc进行连接
8266与单片机:
3v3接vcc
GND接GND
R接T
8266与pc
T接R
pc与单片机
T接R