




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include STC12C5A60S2.h/! 服务器IP地址与端口号,注意,用户需要将此IP替换为/! 自己服务器的公网IP地址#define TCPIP_SERVER_IPADDR 03#define TCPIP_SERVER_PORT 8088/! 串口发送与接收缓冲区大小#define TTY_MAX_BUFFER_SIZE 256/! 串口发送与接收缓冲区char ttyBufferTTY_MAX_BUFFER_SIZE;/! TCPIP发送与接收缓冲区大小#define TCPIP_MAX_BUFFER_SIZE 256 /! TCPIP发送与接收缓冲区char tcpipBufferTCPIP_MAX_BUFFER_SIZE;/! 串口0初始化函数, 此串口用作接收终端控制命令/! 晶振频率:22.1184MHz/! 串口0波特率:9600void Uart0_Init(void) /9600bps22.1184MHz PCON |= 0x80; /使能波特率倍速位SMOD SCON = 0x50; /8位数据,可变波特率 AUXR |= 0x40; /定时器1时钟为Fosc,即1T AUXR &= 0xfe; /串口1选择定时器1为波特率发生器 TMOD &= 0x0f; /清除定时器1模式位 TMOD |= 0x20; /设定定时器1为8位自动重装方式 TL1 = 0x70; /设定定时初值 TH1 = 0x70; /设定定时器重装值 ET1 = 0; /禁止定时器1中断 TR1 = 1; /启动定时器1/! 串口0字符串输出函数/! 参数说明:pString为字符串缓冲区首地址void Uart0_PutString(char* pString) unsigned short i = 0; while(pStringi) SBUF = pStringi+; while(!TI); TI = 0; /! 串口0字符串读取函数, 获取一行数据, 遇到换行符为止/! 参数说明:pBuffer为缓冲区首地址, nBufferLen为缓冲区大小, nTimeOut为超时时间/! 如果nTimeOut=0, 那么函数会阻塞, 直到缓冲区满或遇到换行符unsigned short Uart0_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(1) if(RI) RI = 0; /清除接收完成标志 pBufferi = SBUF; /! 回显给终端显示 SBUF = pBufferi; while(!TI); TI = 0; if(pBufferi = 0x0d) pBufferi = 0x00; return i; break; else if(nTimeOut = 0) continue; else j+; if(j = k) break; return i;/! 串口1初始化函数, 此串口用作控制GSM模块/! 晶振频率:22.1184MHz/! 串口1波特率:9600void Uart1_Init(void) /9600bps22.1184MHz AUXR |= 0x08; /使能波特率倍速位S2SMOD S2CON = 0x50; /8位数据,可变波特率 BRT = 0x70; /设定独立波特率发生器重装值 AUXR |= 0x04; /独立波特率发生器时钟为Fosc,即1T AUXR |= 0x10; /启动独立波特率发生器/! 串口1字符串输出函数/! 参数说明:pString为字符串缓冲区首地址/! 备注:此函数一方面向串口1发送数据,/! 另一方面也向串口0发送数据,/! 目的是为了方便调试void Uart1_PutString(char* pString) unsigned char i = 0; /! 向串口1写数据 i = 0; while(pStringi) /! 向串口0写数据,目的是方便调试 SBUF = pStringi; while(!TI); TI = 0; S2BUF = pStringi+; while(!(S2CON&S2TI); S2CON &= S2TI; /* * func Uart1_GetString * author SwanTech (2011/12/14) * param pBuffer 缓冲区地址 * param nBufferLen 缓冲区长度 * param nTimeOut 读取返回数据的超时时间 * return unsigned short 成功: 返回接收到的字节数. 失败: 返回-1 * remark 注意nTimeOut超时时间从接收到第一个字符开始计数 */unsigned short Uart1_GetString(char* pBuffer, unsigned short 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_Config(void) /! 下面是配置过程 /! AT Uart1_PutString(ATx0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 60000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:AT Command Exec failed.nr); return -1; /! ATE0 关闭回显 Uart1_PutString(ATE0x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:AT Command Exec failed.nr); return -1; /! AT+CIPSHUT 防止上次使用过程中没有关闭网络功能,尝试关闭网络功能 /! 注意,此条命令执行时间较长,大概2秒左右才可以关闭网络功能 /! 所以等待应答的时间较长 Uart1_PutString(AT+CIPSHUTx0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, SHUT OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:关闭网络功能失败.nr); return -1; /! AT+CIPMUX 设置为单连接模式 Uart1_PutString(AT+CIPMUX=0x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:设置为单连接模式失败.nr); return -1; /! AT+CIPRXGET 配置为手动获取网络数据 Uart1_PutString(AT+CIPRXGET=1x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:配置为手动获取网络数据失败.nr); return -1; /! AT+CIPQRCLOSE 配置为加速远程断开连接 Uart1_PutString(AT+CIPQRCLOSE=1x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:配置为加速远程断开连接失败.nr); return -1; /! AT+CIPMODE 配置为非透明传输模式 Uart1_PutString(AT+CIPMODE=0x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Config:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Config:配置为非透明传输模式失败.nr); return -1; return 0;/* * brief 连接服务器 * author SwanTech (2011/12/12) * param */char SwanTech_TCPIP_Connect(void) /! AT+CIPSTART 准备连接服务器 sprintf(ttyBuffer, AT+CIPSTART=TCP,%s,%sx0Dx0A, TCPIP_SERVER_IPADDR, TCPIP_SERVER_PORT); Uart1_PutString(ttyBuffer); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Connect:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Connect:准备连接服务器失败.nr); return -1; /! 判断是否连接已经建立 if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Connect:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, CONNECT OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Connect:连接服务器失败.nr); return -1; return 0;/* * brief 断开与服务器的连接 * author SwanTech (2011/12/12) * param */char SwanTech_TCPIP_DisConnect(void) /! AT+CIPCLOSE 断开连接 sprintf(ttyBuffer, AT+CIPCLOSE=1x0Dx0A); Uart1_PutString(ttyBuffer); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_DisConnect:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, CLOSE OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_DisConnect:断开连接失败.nr); return -1; return 0;/* * brief 关闭网络功能 * author SwanTech (2011/12/12) * param */char SwanTech_TCPIP_NETShut(void) /! AT+CIPSHUT 关闭网络功能 sprintf(ttyBuffer, AT+CIPSHUTx0Dx0A); Uart1_PutString(ttyBuffer); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_NETShut:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, SHUT OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_NETShut:关闭网络功能失败.nr); return -1; return 0;/* * brief SIM900_TCPIP数据发送函数 * author SwanTech (2011/12/12) * param pBuffer: 数据缓冲区地址 * param nBufferLen: 数据长度 */short SwanTech_TCPIP_Send(char* pBuffer, unsigned short nBufferLen) /! 请求发送数据 /! AT+CIPSEND sprintf(ttyBuffer, AT+CIPSEND=%dx0Dx0A, nBufferLen); Uart1_PutString(ttyBuffer); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Send:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, ) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Send:请求发送数据失败.nr); return -1; /! 发送数据 Uart1_PutString(pBuffer); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) = 0) Uart0_PutString(SwanTech_TCPIP_Send:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, SEND OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Send:发送数据失败.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:1 if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 10000) = 0) Uart0_PutString(SwanTech_TCPIP_Recv:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, +CIPRXGET:1) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Recv:获取应答数据标志失败.nr); return -1; /! 读取应答数据 Uart1_PutString(AT+CIPRXGET=2,128x0Dx0A); if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 30000) = 0) Uart0_PutString(SwanTech_TCPIP_Recv:Uart1_GetString:failed.nr); return -1; if(strstr(ttyBuffer, OK) = NULL) /! 没有找到命令成功执行的结果,函数返回,否则命令执行成功 Uart0_PutString(SwanTech_TCPIP_Recv:读取应答数据失败.nr); return -1; return 1;void SwanTech_CommandMonitor(void) unsigned char bFinishConfig = 0; unsigned char bFinishConnect = 0; char buffer3 = 0; while(1) Uart0_GetALine(buffer, 2, 0); /! 如果连续收到2个0x7F,那么认为是STC-ISP正在请求下载程序 /! 这时候启动系统复位,从ISP监控程序重新引导 if(buffer0 = 0x7F & buffer1 = 0x7F) IAP_CONTR = 0x60; Uart0_PutString(nr+-+nr); if(buffer0 = 1) if(SwanTech_TCPIP_Config() = -1) bFinishConfig = 0; /! 配置失败的标志 Uart0_PutString(nr+开启TCPIP网络功能失败!nr); else bFinishConfig = 1; /! 配置成功的标志 Uart0_PutString(nr+开启TCPIP网络功能成功!nr); else if(buffer0 = 2) if(bFinishConfig = 0) /! 如果没有开启TCPIP网络功能,那么返回失败 Uart0_PutString(nr+请先开启TCPIP网络功能!nr); else if(SwanTech_TCPIP_Connect() = -1) bFinishConnect = 0; /! 连接失败的标志 Uart0_PutString(nr+连接服务器失败!nr); else bFinishConnect = 1; /! 连接成功的标志 Uart0_PutString(nr+连接服务器成功!nr); else if(buffer0 = 3) strcpy(tcpipBuffer, 鸿鹄电子科技. Http://); if(bFinishConnect = 0) /! 如果成功连接到服务器,那么返回失败 Uart0_PutString(nr+请先连接服务器!nr); else if(SwanTech_TCPIP_Send(tcpipBuffer, strlen(tcpipBuffer) = -1) Uart0_PutString(nr+发送数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024~2025学年河南禹州七年级数册中考试试题
- 工艺集成与模块化设计研究考核试卷
- 低温仓储设备维护保养培训体系构建考核试卷
- 江苏省苏州市振华中学校2025年中考二模语文试题(含答案)
- 公路养护机械设备选型与人才培养考核试卷
- 数据治理与IT管理协同考核试卷
- 员工招聘与组织变革适应性分析考核试卷
- 稳定性试验设计与实施考核试卷
- 2025年中国PE光纤套管数据监测研究报告
- 2025年中国L-精氨酸盐酸盐数据监测研究报告
- 2025-2030中国功率半导体器件市场格局与投资方向报告
- 2025年 烟草陕西公司招聘考试笔试试题附答案
- 2025年 内蒙古能源集团所属单位招聘考试笔试试题(含答案)
- 心理健康与大学生活学习通超星期末考试答案章节答案2024年
- 夜市经营安全应急预案
- 10kV小区供配电设计、采购、施工EPC投标技术方案技术标
- 国开(甘肃)2024年春《地域文化(专)》形考任务1-4终考答案
- 中小学校长公开招聘理论考试(试卷)
- 物业公司工程部工作职责.doc
- 山东省电力设备交接和预防性试验规程 - 图文-
- 低值易耗品管理系统
评论
0/150
提交评论