GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc

上传人:b****3 文档编号:2351404 上传时间:2022-10-29 格式:DOC 页数:7 大小:55KB
下载 相关 举报
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc_第1页
第1页 / 共7页
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc_第2页
第2页 / 共7页
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc_第3页
第3页 / 共7页
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc_第4页
第4页 / 共7页
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc

《GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc(7页珍藏版)》请在冰豆网上搜索。

GSM短消息收发模块与AT89C55单片机通信程序的设计与实现.doc

7

摘要:

本文首先介绍了GSM移动通信中的收发短消息(SMS)协议及其编码方式,接着分别探讨了AT89C55微处理器与MotorolaD15短消息模块发送、接收接口子程序的设计,并给出了详细的MCS-51编码程序。

关键词:

SMS编码;GSM;AT89C55;MotorolaD15

 

1.0 引言

GSM(GlobalSystemforMobilecommunication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用较广泛的一种系统,主要提供话音、短信息、数据等多种业务。

基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,无需另外组建专用通信网络,被广泛用于远程监控、定位导航、个人通信终端等场合。

MotorolaD15是带语音,数据,传真和短消息支持的PHASEIIGSM四类嵌入式封装的模块,常应用于导航,紧急服务,安全系统等领域。

数据应用能提供包括车载信息,移动计算,资产管理,远程咪表读取,街灯控制,家庭安全,销售管理,法事管理,POS连接,家用器具监视和控制,显示系统,装入管理等功能。

本文以MotorolaD15模块为例,探讨了AT89C55微处理器与MotorolaD15短消息模块发送、接收接口子程序的具体实现过程。

1.1 SMS协议及其编码方式

GSM移动通信中的短消息传输主要有以下3种类型:

①分组模式(BlockMode)。

该模式是最早期的短消息传输方式,其通信效率最低。

②文本模式(TextMode)。

MotorolaD15不支持该模式。

③PDU(ProtocolDateUnit)模式(PDU模式)。

该模式是当前短消息协议中被广泛使用的模式。

      欧洲ETS(ElectronicTelegraphSystem电报系统)协会规定:

通过GSM数字蜂窝移动通信网络来发送短消息,用户数据必须转化为GSM字符。

而且,用户数据的内容必须是ASCII码字符集里的0x00到0x7f,7位编码的字符(这是对于英文短消息的规定)。

因此,用户数据的7位数据,必须转化为8位的GSM字符。

其中,每个短消息的信息量限制为140个八位组(7比特编码,160个字符)。

以下着重介绍一下如何把7位的ASCII码内容编码为8位的GSM内容。

      假设用户要发送一条内容为“ABCDE”的短消息。

查阅ASCII字符集可知,它们的编码分别是:

0x41、0x42、0x43、0x44、0x45,其对应的二进制数分别是:

01000001、01000010、01000011、01000100、01000101。

接着可通过逐个增加位数的移位方式来使7位的用户码变为8位的GSM码,如图1所示。

    

   图1 ASCII码编码为GSM码示例

       注意以上编码方式是以每8个ASCII码字符为一组的,没有达到8个一组的话,最后一个字符移位后高位填充0,依此循环而形成8位一组的编码。

经过以上的编码变换后,7位的ASCII码字符就变成了8位的GSM字符,其编码结果分别为0x41、0xE1、0x90、0x58、0x04。

如果160个ASCII字符经过这种编码变换后,则会转化为140个GSM字符内容。

      对于所接收到的短消息是发送短消息的反编码,即把接收到的8位二进制的GSM字符重新译码为7位的ASCII码字符。

例如,用户接收到6个GSM字符的十六进制的内容如下:

 

图2 GSM码译码为ASCII码示例

 

经过译码后,用户接收到的内容为“ROHDE”。

      在解码接收到的短消息时,以7个GSM字符为一组的,不足一组的最后一个字符移位后剩余的高位填充0。

1.2 短消息收发程序的实现

1.2.1 短消息接收子程序

通过MotorolaD15接收到的短消息在89C55微处理器内存中存储形式是把每条消息中的每个字母的ASCII码的内容拆分后的ASCII码形式存储于内存中。

例如,假设用户接收到的GSM字符为AB,字符“A”的ASCII码为41,其中,将“41”拆分后的4的ASCII码为34、1的ASCII码为31。

因此在89C55微处理器内存中存储的内容是3431。

同理可知,字符“B”在89C55微处理器内存中的存储形式是3432。

可见,字符“AB”在89C55微处理中存储的内容是34313432。

在进行对所接收到的内容进行译码时,则需先把两个字节的字符转化成一个字节的内容,其对应的子程序命名为ASCIIToHEX。

由于ASCII码的编码范围为0x00到0x7F,其中数字“0~9”是以3为ASCII码的高位,字母“A~Z”是以4为ASCII码的高位,因此,区分数字“0~9”和字母“A~Z”的方法只需判断ASCII码的高位即可。

若ASCII码的高位为3,则只保留ASCII码的低位;若ASCII码的高位为4,只需屏蔽ASCII码的高位,保留ASCII码的低位且进行加9的运算。

ASCIIToHEX子程序编码如下。

AtC0:

  ANL    A,#4FH

          JNB    ACC.6,AtC3

          CLR    Acc.6

          SETB   Acc.3

          INC    A

AtC3:

  JNB    f0,AtC4

          CLR    f0

          SWAP   A

          XCH    A,B

          SJMP   AtC0

AtC4:

  ORL    A,B

           RET

程序说明:

算法:

A+B=AB(注:

此处A、B为A字符,B字符,非寄存器),把A表述的ASCII转化成字符和B表述的ASCII转化成字符合并为一个字符(十六进制)。

    数字0(30)到9(39)与4Fh相与,保留低位。

字母A到F与4Fh相与,内容不变,仍为41,42,43,44,45,46。

因此,

01000001->00001001->00001010 把第6位移位到第3位后(+1)

01000001->00001001->00001010 把第6位移位到第3位后(+1)

01000010->00001010->00001011 把第6位移位到第3位后(+1)

01000011->00001011->00001100 把第6位移位到第3位后(+1)

01000100->00001100->00001101 把第6位移位到第3位后(+1)

01000101->00001101->00001110 把第6位移位到第3位后(+1)

01000110->00001110->00001111 把第6位移位到第3位后(+1)

短消息接收子程序编码如下。

 MOV     DPTR,#Addr_SMSBuf-1  ;Addr_SMSBuf为接收短消息的缓冲区

 MOV     R7,DPH

 MOV     R6,DPL

 MOV     DPTR,#Addr_SMStmpBuf

 MOV     R3,DPH

 MOV     R2,DPL

AStS0:

  MOV     DPH,R7

 MOV     DPL,R6

 INC      DPTR

 MOVX   A,@DPTR          ;接收的ASCII码字符以0Ah,0Dh结尾

 CJNE     A,#0AH,AStS1      ;仅对0Ah作判断

 CLR      A                        ;最后以00h为结尾

MOV     DPH,R3              

MOV     DPL,R2                          

MOVX    @DPTR,A                ;反ASCII码结果存储

INC     DPTR

 MOVX    @DPTR,A

SJMP    SMSDecode        ;跳到译码模块

AStS1:

 XCH     A,B           ;暂存一个字符

INC     DPTR

MOV     R7,DPH

MOV     R6,DPL

MOVX    A,@DPTR                         ;调出两个字符

XCH      A,B                           

LCALL   ASCIItoHEX               ;调用两个字节合并为一个字节反ASCII子程序

MOV     DPH,R3

MOV     DPL,R2

MOVX    @DPTR,A                         ;结果存储

INC      DPTR

MOV     R3,DPH

MOV     R2,DPL

SJMP     AStS0

通过MotorolaD15接收到的短消息在89C55微处理器内存中是以0DH、0AH结尾的。

由于以上程序的处理结果仍是GSM字符,因此还需把GSM字符译成ASCII码字符,使它变成用户易于理解、方便阅读的内容。

译码工作就是把GSM字符的十六进制转化成二进制后,把二进制的高位从1位到7位,逐个增加位数移位,把高位变成低位,不够的填充0即可。

对此,只需应用移位指令即可。

译码子程序编码如下。

MOV    DPTR,#Addr_SMStmpBuf  ;指向短消息工作缓冲区首地址

MOV    R7,DPH

MOV    R6,DPL

MOV    DPTR,#Addr_SMSBuf       ;指向接收短消息译码的结果缓冲区首地址

MOV    R3,DPH

MOV    R2,DPL

SMSDe0:

  

MOV    R5,#01H              ;移位计数器

MOV    B,#0H

MOV    DPH,R7

MOV    DPL,R6               ;指向工作缓冲区的一个字节

MOVX   A,@DPTR              ;读取一个字节

INC     DPTR                 ;接收缓冲区指针后移

MOV    R7,DPH

MOV    R6,DPL

MOV    C,ACC.7              ;C保存第一个字节的高位

CLR    ACC.7

MOV    DPH,R3

MOV    DPL,R2

MOVX   @DPTR,A     ;移位的数据保存在译码/编码缓冲区(Addr_SMSBuf)

INC     DPTR         ;译码/编码缓冲区指针后移

MOV    R3,DPH

MOV    R2,DPL

CLR    A

RLC    A

MOV    R1,A          ;R1保存高位移到低位的结果

SMSDe00:

 

MOV    DPH,R7

MOV    DPL,R6

MOVX   A,@DPTR

JZ       SMSDeCodeExit

INC     R5             ;移位次数加一

CJNE    R5,#08H,SMSDe1

MOV    A,R1

MOV    DPH,R3

MOV    DPL,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1