这几天研究了一下pdu信息收发,今天花了大半天写出了不完善的pdu信息发送程序并调试成功了,由于竞赛时间有限,暂时不对这个发短信模块进行优化了,等有时间再重新整理好这个,完善其功能
由于此程序用于初步的测试,并且本人没有多少写程序的经验,下面的东西有点儿乱。
发送的pdu串格式:信息服务中心地址+pdutype+mr+接收方手机地址+pid+dsc+vp+udl+ud
一下是一个发送的pdu串
+8613010670500
13211147412
AT+CMGF=0
AT+CMGS=28
0891683110600705F011000B813112117414F20008A70E6A215757521D59CB53166210529F
分析一下:0891 683110600705F0 1100 0B81 3112117414F2 0008A7 0E 6A215757521D59CB53166210529F
长度类型 奇偶兑换加F的信息中心地址
下面是完整的c语言实现,只能发送信息到11位号码的手机,16位编码no class,发送Unicode文字代码
/*
* GSM模块收发短信打电话,pdu模式
* 德国西门子TC35I GSM 模块
* 基于GSM的单片机无线通讯模块程序
*
* 实现发送pdu短信,只需设置信息中心与收信人电话号码,发送Unitcode码。
* 接收短信,只分辨是否为预置号码的短信,提取信息内容(Unicode码)
* 16bit no class编码
*
* gsm.h
*
* 使用说明: 须设置主人电话与信息中心号码:
* uchar code phone[] = "13211145418"; //主人电话号码
* uchar code sms_center[] = "+8613010200500";//广州联通
*
* GSM开关机控制线:
* sbit gsm_igt = P0^3;// 点火线
* sbit gsm_emergoff = P0^4;//关机线
*
* 波特率设置:
* uchar code AT_IPR[] = "AT+IPR=2400"; //设置波特率
* void gsm_uart_init(void);函数中定时器(定时器1)
*
* 拨打主人电话:
* gsm_call();
*
* 处理主人来信,内容已经存在gsm_sms_ud[]中:
* gsm_sms_host();
*
* 处理非主人信息,内容已经存在gsm_sms_ud[]中:
* gsm_sms_unknow();
*
* 主函数调用模块如下:
* #include <reg52.h>
* #include "gsm.h"
* #define uchar unsigned char
*
* void main(void)
* {
* gsm_init();//初始化gsm(包括串口通信设置)
* while(1){
* gsm_scan(); //处理gsm消息
* }
* }
*
* CopyRight(C) 2010 CrazyLeen <357228736@qq.com>
* 注意: 使用外部函数delay_s(); delay_ms();
* 使用了定时器1
*/
#ifndef __GSM_H__
#define __GSM_H__
#include <reg52.h>
#include <string.h>
#include "delays.h"
#define uchar unsigned char
//===========================================GSM模块=====================================================
//引脚定义
sbit gsm_igt = P0^4;// 点火线
sbit gsm_emergoff = P0^3;//关机线
uchar code phone[] = "13211145418"; //主人电话号码
uchar code sms_center[] = "+8613010200500";//广州联通
//SMU
uchar code gsm_password[] = "0053004D0055";
//============================================内置短信=================================================
//Unicode字符代码for sms
//您好,GSM远程控制系统初始化成功。欢迎使用GSM远程控制系统^_^...
uchar code ud_init_ok[] = "60A8597DFF0C00470053004D8FDC7A0B63A752367CFB7EDF521D59CB53166210529F30026B228FCE4F7F752800470053004D8FDC7A0B63A752367CFB7EDF005E005F