




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include #inelude #include l,STC12C5A60S2.hM/!服務(wù)器IP地址與端I I號,注意,用戶需要將此IP替換為 /!自己服務(wù)器的公網(wǎng)IP地址#define TCPIP_SERVERPADDR ,03,1#define TCPIP_SERVER_PORT ”8088”/!串I發(fā)送與接收緩沖區(qū)人小#define TTY_MAX_BUFFER_SIZE 256/!串I發(fā)送與接收緩沖區(qū)char ttyBufferTTY_MAX_BUFFER_SIZE;/! TCPIP發(fā)送與接收緩沖區(qū)人小#define TCPIP_MAX_BUFFER_SIZE 256/! TCP
2、IP發(fā)送與接收緩沖區(qū) chartcpipBufferTCPIP_MAX_BUFFER-SIZE;/!串110初始化函數(shù),此串丨I用作接收終端控制命令/!晶振頻率:22.1184MHz/!串110波特率:9600void UartOJnit(void)f/9600bps22.1184MHztPCON | = 0 x80;使能波特率倍速位SMODSCON = 0 x50;/8位數(shù)據(jù),可變波特率AUXR | = 0 x40;定時器1時鐘為Fosc,即1TAUXR &二 Oxfe;串1 1 1選擇定時器1為波特率發(fā)生器TMOD &二 OxOf;清除定時器1模式位TMOD |=0 x20;設(shè)定定時器1為
3、8位自動重裝方式TL1=0 x70;設(shè)定定時初值THl = 0 x70;設(shè)定定時器重裝值ET1 = 0;禁止定時器1中斷TRI = 1;啟動定時器1/!串口 0字符串輸出函數(shù)/!參數(shù)說明:pString為字符串緩沖區(qū)首地址 void UartO_PutString(char* pString)unsigned short i = 0;while(pStringi)SBUF = pStringi+;while(STI);TI = O;/!串【10字符串讀取函數(shù),獲取一行數(shù)據(jù),遇到換行符為止/!參數(shù)說明:pBuffer為緩沖區(qū)首地址,nBufferLen為緩沖區(qū)人小,nTimeOut為超時時間/!
4、如果nTimeOut=0,那么函數(shù)會阻塞,直到緩沖區(qū)滿或遇到換行符unsigned short UartO_GetALine(char* pBuffer; unsigned char nBufferLen, unsigned char nTimeOut) char ch = 0;unsigned int i = 0, j = 0, k = 0;k = 20000*nTimeOut;for(i = 0, j = 0; i nBufferLen; i+)while(l)if(RI)RI = 0;清除接收完成標(biāo)志pBufferi = SBUF;/!回顯給終端顯示SBUF = pBufferi;whi
5、le(!TI);TI = 0;if(pBufferi = OxOd)pBufferi = 0 x00;return i;break;else if(nTimeOut = 0)contin ue;elsej+;if(j = k)break;return i;/!串丨I 1初始化函數(shù),此串丨I用作控制GSM模塊/!晶振頻率:22.1184MHz/!串口 1波特率:9600 void Uartljnit(void) /9600bps22.1184MHzAUXR | = 0 x08; 使能波特率倍速位S2SMODS2CON = 0 x50; /8位數(shù)據(jù)盯變波特率BRT = 0 x70;設(shè)定獨立波特率發(fā)
6、生器重裝值A(chǔ)UXR | = 0 x04; 獨立波特率發(fā)生器時鐘為Fosc,即1TAUXR | = 0 xl0; 啟動獨立波特率發(fā)生器/!串【I 1字符串輸出函數(shù)/!參數(shù)說明:pString為字符串緩沖區(qū)首地址/!備注:此函數(shù)一方面向串丨I 1發(fā)送數(shù)據(jù),/!另一方面也向串口 0發(fā)送數(shù)據(jù),/!目的是為了方便調(diào)試void Uartl_PutString(char* pString)unsigned char i = 0;/!向串I 11寫數(shù)據(jù)i = 0;while(pStringi)/!向串I 10寫數(shù)據(jù),目的是方便調(diào)試 SBUF = pStringi;while(!TI);TI = 0;S2BUF
7、 = pStringi+; while(!(S2CO N&S2TI);S2CON&二 S2TI;/*func Uartl_GetStringauthor SwanTech (2011/12/14)param pBuffer緩沖區(qū)地址param nBufferLen 緩沖區(qū)長度param nTimeOut讀取返回數(shù)據(jù)的超時時間return unsigned short成功:返回接收到的字節(jié)數(shù).失敗:返回-1remark注意nTimeOut超時時間從接收到第一個字符開始計數(shù)*/unsigned short Uartl_GetString(char* pBuffer, unsigned short
8、nBufferLen, unsigned short nTimeOut)unsigned short i = 0, j = 0, k = 0;/!此函數(shù)固定的超時時間,也就是說如果根本就/!沒有應(yīng)答數(shù)據(jù)時,函數(shù)經(jīng)過這個固定超時時間會返回const unsigned short nFixedTimeout = 65500;for(i = 0; (i nFixedTimeout & k = 0); i+)for(j = 0, k = 0; j “);brief TCPIP協(xié)議棧配置author SwanTech (2011/12/12)param*/char SwanTech_TCPIP_Conf
9、ig(void)/!下面是配置過程/!ATUartl-PutString(,ATxODxOAM);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 60000) = 0)UartO_PutString(SwanTech_TCPIP_Config:Uartl_GetString:failednr);return -1;if(strstr(ttyBuffer, OK) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(,SwanTech_TCPIP_Config:AT Command Exe
10、c failed.nrH);return -1;/! ATEO 關(guān)閉回顯Uartl_PutString(”ATEOxODxOA“);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_Config:Uartl_GetString:failednrJ;returnif(strstr(ttyBuffer, OK) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(SwanTech_TCPIP_Config:AT
11、Command Exec failed.nr); return -1;/! AT+CIPSHUT 防止上次使用過程中沒有關(guān)閉網(wǎng)絡(luò)功能,嘗試關(guān)閉網(wǎng)絡(luò)功能/!注意,此條命令執(zhí)行時間較長,人概2秒左右才可以關(guān)閉網(wǎng)絡(luò)功能/!所以等待應(yīng)答的時間較長Uartl_PutString(AT+CIPSHUTxODxOA);if(Uartl_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZEz 1000) = 0)UartO_PutString(SwanTech_TCPIP_Config:Uartl_GetString:failed.nr); return -1;if(strstr(
12、ttyBuffer, SHUT OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命 令執(zhí)行成功UartO_PutString(SwanTech_TCPIP_Config:關(guān)閉網(wǎng)絡(luò)功能失敗.nr); return -1;/! AT+CIPMUX 設(shè)置為單連接模式Uartl_PutString(AT+CIPMUX=OxODxOA);if(Uartl_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZEz 1000) = 0)UartO_PutString(SwanTech_TCPIP_Config:Uartl_GetString:failed.nr
13、); return -1;if(strstr(ttyBuffer, OK) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(SwanTech_TCPIP_Config:設(shè)置為單連接模式失敗.nr); return -1;/! AT+CIPRXGET 配置為手動獲取網(wǎng)絡(luò)數(shù)據(jù)Uartl_PutString(AT+CIPRXGET=lxODxOA);if(Uartl_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZEz 1000) = 0)UartO_PutString(SwanTech_TCPIP_Config
14、:Uartl_GetString:failed.nr);returnif(strstr(ttyBuffer, OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutStnng(SwanTech_TCPIP_Config:d 置為手動獲取網(wǎng)絡(luò)數(shù)據(jù)失敗.nr);return -1;/! AT+CIPQRCLOSE 配置為加速遠程斷開連接Uartl_PutString(”AT+CIPQRCLOSE“xODxOA“);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_Pu
15、tString(Swan Tech_TCPIP_Config:Uartl_GetString:failednrJ;return -1;if(strstr(ttyBuffer, OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutStnng(SwanTech_TCPIP_Config:d 置為加速遠程斷開連接失敗.nr);return -1;/! AT+CIPMODE 配置為非透明傳輸模式Uartl_Pu 朽 tring(” AT+CIPMODE=0 x0Dx0A);if(Uartl_GetString(ttyBuffeG TTY_MAX_BUF
16、FER_SIZE, 1000) = 0)UartO_PutString(Swan Tech_TCPIP_Config:Uartl_GetString:failednrJ;return -1;if(strstr(ttyBuffer, OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutStnng(SwanTech_TCPIP_Config:d 置為非透明傳輸模式失敗.nr);return -1;return 0;/*brief連接服務(wù)器author SwanTech (2011/12/12)param*/char SwanTech_TCPIP_C
17、onnect(void)/! AT+CIPSTART 準(zhǔn)備連接服務(wù)器sprintf(ttyBufferz ,AT+CIPSTART=,TCP,/,%s,/%sxODxOA,/TCPIP_SERVERPADDR,TCPIP_SERVER_PORT);Uartl_PutString(ttyBuffer);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(,SwanTech_TCPIP_Con nect:Uartl_GetString:failed.nr,);return -1;if(strstr
18、(ttyBuffer, OK) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(SwanTech_TCPIP_Connect:準(zhǔn)備連接服務(wù)器失敗.nr);return -1;/!判斷是否連接已經(jīng)建立if(Uartl_GetString(ttyBuffeG TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_Connect:llartl_GetString:failed.nr);return -1;if(strstr(ttyBuffer, CONNECT OK) =
19、NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否 則命令執(zhí)行成功UartO_PutString(SwanTech_TCPIP_Connect:連接服務(wù)器失敗.nr);return -1;return 0;/*brief斷開與服務(wù)器的連接author SwanTech (2011/12/12)param*/char SwanTech_TCPIP_DisConnect(void)/! AT+CIPCLOSE 斷開連接sprintf(ttyBufferz ,IAT+CIPCLOSE=lxODxOAH);Uartl_PutString(ttyBuffer);if(Uartl_GetString
20、(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_DisCon nect:Uartl_GetString:failed.nr);return -1;if(strstr(ttyBuffer, CLOSE OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命 令執(zhí)行成功UartO_PutString(SwanTech_TCPIP_DisConnect:斷開連接失敗.nr);return -1;return 0;/*brief關(guān)閉網(wǎng)絡(luò)功能author SwanTech (2011/1
21、2/12)param*/char SwanTech_TCPIP_NETShut(void)/! AT+CIPSHUT 關(guān)閉網(wǎng)絡(luò)功能sprintf(ttyBufferz ,IAT+CIPSHUTxODxOAn);Uartl_PutString(ttyBuffer);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_NETShut:Uartl_GetString:failednr);return -1;if(strstr(ttyBufferz SHUT OK) =
22、NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命 令執(zhí)行成功UartO_PutString(MSwanTech_TCPIP_NETShut:關(guān)閉網(wǎng)絡(luò)功能失敗.nrH);return -1;return 0;/*briefSIM900_TCPIP 數(shù)據(jù)發(fā)送函數(shù)author SwanTech (2011/12/12)param pBuffer:數(shù)據(jù)緩沖區(qū)地址param nBufferLen:數(shù)據(jù)長度*/short SwanTech_TCPIP_Send(char* pBuffec unsigned short nBufferLen)/!請求發(fā)送數(shù)據(jù)/! AT+CIPSENDsprint
23、f(ttyBufferz ,AT+CIPSEND=%dxODxOA,/ nBufferLen);Uartl_PutString(ttyBuffer);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_Send:Uartl_GetString:failednr”);return -1;if(strstr(ttyBuffer, ) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(SwanTech_TCPIP
24、_Send:請求發(fā)送數(shù)據(jù)失敗.nrH);return -1;/!發(fā)送數(shù)據(jù)Uartl_PutString(pBuffer);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 1000) = 0)UartO_PutString(SwanTech_TCPIP_Send:Uartl_GetString:failednr”);return -1;if(strstr(ttyBuffer, SEND OK) = NULL) /!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命 令執(zhí)行成功UartO_PutString(SwanTech_TCPIP_Send:發(fā)
25、送數(shù)據(jù)失敗.nr);return -1;return nBufferLen;/*brief SIM900_TCPIP 數(shù)據(jù)接收函數(shù)author SwanTech (2011/12/12)param pBuffer:數(shù)據(jù)緩沖區(qū)地址param nBufferLen:緩沖區(qū)大小*/short SwanTech_TCPIP_Recv(char* pBuffer, unsigned short nBufferLen)/!判斷應(yīng)答數(shù)據(jù)到來標(biāo)志+CIPRXGET:1if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 10000) = 0)UartOPutSt
26、ringCSwanTechTCPIPRecvTUartlGetStringTfailed.nr”); return -1;if(strstr(ttyBuffer, ,+CIPRXGET:l) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行成功UartO_PutString(SwanTech_TCPIP_Recv:獲取應(yīng)答數(shù)據(jù)標(biāo)志失敗.nr); return -1;/!讀取應(yīng)答數(shù)據(jù)Uartl_PutString(”AT+CIPRXGET=2n28xODxOA”);if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 30000
27、) = 0)UartOPutStringCSwanTechTCPIPRecvTUartlGetStringTfailed.nr”); return -1;if(strstr(ttyBuffer, OK) = NULL)/!沒有找到命令成功執(zhí)行的結(jié)果,函數(shù)返回,否則命令執(zhí)行 成功UartO_PutString(,SwanTech_TCPIP_Recv:i$ 取應(yīng)答數(shù)據(jù)失敗.nrH);return -1;return 1;void SwanTech_CommandMonitor(void)unsigned char bFinishConfig = 0;unsigned char bFinishCo
28、nnect = 0;char buffer3 = 0;while(l)U a rtO_GetA Line (buffer, 2, 0);/!如果連續(xù)收到2個0 x7F,那么認為是STC-ISP正在請求下載程序/!這時候啟動系統(tǒng)復(fù)位,從ISP監(jiān)控程序重新引導(dǎo)if(bufferO = 0 x7F & bufferl = 0 x7F)IAP_CONTR = 0 x60;UartO_PutString(Hnr+nrH);if(buffer0 = T)if(SwanTech_TCPIP_Config() = -1)bFinishConfig = 0; /!配置失敗的標(biāo)志UartO_PutString(n
29、r+開啟 TCPIP 網(wǎng)絡(luò)功能失敗!nrH);elsebFinishConfig = 1; /!配置成功的標(biāo)志UartO_PutString(nr+開啟 TCPIP 網(wǎng)絡(luò)功能成功!nr);else if(bufferO = 2)if(bFinishConfig = 0)/!如果沒有開啟TCPIP網(wǎng)絡(luò)功能,那么返回失敗UartO_PutString(nr+請先開啟 TCPIP 網(wǎng)絡(luò)功能!nr);else if(SwanTech_TCPIP_Connect() = -1)bFinishConnect = 0; /!連接失敗的標(biāo)志UartO_PutString(,nr+連接服務(wù)器失敗!nrH);elsebFinishConnect = 1; /!連接成功的標(biāo)志UartO_PutString(,nr+連接服務(wù)器成功!nrH);else if(bufferO = *3*)strcpy(tcpipBuffer,鴻鵠電子科技.Http:/);if(bFinishConnect = 0) /!如果成功連接到服務(wù)器,那么返回失敗UartO_PutString(nr+請先連接服務(wù)器!nr);else if(SwanTech_TCPIP_Send(tcpipBuffer, strlen(tcpipBuffer) = -1)UartO_PutString(nr+發(fā)送數(shù)據(jù)失敗!nr);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合金鋼筋鋼(鋼坯)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 半導(dǎo)體探針臺企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 新能源汽車的永磁同步電機企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 建筑用搪瓷管道企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 2025年陜西省榆林市子洲縣中考二模化學(xué)試題含答案
- 養(yǎng)生壺企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 減速頂、終端停車器企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 軟件咨詢服務(wù)企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 加工中心(數(shù)控)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 展覽攝影攝像服務(wù)合同3篇
- 2025年北京京能清潔能源電力股份有限公司招聘筆試參考題庫含答案解析
- 畢馬威-海南自貿(mào)港旅游零售白皮書2025版:韌性前行潛力無限
- 2025年上海市閔行區(qū)高三語文二模試卷及答案解析
- 2025年教師資格師德師風(fēng)建設(shè)試題及答案
- 期中測試卷(1-5單元)(試題)(含答案)-2024-2025學(xué)年二年級下冊數(shù)學(xué)青島版
- 2025屆北京市順義區(qū)高三下學(xué)期一模英語試題(原卷版+解析版)
- 2025年形勢與政策-加快建設(shè)社會主義文化強國+第二講中國經(jīng)濟行穩(wěn)致遠
- 激光雷達筆試試題及答案
- 2025屆高三湖北省十一校第二次聯(lián)考英語試卷(含答案詳解)
- 信息技術(shù)與小學(xué)教育教學(xué)融合
- 產(chǎn)品設(shè)計研發(fā)費用統(tǒng)計表
評論
0/150
提交評論