找回密码
 立即注册

QQ登录

只需一步,快速开始

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

esp826601在while死循环中经常断掉,求指导

[复制链接]
跳转到指定楼层
楼主
ID:214628 发表于 2018-7-30 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50黑币
我买了ESP 8266 01做控制用,但是在主循环里面我用了while死循环,结果诡异的是在判断完SendDataFlage等于1,执行完这个If判段语句后,他的while死循环就执行不下去了,就在这里断掉了,最离谱的是我做的串口判断函数,在接收到666666601,1,之后执行完蜂鸣器响之后,也不执行向下语句了,我在memset函数那里做了蜂鸣器响的功能,结果却发现语句完全没有执行到这里。我最后单独运行串口中断接受函数或SendDataFlage函数,while循环语句就很顺畅的执行了,实在找不到那里出错了,求大家指点


  1. #include <reg52.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <intrins.h>
  5. #include <math.h>
  6. #include <stdarg.h>
  7. #include "usart.h"
  8. #include "wifi.h"
  9. sbit BUZZ = P2^3;  //蜂鸣器控制引脚
  10. sbit Pow = P1^0;
  11. sbit Pow1 = P0^0;



  12. unsigned char SendDataFlage = 0;
  13. unsigned char i,d;
  14. char Recive_table[20]="";  //接收缓冲,最大20个字节
  15. //unsigned char data Recive_table[20];
  16. char Recive_state = 0;   //接收完成标志


  17. int main (void)
  18. {
  19.         

  20. /********************功能初始化***********************/


  21.          Uart_Init();//串口初始化,波特率为9600
  22.         Pow = 1;
  23.         ms_delay(1000) ;
  24.         ms_delay(1000) ;
  25.         //BUZZ=0;
  26.         ms_delay(1000) ;
  27.         ms_delay(1000) ;
  28.         ms_delay(1000) ;
  29.          //BUZZ=1;


  30.                 ES = 0;
  31.                 TI = 1;

  32. //                printf("AT+CIPSTART=\"TCP\",\"192.168.1.2\",8080\r\n");
  33.                 BUZZ=0;
  34.                 ms_delay(1000) ;
  35. //            printf("AT+CIPSTART=\"TCP\",\"192.168.1.2\",8080\r\n");

  36.                 //BUZZ=1;
  37.                 ms_delay(1000) ;
  38. //                printf("AT+CIPSTART=\"TCP\",\"192.168.1.2\",8080\r\n");

  39.                 //BUZZ=0;
  40.                 ms_delay(1000) ;
  41.                 ms_delay(1000) ;
  42.                 ms_delay(1000) ;
  43. //                printf("AT+CIPSTART=\"TCP\",\"192.168.1.2\",8080\r\n");

  44.                 BUZZ=1;
  45.                 ms_delay(1000) ;
  46.                 ms_delay(1000) ;
  47.                 ms_delay(1000) ;
  48.             printf("AT+CIPSTART=\"TCP\",\"192.168.1.2\",8080\r\n");

  49.                 //BUZZ=0;
  50.                 ms_delay(1000) ;
  51.                 printf("AT+CIPSEND=12\r\n");
  52.                 ms_delay(1000) ;
  53.                 //BUZZ=1;
  54.                 printf("666666601,ok\r\n");
  55.                 //BUZZ=0;                        
  56.                 while(!TI);               
  57.                 TI = 0;
  58.                 Recive_state = 0;
  59.                 //EA = 1;
  60.                 ES = 1;               
  61.                 ms_delay(1000) ;
  62.                 ms_delay(1000) ;
  63.                 BUZZ=1;


  64.         
  65.     SendDataFlage=1;
  66.         BUZZ=0;
  67.         ms_delay(1000) ;
  68.         
  69.         BUZZ=1;
  70.         start1:
  71. while(1)
  72. {         
  73.         
  74.         ms_delay(100) ;
  75.         if(SendDataFlage==1)
  76.                 {
  77.                 SendDataFlage=0;
  78.                 ES = 0;
  79.                 TI = 1;               
  80.                 printf("AT+CIPSEND=12\r\n");
  81.                 BUZZ=0;
  82.                 ms_delay(1000) ;
  83.                 printf("666666601,ok\r\n");
  84.                                        
  85.                 while(!TI);
  86.                 TI = 0;
  87.                 Recive_state = 0;
  88.                 ES = 1;
  89.                 PS = 1;        
  90.                 BUZZ=1;            
  91.                 ms_delay(1000) ;
  92.                 ms_delay(1000) ;
  93.                 }

  94.                 if(Recive_state == 1)
  95.           {
  96.                  
  97.                 if(strstr(Recive_table,"666666601,1"))
  98.                    {
  99.                   
  100.                             ES=0;
  101.                          TI=1;
  102.                          printf("AT+CIPSEND=15\r\n");
  103.                                        
  104.                                         ms_delay(1000) ;                                                  
  105.                                         printf("%c\n666666601,on\r\n");
  106.                                        
  107.                                         BUZZ =0;
  108.                                         Pow = 0;
  109.                                         Pow1 = 0;
  110.                                         for(d=0;d<=5;d++)
  111.                                         {
  112.                                                 for(i=0;i<=30;i++)
  113.                                                 {
  114.                                                         ms_delay(1000) ;
  115.                                                 }
  116.                                         }

  117.                                         Pow = 1;
  118.                                         Pow1 = 1;
  119.                                          
  120.                                         printf("AT+CIPSEND=16\r\n");
  121.                                        
  122.                                         ms_delay(1000) ;
  123.                                         printf("%c\n666666601,off\r\n");
  124.                                        

  125.                          //while(!TI)
  126.                          TI=0;
  127.                          Recive_state = 0;
  128.                          ES=1;
  129.                          SendDataFlage=1;
  130.                          BUZZ =1;
  131.                         goto start1;
  132.                    }
  133.          
  134.                 else if(strstr(Recive_table,"666666601,ok"))
  135.                    {
  136.                            
  137.                          ES=0;
  138.                          TI=1;
  139.                      BUZZ =0;
  140.                          ms_delay(1000) ;
  141.                          BUZZ =1;
  142.                          while(!TI)
  143.                          TI=0;
  144.                          Recive_state = 0;
  145.                          ES=1;
  146.                          SendDataFlage=1;
  147.                          goto start1;
  148.                    }
  149.                  
  150.                  RI = 0;
  151.          ES = 0;
  152.                  TI=0;
  153.                  Recive_state = 0;
  154.          ES = 1;                  
  155.                  SendDataFlage=1;
  156.          goto start1;
  157.                     
  158.                  
  159.    }
  160.         
  161.         

  162.                     BUZZ=0;
  163.                 memset(Recive_table,'\0',20);
  164.                 //memset(Recive_table,0,20*sizeof(char));
  165.                 Recive_state = 0;
  166.                 TI=0;
  167.                 ES=1;  //打开接收标志位
  168.                 PS = 1;
  169.                 SendDataFlage=1;
  170.                 ms_delay(1000) ;
  171.                 BUZZ = 1;
  172.                 goto start1;
  173.                                     
  174.                
  175.         
  176. }
  177.                
  178. }


  179. /****************************************************/
  180.   

  181. /******************************************************************
  182. 函 数: void Uart_Interrupt() interrupt 4
  183. 功 能: 串口中断函数,将收到的字符存到Recive_table[]数组中
  184. 参 数: 无
  185. 返回值: 无
  186. *******************************************************************/


  187. void Uart_Interrupt() interrupt 4         
  188. {   
  189.         static char i=0;  //因为是一位一位接收,所以用static
  190.         if(RI==1)   
  191.         {  
  192.                 ES = 0;
  193.                 RI=0;         
  194.                 Recive_table[i]=SBUF;        
  195.                 i++;
  196.                 if((Recive_table[i-1] == '\n'))
  197.                         {
  198.                                 Recive_table[i]='\0';
  199.                                 i=0;
  200.                                 Recive_state = 1;
  201.                         }

  202.                 ES = 1;      
  203.         }
  204.         if(TI)
  205.         {
  206.         TI = 0;
  207.         ES = 1;
  208.         }   
  209. }
复制代码


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

使用道具 举报

沙发
ID:310519 发表于 2018-7-31 18:52 | 只看该作者
Non-OS里不能用while(1).
回复

使用道具 举报

板凳
ID:381406 发表于 2018-7-31 19:29 | 只看该作者
好像没见过
回复

使用道具 举报

地板
ID:221865 发表于 2018-8-1 11:27 | 只看该作者
不知道是不是你在uart中断里面,把TI = 0;了,然后你还继续使用printf();函数,你试试将
if(TI)
{
    TI = 0;
    ES = 1;
}
这几行注释掉看看。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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