当前位置:
首页 >
单片机技术文章 >
51单片机 > 详细内容
- 用单片机控制手机收发短信息原理
- 发布时间:2009/7/7 阅读次数:1955 字体大小: 【小】 【中】【大】
当由移动终端发起时,PDU的格式为:
SMSC |
PDU类型 |
MR |
DA |
PID |
DCS |
VP |
UDL |
UD(0~140octed) |
当以移动终端为目的时,PDU的格式为:
SMSC |
PDU类型 |
OA |
PID |
DCS |
SCTS |
UDL |
UD(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。
1sthex |
B0 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
2ndhex |
C1 |
C0 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
3rdhex |
D2 |
D1 |
D0 |
C6 |
C5 |
C4 |
C3 |
C2 |
4thhex |
E3 |
E2 |
E1 |
E0 |
D6 |
D5 |
D4 |
D3 |
5thhex |
F4 |
F3 |
F2 |
F1 |
F0 |
E6 |
E5 |
E4 |
6thhex |
G5 |
G4 |
G3 |
G2 |
G1 |
G0 |
F6 |
F5 |
6thhex |
H6 |
H5 |
H4 |
H3 |
H2 |
H1 |
H0 |
G6 |
02608041003380: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个短信息元字节)}
手机回答:>{允许上传数据,ASCII码是($20H,$2EH)}
发送:0891683108701305F011000B813179133208F10000AA2632184CF682D95
E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A
不计最初9个短消息信元字节,本短信息有52字节(104个字符)。AT+CMGS仅说明了SMSC信息内容的长度,在收到手机回答的>符号手才发送PDU数据串,并以(CTRL^Z)结束。
最新评论