微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51怎么发AT指令啊?求大神指教(ESP8266)-(代码见正文)

51怎么发AT指令啊?求大神指教(ESP8266)-(代码见正文)

时间:10-02 整理:3721RD 点击:
主函数是这样写的:调试的时候只打印esp8266启动信息,AT指令在串口助手可以看到但是没有数据返回。
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include"uart.h"
#define Buf_Max 50
unsigned char xdata Rec_Buf[Buf_Max];
unsigned char i = 0;   
void CLR_Buf(void);                                  
bit  Hand(unsigned char *a);
void init();
void delay(unsigned char i);
char code str1[]="AT\r\n";                                                        //  联机指令,返回"OK"
char code str2[]="AT+CWMODE=1\r\n";                                               //  设置ESP8266的工作模式,返回"OK"或者"no change"
char code str3[]="AT+CWJAP=\"lces\",\"88518851\"\r\n";                                    //  连接到WiFi热点,lces为热点名称,88518851为密码;连接成功返回“OK”     
char code str4[]="AT+CIFSR\r\n";                                             //         本机IP地址查询指令
char code str5[]="AT+CIPSTART=\"TCP\",\"192.168.23.3\",8234\r\n";    //  连接到TCP服务器,返回“Linked”
char code str6[]="AT+CIPSEND=6\r\n";                                                                                                                             //  发送数据指令
char code str7[]="hello!\r\n";
sbit LED1 = P1^0;                    // 定义LED1为P5.0
sbit LED2 = P1^1;                                // 定义LED2为P5.1
sbit LED3 = P1^2;                                // 定义LED3为P5.2
void main()
{
        init();
        ES=1;
        EA=1;
        LED1=0;
        delay(3000);
        LED1=1;
        delay(3000);
        CLR_Buf();
        SendString("AT+RST");
        SendString("\r\n");
        SendString(str1);
        while(!Hand("OK"))
        {
                SendString(str1);
                        LED2=0;
                delay(500);
        }
        CLR_Buf();
        LED2=1;
        delay(3000);
        while(!Hand("OK"))
        {
                SendString(str2);
                        LED3=1;
                delay(500);
        }
        LED3=1;
        delay(3000);
}

void delay(unsigned char i)
{
        unsigned char m,n;
        for(m=i;m>0;m--)
        for(n=125;n>0;n--);
}
void init(void)                                //串口初始化
{
EA=0; //暂时关闭中断
TMOD=0x20;    //定时器1工作在模式2,自动重装模式
SCON=0x50;     //串口工作在模式1
TH1=0xfd;  //计算定时器重装值
TL1=0xfd;
PCON=0x00;    //串口波特率加倍
ES=1;         //串行中断允许
TR1=1;        //启动定时器1
REN=1;        //允许接收
EA=1;         //允许中断
}
void uart(void) interrupt 4                 //串口发送中断
{
        ES = 0;
        if (RI)
    {
      RI = 0;                 //清除RI位
                        Rec_Buf[i] = SBUF;
                        i++;               
                        if(i>Buf_Max)         
                                {
                                        i = 0;
                                }           
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
    }
                ES =  1;
}
bit Hand(unsigned char *a)
{
    if(strcmp(Rec_Buf,a)!=NULL)
            return 1;
        else
                return 0;
}
void CLR_Buf(void)
{
        unsigned char k;
    for(k=0;k<Buf_Max;k++)   
            {
                        Rec_Buf[k] = 0;
                }
    i = 0;                    
}
以下是串口发送函数:
#include<reg52.h>

void SendString(char *s);

void SendString(char *s)
{
        while(*s != '\0')
        {
                SBUF = *(s++);
                while(!TI);
                TI = 0;
        }
}

应该没什么问题吧

模块根本就来不及初始化。

要延时一段时间?

不错的文件,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top