51驱动esp8266WiFi模块

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*=======================================================
main文件
=========================================================
-----------------------------------------------------------------------------------------------------------*/

#include
#include "esp8266.h"

/*串口初始化:主要涉及寄存器配置*/
void UartInit(void) //初始化uart
{
TMOD = 0X20; //定时器1定时器方式 工作模式2,可自动重载的8位计数器常把定时/计数器1以模式2作为串行口波特率发生器
SCON = 0X50; //串口选择工作模式1使能接收,允许发送,允许接收

PCON = 0X80; //8位自动重载,波特率加倍
TH1 = 0XFF; //用11.0592 MHz波特率 115200
TL1 = 0XFD;
TR1 = 1; //打开中时器
ES=1;
EA=1;
}



void main(void)
{

UartInit();//调用串口初始化函数

ap_init();
while(1)
{

}
}


void tamadebuyongxiemingzi()interrupt 4
{
unsigned char TempDat;
if (RI)//串口接收完整一个字节
{
TempDat = SBUF;
save_data(TempDat);
RI = 0;
// SBUF = TempDat;
// while(TI != 1);//判断发送标志位TI,如果发送完成,硬件会置TI标志位1
// TI = 0; //TI清为0,以备下一次发送
}
}


/*=======================================================
ESP8266驱动文件
=========================================================
-----------------------------------------------------------------------------------------------------------*/

#include "esp8266.h"
#include

#define DATA_SIZE 5

unsigned int cmd=0;
unsigned char respond_data[DATA_SIZE]={0};

void print(char *string)
{
while(*string!='\0')
{
SBUF = *string; //把数据A送给SBUF缓存器中
while(TI != 1);//判断发送标志位TI,如果发送完成,硬件会置TI标志位1
TI = 0; //TI清为0,以备下一次发送
string++;
}
SBUF = 13; //把数据A送给SBUF缓存器中
while(TI != 1);//判断发送标志位TI,如果发送完成,硬件会置TI标志位1
TI = 0; //TI清为0,以备下一次发送
SBUF = 10; //把数据A送给SBUF缓存器中
while(TI != 1);//判断发送标志位TI,如果发送完成,硬件会置TI标志位1
TI = 0; //TI清为0,以备下一次发送
}

void ap_init()
{
cmd=AT_INIT;
while(check_respond(AT_RST)==0);
send_cmd("AT+RST");
while(check_respond(AT_RST)==0);
send_cmd("AT+CWMODE=2");
while(check_respond(AT_CWMODE)==0);
send_cmd("AT+RST");
while(check_respond(AT_RST)==0);
send_cmd("AT+CWSAP=\"519team\",\"00000000\",1,3");
}

void save_data(char buff)
{
switch(cmd)
{
case AT_RST:
if(search_str("data",buff)==0)
respond_data[0]=1;
break;
case AT_CWMODE:
if(search_str("OK",buff)==0)
respond_data[0]=1;
break;
case AT_INIT:
if(search_str("data",buff)==0)
respond_data[0]=1;
break;
default : break;
}
}

int search_str(cha

r * str,char buff)
{
const FINISH=0,OK=1,ERROR=-1;
static unsigned i=0;
if(buff==*(str+i))
{
i++;
if(*(str+i)=='\0')
return FINISH;
else
return OK;
}
else
{
i=0;
return ERROR;
}

}


//-----------------------------------分割线拿来分类用的,下面的是底层函数-----------------------------------------------------------------------------------------------
void send_cmd(char * command)
{
esp_delay();
print(command);
if(command=="AT+RST") cmd=AT_RST;
else if(command=="AT+CWMODE=2") cmd=AT_CWMODE;
else if(command=="AT+CWSAP=\"0x01\",\"00000000\"")cmd=AT_CWSAP;

data_init();
}

void data_init()
{

int i=DATA_SIZE-1;
while(i--)
respond_data[i]=0;
}

int check_respond(unsigned int def_cmd)
{
switch(def_cmd)
{
case AT_RST:
if(respond_data[0]==1)
return 1;
else
return 0;

case AT_CWMODE:
if(respond_data[0]==1)
return 1;
else
return 0;
}
}

void esp_delay()
{
unsigned short i=0xffff;
while(i--);
}

/*=======================================================
ESP8266.h头文件
=========================================================
-----------------------------------------------------------------------------------------------------------*/



#include

#define AT_INIT 0
#define AT_RST 1 //返回ready
#define AT_CWMODE 2 //返回OK
#define AT_CWSAP 3 //返回OK

//架设服务器
#define AT_CIPMUX? 101 //查询指令,返回OK
#define AT_CIPMUX 102 //连接模式,返回OK
#define AT_CIPSERVER 103//创建服务器,返回OK

void save_data(char buff);
int check_respond(unsigned int def_cmd);
void print(char *string);
int search_str(char * str,char buff);
void send_cmd(char *cmd);
void data_init();
void esp_delay();


相关文档
最新文档