51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術的發展,8004單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用于工業測控系統之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內將占有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
51單片機區別
同樣的一段程序,在各個單片機廠家的硬件上運行的結果都是一樣的,如ATMEL的89C51(已經停產)、89S51, PHILIPS,和WINBOND等,我們常說的已經停產的89C51指的是ATMEL公司的 AT89C51單片機,同時是在原基礎上增強了許多特性,如時鐘,更優秀的是由Flash(程序存儲器的內容至少可以改寫1000次)存儲器取代了原來的ROM(一次性寫入),AT89C51的性能相對于8051已經算是非常優越的了。
不過在市場化方面,89C51受到了PIC單片機陣營的挑戰,89C51最致命的缺陷在于不支持ISP(在線更新程序)功能,必須加上ISP功能等新功能才能更好延續MCS-51的傳奇。
89S51就是在這樣的背景下取代89C51的,89S51已經成為了實際應用市場上新的寵兒,作為市場占有率第一的Atmel公司已經停產AT89C51,將用AT89S51代替。89S51在工藝上進行了改進,89S51采用0.35新工藝,成本降低,而且將功能提升,增加了競爭力。89SXX可以向下兼容89CXX等51系列芯片。同時,Atmel不再接受89CXX的定單,大家在市場上見到的89C51實際都是Atmel前期生產的巨量庫存而以。如果市場需要,Atmel當然也可以再恢復生產AT89C51。
51單片機連接ESP8266串口WiFi模塊
引腳連接
燒錄固件
打開燒錄軟件,選擇配置選項卡,點擊第二欄的小齒輪圖標 - 加載固件地址
點擊其他選項的選擇欄,取消選中,只選擇第二個選項(固件地址)
返回操作選項卡,選擇正確COM端口,點擊一鍵燒寫
模塊重新上電,下載開始,等待下載完成
串口助手測試ESP8266串口WiFi模塊
引腳連接
注:此時連接狀態 WiFi模塊–》51單片機–》串口助手(PC),由于WiFi模塊和單片機的TXD和RXD處于正接狀態,單片機和WiFi模塊并不通信,相當于WiFi模塊直連串口助手。
AT常用指令
ESP8266串口WiFi模塊分為三種工作模式:Station模式(類似無線終端),AP模式(提供無線接入服務),AP模式兼Station模式。
通過串口助手測試WiFi模塊時,
測試
發送指令:AT
響應:OK
重啟模塊
發送命令:AT+RST
響應 :OK
設置模塊
發送指令:AT+CWMODE = 《mode》
說明:需重啟后生效(AT+RST)
《mode》:1-Station模式,2-AP模式,3-AP兼Station模式。
響應:OK
配置AP參數
發送命令:
指令:AT+ CWSAP= 《ssid》,《pwd》,《chl》, 《ecn》
說明:指令只有在AP模式開啟后有效
《ssid》:字符串參數,接入點名稱
《pwd》:字符串參數,密碼最長64字節,ASCII
《chl》:通道號
《ecn》:加密模式,0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
示例:AT+CWSAP=”TEST”,”123456123456”,1,3
響應:OK
開啟多連接模式
發送命令:AT+CIPMUX=《mode》
說明:《mode》 :0-單路連接模式,1-多路連接模式
響應:OK
創建服務器
發送命令:AT+CIPSERVER=《mode》,《port》
說明:AT+ CIPMUX=1時才能開啟服務器;關閉server模式需要重啟。開啟server后自動建立server監聽,當有client接入會自動按順序占用一個連接。
《mode》:0-關閉server模式,1-開啟server模式
《port》:端口號,缺省值為333
響應:OK
通過51單片機初始化WiFi模塊
通過串口助手測試AT指令可以發現,部分AT指令斷電不會保存,因此需要在代碼中進行初始化設置。
引腳連接
注:此時連接狀態 WiFi模塊–》51單片機–》串口助手(PC),由于WiFi模塊和單片機的TXD和RXD處于正接狀態,單片機和WiFi模塊可以進行串口通信。
實現代碼
#include《reg52.h》 //51單片機常用的頭文件
#define uchar unsigned char //宏定義一個無符號的char類型
#define uint unsigned int //宏定義一個無符號的int類型
//發送一字節
void sendByte(uchar b)
{
SBUF = b;
while(!TI);
TI=0;
}
//發送字符串
void sendString(uchar *s)
{
while(*s != ‘