找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1596|回复: 1
打印 上一主题 下一主题
收起左侧

有大佬用C51单片机进行过ESP8266的开发吗?想用ESP8266等时间循环输出八位的数组

[复制链接]
跳转到指定楼层
楼主
      我想用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);
                }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:296121 发表于 2018-3-28 21:54 | 只看该作者
感觉是 这段代码没有跳出来
                            for(j=0;j<16;j++)
                            {
                                SBUF=*(p+j);
                                while(!TI);
                                TI=0;
                            }
( 备注:   unsigned char FSSJ[]="AT+CIPSEND=0,8\r\n";//发送数据        )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表