C51单片机控制sim900a收发信息c语言程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.h#includestring.h#includeSTC12C5A60S2.h//!服务器IP地址与端口号,注意,用户需要将此IP替换为//!自己服务器的公网IP地址#defineTCPIP_SERVER_IPADDR115.171.51.103#defineTCPIP_SERVER_PORT8088//!串口发送与接收缓冲区大小#defineTTY_MAX_BUFFER_SIZE256//!串口发送与接收缓冲区charttyBuffer[TTY_MAX_BUFFER_SIZE];//!TCPIP发送与接收缓冲区大小#defineTCPIP_MAX_BUFFER_SIZE256//!TCPIP发送与接收缓冲区chartcpipBuffer[TCPIP_MAX_BUFFER_SIZE];//!串口0初始化函数,此串口用作接收终端控制命令//!晶振频率:22.1184MHz//!串口0波特率:9600voidUart0_Init(void)//9600bps@22.1184MHz{PCON|=0x80;//使能波特率倍速位SMODSCON=0x50;//8位数据,可变波特率AUXR|=0x40;//定时器1时钟为Fosc,即1TAUXR&=0xfe;//串口1选择定时器1为波特率发生器TMOD&=0x0f;//清除定时器1模式位TMOD|=0x20;//设定定时器1为8位自动重装方式TL1=0x70;//设定定时初值TH1=0x70;//设定定时器重装值ET1=0;//禁止定时器1中断TR1=1;//启动定时器1}//!串口0字符串输出函数//!参数说明:pString为字符串缓冲区首地址voidUart0_PutString(char*pString){unsignedshorti=0;while(pString[i]){SBUF=pString[i++];while(!TI);TI=0;}}//!串口0字符串读取函数,获取一行数据,遇到换行符为止//!参数说明:pBuffer为缓冲区首地址,nBufferLen为缓冲区大小,nTimeOut为超时时间//!如果nTimeOut=0,那么函数会阻塞,直到缓冲区满或遇到换行符unsignedshortUart0_GetALine(char*pBuffer,unsignedcharnBufferLen,unsignedcharnTimeOut){charch=0;unsignedinti=0,j=0,k=0;k=20000*nTimeOut;for(i=0,j=0;inBufferLen;i++){while(1){if(RI){RI=0;//清除接收完成标志pBuffer[i]=SBUF;//!回显给终端显示SBUF=pBuffer[i];while(!TI);TI=0;if(pBuffer[i]==0x0d){pBuffer[i]=0x00;returni;}break;}elseif(nTimeOut==0)continue;elsej++;if(j==k)break;}}returni;}//!串口1初始化函数,此串口用作控制GSM模块//!晶振频率:22.1184MHz//!串口1波特率:9600voidUart1_Init(void)//9600bps@22.1184MHz{AUXR|=0x08;//使能波特率倍速位S2SMODS2CON=0x50;//8位数据,可变波特率BRT=0x70;//设定独立波特率发生器重装值AUXR|=0x04;//独立波特率发生器时钟为Fosc,即1TAUXR|=0x10;//启动独立波特率发生器}//!串口1字符串输出函数//!参数说明:pString为字符串缓冲区首地址//!备注:此函数一方面向串口1发送数据,//!另一方面也向串口0发送数据,//!目的是为了方便调试voidUart1_PutString(char*pString){unsignedchari=0;//!向串口1写数据i=0;while(pString[i]){//!向串口0写数据,目的是方便调试SBUF=pString[i];while(!TI);TI=0;S2BUF=pString[i++];while(!(S2CON&S2TI));S2CON&=~S2TI;}}/***@funcUart1_GetString*@authorSwanTech(2011/12/14)*@parampBuffer缓冲区地址*@paramnBufferLen缓冲区长度*@paramnTimeOut读取返回数据的超时时间*@returnunsignedshort成功:返回接收到的字节数.失败:返回-1*@remark注意nTimeOut超时时间从接收到第一个字符开始计数*/unsignedshortUart1_GetString(char*pBuffer,unsignedshortnBufferLen,unsignedshortnTimeOut){unsignedshorti=0,j=0,k=0;//!此函数固定的超时时间,也就是说如果根本就//!没有应答数据时,函数经过这个固定超时时间会返回constunsignedshortnFixedTimeout=65500;for(i=0;(inFixedTimeout&&k==0);i++){for(j=0,k=0;jnTimeOut;j++){if(S2CON&S2RI){S2CON&=~S2RI;pBuffer[k++]=S2BUF;SBUF=S2BUF;//!向串口0写数据,目的是方便调试while(!TI);TI=0;if(k==1)//!应答数据第一次到来,重新计算超时值j=0;elseif(k+1==nBufferLen)//!字符串缓冲区已满break;}}}pBuffer[k]=0x00;//!字符串必须以0x00结束returnk;}voidSwanTech_LogoDisplay(void){Uart0_PutString(\n\r+------------------------------+\n\r);Uart0_PutString(|#鸿鹄电子科技#|\n\r);Uart0_PutString(||\n\r);Uart0_PutString(+------------------------------+\n\r);Uart0_PutString(|TCPIP功能测试程序|\n\r);Uart0_PutString(|适用平台:STC12C5A60S2|\n\r);Uart0_PutString(+------------------------------+\n\r);}voidSwanTech_CommandDisplay(void){Uart0_PutString(\n\r+------------------------------+\n\r);Uart0_PutString(1:开启TCPIP网络功能\n\r);Uart0_PutString(2:连接服务器\n\r);Uart0_PutString(3:发送数据(仅发送)\n\r);Uart0_PutString(4:发送数据并等待应答\n\r);Uart0_PutString(5:断开与服务器之间的连接\n\r);Uart0_PutString(6:关闭TCPIP网络功能\n\r);Uart0_PutString(+SwanTech);}/***@briefTCPIP协议栈配置*@authorSwanTech(2011/12/12)*@param*/charSwanTech_TCPIP_Config(void){//!下面是配置过程//!ATUart1_PutString(AT\x0D\x0A);if(Uart1_GetString(ttyBuffer,TTY_MAX_BUFFER_SIZE,60000)==0){Uart0_PutString(SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r);return-1;}if(strstr(ttyBuffer,OK)==NULL)//!没有找到命令成功执行的结果,函数返回,否则命令执行成功{Uart0_PutString(SwanTech_TCPIP_Config::ATCommandExecfailed.\n\r);return-1;}//!ATE0[关闭回显]Uart1_PutString(ATE0\x0D\x0A);if(Uart1_GetString(ttyBuffer,TTY_MAX_BUFFER_SIZE,1000)==0){Uart0_PutString(SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r);return-1;}if(strstr(ttyBuffer,OK)==NULL)//!没有找到命令成功执行的结果,函数返回,否则命令执行成功{Uart0_PutString(SwanTech_TCPIP_Config::ATCommandExecfailed.\n\r);return-1;}//!AT+CIPSHUT[防止上次使用过程中没有关闭网络功能,尝试关闭网络功能]//!注意,此条命令执行时间较长,大概2秒左右才可以关闭网络功能//!所以等待应答的时间较长Uart1_PutString(AT+CIPSHUT\x0D\x0A);if(Uart1_GetString(ttyBuffer,TTY_MAX_BUFFER_SIZE,1000)==0){Uart0_PutString(SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r);return-1;}if(strstr(ttyBuffer,SHUTOK)==NULL)//!没有找到命令成功执行的结果,函数返回,否则命令执行成功{Uart0_PutString(SwanTech_TCPIP_Config::关闭网络功能失败.\n\r);return-1;}//!AT+CIPMUX[设置为单连接模式]Uart1_PutString(AT+CIPMUX=0\x0D\x0A);if(Uart1_GetString(ttyBuffer,TTY_MAX_BUFFER_SIZE,1000)==0){Uart0_PutString(SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r);return-1;}if(strstr(ttyBuffer,OK)==NULL)//!没有找到命令成功执行的结果,函数返回,否则命令执行成功{Uart0_PutString(SwanTech_TCPIP_Config::设置为单连接模式失败.\n\r);return-1;}//!AT+CIPRXGET[配置为手动获取网络数据]Uart1_PutString(AT+CIPRXGET=1\x0D\x0A);if(Uart1_GetString(ttyBuffer,TTY_MAX_BUFFER_SIZE,1000)==0){Uart0_PutString(SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r);return-1;}if(strstr(ttyBuffer,OK)==NULL)//!没有找到命令成功执行的结果,函数返回,否则命令执行成功{Uart0_PutString(SwanTech_TCPIP_Config::配置为手动获取网络数据失败.\n\r);return-1;}//!AT+CIPQRCLOSE[配置为加速远程断开连接]Uart1_PutString(AT+CIPQRCLOSE=1\x0D\x0

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功