例如,我们要发送指令来读取第一条短信,使用命令:AT+CMGR=1;我们只需要通
过串口发送十六进制数码:0x41,0x54,0x2b,0x43,0x4d,0x47,0x52,0x3d,0x31,0x0d 即可。其
中 0x41 是 A 对应的 ASCII 码,0x54 是 T 对应的 ASCII 码,以此类推,只要将相应英文
字母的 ASCII 码以十六进制的形式发送即可。
3.GSM 通讯模式说明(在实验中得出的一些结论)
鉴于TEXT模式在运行中的易操作性,我们最终选择了这种模式作为我们GSM模块与单
片机之间的通信方式。我们首先编写了一个串口通信程序,使数据能从单片机的接口发送出
来(利用串口调试助手观察)。下一步定义各种要用的AT指令及短信内容,将这些指令通
过串口传给GSM模块,经由模块识别来发送短信内容。我们经过反复测试,总结出来如下
一些规律:
① 所有AT 指令的指令符号、常数、TEXT 数据包等都是以ASCII 编码形式传送的, 比如
“A ” 的ASCII 编码为41H,“T”的ASCII 编码为54H,数字“0”的 ASCII编码为30H
等。
② 单片机控制GSM模块工作,必须把GSM模块的短信息工作模式设置为TEXT(只发英文
和数字)格式,即通过指令 AT+CMGF=1 完成。指令可以写在程序里,也可通过电脑进行
一次设置。以后使用时不需再次设置。
③ 单片机向 GSM 模块发送每一条指令后,必须以回车符作为该条指令的结束,回车的
ASCII 编码为 0DH。例如,单片机向 GSM 模块发送“AT+CMGF=0” 这条指令,其 ASCII
编码序列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、3 0 H、0 D H”,最后一
个字节 0DH 就是回车符,表示该条指令结束,如果没有这个回车符,GSM 模块将不识别
这条指令。指令在程序中的定义方式为 char a[]="AT\r\n";
④GSM 模块向单片机传送短信息内容时,其 TEXT 数据包的内容是以十六进制表示的数据,
但并不是直接向单片机传递十六进制数据,而仍然是把每一位十六进制数以 A S C I I 编码
来发送。这样二个字节的十六进制数就变成 4 字节的 ASCII 码。但是 TEXT 数据包中的数
据字节长度部分仍然是实际字节长度,而不是变成 ASCII 码的字节长度。
⑤GSM 模块执行指令的过程中,需要将短信内容凑够一定的字符数才往外发送,而且中间
有一定时间的延时。