基于GSM模块与AT89C51的接口设计及应用
扫描二维码
随时随地手机看文章
1、 概述:
随着通信技术的发展,基于移动通信网络服务功能,正向工业控制和遥控领域有不断扩大的趋势。为适应这种需要,西门子公司推出了新一代无线通信GSM模块——TC35i,基于该模块的短消息功能,可以快速安全可靠地实现用户信息处理等功能,特别适用于控制中心与终端设备距离很远,或不便采用有线通信介质等场合,例如油井信息采集后的传输、远程抄表系统、城市交通导向等均基于TC35i模块来实现。
2、TC35i模块介绍
目前,国内已经开始使用的GSM模块有很多,而且这些模块的功能、用法差别不大。本设计采用的是西门子TC35系列的TC35i 。这种无线模块功能上与TC35兼容,设计紧凑,大大缩小了用户产品的体积。TC35i与GSM2/2兼容、双频(GSM900/GSM1800)、RS232数据接口,该模块及射频电路和基带与一体,向用户提供标准的AT命令接口,为数据、语音、短消息和传真提供快速、可靠、安全的传输,方便用户的应用开发及设计。
2.1 模块中与SMS有关的GSM AT指令介绍
GSM引擎模块提供的命令符合GSM07.05和GSM07.07规范。GSM07.07中定义的AT Command接口,提供了一种移动平台与数据终端设备之间的通用接口;GSM07.05对短消息作了详细的规定。在短消息模块收到网络发来的短消息时,能够通过串口发送指示信息,数据终端设备可以向GSM模块发送各种命令。与SMS有关的GSM AT指令如表一所示。GSM AT指令集,是由诺基亚、爱立信、摩托罗拉和HP等厂家共同为GSM系统研制的,其中包含了对SMS(Short Message Service)的控制。
表一 与SMS相关的若干GSM AT指令
2.2 PDU编码规则
目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息, UCS2编码用于发送Unicode字符。一般的PDU编码由ABCDEFGHIJKLM十三项组成。
A:短信息中心地址长度,2位十六进制数(1字节)
B:短信息中心号码类型,2位十六进制数。
C:短信息中心号码,B+C的长度将由A中的数据决定。
D:文件头字节,2位十六进制数。
E:信息类型,2位十六进制数。
F:被叫号码长度,2位十六进制数。
G:被叫号码类型,2位十六进制数,取值同B。
H:被叫号码,长度由F中的数据决定。
I:协议标识,2位十六进制数。
J:数据编码方案,2位十六进制数。
K:有效期,2位十六进制数。
L:用户数据长度,2位十六进制数。
M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。
3、 TC35i与单片机的硬件接口电路
TC35i模块主要由GSM基于处理器、GSM射频模块、供电模块、闪存、ZIF连接器、天线接口六部分组成。通过ZIF连接器与单片机实现电路接口,该接口读取或发送TC35i模块中的数据,将是本文论述的重点,也是TC35i应用的核心。TC35i与单片机的硬件接口电路如图所示。
3、 单片机与TC35i的软件接口及控制原理
单片机与TC35i的软件接口其实就是单片机通过AT指令控制手机的控制技术,首先设置TC35i模块的工作模式:AT+CMGF=n,n=0为PDU模式;n=1为文本模式;通常设置为PDU模式,在这种模式下,能传送或接受透明数据(用户自定义数据)。AT+CMGR=n为读TC35i模块短消息数据,n为短消息号。AT+CMGL=n为列出TC35i模块内的短消息,n=0是未读的短消息,n=1位已读的短消息,n=2位未发送的短消息,n=3为已发送的短消息n=4为所有短消息。AT+CMGD=n为删除TC35i模块的短消息,n为短消息编号。
4.1程序设计
软件编程通过向TC35i写入不同的AT指令能完成多种功能,如网络登陆、读取SIM卡上电话号码、发送SMS消息、接收SMS消息等。下面给出部分功能程序:
4.1.1启动TC35i模块程序
STAR: CLR P1.0 ;IGT=0
LCALL DL100ms;延时100毫秒
SETB P1.0 ;IGT=1启动TC35i模块
MOV PCON , #80H
MOV TH1,#0FBH ;采用18.432MHz晶振时,设置串口为19200波特率
MOV TL1, #0FBH
MOV SCON,#50H
SETB TR1
4.1.2设置TC35i模块为PDU工作模式程序
CMGF:MOV 40H,#41H;A
MOV 41H,#54H;T
MOV 42H, #2BH;+
MOV 43H,#43H;C
MOV 44H,#4DH;M
MOV 45H,#47H,G
MOV 46H,#46H;F
MOV 47H,#3DH;=
MOV 48H,#30H;0
MOV 49H,#0DH;CR发送十个字符
MOV R2,#0AH
MOV R0,#40H
CMGF1:MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R2,CMGF1
RET
4.1.3 删除短消息程序
CMGD:MOV 40H,#41H;A
MOV 41H,#54H;T
MOV 42H, #2BH;+
MOV 43H,#43H;C
MOV 44H,#4DH;M
MOV 45H,#47H,G
MOV 46H,#46H;F
MOV 47H,#3DH;=
MOV 48H,#16H;短消息号
MOV 49H,#17H
MOV 4AH,#0DH;CR
MOV R2,#0BH
CMGD1:
MOV A,@R0
MOV SBUF,A
MOV 1CH,#200
JNB TI,$
CLR TI
DJNZ R2,CMGD1
MOV R2,#0DH
CMGD2:
JNB RI,$
CLR RI
MOV A,SBUF
DJNZ R2,CMGD2
MOV RO,#40H
CMGD3:
JNB RI,$
CLR RI
MOV A,SBUF
MOV @R0,A
INC RO
CJNE A,#0AH,CMGD3;判断换行字符
MOV A,40H
CJNE A,#4FH,CMGD4;错误时转移
SETB F0;删除成功
RET
CMGD4:
CLR F0;删除失败
RET
AT指令的指令符号、常数、PDU数据等都是以ASCII编码形式传送;传送透明数据必须把TC35i模块的工作模式设置为PDU模式;单片机向TC35i模块发送每一条指令后,必须以回车符作为该条指令的结束,例如单片机向手机发送“AT+CMGF=0”这条指令,其ASCII编码序列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一个字节0DH就是回车符,表示该条指令结束,如果没有这个回车符,手机将不识别这条指令。当TC35i模块接收到一条完整的AT指令后,TC35i模块并不立即执行该条指令,而是先把刚才接收到的AT指令的ASCII编码序列全部反发送出来(含0DH);其次发送一个回车符和一个换行符的ASCII编码,即0DH和0AH;然后执行该指令。
单片机读取TC35i模块的PDU数据时,原始数据应该是16进制数,但读回的数据仍然是ASCII表示的16进制数。这样一个字节的16进制数就变成了2个字节的ASMII码。但是PDU数据包中的数据字节长度部分仍然是实际字符长度。而不是变成ASCII码的字节长度,这在编程时应特别注意,否则,接收的数据就不完整。单片机接收到PDU数据包数据后,必须将其恢复成16进制数据,其算法如下:设a为接收的ASCII码,b为转换后的16进制数。那么如果a<39H,则b=a-30H;如果a>39H,则b=a-30h-07H。最后把前后两个数合并为一个字节。
TC35i模块向单片机应答PDU数据包的字节数时不包括前9个字节数据,但向单片机传送PDU数据包时,包括这9个字节的数据。例如,如果TC35i模块应答的PDU数据长度为50,而实际向单片机传送的16进制数据为59字节,ASCII码为2×59字节,所以单片机必须按2×59个字节接收PDU数据。
5、结论:
使用手机模块利于系统集成,成本较低。在偏远地区等架设通信线路困难或不经济的地方,工程服务设施可以自由灵活的设置,不再受地形条件的限制。总之,GSM模块价格低廉、应用广泛,应用前景诱人,通过与手机模块接口可以很方便的设计出用户所需要的数据接收终端。