我想用C51单片机和ESP8266做一个数据输出端和数据接收端。有没有大佬做过这块的开发,看到网上的教程主要是以接收信息为主的,很少有发送信息出去的。自己试着编了一下,在“AT+CIPSEND=0,8”这里遇到了问题。我想通过ESP8266定时一次一次地从一个八位数组中发送数据出去。接收端同样用ESP8266和C51的组合接收。 我现在的问题是,编完ESP初始化程序之后,想用AT+CIPSEND=0,8来输出,但是,不知道怎么控制延时,总是会提醒busy,或者,不能输出我数组的内容,想问大佬们这里要怎么改(标红的代码区)
显示的串口输入值是这样的:
接收客户端的接收结果是这样的:
这个是我的代码,大佬们能看看要怎么改吗?
#include "reg51.h"
unsigned char i = 0;
unsigned char *p;
unsigned char Buffer[] = {0x05,0x04,0x03,0x02,0x01,0x43,0x42,0x41,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81};
unsigned char RST[]="AT+RST\r\n";//重启模块
unsigned char LYMS[]="AT+CWMODE=3\r\n";//设置WIFI模块为station+AP模式
unsigned char SZLY[]="AT+CWSAP=\"TRAFFIC\",\"0123456789\",11,0\r\n";/*设置WIFI模块连接WIFI的名称与密码*/
unsigned char KQFU[]="AT+CIPSERVER=1,5000\r\n";//连接服务器
unsigned char TCMS[]="AT+CIPMODE=1\r\n";//开启透传模式
unsigned char FSSJ[]="AT+CIPSEND=0,8\r\n";//发送数据
unsigned char SZDLJ[13]="AT+CIPMUX=1\r\n"; //多路连接
void Delay_Xms(unsigned int x)
{
unsigned char i, j;
while(x--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Init_Uart(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD = 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1;
EA=1;
}
void SendByte(unsigned char dat)
{
TI=0;
SBUF=dat;
while(!TI);
}
void SendArry(unsigned char *p,unsigned char num)
{
while(num--)
{
SendByte(*p++);
}
}
void SendString(unsigned char *p)
{
while(*p)
{
SendByte(*p++);
}
}
void Online(void)
{
Delay_Xms(1500);//等待WIFI上电初始化
SendString(RST);//重启模块
Delay_Xms(1500);//等待WIFI上电初始化
SendString(LYMS);//AT+CWMODE=3 设置station+AP模式
Delay_Xms(100);
SendString(SZLY);//设置WIFI模块连接WIFI的名称与密码
Delay_Xms(2000);//等待连接WIFI以及获取IP地址
SendString(SZDLJ);//设置多连接
Delay_Xms(100);
SendString(KQFU);//连接服务器
Delay_Xms(2000);//等待连接成功
}
void main()
{
Init_Uart();
Online();//上线过程的代码 需要具体测试
while(1)
{
for(i=0;i<16;i++)
{
p=FSSJ;
while(*p)
{
SBUF=(*p++);
while(!TI);
TI=0;
}
SBUF=Buffer[ i];
while(!TI);
TI=0;
Delay_Xms(100);
}
}
}
|