亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4903|回復: 2
收起左側

C51單片機設置esp8266程序怪現象 memory model:"選PDATA或XDATA才正常

[復制鏈接]
ID:160658 發表于 2017-11-25 20:05 | 顯示全部樓層 |閱讀模式
使用ESP8266(ESP-01S)連接單片機

編譯前需要在“devies target"欄里的”memory model:"選PDATA或XDATA,否則編譯后運行不正常,感到很迷惑,望大俠給予指點,為什么要這樣設置才行?

程序如下:
  1. /***************************************************************************************
  2. 題目:基于STC89CS2RC單片機無線WIFI模塊控制
  3. 內容:通過MCU上位機對ESP8266wifi模塊的控制和設置,實現手機端控制LED燈的亮滅。
  4. ********************************************************************/
  5. #include <reg52.h>//包含頭文件
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define RELOAD_COUNT 0xFD//宏定義波特率發生器的載入值
  9. //define RELOAD_COUNT(256-(((11520000/16)/12)/9600))也可以或波特率9600
  10. //256-晶振頻率/波特率x16=BRT
  11. /*****************LED燈對應P0口的1個端口*************/
  12. sbit LED = P0^0;
  13. /************波特率發生器相關功能寄存器的定義****************/
  14. sfr AUXR = 0x8E;                   //輔助寄存器的地址
  15. sfr BRT = 0x9C;                           //獨立波特率發生器的地址
  16. sfr AUXR1 = 0xA2;                   //輔助寄存器1的地址
  17. /*****************相關變量**************/
  18. uchar Receive, i;
  19. uint n;
  20. uchar Recive_table[15];//用于接收wifi模塊反饋到MCU上的數據
  21. /*******************************************************************
  22. 名稱:延時函數
  23. 作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......
  24. ********************************************************************/
  25. void ms_delay(uint t)
  26. {
  27.         uint i, j;

  28.         for(i=t; i>0; i--)
  29.                 for(j=110; j>0; j--);
  30. }

  31. void us_delay(uchar t)
  32. {
  33.         while(t--);
  34. }
  35. /********************************************************************
  36. 名稱:波特率發生器函數
  37. 作用:波特率發生器可以是T1定時器實現,也可以是MCU內部獨立的波特率發生器,
  38.       各自不同的載入值計算式,具體根據寄存器相關設置來參考計算,以實現  
  39.           異步串行通訊。(經測試,兩種設置方式均可用,可任選一種。)  
  40. **********************************************************************/
  41. void Uart_Init()//使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
  42. {
  43.         SCON = 0x50;//設置為串行口以方式1工作,8位異步通訊,允許接收中斷。
  44.                     //一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。
  45. //        PCON = 0x80;    //SMOD波特率選擇位為1,SMOD = 1.波特率加倍
  46.         TMOD = 0x20;    //設置定時器1為波特率發生器,工作在模式2,8位自動裝載
  47.         TH1 = RELOAD_COUNT;//波特率9600,TH1=256-FOSC/16/12/2/波特率
  48.         TL1 = TH1;
  49.         EA = 1;  //總中斷打開
  50.         ES = 0;  //關閉串口中斷
  51.         TR1 = 1; //啟動定時器1
  52. }
  53. /*
  54. void Uart_Init()//使用獨立的波特率發生器(STC12C560S2或帶有獨立波特率發生器的單片機均可)
  55. {
  56.         SCON = 0x50;//設置為串行口以方式1工作,8位異步通訊,允許接收中斷。
  57.         PCON = 0x80;//SMOD波特率選擇位為1,SMOD=1.
  58.         BRT = RELOAD_COUNT;//波特率9600 256-晶振頻率/波特率x16=BRT
  59.         AUXR = 0xD5;//T0、T1不12分頻,速度是89C51的12倍,啟動獨立波特率發生器,每個時鐘計數一次
  60.                     //設置串口1的波特率發生器為獨立波特率發生器,
  61.         AUXR1 = 0x80;//切換到P1口
  62.         ES = 1;  //開啟串口中斷
  63.         EA = 1;  //開啟總中斷
  64. }                                                                                                           */
  65. /********************************************************************
  66. 名稱:串口發送函數  
  67. 功能:MCU向其他與其連接的設備發送數據(此處是無線WIFI模塊ESP8266)  
  68. ********************************************************************/
  69. void Send_Uart(uchar value)
  70. {
  71.         ES = 0;                           //關串口中斷
  72.         TI = 0;                           //清零發送標志位
  73.         SBUF = value;           //發送數據value
  74.         while(TI == 0);           //等待發送完畢
  75.         TI = 0;                           //清零發送標志位
  76.         ES = 1;                           //開串口中斷
  77. }
  78. /********************************************************************
  79. 名稱:WIFI模塊設置函數  
  80. 作用: 啟動模塊,以便可以實現無線接入和控制  
  81. ********************************************************************/
  82. void ESP8266_Set(uchar *puf) //數組指針*puf指向字符串數組
  83. {
  84.         while(*puf != '\0') //遇到空格跳出循環
  85.         {
  86.                 Send_Uart(*puf); //向WIFI模塊發送控制指令
  87.                 us_delay(5);
  88.                 puf++;
  89.         }
  90.         us_delay(5);
  91.         Send_Uart('\r'); //回車
  92.         us_delay(5);
  93.         Send_Uart('\n');  //換行
  94.         ms_delay(1000);
  95. }
  96. /****************************************************
  97. 名稱:ESP8266發送數據函數
  98. 功能:用于與wifi模塊相連的終端發送數據
  99. *****************************************************/
  100. void ESP8266_Sent(uchar *puf)
  101. {
  102.         ESP8266_Set("AT+CIPSEND=0,4");
  103.         while(*puf != '\0')  //遇到空格跳出循環
  104.         {
  105.                 Send_Uart(*puf); //向WIFI模塊發送控制指令
  106.                 us_delay(5);
  107.                 puf++;
  108.         }
  109.         us_delay(5);
  110.         Send_Uart('\n');  //換行
  111.         ms_delay(10);
  112. }
  113. /********************************************************************
  114. 名稱:主函數  
  115. 作用:程序的執行入口  
  116. ********************************************************************/
  117. void main()
  118. {
  119.         LED = 0;  //打開LED燈
  120.         Uart_Init();  //使用定時器1作波特率發生器
  121.         ESP8266_Set("AT+CWMODE=1");  //設置路由器 1 station模式 2 AP模式 3 station+AP混合模式
  122.         ESP8266_Set("AT+RST");  //重新啟動wifi模塊
  123. //        ESP8266_Set("AT+CWSAP=\"ESP-01S\",\"\",11,4");         //設置模塊SSID:WIFI,PWD:密碼及安全類型加密模式(WPA2-PSK)
  124.         ESP8266_Set("AT+CIPMUX=1"); //開啟多連接模式,允許多個客戶端接入
  125.         ESP8266_Set("AT+CIPSERVER=1,5000"); //啟動TCP/IP端口為5000實現基于網絡控制
  126.         ES = 1; //打開串口中斷
  127.         
  128.         while(1)
  129.         {
  130.                 if((Recive_table[0] == '+')&&(Recive_table[1] == 'I')&&(Recive_table[2] == 'P'))
  131.                 {                          //MCU接收到的數據為+IPD時進入判斷控制0\1來使小燈亮與滅
  132.                         if((Recive_table[3] == 'D')&&(Recive_table[6] == ','))
  133.                         {
  134.                                 if(Recive_table[9] == '0')
  135.                                 {
  136.                                         LED = 0; //燈亮
  137.                                         ESP8266_Sent("燈亮"); //wifi模塊向pc端或手機端?發送"燈亮”
  138.                                 }
  139.                                 else if(Recive_table[9] == '1')
  140.                                 {
  141.                                         LED = 1; //燈滅
  142.                                         ESP8266_Sent("燈滅"); //wifi模塊向pc端或手機端 發送"燈滅"
  143.                                 }
  144.                         }
  145.                 }
  146.         }
  147. }
  148. /*********************************************************************
  149. 名稱:串行通訊中斷
  150. 作用:發送或接收結束后進入該函數,對相應的標志位軟件清0,實現模塊對數據
  151.       正常的收發。
  152. ********************************************************************/
  153. void Uart_Interrupt() interrupt 4
  154. {
  155.         static uchar i = 0;
  156.         
  157.         if(RI == 1)
  158.         {
  159.                 RI = 0;
  160.                 Receive = SBUF;//MCU接收wifi模塊反饋回來的數據
  161.                 Recive_table[i] = Receive;
  162.                 i++;
  163.                 if((Recive_table[i-1]=='\n'))
  164.                 i = 0;       //遇到換行重新裝值
  165.         }
  166.         else
  167.                 TI = 0;
  168. }
復制代碼
回復

使用道具 舉報

ID:160658 發表于 2017-11-28 20:08 | 顯示全部樓層
有人知道嗎?????
回復

使用道具 舉報

ID:160658 發表于 2017-12-20 10:01 | 顯示全部樓層
沒人碰到過嗎?煩請大使們幫忙解答,十分感謝!
回復

使用道具 舉報

ID:263980 發表于 2017-12-20 14:36
一般遇到你這樣的情況是全局變量太多的問題,單片機內部的RAM已經不夠用了需要外部的RAM,可以看看這里的資料。http://blog.csdn.net/snow416/article/details/6407177

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表