51单片机通过串口发送AT指令给esp8266导致单片机重启

51单片机通过串口发送较长的AT指令给esp8266导致单片机重启是怎么回事?发送较短的AT指令却没事。

单片机指令缓冲区长度是有限的

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7646002
  • 你也可以参考下这篇文章:51单片机 + ESP8266 实现远程控制小灯、温度采集
  • 除此之外, 这篇博客: esp8266的认识和简单使用中的 用51单片机对esp8266进行简单操作 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    把一下代码烧录单片机中

    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


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^