C51單片機控制sim900a收發(fā)信息c語言程序_第1頁
C51單片機控制sim900a收發(fā)信息c語言程序_第2頁
C51單片機控制sim900a收發(fā)信息c語言程序_第3頁
C51單片機控制sim900a收發(fā)信息c語言程序_第4頁
C51單片機控制sim900a收發(fā)信息c語言程序_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論