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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C51單片機(jī)設(shè)置esp8266程序怪現(xiàn)象 memory model:"選PDATA或XDATA才正常

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:160658 發(fā)表于 2017-11-25 20:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
使用ESP8266(ESP-01S)連接單片機(jī)

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

程序如下:
  1. /***************************************************************************************
  2. 題目:基于STC89CS2RC單片機(jī)無線WIFI模塊控制
  3. 內(nèi)容:通過MCU上位機(jī)對ESP8266wifi模塊的控制和設(shè)置,實(shí)現(xiàn)手機(jī)端控制LED燈的亮滅。
  4. ********************************************************************/
  5. #include <reg52.h>//包含頭文件
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define RELOAD_COUNT 0xFD//宏定義波特率發(fā)生器的載入值
  9. //define RELOAD_COUNT(256-(((11520000/16)/12)/9600))也可以或波特率9600
  10. //256-晶振頻率/波特率x16=BRT
  11. /*****************LED燈對應(yīng)P0口的1個(gè)端口*************/
  12. sbit LED = P0^0;
  13. /************波特率發(fā)生器相關(guān)功能寄存器的定義****************/
  14. sfr AUXR = 0x8E;                   //輔助寄存器的地址
  15. sfr BRT = 0x9C;                           //獨(dú)立波特率發(fā)生器的地址
  16. sfr AUXR1 = 0xA2;                   //輔助寄存器1的地址
  17. /*****************相關(guān)變量**************/
  18. uchar Receive, i;
  19. uint n;
  20. uchar Recive_table[15];//用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
  21. /*******************************************************************
  22. 名稱:延時(shí)函數(shù)
  23. 作用:毫秒級延時(shí),微妙級延時(shí)函數(shù),為數(shù)據(jù)收發(fā)完成作等待.......
  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. 名稱:波特率發(fā)生器函數(shù)
  37. 作用:波特率發(fā)生器可以是T1定時(shí)器實(shí)現(xiàn),也可以是MCU內(nèi)部獨(dú)立的波特率發(fā)生器,
  38.       各自不同的載入值計(jì)算式,具體根據(jù)寄存器相關(guān)設(shè)置來參考計(jì)算,以實(shí)現(xiàn)  
  39.           異步串行通訊。(經(jīng)測試,兩種設(shè)置方式均可用,可任選一種。)  
  40. **********************************************************************/
  41. void Uart_Init()//使用定時(shí)器1作為波特率發(fā)生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
  42. {
  43.         SCON = 0x50;//設(shè)置為串行口以方式1工作,8位異步通訊,允許接收中斷。
  44.                     //一幀信息為10位,1位起始位,8位數(shù)據(jù)位(低位在先),1位停止位。
  45. //        PCON = 0x80;    //SMOD波特率選擇位為1,SMOD = 1.波特率加倍
  46.         TMOD = 0x20;    //設(shè)置定時(shí)器1為波特率發(fā)生器,工作在模式2,8位自動裝載
  47.         TH1 = RELOAD_COUNT;//波特率9600,TH1=256-FOSC/16/12/2/波特率
  48.         TL1 = TH1;
  49.         EA = 1;  //總中斷打開
  50.         ES = 0;  //關(guān)閉串口中斷
  51.         TR1 = 1; //啟動定時(shí)器1
  52. }
  53. /*
  54. void Uart_Init()//使用獨(dú)立的波特率發(fā)生器(STC12C560S2或帶有獨(dú)立波特率發(fā)生器的單片機(jī)均可)
  55. {
  56.         SCON = 0x50;//設(shè)置為串行口以方式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倍,啟動獨(dú)立波特率發(fā)生器,每個(gè)時(shí)鐘計(jì)數(shù)一次
  60.                     //設(shè)置串口1的波特率發(fā)生器為獨(dú)立波特率發(fā)生器,
  61.         AUXR1 = 0x80;//切換到P1口
  62.         ES = 1;  //開啟串口中斷
  63.         EA = 1;  //開啟總中斷
  64. }                                                                                                           */
  65. /********************************************************************
  66. 名稱:串口發(fā)送函數(shù)  
  67. 功能:MCU向其他與其連接的設(shè)備發(fā)送數(shù)據(jù)(此處是無線WIFI模塊ESP8266)  
  68. ********************************************************************/
  69. void Send_Uart(uchar value)
  70. {
  71.         ES = 0;                           //關(guān)串口中斷
  72.         TI = 0;                           //清零發(fā)送標(biāo)志位
  73.         SBUF = value;           //發(fā)送數(shù)據(jù)value
  74.         while(TI == 0);           //等待發(fā)送完畢
  75.         TI = 0;                           //清零發(fā)送標(biāo)志位
  76.         ES = 1;                           //開串口中斷
  77. }
  78. /********************************************************************
  79. 名稱:WIFI模塊設(shè)置函數(shù)  
  80. 作用: 啟動模塊,以便可以實(shí)現(xiàn)無線接入和控制  
  81. ********************************************************************/
  82. void ESP8266_Set(uchar *puf) //數(shù)組指針*puf指向字符串?dāng)?shù)組
  83. {
  84.         while(*puf != '\0') //遇到空格跳出循環(huán)
  85.         {
  86.                 Send_Uart(*puf); //向WIFI模塊發(fā)送控制指令
  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發(fā)送數(shù)據(jù)函數(shù)
  98. 功能:用于與wifi模塊相連的終端發(fā)送數(shù)據(jù)
  99. *****************************************************/
  100. void ESP8266_Sent(uchar *puf)
  101. {
  102.         ESP8266_Set("AT+CIPSEND=0,4");
  103.         while(*puf != '\0')  //遇到空格跳出循環(huán)
  104.         {
  105.                 Send_Uart(*puf); //向WIFI模塊發(fā)送控制指令
  106.                 us_delay(5);
  107.                 puf++;
  108.         }
  109.         us_delay(5);
  110.         Send_Uart('\n');  //換行
  111.         ms_delay(10);
  112. }
  113. /********************************************************************
  114. 名稱:主函數(shù)  
  115. 作用:程序的執(zhí)行入口  
  116. ********************************************************************/
  117. void main()
  118. {
  119.         LED = 0;  //打開LED燈
  120.         Uart_Init();  //使用定時(shí)器1作波特率發(fā)生器
  121.         ESP8266_Set("AT+CWMODE=1");  //設(shè)置路由器 1 station模式 2 AP模式 3 station+AP混合模式
  122.         ESP8266_Set("AT+RST");  //重新啟動wifi模塊
  123. //        ESP8266_Set("AT+CWSAP=\"ESP-01S\",\"\",11,4");         //設(shè)置模塊SSID:WIFI,PWD:密碼及安全類型加密模式(WPA2-PSK)
  124.         ESP8266_Set("AT+CIPMUX=1"); //開啟多連接模式,允許多個(gè)客戶端接入
  125.         ESP8266_Set("AT+CIPSERVER=1,5000"); //啟動TCP/IP端口為5000實(shí)現(xiàn)基于網(wǎng)絡(luò)控制
  126.         ES = 1; //打開串口中斷
  127.         
  128.         while(1)
  129.         {
  130.                 if((Recive_table[0] == '+')&&(Recive_table[1] == 'I')&&(Recive_table[2] == 'P'))
  131.                 {                          //MCU接收到的數(shù)據(jù)為+IPD時(shí)進(jìn)入判斷控制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端或手機(jī)端?發(fā)送"燈亮”
  138.                                 }
  139.                                 else if(Recive_table[9] == '1')
  140.                                 {
  141.                                         LED = 1; //燈滅
  142.                                         ESP8266_Sent("燈滅"); //wifi模塊向pc端或手機(jī)端 發(fā)送"燈滅"
  143.                                 }
  144.                         }
  145.                 }
  146.         }
  147. }
  148. /*********************************************************************
  149. 名稱:串行通訊中斷
  150. 作用:發(fā)送或接收結(jié)束后進(jìn)入該函數(shù),對相應(yīng)的標(biāo)志位軟件清0,實(shí)現(xiàn)模塊對數(shù)據(jù)
  151.       正常的收發(fā)。
  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模塊反饋回來的數(shù)據(jù)
  161.                 Recive_table[i] = Receive;
  162.                 i++;
  163.                 if((Recive_table[i-1]=='\n'))
  164.                 i = 0;       //遇到換行重新裝值
  165.         }
  166.         else
  167.                 TI = 0;
  168. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:160658 發(fā)表于 2017-11-28 20:08 | 只看該作者
有人知道嗎?????
回復(fù)

使用道具 舉報(bào)

板凳
ID:160658 發(fā)表于 2017-12-20 10:01 | 只看該作者
沒人碰到過嗎?煩請大使們幫忙解答,十分感謝!
回復(fù)

使用道具 舉報(bào)

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

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线 | 美女黄18岁以下禁止观看 | av网站在线免费观看 | www.亚洲一区二区 | 亚洲欧美综合精品久久成人 | 国产蜜臀97一区二区三区 | 污免费网站 | 一区亚洲 | 在线播放91 | 亚洲三级av | 国产999精品久久久影片官网 | 国产一区免费视频 | 亚洲一区二区三 | 日韩欧美亚洲 | 国产精品视频播放 | 91综合在线观看 | 成人免费视频播放 | 久久国产日韩 | www久久爱 | 毛片免费观看 | 亚洲精品久久久久久一区二区 | 久久一级 | 欧美爱爱视频网站 | 欧美日韩精选 | 99久久婷婷国产精品综合 | 久久久国产精品 | 国产一区二区三区在线 | 日韩欧美精品一区 | 婷婷精品 | 久久综合久久久 | 欧美一级二级视频 | 中文字幕在线网 | 91免费观看国产 | 国产一区二区三区色淫影院 | 欧美精品成人一区二区三区四区 | 日韩欧美一级 | 色婷婷久久久久swag精品 | 一区二区免费在线 | 天天操天天玩 | 一区二区三区在线播放 | 亚洲精品在线观看网站 |