一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 550|回复: 0
收起左侧

[51单片机] 基于51单片机与ESP8266通信例程

[复制链接]
发表于 2021-8-30 14:10 | 显示全部楼层 |阅读模式
51单片机代码:
#include <reg52.h>
#include "intrins.h"

#define LED P2
sbit LED1=P2^0;


typedef unsigned int u16;
typedef unsigned char u8;

u8 receive[2];
u8 sign=0;

void delay1s(void)   //误差 0us
{
    u8 a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

//初始化串口
void Init()
{
        SCON = 0x50;        //串口模式1,允许接收
        TMOD = 0x20;        //T1工作模式2,自动重装
        PCON = 0x80;        //波特率倍增
        REN = 1;
                                        //根据实际选择
//        TH1 = 0xfa;                //波特率9600(11.0592)
        TH1 = 0xf3;                //波特率4800(12.0000)
//        TH1 = 0xf4;                //波特率4800(11.0592)

        TL1 = TH1;
        RI=0;
        EA = 1;
        ES = 0;
        TR1 = 1;
}

//发送字符
void send(u8 value)
{
        ES=0; //关闭串口中断
        TI=0; //清发送完毕中断请求标志位
        SBUF=value; //发送       
        while(!TI); //等待发送完毕
        TI=0; //清发送完毕中断请求标志位
        ES=1; //允许串口中断

}

//单片机向模块发送AT指令
void wifi_init()
{
        u8 j=0;
    u8 a[]="AT+CIPMUX=1\r\n";                   //前面说到的那两条掉电后需要重新配置的AT指令
    u8 b[]="AT+CIPSERVER=1,6666\r\n";
    while(a[j]!='\0')
    {
               send(a[j]);
        j++;
    }
        j=0;                                 //清零准备发第二条指令
        delay1s();                         //延时一下
        while(b[j]!='\0')
    {
        send(b[j]);
        j++;
    }
        delay1s();
}

void wifi_data()
{
        if(receive[0]=='A')                  //亮
        {
                LED1=0;
        }
        if(receive[0]=='B')                 //灭
        {
                LED1=1;
        }
        if(receive[0]=='C')                 //灭
        {
                LED=0x00;
        }
        if(receive[0]=='D')                 //灭
        {
                LED=0xff;
        }
}   

void main()
{
        Init();
        wifi_init();
        while(1)
        {
                wifi_data();
        }
}

//中断程序,此程序只把+IPD,x,x:后的有用数据存进receive数组里
void ZD() interrupt 4
{
        if(RI)
        {
                RI=0;
                if(sign==1)
                {
                        receive[0]=SBUF;
                        sign=0;                         //保存receive[0]的数据
                }
                if(SBUF==':')            //等于':'时sign为1,让下一个有用数据放进receive[0]
                {
                        sign=1;
                }
        }
}


APP.zip

1.29 MB, 下载次数: 7, 下载积分: 一乐金币 -1

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-5 20:28 , Processed in 0.050953 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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