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模块价格低廉、应用广泛,应用前景诱人,通过与手机模块接口可以很方便的设计出用户所需要的数据接收终端。