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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1925|回復: 1
打印 上一主題 下一主題
收起左側

我用51單片機連接esp8266,建立TCP連接,在發送數據時,如果控制的外設超過一個就出錯

[復制鏈接]
跳轉到指定樓層
樓主
ID:926694 發表于 2021-5-26 20:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我用51單片機連接8266,然后建立TCP連接,在發送數據時,如果控制的外設只有一個的話工作正常,但加入兩個后,比如我這兒又加了一個蜂鳴器,當控制燈的時候,蜂鳴器當前的狀態會取反,同理,控制蜂鳴器的時候,燈的狀態也會取反。不是蜂鳴器接線的問題,我把蜂鳴器換成LED也是出現這種問題,我實在想不明白,我先謝謝大家了,跪求原因

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit beep = P2^3;
  6. sbit LED1 = P2^4;
  7. sbit LED2 = P2^5;
  8. #define MAIN_Fosc                11059200UL        //宏定義主時鐘HZ

  9. uchar Recive_date[40]="";//接受數據
  10. uchar Recive_flag = 0;//接收完成標志

  11. //1s延時
  12. void delay1s(void)
  13. {
  14.     unsigned char a,b,c;
  15.     for(c=13;c>0;c--)
  16.         for(b=247;b>0;b--)
  17.             for(a=142;a>0;a--);
  18.     _nop_();
  19. }

  20. //us級延時
  21. void us_delay(uchar t)
  22. {  
  23.         while(t--);
  24. }

  25. //串口中斷函數
  26. void Uart_Interrupt(void) interrupt 4
  27. {
  28.         static uchar i=0;  
  29.         if(RI==1)  
  30.         {   
  31.                 RI=0;   
  32.                 ES = 0;//關閉串口中斷
  33.                 Recive_date[i]=[/i]SBUF;
  34. [i]                if((Recive_date=='\n'))
  35.                 {                     
  36.                         i=0;                        //遇到換行 重新裝值
  37.                         Recive_flag = 1;//接收數據完畢
  38.                 }   
  39.                 else i++;
  40.                 ES = 1;//打開串口中斷               
  41.         }   
  42.         else TI=0;  
  43. }

  44. //發送一個字節
  45. void sendByte(uchar b)
  46. {
  47.         ES=0;                                   //關閉串口中斷  
  48.         TI=0;                                   //清發送完畢中斷請求標志位   
  49.         SBUF=b;                                 //發送  
  50.         while(TI==0);                           //等待發送完畢   
  51.         TI=0;                                   //清發送完畢中斷請求標志位   
  52.         ES=1;
  53. }

  54. //發送字符串
  55. void sendString(uchar *s)
  56. {
  57.          while(*s!='\0')                    //遇到空格跳出循環  
  58.         {   
  59.                 sendByte(*s);                  //向WIFI模塊發送控制指令。   
  60.                 us_delay(5);
  61.                 s++;
  62.         }  
  63.         us_delay(5);  
  64.         sendByte('\r');                         //回車  
  65.         us_delay(5);  
  66.         sendByte('\n');
  67. }

  68. //串口初始化
  69. void Init_Uart(void)
  70. {
  71.         TMOD = 0x20;//8位自動重裝
  72.     SCON = 0x50;//8位數據,波特率可變,方式1
  73.     TH1 = 0xFD;
  74.     TL1 = TH1;  //9600波特率
  75.     PCON = 0x00;//波特率不加倍
  76.     TR1 = 1;    //打開定時器1
  77.         EA = 1;                //打開總中斷
  78.         ES = 1;                //打開串口中斷
  79. }

  80. //8266初始化
  81. void esp_init(void)
  82. {
  83.         delay1s();
  84.         sendString("AT");
  85.         delay1s();
  86.         delay1s();
  87.         sendString("AT+CWMODE=3");
  88.         delay1s();
  89.         delay1s();
  90.         sendString("AT+RST");
  91.         delay1s();
  92.         delay1s();
  93.         sendString("AT+CWJAP=\"HONOR X10\",\"sxzwn.0717\"");
  94.         delay1s();
  95.         delay1s();
  96.         delay1s();
  97.         delay1s();
  98.         delay1s();
  99.         delay1s();
  100.         delay1s();
  101.         delay1s();
  102.         delay1s();
  103.         delay1s();
  104.         sendString("AT+CIPMUX=1");
  105.         delay1s();
  106.         delay1s();
  107.         sendString("AT+CIPSERVER=1,8080");
  108.         delay1s();
  109.         delay1s();
  110. }



  111. void main()
  112. {
  113.         uchar  LED_status=0;
  114.         uchar  beep_status=0;
  115.         LED1 = 0;
  116.         LED2 = 0;
  117.         Init_Uart();
  118.         delay1s();
  119.         delay1s();
  120.         esp_init();
  121.         LED1 = 1;
  122.         delay1s();
  123.         LED1 = 0;
  124.         while(1)
  125.         {
  126.                 if(Recive_flag==1&&Recive_date[0]=='+'&&Recive_date[1]=='I')
  127.                 {
  128.                         if(Recive_date[9]=='0')LED_status=1;
  129.                         if(Recive_date[9]=='1')LED_status=0;
  130.                         if(Recive_date[9]=='2')beep_status=0;
  131.                         if(Recive_date[9]=='3')beep_status=1;
  132.                         Recive_flag = 0;
  133.                 }
  134.                 if(LED_status==1)LED2 = 1;
  135.                 else LED2 = 0;
  136.                 if(beep_status==1)beep = 0;
  137.                 else beep = 1;
  138.         }
  139. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:926694 發表于 2021-5-26 22:22 | 只看該作者
我上面的格式不對,重新發一下
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

//sbit beep = P2^3;
sbit LED1 = P2^4;
sbit LED2 = P2^5;
#define MAIN_Fosc                11059200UL        //宏定義主時鐘HZ

uchar Recive_date[40]="";//接受數據
uchar Recive_flag = 0;//接收完成標志

//1s延時
void delay1s(void)
{
    unsigned char a,b,c;
    for(c=13;c>0;c--)
        for(b=247;b>0;b--)
            for(a=142;a>0;a--);
    _nop_();
}

//us級延時
void us_delay(uchar t)
{  
        while(t--);
}

//串口中斷函數
void Uart_Interrupt(void) interrupt 4
{
/*        static char i=0;  //因為是一位一位接收,所以用static
        if(RI)
        {
                ES = 0;//關閉串口中斷
                RI = 0;//接收標志位置零
                Recive_date[i] = SBUF;
                i++;
                if(Recive_date[i-1] == '\n')
                {
                        Recive_date[i] = '\0';
                        i = 0;
                        Recive_flag = 1;
                }
                ES = 1;//打開串口中斷
        }
        else
                TI = 0;//響應中斷后必須由軟件置零    */
        static uchar i=0;  
        if(RI==1)  
        {   
                RI=0;   
                ES = 0;//關閉串口中斷
                Recive_date[i]=SBUF;
                if((Recive_date[i]=='\n'))
                {                     
                        i=0;                        //遇到換行 重新裝值
                        Recive_flag = 1;//接收數據完畢
                }   
                else i++;
                ES = 1;//打開串口中斷               
        }   
        else TI=0;  
}

//發送一個字節
void sendByte(uchar b)
{
        ES=0;                                   //關閉串口中斷  
        TI=0;                                   //清發送完畢中斷請求標志位   
        SBUF=b;                                 //發送  
        while(TI==0);                           //等待發送完畢   
        TI=0;                                   //清發送完畢中斷請求標志位   
        ES=1;
}

//發送字符串
void sendString(uchar *s)
{
         while(*s!='\0')                    //遇到空格跳出循環  
        {   
                sendByte(*s);                  //向WIFI模塊發送控制指令。   
                us_delay(5);
                s++;
        }  
        us_delay(5);  
        sendByte('\r');                         //回車  
        us_delay(5);  
        sendByte('\n');
}

//串口初始化
void Init_Uart(void)
{
        TMOD = 0x20;//8位自動重裝
    SCON = 0x50;//8位數據,波特率可變,方式1
    TH1 = 0xFD;
    TL1 = TH1;  //9600波特率
    PCON = 0x00;//波特率不加倍
    TR1 = 1;    //打開定時器1
        EA = 1;                //打開總中斷
        ES = 1;                //打開串口中斷
}

//8266初始化
void esp_init(void)
{
        delay1s();
        sendString("AT");
        delay1s();
        delay1s();
        sendString("AT+CWMODE=3");
        delay1s();
        delay1s();
        sendString("AT+RST");
        delay1s();
        delay1s();
        sendString("AT+CWJAP=\"HONOR X10\",\"sxzwn.0717\"");
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        delay1s();
        sendString("AT+CIPMUX=1");
        delay1s();
        delay1s();
        sendString("AT+CIPSERVER=1,8080");
        delay1s();
        delay1s();
}



void main()
{
        uchar  LED_status=0;
        uchar  beep_status=0;
        LED1 = 0;
        LED2 = 0;
        Init_Uart();
        delay1s();
        delay1s();
        esp_init();
        LED1 = 1;
        delay1s();
        LED1 = 0;
        while(1)
        {
                if(Recive_flag==1&&Recive_date[0]=='+'&&Recive_date[1]=='I')
                {
                        if(Recive_date[9]=='0')LED_status=1;
                        if(Recive_date[9]=='1')LED_status=0;
                        if(Recive_date[9]=='2')beep_status=0;
                        if(Recive_date[9]=='3')beep_status=1;
                        Recive_flag = 0;
                }
                if(LED_status==1)LED2 = 1;
                else LED2 = 0;
                if(beep_status==1)LED1 = 0;
                else LED1 = 1;
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91精品网站 | 亚洲欧美日韩网站 | 911精品国产 | 精品国产乱码久久久久久果冻传媒 | 爱爱免费视频 | 亚洲精品二区 | 免费中文字幕日韩欧美 | 国产目拍亚洲精品99久久精品 | 久久69精品久久久久久久电影好 | jizz视频| 国产欧美一区二区三区在线看 | 精品视频在线免费观看 | 国产欧美精品一区二区 | 日韩美女一区二区三区在线观看 | 精品欧美一区二区中文字幕视频 | 日韩精品在线观看免费 | 成人动漫一区二区 | 一区二区视频在线观看 | 精品久久久久久亚洲精品 | av毛片在线免费观看 | 亚洲视频一区在线 | 国产精品欧美日韩 | 日韩av成人 | 一级片在线免费播放 | 亚洲美女网站 | 日韩高清一区 | 国产精品久久网 | 99热激情| 午夜视频一区二区三区 | 综合五月婷 | 亚洲精品一区二区三区中文字幕 | 欧美一区二区三区在线观看视频 | 99精品在线| 性做久久久久久免费观看欧美 | 精品国产乱码久久久久久老虎 | 国产精品美女在线观看 | 国产91精品网站 | 国产成人91| 国产91亚洲精品一区二区三区 | av黄色在线 | 一级毛片在线看 |