久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2709|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機與esp8266聯(lián)手控制電機和led程序 調(diào)試出現(xiàn)問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:219317 發(fā)表于 2017-9-15 00:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我用stc89單片機與esp8266聯(lián)手控制led和電機,發(fā)現(xiàn)必須直接在串口或者對esp8266發(fā)送兩次同樣信息才能讓panduan()選擇另一分支,如果只發(fā)一次信息,無變化;但是當我把panduan()中每個分支下的data_cls();刪除了,就只發(fā)一次信息就可以改變分支了。試了好久始終不得要領(lǐng),不知到是什么原因。懇請大神解惑。程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>                     
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define RELOAD_COUNT 0xFA
  7. uchar Receive;                             
  8. uchar Recive_table[15];
  9. static uchar i=0;
  10. sbit LED0=P2^1;
  11. sbit LED1=P2^2;
  12. sbit ji0=P0^0;
  13. sbit ji1=P0^1;
  14. sbit ji2=P0^2;
  15. sbit ji3=P0^3;
  16. void ms_delay(uint z)
  17. {
  18.       uint x,j;
  19.       for(x=z;x>0;x--)
  20.        for(j=110;j>0;j--);
  21. }

  22. void Uart_Init()//使用定時器1作為波特率發(fā)生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
  23. {
  24.       SCON=0x50;     //設(shè)置為串行口以方式1工作,8位異步通訊,允許接收中斷。//一幀信息為10位,1位起始位,8位數(shù)據(jù)位(低位在先),1位停止位。
  25.       PCON=0x80;     //SMOD波特率選擇位為1,SMOD=1.
  26.       TMOD=0x21;     //設(shè)置定時器1為波特率發(fā)生器,工作在模式2,8位自動裝載
  27.       TH1=RELOAD_COUNT;//波特率9600 ,TH1=256-FOSC/16/12/波特率
  28.       TL1=TH1;
  29.       EA=1;                            //總中斷打開
  30.       ES=0;                             //關(guān)閉串口中斷
  31.       TR1=1;                     //啟動定時器1
  32. }
  33. void led(void)
  34. {
  35. LED0=0;
  36. LED1=0;
  37. ms_delay(100);
  38. LED0=1;
  39. LED1=1;
  40. }

  41. void SendString(char *s)                //串口發(fā)送程序
  42. {
  43.         while(*s != '\0')
  44.         {
  45.                 SBUF = *(s++);
  46.                 while(!TI);
  47.                 TI = 0;
  48.         }
  49. }
  50. void zhengzhuan()          //用的是電機驅(qū)動模塊
  51. {
  52. ji0=0;
  53. ji1=0; //先停電機
  54. ji0=1; //
  55. ji1=0;
  56. ji2=0; //第二個控制沒用
  57. ji3=0;
  58. }

  59. void fanzhuan()
  60. {
  61. ji0=0;
  62. ji1=0; //先停電機
  63. ji0=0;
  64. ji1=1;
  65. ji2=0; //第二個控制沒用
  66. ji3=0;
  67. }

  68. void stop()           //停電機
  69. {
  70. ji0=0;
  71. ji1=0;
  72. ji2=0;
  73. ji3=0;
  74. LED0=1;
  75. LED1=1;
  76. }

  77. void data_cls()           //數(shù)組清零
  78. {
  79. uint  l;
  80. for(l = 0; l < 15; l ++)
  81. Recive_table[l]=0;
  82. }
  83. void panduan()                //根據(jù)信息判斷采用哪個分支
  84. {            
  85. if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的數(shù)據(jù)為+IPD時進入判斷控制0\1來使小燈亮與滅
  86.              {   
  87.                    //if((Recive_table[3]=='1')&&(Recive_table[4]=='2'))
  88.                                           
  89.                                           uint s;
  90.                                           s=Recive_table[10];
  91.                                           switch(s)
  92.                       {
  93.                                             case '1':   
  94.                                                         {
  95.                                   data_cls();
  96.                                                                   LED0=0;
  97.                                                                   LED1=1;//1 燈滅
  98.                                                                   zhengzhuan();
  99.                                                                   break;            
  100.                                                         }
  101.                          case '2':
  102.                             {                                
  103.                                 data_cls();
  104.                                                                 LED0=1;
  105.                                                                 LED1=0;  //1 燈亮
  106.                                                                 fanzhuan();
  107.                                                                 break;                     
  108.                                          }
  109.                                               case '3':
  110.                             {                                
  111.                                 data_cls();
  112.                                                                 stop();
  113.                                                                 break;                  
  114.                                          }
  115.                                                    
  116.                                                   default:
  117.                                                     {
  118.                                                            data_cls();
  119.                                                         stop();
  120.                                                         LED0=0;
  121.                                                         LED1=0;
  122.                                                         break;
  123.                                                     }
  124.                                           
  125.                                             }  
  126.                         }
  127.                          else
  128.                          {}

  129. }
  130. void main()
  131. {   
  132.       Uart_Init();//使用獨立的波特率發(fā)生器
  133.           led();
  134.           ms_delay(1000);
  135.           SendString("AT+CIPMUX=1");
  136.           SendString("\r\n");
  137.           led();
  138.           ms_delay(1000);
  139.           SendString("AT+CIPSERVER=1,8080");
  140.           SendString("\r\n");
  141.           EA=1;
  142.           ES=1;                                //允許串口中斷
  143.           while(1)
  144.       {         
  145.            
  146.            EA=1;
  147.            ES=1;
  148.            panduan();
  149.           }         
  150. }

  151. void Uart_Interrupt() interrupt 4
  152. {
  153.                    if(RI==1)
  154.     {   
  155.            RI=0;
  156.            Receive=SBUF;        //MCU接收wifi模塊反饋回來的數(shù)據(jù)
  157.            Recive_table[i]=Receive;      
  158.            i++;         
  159.                  if(Recive_table[i-1]=='\n')
  160.                    {
  161.                    i=0;  //遇到換行 重新裝值
  162.                       }
  163.                    else
  164.                         {}
  165.                   
  166.      }
  167.          else
  168.           {}   
  169. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2017-9-15 23:57 | 只看該作者
畫個流程圖或許能看出問題
回復(fù)

使用道具 舉報

板凳
ID:219317 發(fā)表于 2017-9-16 10:32 | 只看該作者
yzwzfyz 發(fā)表于 2017-9-15 23:57
畫個流程圖或許能看出問題

謝謝。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费在线 | 久久99国产精一区二区三区 | 91亚洲精选 | 97精品久久 | 成人视屏在线观看 | 亚洲国产精久久久久久久 | 国产精品久久久久999 | 亚洲一区 中文字幕 | 久久久免费观看视频 | 99精品国产一区二区三区 | 在线国产小视频 | 亚洲国产精品成人无久久精品 | 日本小电影网站 | 欧美日韩亚洲一区 | 羞羞网站在线观看 | 中文字幕在线观看成人 | 91在线精品视频 | 欧美成人精品一区二区三区 | 欧美久久一区二区 | 夜夜干夜夜操 | 国产精品日韩欧美一区二区 | 日韩一级精品视频在线观看 | 国产亚洲精品久久午夜玫瑰园 | 亚洲在线免费 | 日韩av在线中文字幕 | 亚洲精品久久久一区二区三区 | 9久久 | 免费一区在线观看 | 九九综合| 欧美日韩在线观看视频 | 久久国产激情视频 | 91一区二区 | 日日骚网| 国产情侣啪啪 | 另类在线 | www.久久影视 | 欧美一区二区 | 日本精品一区二区三区四区 | 久久久久久久国产 | 欧美不卡一区 | 伦理午夜电影免费观看 |