C51单片机控制sim900a收发信息c语言程序_第1页
C51单片机控制sim900a收发信息c语言程序_第2页
C51单片机控制sim900a收发信息c语言程序_第3页
C51单片机控制sim900a收发信息c语言程序_第4页
C51单片机控制sim900a收发信息c语言程序_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include #inelude #include l,STC12C5A60S2.hM/!服务器IP地址与端I I号,注意,用户需要将此IP替换为 /!自己服务器的公网IP地址#define TCPIP_SERVERPADDR ,03,1#define TCPIP_SERVER_PORT ”8088”/!串I发送与接收缓冲区人小#define TTY_MAX_BUFFER_SIZE 256/!串I发送与接收缓冲区char ttyBufferTTY_MAX_BUFFER_SIZE;/! TCPIP发送与接收缓冲区人小#define TCPIP_MAX_BUFFER_SIZE 256/! TCP

2、IP发送与接收缓冲区 chartcpipBufferTCPIP_MAX_BUFFER-SIZE;/!串110初始化函数,此串丨I用作接收终端控制命令/!晶振频率:22.1184MHz/!串110波特率:9600void UartOJnit(void)f/9600bps22.1184MHztPCON | = 0 x80;使能波特率倍速位SMODSCON = 0 x50;/8位数据,可变波特率AUXR | = 0 x40;定时器1时钟为Fosc,即1TAUXR &二 Oxfe;串1 1 1选择定时器1为波特率发生器TMOD &二 OxOf;清除定时器1模式位TMOD |=0 x20;设定定时器1为

3、8位自动重装方式TL1=0 x70;设定定时初值THl = 0 x70;设定定时器重装值ET1 = 0;禁止定时器1中断TRI = 1;启动定时器1/!串口 0字符串输出函数/!参数说明:pString为字符串缓冲区首地址 void UartO_PutString(char* pString)unsigned short i = 0;while(pStringi)SBUF = pStringi+;while(STI);TI = O;/!串【10字符串读取函数,获取一行数据,遇到换行符为止/!参数说明:pBuffer为缓冲区首地址,nBufferLen为缓冲区人小,nTimeOut为超时时间/!

4、如果nTimeOut=0,那么函数会阻塞,直到缓冲区满或遇到换行符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;清除接收完成标志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初始化函数,此串丨I用作控制GSM模块/!晶振频率:22.1184MHz/!串口 1波特率:9600 void Uartljnit(void) /9600bps22.1184MHzAUXR | = 0 x08; 使能波特率倍速位S2SMODS2CON = 0 x50; /8位数据盯变波特率BRT = 0 x70;设定独立波特率发

6、生器重装值AUXR | = 0 x04; 独立波特率发生器时钟为Fosc,即1TAUXR | = 0 xl0; 启动独立波特率发生器/!串【I 1字符串输出函数/!参数说明:pString为字符串缓冲区首地址/!备注:此函数一方面向串丨I 1发送数据,/!另一方面也向串口 0发送数据,/!目的是为了方便调试void Uartl_PutString(char* pString)unsigned char i = 0;/!向串I 11写数据i = 0;while(pStringi)/!向串I 10写数据,目的是方便调试 SBUF = pStringi;while(!TI);TI = 0;S2BUF

7、 = pStringi+; while(!(S2CO N&S2TI);S2CON&二 S2TI;/*func Uartl_GetStringauthor SwanTech (2011/12/14)param pBuffer缓冲区地址param nBufferLen 缓冲区长度param nTimeOut读取返回数据的超时时间return unsigned short成功:返回接收到的字节数.失败:返回-1remark注意nTimeOut超时时间从接收到第一个字符开始计数*/unsigned short Uartl_GetString(char* pBuffer, unsigned short

8、nBufferLen, unsigned short nTimeOut)unsigned short i = 0, j = 0, k = 0;/!此函数固定的超时时间,也就是说如果根本就/!没有应答数据时,函数经过这个固定超时时间会返回const unsigned short nFixedTimeout = 65500;for(i = 0; (i nFixedTimeout & k = 0); i+)for(j = 0, k = 0; j “);brief TCPIP协议栈配置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)/!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(,SwanTech_TCPIP_Config:AT Command Exe

10、c failed.nrH);return -1;/! ATEO 关闭回显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)/!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(SwanTech_TCPIP_Config:AT

11、Command Exec failed.nr); return -1;/! AT+CIPSHUT 防止上次使用过程中没有关闭网络功能,尝试关闭网络功能/!注意,此条命令执行时间较长,人概2秒左右才可以关闭网络功能/!所以等待应答的时间较长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) /!没有找到命令成功执行的结果,函数返回,否则命 令执行成功UartO_PutString(SwanTech_TCPIP_Config:关闭网络功能失败.nr); return -1;/! AT+CIPMUX 设置为单连接模式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)/!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(SwanTech_TCPIP_Config:设置为单连接模式失败.nr); return -1;/! AT+CIPRXGET 配置为手动获取网络数据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) /!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutStnng(SwanTech_TCPIP_Config:d 置为手动获取网络数据失败.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) /!没有找到命令成功执行的结果,函数返回,否则命令执行 成功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) /!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutStnng(SwanTech_TCPIP_Config:d 置为非透明传输模式失败.nr);return -1;return 0;/*brief连接服务器author SwanTech (2011/12/12)param*/char SwanTech_TCPIP_C

17、onnect(void)/! AT+CIPSTART 准备连接服务器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)/!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(SwanTech_TCPIP_Connect:准备连接服务器失败.nr);return -1;/!判断是否连接已经建立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) /!没有找到命令成功执行的结果,函数返回,否 则命令执行成功UartO_PutString(SwanTech_TCPIP_Connect:连接服务器失败.nr);return -1;return 0;/*brief断开与服务器的连接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) /!没有找到命令成功执行的结果,函数返回,否则命 令执行成功UartO_PutString(SwanTech_TCPIP_DisConnect:断开连接失败.nr);return -1;return 0;/*brief关闭网络功能author SwanTech (2011/1

21、2/12)param*/char SwanTech_TCPIP_NETShut(void)/! AT+CIPSHUT 关闭网络功能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) /!没有找到命令成功执行的结果,函数返回,否则命 令执行成功UartO_PutString(MSwanTech_TCPIP_NETShut:关闭网络功能失败.nrH);return -1;return 0;/*briefSIM900_TCPIP 数据发送函数author SwanTech (2011/12/12)param pBuffer:数据缓冲区地址param nBufferLen:数据长度*/short SwanTech_TCPIP_Send(char* pBuffec unsigned short nBufferLen)/!请求发送数据/! 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) /!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(SwanTech_TCPIP

24、_Send:请求发送数据失败.nrH);return -1;/!发送数据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) /!没有找到命令成功执行的结果,函数返回,否则命 令执行成功UartO_PutString(SwanTech_TCPIP_Send:发

25、送数据失败.nr);return -1;return nBufferLen;/*brief SIM900_TCPIP 数据接收函数author SwanTech (2011/12/12)param pBuffer:数据缓冲区地址param nBufferLen:缓冲区大小*/short SwanTech_TCPIP_Recv(char* pBuffer, unsigned short nBufferLen)/!判断应答数据到来标志+CIPRXGET:1if(Uartl_GetString(ttyBufferz TTY_MAX_BUFFER_SIZE, 10000) = 0)UartOPutSt

26、ringCSwanTechTCPIPRecvTUartlGetStringTfailed.nr”); return -1;if(strstr(ttyBuffer, ,+CIPRXGET:l) = NULL)/!没有找到命令成功执行的结果,函数返回,否则命令执行成功UartO_PutString(SwanTech_TCPIP_Recv:获取应答数据标志失败.nr); return -1;/!读取应答数据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)/!没有找到命令成功执行的结果,函数返回,否则命令执行 成功UartO_PutString(,SwanTech_TCPIP_Recv:i$ 取应答数据失败.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);/!如果连续收到2个0 x7F,那么认为是STC-ISP正在请求下载程序/!这时候启动系统复位,从ISP监控程序重新引导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; /!配置失败的标志UartO_PutString(n

29、r+开启 TCPIP 网络功能失败!nrH);elsebFinishConfig = 1; /!配置成功的标志UartO_PutString(nr+开启 TCPIP 网络功能成功!nr);else if(bufferO = 2)if(bFinishConfig = 0)/!如果没有开启TCPIP网络功能,那么返回失败UartO_PutString(nr+请先开启 TCPIP 网络功能!nr);else if(SwanTech_TCPIP_Connect() = -1)bFinishConnect = 0; /!连接失败的标志UartO_PutString(,nr+连接服务器失败!nrH);elsebFinishConnect = 1; /!连接成功的标志UartO_PutString(,nr+连接服务器成功!nrH);else if(bufferO = *3*)strcpy(tcpipBuffer,鸿鹄电子科技.Http:/);if(bFinishConnect = 0) /!如果成功连接到服务器,那么返回失败UartO_PutString(nr+请先连接服务器!nr);else if(SwanTech_TCPIP_Send(tcpipBuffer, strlen(tcpipBuffer) = -1)UartO_PutString(nr+发送数据失败!nr);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论