您好,欢迎访问三七文档
摘要:SOCKET通信是目前常用通信方式之一。文中以8位单片机AT89C52作为微控制器,它利用自带异步串口与电平转换芯片MAX232和GPRS模块连接,使用AT命令对GPRS模块LT8030进行控制,从而实现SOCKET通信。详细介绍SOCKET通信中要用到AT命令,并给出实现SOCKET通信完整程序。关键词:SOCKET通信GPRS串行通信AT命令引言GPRS(GeneralPacketRadioService)是通用分组无线业务简称,是一种以全球手机系统(GSM)为基础数据传输技术\[1\]。GPRS网不但具有覆盖范围广、数据传输速度快、通信质量高、永远在线和按流量计费等优点,而且其本身就是一个分组型数据网,支持TCP/IP协议,无需经过PSTN(公用电话交换网)等网络转接,可直接与Internet网互通。因此GPRS业务在无线上网、环境监测、交通监控、移动办公等行业中具有无可比拟性价比优势。在网络设置中有HTTP、SOCKET等类型。SOCKET是建立在传输层协议(主要是TCP和UDP)上一种套接字规范,它定义两台计算机间进行通信规范(也是一种编程规范)。如果说两台计算机是利用一个通道进行通信,那么这个通道两端就是两个套接字。套接字屏蔽了底层通信软件和具体操作系统差异,使得任何两台安装了TCP协议软件和实现了套接字规范计算机之间通信成为可能。1系统组成系统组成如图1所示。该系统利用现有GPRS网络,单片机通过串口对GPRS模块进行收发控制,实现SOCKET通信。系统各部分说明如下:①单片机采用了AT89C52,它带有一个串口;②GPRS模块。本文以利事达信息技术有限公司开发GPRS模块LT8030[2]为例。LT8030内嵌了完整TCP/IP协议栈,包括TCP、UDP、FTP、SOCKET、Telnet、POP3、SMTP、HTTP等,为用户提供了更简单网络接口。LT8030采用GPRS技术,无缝覆盖、永远在线且按流量计费,紧密结合产品应用领域所遇到实际问题,进行全面优化和升级,使产品开发变得更容易、更快捷。它采用标准RS232接口,用户可以通过单片机或其他CPUUART口,使用相应AT命令对模块进行控制,达到使其产品可以轻松进入GPRS网络目。③服务器。建立SOCKET连接必须具有公网IP地址,故应保证服务器中心计算机连接到Internet并且取得公网IP地址。在单片机对GPRS模块控制之前,服务器端需运行SOCKET端口监听程序(此监听程序一般是现成),并且设为监听状态,端口号也要设定,例如port:1024。2单片机与GPRS模块连接单片机与GPRS模块一般采用串行异步通信接口,通信速度可设定,通常为9600bps。采用RS232电缆方式进行连接时,数据传输可靠性较好。单片机通过电平转换电路与GPRS模块连接,电路比较简单,电路原理图如图2所示。所涉及芯片MAX232用于串行通信接口与232通信接口之间电平转换[3]。PCbfans.cn提示请看下图:图1系统组成框图图:图2单片机与GPRS模拟连接电路原理图MAX232T1IN、T2IN、R1OUT、R2OUT为接TTL/CMOS电平引脚;T1OUT、T2OUT、R1IN、R2IN为接RS232电平引脚。TTL/CMOS电平T1IN、T2IN引脚应接AT89C52串行发送引脚TXD;R1OUT、R2OUT应接AT89C52串行接收引脚RXD。与之对应,RS232电平T1OUT、T2OUT应接GPRS模块接收端RXD;R1IN、R2IN应接GPRS模块发送端TXD。现选用其中一路发送/接收,R1OUT接AT89C52RXD,T1IN接AT89C52TXD,T1OUT接GPRS模块RXD,R1IN接GPRS模块发送端TXD。因为MAX232具有驱动能力,所以不需要外加驱动电路。3建立SOCKET连接命令下面对SOCKET通信中要用到一些AT命令[2]进行说明。3.1基本设置①GPRSISP码。ATIISP1=*99***1#//全国通用②登录用户名。ATIUSRN=WAP//GPRS网络登录名③登录密码。ATIPWD=WAP//GPRS网络登录密码④MODEM类型。ATIMTYP=2//定义GPRSMODEM⑤初始化命令。ATIMIS=“ATCGDCONT=1,ip,CMNET”⑥域名服务器。ATIDNS1=211.136.18.171//DNS服务器地址,全国通用⑦扩展码(XRC)。ATIXRC=03.2SOCKET设置①建立一个TCP通信。ATISTCP:218.66.16.173,1024CR建立SOCKET连接,218.66.16.173为应用服务中心计算机端IP地址(实际地址由实际情况决定),1024为端口号(端口号由中心SOCKET端口监听程序设置决定)。如果连接成功,LT8030返回I/xxx。xxx为LT8030中本次SOCKET连接句柄号。中心监听程序会显示连接终端IP地址。如果连接失败,LT8030返回I/ERROR(xxx)。xxx为错误代码。②发送数据。ATISSND%:xxx,stringLength:string发送数据,xxx为句柄,stringLength为要发送字符长度,string为要发送数据。发送成功后,在中心端可看到终端发送数据。最多一次能够发送5K以下数据。③查询SOCKET状态。ATISST:xxxCR查询SOCKET状态,xxx为句柄。LT8030返回I/SOCKETstat。如果SOCKETstat=000,表示该端口连接正常;如果SOCKETstat≥1,LT8030通过该端口从中心接收存在Buffer里字节数;如果SOCKETstat0,则SOCKET错误。④接收数据。ATISRCV:xxxCRxxx为句柄。该指令会读取LT8030通过该句柄从中心接收到,存在Buffer里数据;Buffer最大可存储30K数据。⑤关闭SOCKET通道。ATISCLS:xxx关闭SOCKET通道,xxx为句柄。4程序设计根据单片机与GPRS模块通信协议约定,单片机串行口设为方式1,波特率为9600bps,8位UART,1位起始位,1位停止位,无奇偶校验。上电后,首先向GPRS模块发送基本设置命令,即ISP码、用户名及用户密码帧等,其中ISP码必须为“*99***1#”,用户名和用户密码可以任意设置,但不能为空。在使用LT8030GPRS上网功能之前,必须正确设置这些参数。参数一旦设置后,即永久保存,以后无需重新再设(以上设定为LT8030C出厂时默认参数)。然后向GPRS模块发送SOCKET设置帧,如成功,则点和点通信环境已建立,接着就调用发送数据帧。开机上电后,程序在主函数中运行,单片机进行初始化。初始化包括设置串口工作方式、波特率,并初始化变量参数和标志位。编著注:实现SOCKET通信完整程序,见本刊网站()。结语随着计算机和通信技术进步,当今社会生产正朝着高效、准确和稳定方向发展,这对数据传输实时性、可靠性、信息量提出了更高要求,为此介绍利用GPRS模块实现SOCKET通信系统。本文采用内嵌TCP/IP协议GPRS模块LT8030,在8位微控制器AT89C52上实现了对LT8030控制,并实现了基于GPRSSOCKET通信功能,具有外围器件少、电路简单、系统成本低等优点。参考文献1JR(Bud)Bates.通用分组无线业务(GPRS)技术与应用.朱洪波,等译.北京:人民邮电出版社,20042利事达信息技术有限公司.LT8030介绍3胡伟,季晓衡.单片机C程序设计及应用实例.北京:人民邮电出版社,20034张毅刚,彭喜元,等.MCS51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,2002余琴:研究生,主要从事智能仪器设计与嵌入式系统方向研究。赵振华:研究生导师,副教授,主要从事智能仪器设计与嵌入式系统方向研究与教学。SOKET通信程序如下:#includeREG52.H//特殊寄存器的头文件,专供8051扩展系列的单片机使用#includestdio.h//I/O库文件原型声明voidinitial(void);//初始化子程序的声明voidsend(char*,int);//发送子程序的声明intrev(int);//接收子程序的声明charxdatadoc1[19]=AT+IISP1=*99***1#\r\n;//以下为基本设置charxdatadoc2[25]=AT+IDNS1=211.136.18.171\r\n;charxdatadoc3[14]=AT+IUSRN=WAP\r\n;charxdatadoc4[13]=AT+IPWD=WAP\r\n;charxdatadoc5[33]=AT+IMIS=\AT+CGDCONT=1,IP,CMNET\\r\n;charxdatadoc6[11]=AT+IXRC=0\r\n;charxdatadoc7[12]=AT+IMTYP=2\r\n;charxdatadoc8[30]=AT+ISTCP:221.232.81.195,2024\r\n;//以下为SOCKET设置charxdatadoc9[22]=AT+ISSND%:xxx,6:socket;charxdatadoc10[13]=AT+ISST:xxx\r\n;charxdatadoc11[14]=AT+ISRCV:xxx\r\n;charxdatadoc12[12]=AT+ISCLS:xxx;charmes[44]=AT+ISTCP:221.232.81.195,2024\r\nI/000\r\n,temp;inti;voiddelay(ints)//延时子程序{inti;for(i=s;i0;i--){};}voidsok()//接收返回的句柄子程序{inti;for(i=0;i3;i++){doc9[10+i]=mes[32+i];doc10[8+i]=mes[32+i];doc11[9+i]=mes[32+i];doc12[9+i]=mes[32+i];}}voidmain(void)//主程序{initial();do{send(doc1,19);//发送ISP码}while(!rev(28));P1=0x00;do{send(doc2,25);//发送DNS服务器地址码}while(!rev(35));do{send(doc3,14);//发送用户名}while(!rev(24));do{send(doc4,13);//发送用户密码帧}while(!rev(20));do{send(doc5,33);//发送初始化命令}while(!rev(42));do{send(doc6,11);//发送扩展码}while(!rev(20));do{send(doc7,12);//发送GPRSMODEM类型}while(!rev(20));do{send(doc8,30);//建立SOCKET连接delay(10000);}while(rev(37));for(i=0;i1000;i++)delay(1000);sok();send(doc9,22);//发送数据while(1){if(flag==1)send(doc9,22);}send(doc10,13);//查询SOCKET状态send(doc11,14);//接收数据send(doc12,12);//关闭SOCKET通道}}voidinitial()//初始化子程序{EA=0;//关中断SCON=0X50;//串行口工作方式:模式1,8位UART,数据传输率可变TMOD|=0X20;//定时器1为模式2,8位自动装入方式TH1=253;//数据传输率设置:9600bps(晶振为11.0592MHz)TR1=1;//启动定时器1TI=1;//设置为1,以发送第一个字节EA=1;}voidsend(char*temp2,intj)//发送子程序{inti;EA=0
本文标题:SOKET通信程序
链接地址:https://www.777doc.com/doc-310078 .html