摘要:介绍用mcs-51系列 单片机 控制手机收发短信息的原理、硬件电路、pdu数据格式和符合gsm07.05协议要求的短信息发送/接收程序,同时给出了一个应用实例。
关键词: 单片机 短信息 pdu gsm 接口
gsm(global system for mobile communICation)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的gsm数字蜂窝移动通信网,是我国公众移动通信网的主要方式。主要提供话音、短信息、数据等多种业务。基于gsm短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众gsm网络在全球范围内实现了联网和漫游,建立上述系统不须再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。
目前,人们设计的各类dte设备基础上以微处理器为核心,带有rs232/rs485等通信接口,在物理层上很容易实现与gsm设置(如手机等)的连接。但对sms协议的研究文献却较少,特别是用 单片机 控制手机的sms(short message service)收发的研究更少。笔者在用单片机设计基于gsm的sms数据采集器时,对怎样用单片机控制手机收发短信息进行了探讨。
1 串口控制sms的工作原理
单片机 与手机一般采用串行异步通信接口,具有红外和通信电缆两种连接方式,通信速度可设定,通常为19200bps。采用红外接口的优点是单片机系统与手机电气隔离,相互不干扰,接口各自独立,使用方便;缺点是通信距离较短,红外传播的方向性对接口相对位置有要求。采用电缆连接时,数据传输的可靠性较好;其主要缺点是接口的电气参数不兼容,设计不当时会对手机的通信质量产生影响。笔者经过实践设计的接口电平转换电路如图1。
gsm的短信息业务sms利用信令信道传输,这是gsm通信网所特有的。它不用拨号建立连接,把要发的信息加上目的地址发送到短信息服务中心,经短消息服务中心完成存储后再发送给最终的信宿。所以当目的gsm终端没开机时信息不会丢失。每个短消息的信息量限制为160字节。
现在市场上大多数手机均支持gsm07.05规定的at指令集。该指令集是etsi(欧洲通信技术委员会)发布的,其中包含了对sms的控制。利用gsm手机的串行接口, 单片机 向手机收发一系列的at命令,就能达到控制手机收发sms的目的。etsi的gsm07.05中用于sms收发控制的主要at命令见表1。
表1 常用at指令
gsm手机通过异步通信接口实现对sms的控制共有三种接入协议:bLOCk mode;基于at命令的textmode;基于at命令的pdu mode。pdu模式是发送或接收手机sms信息的一种方法,短信息正文经过十六进制编码后被传送。目前,pdu mode应用最为广泛,基本上全国所有的电信局都提供支持pdu mode的短消息业务。有些地址则不支持text mode和block mode,这就限制了这两种接入协议的应用,而且pdu mode已有取代block mode的趋势。为了保证系统具有广泛的适用性,本文采用pdu模式收发sms。
pdu相当于一个数据包,它由构成消息(sms)的信息组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。pdu结构根据短消息由移动终端发起或以移动终端为目的而不同。
当由移动终端发起时,pdu的格式为:
smscpdu类型mrdapiddcsvpudlud(0~140octed)当以移动终端为目的时,pdu的格式为:
smscpdu类型oapiddcssctsudlud(0~140octed)其中,smsc为短消息业务中心地址,da/oa为源/目的地址,pid为协议识别,dcs为数据编码,udl为用户数据长度,ud为用户数据,vp为有效时间,mr指明是发出信息,scts指明短消息到达业务中心的时间。
2 pdu格式下短信息的接收
根据设置不同,手机将收到的短消息保存在缓存单元或存入sim卡, 单片机 从手机中接收短消息实质上就是从sim或缓存中读出信息。这主要利用at cmgr和at cmgl两条指令来完成,其工作过程见图2。
由于不同的厂商对at指令集的解释代码和响应信息不一样,所以 单片机 首先要确认能否与手机建立起通信,一般用ate指令完成此确认;然后用at cmgf指令选定短消息的数据格式;在收到手机的正确回答反以at指令完成读出功能。一般用at cmgl读取以前的信息,在收到手机的ring(振铃)数据时,用at cmgr读取实时信息。
以下是笔者设计的物流数据采集系统中用到的接收sms的一个实例,它说明了pdu模式的应用。 单片机 发送和接收(手机回答)均为ascii码。所用手机为siemens s3508i。
操作过程如下({}内为注释):
发送:ate
手机回答:ok {已建立联接}
发送:at cmgf=0 {选用pdu格式}
手机回答:ok {允许选择pdu格式}
发送:at cmgl=2 {列出已有的短信息}
手机回答: cmgl:1,2,,24{1表示信息个数,2表示未发信息,24表示信息总容量}
0d71683108370105f004000d81683179133208f10000026080410033802632184cf682d
95e0dc2b36d3d170a0243106933d97a0243106933d97a02451068b1983492608
ok
以上这组pdu格式的十六进制字符串,不但包含了短消息的内容,同时包含了发送者的手机号码、短信息中心号码、短消息发送时间等。
下面对信息内容进行分析:
0d:短信息中心地址(号码)长度。
91:短信息中心号码类型,91是ton/npi。ton/npi遵守international/e.164标准,指在号码前需加' '号;此外还可直有其他数值,但91最常用。
683108370105f0:smsc 短信息所使用的服务中心号码13807310500。它经过十六进制以字节为单位的高低半字节换位处理,号码是奇数的添f,构成一个hex字节。
04:pdu类型,文件头字节。
0b:主叫号码长度。
81:主叫号码类型。
3179133208f1:0a主叫号码,也经过了处理,实际号码为13973123801。
00:pid,为协议标识。
00:dcs短信息编码类型是gsm default alphabet,即由7位ascii码移位组成8位十六进制码(octet),其方法见表2。
1sthexb0a6a5a4a3a2a1a02ndhexc1c0b6b5b4b3b2b13rdhexd2d1d0c6c5c4c3c24thhexe3e2e1e0d6d5d4d35thhexf4f3f2f1f0e6e5e46thhexg5g4g3g2g1g0f6f56thhexh6h5h4h3h2h1h0g602608041003380:scts短信息发送时间,02/06/08/14:00:33.08。
26:udl经处理后的8位码(octet)短信息字节长度,它小于消息ascii码的长度。
32184cf682d95e30dc2b36d3d170a0243106933d97a0243106933d97a02451068b1983492608:ud 编码后的pdu数据,短信息内容“2002/06/08/13:48id102okid103ok id201fail”。
3 短信息的发送
与接收短信息一样,发送时也要先建立联接,传送一些初始化指令,然后发送短消息内容。下面是用siemens s3508i发送一个短信息的例子,内容为:“2002/06/08/13:48 id102ok id103ok id201fail”。其ascii码为:“32030322f30362f30382f31333a34382049443130324f4b
2049443130334f4b2049443230314641494c20”。
发送:ate {请求建立联接}
手机回答:ok {已建立联接}
发送:at cmgf=0 {选择pdu模式}
手机回答:ok
发送:at csms=0{检测手机是否支持sms命令}
手机回答:ok
发送:at cmgs=52{发送短信息,52 octets(不包括最初9个短信息元字节)}