找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESP8266如何检测透传模式下单片机读取接收到的数据 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:76201 发表于 2018-7-31 17:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ESP8266:如何检测透传模式下单片机读取接收到的数据
用51做的用手机控制单片机驱动步进电机,想问问怎么检测ESP8266收到了信息,我设置了一个LED亮灭来检测,发现只在发送AT指令时有效果,而在透传模式传送数据没作用,求教。
程序如下,暂时将输出PWM注释了
单片机源程序如下:
  1. #include <reg52.H>
  2. #include <stdio.h>
  3. #define MAIN_Fosc  11059200UL //宏定义主时钟HZ
  4. unsigned int a;
  5. typedef unsigned char INT8U;
  6. typedef unsigned char uchar;
  7. typedef unsigned int INT16U;
  8. int b=1;
  9. int c =1;
  10. int d =1;
  11. int e=1;
  12. int f=0;
  13. int i;
  14. INT8U t=0;
  15. INT8U Freq=22;
  16. INT8U PWM_T = 9;
  17. sbit LED1 = P1^0;
  18. sbit down = P3^0;
  19. sbit up = P3^1;
  20. void Delay_Ms(INT16U ms)
  21. {
  22.      INT16U i;
  23.   do
  24.   {
  25.        i = MAIN_Fosc / 96000;
  26.     while(--i);   //96T per loop
  27.      }while(--ms);
  28. }

  29. //PWM初始化
  30. void pwm_Init()
  31. {
  32. TMOD = 0x02;   //定时器0,工作模式2,8位定时模式
  33. TH0=210;     //写入预置初值(取值1-255,数越大PWM频率越高)
  34. TL0=210;     //写入预置值 (取值1-255,数越大PWM频率越高)
  35. TR0=1;       //启动定时器
  36. ET0=1;       //允许定时器0中断
  37. EA=1;        //允许总中断
  38. P1=0xFF;   //初始化P1,输出端口
  39. PWM_T=Freq/2;
  40. }
  41. //串口初始化
  42. void Uart_Init()
  43. {
  44.      PCON |=0X80;  //是否波特率倍增
  45.   SCON=0x50;
  46.   TMOD=0X20;    //设置定时器1为模式2,做为波特率发生器
  47.   TL1=0xFF;    //57600波特率的初值,板子使用11.592M晶振,初值=256-12000000/32/12/2400
  48.   TH1=0xFF;    //
  49.   TI = 1;
  50.   TR1=1;     //启动波特率发生

  51. }

  52. void main(void)  
  53. {
  54. unsigned char ldat;
  55. // pwm_Init();
  56. Uart_Init();
  57.    //设置串口方式2
  58.      do
  59.    {
  60.   for (a=0; a<50000; a++);
  61.   printf ("AT+CIPMUX=1\n");
  62.   do
  63.   {
  64.       if(RI)
  65.     {    //查询是否有数据接收
  66.        LED1=~LED1;//用LED来检测是否收到数据
  67.     ldat=SBUF;  //数据暂存于变量中
  68.        RI=0;
  69.              if (ldat=='K')
  70.            {   b=0 ;
  71.          d=0;
  72.      }
  73.            c++;
  74.        if (c==1000)
  75.        { c=1;
  76.           d=0;
  77.     }
  78.        }
  79.     }while (d);  
  80. }while(b) ;
  81.     b=1;
  82.   c =1;
  83.   d =1;
  84.       do
  85. {
  86.    for (a=0; a<50000; a++);
  87.    printf ("AT+CIPSERVER=1,7671\n");
  88.       do
  89.     {
  90.      if(RI)
  91.     {

  92.        ldat=SBUF;  //数据暂存于变量中
  93.        RI=0;
  94.        if (ldat=='K')
  95.         {
  96.        b=0 ;
  97.           d=0;
  98.       }
  99.           c++;
  100.          if (c==1000)
  101.       { c=1;
  102.       d=0;
  103.     }
  104.     }
  105.      }while (d);  
  106. }while(b) ;  

  107. b=1;
  108. c =1;
  109. d =1;
  110.    while(1)
  111. {   
  112.     if(RI){     //查询是否有数据接收
  113.     ldat=SBUF;  //数据暂存于变量中
  114.     RI=0;   //重新清0等待接收
  115.    //命令接收开始
  116.     if (ldat=='}')
  117.    {  
  118.       char k[50] ;
  119.    
  120.          do
  121.    {
  122.        if(RI)
  123.   {
  124.    //查询是否有数据接收
  125.       ldat=SBUF;  //数据暂存于变量中
  126.       RI=0;   //重新清0等待接收
  127.          k[f]=ldat;
  128.    f++;
  129.   if(ldat==0x0A)
  130.    { e=0; }
  131.     }
  132.       }while (e);
  133.       printf("%s\n", k);
  134.      
  135.    f=0;
  136.       e=1;
  137.      
  138.    for(a=0; a<50; a++)
  139.     {
  140.       k[a]=0;
  141.    }
  142.    }
  143.     //命令结束
  144.   }
  145.     //电机驱动
  146. //            if(!up)
  147. //  {
  148. //    if(Freq<60)
  149. //     {
  150. //       Freq+=1;
  151. //       PWM_T=Freq/2;
  152. //     }
  153. //   
  154. //    Delay_Ms(10);
  155. //  }
  156. //      
  157. //   if(!down)
  158. //  {
  159. //    if(Freq>1)
  160. //     {
  161. //       Freq-=1;
  162. //       PWM_T=Freq/2;
  163. //     }
  164. //   
  165. //    Delay_Ms(10);
  166. //  }
  167. }
  168. }

  169. /****************************************************
  170.                /定时器0中断模拟PWM
  171. ****************************************************/
  172. timer0() interrupt 1  
  173. {
  174.   t++;    //每次定时器溢出加1
  175.   
  176.   if(t==Freq)   //PWM周期 100个单位
  177.    {
  178.      t=0;  //使t=0,开始新的PWM周期
  179.      P1=0x00;  //输出端口
  180.    }
  181.   
  182.   if(PWM_T==t)  //按照当前占空比切换输出为高电平
  183.    {  
  184.       P1=0xff;        //  
  185.    }
  186. }
复制代码

所有资料51hei提供下载:
ESP8266:如何检测透传模式下单片机读取接收到的数据.docx (13.14 KB, 下载次数: 16)



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

使用道具 举报

沙发
ID:310519 发表于 2018-8-1 09:24 | 只看该作者
esp8266用做收发模块?

只要设置正确并连接后,收到数据就会通过串口发送出来的吧?
回复

使用道具 举报

板凳
ID:410513 发表于 2019-1-27 15:11 | 只看该作者
我也是这种情况  AT的OK  透传的读不到数据,,楼主解决了吗
回复

使用道具 举报

地板
ID:480450 发表于 2019-9-30 21:50 | 只看该作者
AT模式下不能透传
回复

使用道具 举报

5#
ID:68356 发表于 2019-10-3 01:45 | 只看该作者
可能就是没收到数据,收到一个字节的数据RI也会置位
回复

使用道具 举报

6#
ID:338127 发表于 2020-3-7 21:15 | 只看该作者
1876476642 发表于 2019-9-30 21:50
AT模式下不能透传

可以的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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