3 系统软件设计与实现
系统软件设计就在于单片机的编程,通过向mg801a模块发送不同的at指令来实现不同的功能,如读取短信息的内容,删除短信息、列出模块中还未读的短信息等。下面主要介绍at指令和双串口cpu同时通讯的实现。
3.1 at指令
at(attention)指令最初由hayes公司推出,主要用于对调制解调器的控制,现在已演化为一种标准,所有移动模块都支持at指令。虽然不同厂家的手机模块都参照gsm协议,但格式还是有所不同,开发过程中一定要认真参考厂家给的资料。同时在开发过程中发现指令的执行过程需要单片机与手机交互应答完成,每一次发送或接收的字节数有严格的规定,二者必须依据这些规定实现数据交换,否则,通信就是失败的。笔者经过对几种手机模块反复测试,总结出一些规律,以下是对几个问题的说明:
所有at指令的指令符号、常数、pdu数据包等都是以ascⅱ编码形式传送的,比如“a”的ascⅱ编码为41h,“t”的ascⅱ编码为54h数字,“o”的ascⅱ编码为30h等。
单片机控制手机工作,如果要发送中文短信,使用的是gsm模块必须短信息工作模式设置为pdu格式,即通过指令at+cmgf=0完成。使用mg801a模块必须设置为中文unICode码格式,即通过at+zmsgl=6,4完成。
单片机向手机发送一条指令后,必须以回车符作为该条指令的结束,回车的ascⅱ编码为odh,回车符表示该条指令结束,如果没有这个回车符,手机将不识别这条指令。
当手机接收到一条完整的at指令后,手机并不立即执行这条指令,而是:先把刚才接收到的at指令的全部ascⅱ编码序列全部反发送出来(含odh);其次发送一个回车符和换行符的ascⅱ编码,即odh和oah;最后才执行该条指令。
3.2 单片机双串口同时通讯的实现
由于c8051f020单片机实现和上位机与手机模块的同时通讯,所以采用一片具有双串口的cpu,该cpu具有2个串口和2个串口中断,串口1中断处理与上位机的通讯,串口2中断处理与手机模块的通讯,串口1中断设置为高优先级中断,每接收到或发送完1个字节都进人中断处理,处理完毕立即退出中断,通讯波特率都为115 200 b/s,1个起始位和1个停止位。
编程语言采用c51语言,尽量采用模块化、结构化、对象化编程,使串口通讯程序和其他程序之间、2个串口通讯程序之间相互独立,以减少发生错误的机会。另外在串口通讯中,还要增加通讯超时处理机制,中断处理中要注意数据和程序状态的保护,完善出错处理程序等。同时要解决时间冲突问题,硬件接收或发送一个字节的时间与软件接收或发送一个字节的时间有很大的不同,这就为双串口同时通讯提供了条件。其次要解决数据冲突问题,2个串口通讯分别使用各自的接收发送数据缓冲区和控制变量,以减少中断保护数据量和防止数据冲突。当主程序、串口2中断处理程序和其他中断处理程序向存储器(与上位机的通讯用存储器)中写数据时,需在尽量短的时间内关闭串口1中断,关闭中断时间应小于几μs,防止其他程序数据没有写完之前串口1读此数据。
4 结语
随着通讯技术、微电子技术的进步和智能化建设的发展,越来越多的设备,如家电、电表、工业终端等,都有了联网的需要,并且有大量的数据需要传输;而且在很多场合有线连接的方式已经不能满足人们的需要。无线接入以其方便、快捷和廉价的优势,弥补了有线方式的不足。覆盖全国的cDMA网络已经成为一种可持续利用和开发的资源,因而在此基础上利用cdma的短信息业务开发出满足需要的无线接入产品已成为可能。