GSM短消息收发模块与AT89C55单片机通信程序的设计与实现文档格式.doc
- 文档编号:8695832
- 上传时间:2023-05-13
- 格式:DOC
- 页数:7
- 大小:55KB
GSM短消息收发模块与AT89C55单片机通信程序的设计与实现文档格式.doc
《GSM短消息收发模块与AT89C55单片机通信程序的设计与实现文档格式.doc》由会员分享,可在线阅读,更多相关《GSM短消息收发模块与AT89C55单片机通信程序的设计与实现文档格式.doc(7页珍藏版)》请在冰点文库上搜索。
查阅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:
f0,AtC4
f0
SWAP
XCH
A,B
SJMP
AtC0
AtC4:
ORL
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)
01000010->
00001010->
00001011
01000011->
00001011->
00001100
01000100->
00001100->
00001101
01000101->
00001101->
00001110
01000110->
00001110->
00001111
短消息接收子程序编码如下。
MOV
DPTR,#Addr_SMSBuf-1
;
Addr_SMSBuf为接收短消息的缓冲区
R7,DPH
R6,DPL
DPTR,#Addr_SMStmpBuf
R3,DPH
R2,DPL
AStS0:
MOV
DPH,R7
DPL,R6
INC
DPTR
MOVX
A,@DPTR
接收的ASCII码字符以0Ah,0Dh结尾
CJNE
A,#0AH,AStS1
;
仅对0Ah作判断
CLR
A
最后以00h为结尾
DPH,R3
DPL,R2
@DPTR,A
反ASCII码结果存储
DPTR
@DPTR,A
SJMP
SMSDecode
跳到译码模块
AStS1:
XCH
A,B
暂存一个字符
R7,DPH
R6,DPL
A,@DPTR
调出两个字符
A,B
LCALL
ASCIItoHEX
调用两个字节合并为一个字节反ASCII子程序
DPH,R3
DPL,R2
@DPTR,A
结果存储
R3,DPH
R2,DPL
AStS0
通过MotorolaD15接收到的短消息在89C55微处理器内存中是以0DH、0AH结尾的。
由于以上程序的处理结果仍是GSM字符,因此还需把GSM字符译成ASCII码字符,使它变成用户易于理解、方便阅读的内容。
译码工作就是把GSM字符的十六进制转化成二进制后,把二进制的高位从1位到7位,逐个增加位数移位,把高位变成低位,不够的填充0即可。
对此,只需应用移位指令即可。
译码子程序编码如下。
DPTR,#Addr_SMStmpBuf
指向短消息工作缓冲区首地址
MOV
DPTR,#Addr_SMSBuf
指向接收短消息译码的结果缓冲区首地址
SMSDe0:
R5,#01H
移位计数器
B,#0H
DPH,R7
DPL,R6
指向工作缓冲区的一个字节
读取一个字节
DPTR
接收缓冲区指针后移
C,ACC.7
C保存第一个字节的高位
ACC.7
DPH,R3
DPL,R2
移位的数据保存在译码/编码缓冲区(Addr_SMSBuf)
译码/编码缓冲区指针后移
RLC
R1,A
R1保存高位移到低位的结果
SMSDe00:
DPL,R6
A,@DPTR
JZ
SMSDeCodeExit
R5
移位次数加一
R5,#08H,SMSDe1
A,R1
LJMP
SMSDe0
SMSDe1:
A,R5
R4,A
SMSDe2:
MOVX
A,@DPTR
C
A
@DPTR,A
A,B
B,A
DJNZ
R4,SMSDe2
左移n次
C
右移1次
RRC
A,R1
R1,B
保存当前移位的结果,下一次使用,R1的内容不能动
保存移位或的结果
SMSDe00
SMSDeCodeExit:
DPH,R3
译码结果以00h结束
RET
1.2.2
发送短消息编码子程序
短消息发送的格式与短消息接收格式不同之处在于,它是把7位ASCII码字符转化成8位的GSM字符,且把7位的ASCII字符逐个增加移动低位位数变成高位的方法来实现编码的。
因此可以采用循环移位的方式来完成具体的编码。
短消息发送子程序编码如下。
gSMSLength,#0h
默认短消息长度为1。
DPTR,#Addr_SMSBuf
指向短消息发送/接收缓冲区
DPTR,#Addr_SMStmpBuf
指向工作缓冲区
R5,#01H
循环次数,编码要求
SMSE0:
gSMSLength
短消息字节数加一
DPH,R7
DPL,R6
A,@DPTR
R1,A
入口参数
DPTR
入口参数,指向两个字节的高地址
判断是否结束(00h)
SMSExit
编码模块出口处
A,R5
R5为一个字节移位的位数
R4,A
R4在Shift模块中作为循环移位控制
以下为Shift模块,该模块的功能是把两个连续的字节进行移位n次(R3->
R1)。
程序如下。
Shift:
B,#0
Shift0:
MOVX
相当于R3保存两个字节中的高字节
C
RRC
B,A
DJNZ
R4,Shift0
ORL
A,R1
A保存的是低字节,被移位后的结果(来自高字节的低n位)
B,#01H
入口参数,后移的字节数
LCALL
DPTRBack
调用指针后移子程序,A不受影响
保存回到原来的地址
R6,DPL
DPH,R3
DPL,R2
@DPTR,A
运行到此,移位完成一个字节,将此字节保存到译码/编码缓冲区
DPL,R6
A
完成一个字节后,该字节的内容清零
接收和发送缓冲区清零
R5
CJNE
R5,#08H,SMSE0
运行到此空出一个节
SMSE0
SMSExit:
程序编码完毕,退出
把最后一个字节的内宾保存在译码/编码
缓冲区
最后以00h结尾
此格式为下面的StrToASCIIStr模块结束判断标志
@DPTR,A
以下为StrToASCIIStr模块,该模块主要功能是实现把一串字符串转换成ASCII串,1
个字节扩展成2个字节。
之所以要这样做,是因为51芯片存储的内容发送到MotorolaD15所决定的。
程序如下:
指向将要ASCII码化的字符串首地址
指向发送/接收短消息缓冲区
StAS0:
JZ
StAS1
HEXtoASCII
调用十六进制转换为ASCII字符的子程序,即把一个字节转换成2个字节
StAS0
StAS1:
A,#1AH
1A-0D表示发送内容结束,此格式为D15模块发送短消息的格式要求
A,#0DH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GSM 短消息 收发 模块 AT89C55 单片机 通信 程序 设计 实现