本帖最后由 hfuter 于 2014-5-19 12:04 编辑
最近写了个程序,是用MSP4305529单片机控制西门子TC35模块收发短信。本程序是模仿51单片机控制TC35程序而改写的。
实测可用,现拿出来与大家分享。代码见附件(使用的ccs5.4)
TC35.rar
(56.38 KB)
感觉自己搞这个TC35没少走了弯路,故将自己对TC35的实践写成该贴,希望能对以后使用TC35模块的爱好者们有所参考。
大神们看到有什么不对的欢迎拍砖。
电路连接:我用的TC35是将其TX0和RX0脚都引出来了,电路图见下。
其与MSP430f5529单片机的连接方法为:
单片机RXD(我用的USCI_A0,即P3.3口)连TC35的RX0脚,单片机TXD(我用的P3.4口)连TC35的TX0脚,就这样直连可以了。
对了,单片机开发板上的GND连上TC35模块的GND。
本程序实现的功能是:
1、MSP430单片机控制TC35向管理员手机发送英文短信,短信内容为
“User001 is requesting to open the door,if permitted,reply:[password]+ok,else,no-reply.”
大意即为用户001在申请开门,同意的话请回复“密码+ok”,其中密码为6位数字。
2、程序发送完短信之后等待90s,如果在这90s内管理员回复短信,格式为6位密码+ok,即:“654321+ok”
TC35接收到短信后,将短信传至MSP430,由MSP430将接收短信的手机号码和密码进行存储。
3、MSP430将收到的手机号与发送手机号对比,同时将收到的密码与预设密码对比,两者皆符合的情况下,
LED2灯亮。
4、删除短信
本程序通过开发板上的两个LED灯的亮灭来实时显示程序当前执行到了哪一步,这两个LED灯的接法如下:
程序所设全局变量说明:
char timeout; //定时器计时标志 , timeout每加或减一次需要2s char r_data[140]; //串口数据接收缓冲区, char databuf[9]; //短信内容存储,格式为“密码(暂定6位)+ok” char rece_phone[]="11111111111"; //回复短信的手机号读取于此数组 unsigned charr_count; //串口接收数据指针 unsigned charreceive_ok; //模块回应ok标志 char phone_num[]="1xxxxxxxxxx"; //短信发送的目标admin手机号 char password[]="654321+ok"; //管理员admin密码+ok(密码可改) charnews[]="User001 is requesting to open thedoor,if permitted,reply:[password]+ok,else,no-reply.";//发送短信内容
main 函数两个变量: unsigned char i=0; //子程序返回标志寄存变量 unsigned char d=0; //deal()函数返回寄存变量
TC35所设函数说明: void TA0_Init(); //定时器0初始化 void UART_Init(); //串口初始化 unsigned charTC35_Init(); //TC35初始化,,初始化成功函数返回1,失败函数返回0 unsigned charSend_Sms(); //发送短消息,成功函数返回1,失败函数返回0 unsigned charRece_Sms(); //接收短消息,成功函数返回1,失败函数返回0 unsigned charDel_Sms(); //删除短消息,成功函数返回1,失败函数返回0
chardeal(); //处理函数,比对手机号和密码,判断admin是否同意开门,返回1代表同意,返回0不同意
接收短信内容分析:
(手机号已隐去哈)
文本格式:
+CMGR: "RECREAD","+8611111111111",,"14/05/01,11:02:34+32"123456+ok OK
十六进制格式:
0D 0A 2B 43 4D 47 52 3A 20 22 42 45 43 2052 45 41 44 22 2C 22 2B 38 36 31 31 31 31 31 31 31 31 31 31 31 22 2C 2C 22 3134 27 30 35 2F 30 31 2C 31 31 3A 30 32 3A 33 34 2B 33 32 22 0D 0A 31 32 33 3435 36 2B 6F 6B 0D 0A 0D 0A 4F 4B 0D 0A
接收短信分析:
第一行为16进制接收码,第二行为其对应ASCII码字符,第三行为从辅助定位数字(即从最后一个码,到所要找的码,需要数几次)
(红色代表误码,绿色代表接收手机号,蓝色代表短信内容,即六位密码+ok)
|