找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C51单片机执行ESP8266远程命令源码详解

[复制链接]
跳转到指定楼层
楼主
ID:301377 发表于 2018-4-3 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c51单片机执行ESP8266远程命令详解,希望大家互相学习下

单片机源程序如下:
  1. /***************************************************************************
  2. c51单片机,远程命令详解

  3. ******************************************************************************/
  4. #include <AT89X51.H>
  5. #include <stdio.h>
  6. unsigned int a;
  7. int b=1;
  8. int c =1;
  9. int d =1;
  10. int e=1;
  11. int f=0;

  12. void main(void)  
  13. {
  14.         unsigned char ldat;
  15.          //PCON |=0X80;                //是否波特率倍增
  16.         SCON=0x50;
  17.         TMOD=0X20;                                //设置定时器1为模式2,做为波特率发生器
  18.         TL1=0xFD;                                //9600波特率的初值,板子使用11.592M晶振,初值=256-12000000/32/12/2400
  19.         TH1=0xFD;                                //
  20.         TI = 1;
  21.         TR1=1;                                        //启动波特率发生
  22.                         //设置串口方式2
  23.                  do{
  24. for (a=0; a<50000; a++);        //延时几秒,让模块有时间启动
  25. printf ("AT+CIPMUX=1\n"); //发送命令AT+CIPMUX=1,让模块进入多连接模式
  26.         if(RI){                                //查询是否有数据接收
  27.                         ldat=SBUF;                //数据暂存于变量中
  28.                         RI=0;
  29.                                 if (ldat=='K')//命令执行成功,就会返回OK,这里就是查询是否有K返回,若有K返回,就说明执行成功,可以执行下一条,否则继续循环
  30.                                 {b=0 ;
  31.                                 d=0;}
  32.                            c++;
  33.                         if (c==1000)
  34.                         {c=1;
  35.                         d=0;}}

  36.   }while (d);   
  37.         }while(b) ;
  38. b=1;
  39. c =1;
  40. d =1;//b、c、d复位,便于执行下一条命令



  41.                    do{
  42. for (a=0; a<10000; a++);
  43. printf ("AT+CIPSERVER=1,7671\n");
  44.          do{
  45.         if(RI){                                //查询是否有数据接收
  46.                         ldat=SBUF;                //数据暂存于变量中
  47.                         RI=0;
  48.                                 if (ldat=='K')//同上
  49.                                 {b=0 ;
  50.                                 d=0;}
  51.                            c++;
  52.                         if (c==1000)
  53.                         {c=1;
  54.                         d=0;}}

  55.   }while (d);   
  56.         }while(b) ;         
  57. b=1;
  58. c =1;
  59. d =1;
  60.                  do{
  61. for (a=0; a<10000; a++);
  62. printf ("AT+CIPSTO=50\n");
  63.          do{
  64.         if(RI){                                //查询是否有数据接收
  65.                         ldat=SBUF;                //数据暂存于变量中
  66.                         RI=0;
  67.                                 if (ldat=='K')//同上
  68.                                 {b=0 ;
  69.                                 d=0;}
  70.                            c++;
  71.                         if (c==1000)
  72.                         {c=1;
  73.                         d=0;}}

  74.   }while (d);   
  75.         }while(b) ;
  76. b=1;
  77. c =1;
  78. d =1;

  79. //执行上述命令,模块进入服务模式,下面单片机就可以接收远程发来的数据

  80.          while(1)
  81.         {        
  82.                   if(RI){                                //查询是否有数据接收
  83.                         ldat=SBUF;                //数据暂存于变量中
  84.                         RI=0;                        //重新清0等待接收
  85.                         
  86.                         
  87. //命令接收开始
  88.                         if (ldat=='}')        
  89.                         { char k[50] ;//设置接收数据缓冲
  90.    
  91.    
  92.             
  93.    
  94.               do{
  95.            
  96.            if(RI){                                //查询是否有数据接收
  97.                         ldat=SBUF;                //数据暂存于变量中
  98.                         RI=0;                        //重新清0等待接收
  99.                      k[f]=ldat;//一个个字符接收
  100.         f++        ;
  101.         if(ldat==0x0A){e=0;}        //若有新行字符,则结束接收,则说明命令接收完毕
  102.                 }
  103.            } while        (e)        ;
  104.             printf("%s\n", k);//执行远程发来的命令
  105.          f=0;
  106.          e=1;
  107.                         for (a=0; a<50; a++){
  108.                         k[a]=0;
  109.                         
  110.                         }
  111.            
  112.   
  113. }
  114. //命令结束

  115.                
  116.                         if (ldat==']')
  117. {P1_4=1;
  118.   printf ("AT+CIPSEND=0,1\n");
  119. for (a=0; a<10000; a++);
  120. printf ("A");
  121. }

  122.                          if (ldat=='-')
  123. {P1_4=!P1_4;

  124. }
  125.                                  if (ldat=='[')
  126. {P1_4=0;
  127.   printf ("AT+CIPSEND=0,1\n");
  128. for (a=0; a<10000; a++);
  129. printf ("B");
  130. }

  131.                          if (ldat=='{')
  132. {
  133. if(P1_4==0){
  134. printf ("AT+CIPSEND=0,1\n");
  135. for (a=0; a<10000; a++);
  136. printf ("B");
  137. }

  138. else{
  139.   printf ("AT+CIPSEND=0,1\n");
  140. for (a=0; a<10000; a++);
  141. printf ("A");
  142. }
  143. }

  144.         
  145.                 }
  146.         }

  147.         
  148. }
复制代码

所有资料51hei提供下载:
c51单片机执行ESP8266远程命令详解.zip (1.29 KB, 下载次数: 29)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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