完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
主函数是这样写的:调试的时候只打印esp8266启动信息,AT指令在串口助手可以看到但是没有数据返回。 #include #include #include #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[]="ATrn"; // 联机指令,返回"OK" char code str2[]="AT+CWMODE=1rn"; // 设置ESP8266的工作模式,返回"OK"或者"no change" char code str3[]="AT+CWJAP="lces","88518851"rn"; // 连接到WiFi热点,lces为热点名称,88518851为密码;连接成功返回“OK” char code str4[]="AT+CIFSRrn"; // 本机IP地址查询指令 char code str5[]="AT+CIPSTART="TCP","192.168.23.3",8234rn"; // 连接到TCP服务器,返回“Linked” char code str6[]="AT+CIPSEND=6rn"; // 发送数据指令 char code str7[]="hello!rn"; ***it LED1 = P1^0; // 定义LED1为P5.0 ***it LED2 = P1^1; // 定义LED2为P5.1 ***it 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("rn"); 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 Rec_Buf[k] = 0; } i = 0; } 以下是串口发送函数: #include void SendString(char *s); void SendString(char *s) { while(*s != ' |