SIM300C模块AT命令分析通信系统设计.doc_第1页
SIM300C模块AT命令分析通信系统设计.doc_第2页
SIM300C模块AT命令分析通信系统设计.doc_第3页
SIM300C模块AT命令分析通信系统设计.doc_第4页
SIM300C模块AT命令分析通信系统设计.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国矿业大学徐海学院通信系统设计姓 名: 邹柯 学 号: 22100804 专 业: 信息10-1 题 目: sim300c模块at命令分析 专 题: 通信系统设计 指导教师: 有鹏 设计地点: 电工电子实验室 时 间: 2013.11 2013 年 11 月 通信系统设计训练任务书学生姓名 邹柯 专业年级 信息10-1 学号 22100804 设计日期: 2013年11月11 日 至2013 年 6 月14 日设计题目:sim300c模块at命令分析设计专题题目:通信系统设计设计主要内容和要求:主要内容:功能扩展要求:指导教师签字:摘 要本设计是基于嵌入式系统51单片机的智能控制平台的设计,以以sim300c模块为基本构成,功能包括了短信温度报警等非正常环境并且通过手机短信告知业主的功能。本论文首先阐述了at命令基本定义;然后介绍了基本的at命令,并对相关的at命令进行操作演示,接着又自己设计了针对at命令的一些基本功能和基本相关功能模块程序的介绍,最后对所本次通信系统设计实验进行了简单的心得总结。关键词: at命令、通话功能、短信功能 一、at命令基本定义at即attention,at命令集是从te(terminal equipment)或dte(data terminal equipment)向ta(terminal adapter)或dce(data communication equipment)发送的。通过ta、te发送at命令来控制ms(mobile station)的功能,与gsm网络业务进行交互。 二、at命令介绍(1)通话功能的实现ata(呼叫应答):当模块收到呼叫来电时,设置ring信号并向用户发送“ring”,然后等待用户应答呼叫。用户输入ata命令后,返回ok即完成应答。 ats0(自动应答):s0参数控制自动应答。自动应答参数范围从1255,参数设置得太高的话,有可能在自动应答之前电话就已经挂断。 ats0=2 /2声振铃后自动应答 ok /设置成功 ats0? /查询当前设定值 002 ok /返回当前设定值 ats0=0 /无自动应答 okatd(呼叫拨号):atd命令用于建立会话、数据业务或传真业务,也可以控制补充业务。对于数据或传真业务,用户向模块发送如下ascii字符: atd 为被叫号码对于语音电话,用户向模块发送如下ascii字符: atd; 为被叫号码 ath(呼叫挂断):用户使用ath来切断与远端用户的连接。在有多个电话的情况下,所有的电话连接都被释放(包括正在通话挂起和等待的电话)。 atdl(重拨):用于重拨最近呼叫的用户。ati(显示产品识别信息)。 (2)短信功能的实现at+cmgf(选择消息格式):选择消息为text或pdu格式。用pdu格式,十六进制表示的数据单元,包括所有头信息的短消息,以二进制方式传送(写成十六进制的格式)。用text格式,命令和响应均为ascii字符。 at+cmgs(发送短消息):采用text方式的命令格式:at+cmgs=text is entered (按ctrl+z发送出去/按esc取消) 。采用pdu方式的命令格式:at+cmgs=pdu is entered (按ctrl+z发送出去/按esc取消) at+cmgr(读取短消息):命令格式:at+cmgr=为短消息在内存中的存储位置。at+cmgd(删除短消息):命令格式:at+cmgd=为短消息在内存中的存储位置。(3)其他功能的实现at+csq(信号质量报告):该命令用来检测接收信号的强度指示()和信道误码率(),无论有没有插入sim卡。返回值范围为(031,99)和(07,99)。 查询网络登录状态 1 发送的at命令:at+creg?2 返回消息:a +creg:0,1 -登录成功,本地登录 okb +creg:0,2 -正在搜索网络,正在登录 okc +creg:0,3 -登录失败 okd +creg:0,5 -登录成功,漫游(roaming) ok呼叫转移与控制相关的at命令:at+ccfc=,,号码模式其中,reas代表呼叫转移的原因,mode代表呼叫转移控制命令,号码代表呼叫转移电话号码,号码必须用双引号括起来。 a 设置无条件转移,转移号码为:02584653072u 命令:at+ccfc=0,3,+862584653072”或者:at+ccfc=0,3,02584653072”,129u 应答:+ccfc:l,1,“+862584653072”b 设置遇忙转移,转移号码为:02584653072u 命令:at+ccfc=!.3,“+862584653072”或者:at+ccfc=i,3,02584653072,129u 应答:+ccfc:l,1,“+862584653072”c 查询呼叫转移设置u 命令:at+ccfc=i,2u 应答:+ccfc:1,1,“+862584653072”d 关闭无条件呼叫转移功能u 命令:at+ccfc=0,0u 应答:+ccfc:0,1,“+862584653072”如果前面没有设置无条件呼叫转移,则应答为:u 应答:+ccfc:0,7e 删除无条件呼叫转移号码u 命令:at+ccfc=0,4u 应答:+ccfc:0,7来电显示与控制 1相关的at命令:at+clip=0或12应答:ok当来电显示关闭时,如果来电话,将显示“ring”;当来电显示打开(at+clip=1)时,如果来电话,将按如下方式显示: ring +clip:129或: ring +clip:“+8613950778888”,145或 ring +clip:“02584653072”,129三、sim300c模块1.硬件的连接2. rs232串口连接:四、设计相关程序见附录五、分析总结通过这次课程设计,使我加深了大四专业课知识的学习。让我们能够充分利用所学过的理论知识,同时也增强了自己调试、分析程序能力。通过上网查询和查阅相关书籍资料,使我知道了at命令操作演示工作原理,同时体会到团队合作的重要性。参考文献:1 有鹏.通信系统设计. 2013/11/12附录:1. 实现温度报警:设置报警温度,并且分别向已设定的手机发送短信:#include#include#include #define uchar unsigned char#define uint unsigned int#define fosc_12m/设置晶振#define font_code p0 /字符码写地址#define reg_code p2 /字位码写地址code uchar show_tab= 0xc0,/*0*/ 0xf9,/*1*/ 0xa4,/*2*/ 0xb0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xf8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0x88,/*a*/ 0x83,/*b*/ 0xc6,/*c*/ 0xa1,/*d*/ 0x86,/*e*/ 0x8e /*f*/;code uchar s_tab8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar display_buffer8; /显示缓冲区uchar bit_con; /字位码扫描计数器/uchar code at=at; /握手信号/uchar code ate=ate; /关回显/uchar code at_cnmi=at+cnmi=2,1;/设置这组参数来了新信息存在sim卡/uchar code at_csca=at+csca=+8613800516500;/设置徐州移动服务中心号码/uchar code at_csca=at+csca=+8613010350500;/设置徐州联通服务中心号码/uchar code at_cmgf=at+cmgf=1;/设置短信的格式为text格式/uchar code at_cmgr=at+cmgr=;/读取短信指令/uchar code at_cmgs=at+cmgs=;/发送短信指令/uchar code at_cmgd=at+cmgd=;/发送短信指令/char rxbufrxbuf_n=0;/定义串口接收数据缓冲区/uchar rxpoint;/rx缓冲区指针uchar code phonenum115=+8618652148476;/手机号码uchar code phonenum215=+8618652147478;uchar gsmrcv10 = 0;uchar gsmrcvat10 = 0; uchar gsmrcvcnt = 0;bit gsmatflag=0;bit sendflag;/0代表发送成功;1代表发送失败bit timesendflag;/定时发送短信,10分钟uchar sms_text = luheng sb;uchar temperature;uchar alarm_temp;/报警温度/uchar sms_temp=20,30,40,50,60,70;/uint ms_con,sec_con;/*/void delayus(unsigned char us)/delay us while(-us);/*/void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); /*/void delaysec(unsigned char s)while(s-)delayms(250);delayms(250);delayms(250);delayms(250);void serialini()/初始化程序tmod|=0x20;/定时器1操作模式2:8位自动重载定时器#ifdef fosc_12m /在这里根据晶振大小设置不同的数值初始化串口th1=0xf3;/装入初值,波特率2400tl1=0xf3;#else th1=0xfd;/装入初值,波特率9600tl1=0xfd;#endif /end of soc_12m r1=1;/打开定时器sm0=0;/设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)sm1=1;/(同上)在此模式下,定时器溢出一次就发送一个位的数据ren=1;/串行接收允许位(要先设置sm0sm1再开串行允许)ea=1;/开总中断es=1;/开串行口中断void uartsendasc(uchar d)sbuf=d;while(!ti);ti=0;void uartsendstring(uchar *str)while(*str)uartsendasc(*str) ;str+;void serial_interrupt() interrupt 4 using 1uchar i = 0;if(ri = 1)/收到信息ri=0;/接收中断信号清零,表示将继续接收gsmrcvgsmrcvcnt = sbuf;/uart1send(tmp);gsmrcvcnt+;/收到了完整的at指令,完整的at指令是以0x0a 0x0d结尾的。故作此判断,在接收的过程中是否收到0x0a 0x0dif(gsmrcvgsmrcvcnt-2 = 0x0d & gsmrcvgsmrcvcnt-1 = 0x0a & gsmrcvcnt = 2)/一旦收到0x0a 0x0d,就将数据保存起来。用户主函数的判断。for(i=0; i= 10)/因为内存有限,收到了50个字符还是没有看到0x0a 0x0d的话,就重新开始接收吧。gsmrcvcnt = 0;void sim300ini()while(gsmatflag = 0)uartsendstring(atir);/设置sim300波特率delaysec(1);/延时1秒gsmatflag = 0;while(1)uartsendstring(at+cops?r);delaysec(1);/延时1秒while(gsmatflag = 0);/if(strstr(gsmrcvat, china mobile) )/检测是否收到 china mobile 服务商信息。如果收到证明是连接上网络了if(strstr(gsmrcvat, ok) )/检测是否收到 china unicom 服务商信息。如果收到证明是连接上网络了break;uartsendstring(at+cmgf=1r);/设置使用text格式发送短信,短信有两种格式,另外一种是udpdelaysec(1);/延时3秒uartsendstring(at+cscs=gsmr);/使用gsmdelaysec(1);/延时3秒/uartsendstring(at+csmp=17,167,0,250r);/设备短信模式(手机自动保存模式,平时我们手机发送的是这类)uartsendstring(at+csmp=17,167,0,240r);/设备短信模式(手机非自动保存模式)delaysec(1);/延时3秒p1_2=0;void sim300tx1()uartsendstring(at+cmgs=);/设置发送的号码,自己修改成像发送的号码uartsendasc();uartsendstring(phonenum1);uartsendasc();uartsendasc(r);delaysec(1);/延时3秒uartsendstring(sms_text);/发送的内容。delaysec(1);uartsendasc(temperature/10+0x30);uartsendasc(temperature%10+0x30);uartsendstring(x1ar);/告诉模块内容发送完了。gsmatflag = 0;while(gsmatflag = 0);if(strstr(gsmrcvat, error) )/检测是否收到 +cme error ,如果是这是发送失败,退出重新发送uartsendstring(0x1b);/发送退出指令sendflag=1;else if(strstr(gsmrcvat, ok) )/检测是否收到 +cmgs ,如果收到,表明发送成功了。等待一会重新发送sendflag=0; void sim300tx2()uartsendstring(at+cmgs=);/设置发送的号码,自己修改成像发送的号码uartsendasc();uartsendstring(phonenum2);uartsendasc();uartsendasc(r);delaysec(1);/延时3秒uartsendstring(sms_text);/发送的内容。delaysec(1);uartsendasc(temperature/10+0x30);uartsendasc(temperature%10+0x30);uartsendstring(x1ar);/告诉模块内容发送完了。gsmatflag = 0;while(gsmatflag = 0);if(strstr(gsmrcvat, error) )/检测是否收到 +cme error ,如果是这是发送失败,退出重新发送uartsendstring(0x1b);/发送退出指令sendflag=1;else if(strstr(gsmrcvat, ok) )/检测是否收到 +cmgs ,如果收到,表明发送成功了。等待一会重新发送sendflag=0;unsigned char keyscan(void)unsigned char key,temp;key=0xff;/*串口占用p3=0xff;p3_0=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delayms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=0;break;case 0xb0:key=1;break;case 0xd0:key=2;break;case 0xe0:key=3;break;temp=p3;temp=temp & 0xf0;while(temp!=0xf0)temp=p3;temp=temp & 0xf0;p3=0xff;p3_1=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delayms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=4;break;case 0xb0:key=5;break;case 0xd0:key=6;break;case 0xe0:key=7;break;temp=p3;temp=temp & 0xf0;while(temp!=0xf0)temp=p3;temp=temp & 0xf0;*/p3=0xff;p3_2=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delayms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=0;break;case 0xb0:key=1;break;case 0xd0:key=2;break;case 0xe0:key=3;break;temp=p3;temp=temp & 0xf0;while(temp!=0xf0)temp=p3;temp=temp & 0xf0;p3=0xff;p3_3=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delay ms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=4;break;case 0xb0:key=5;break;case 0xd0:key=6;break;case 0xe0:key=7;break;temp=p3;temp=temp & 0xf0;while(temp!=0xf0)temp=p3;temp=temp & 0xf0;return key;void inittimer0(void) tmod |= 0x01;/ 方式1,16位计数器方式 th0 = 0xfc;/定时初值=65536-n n=1000,定时周期是1ms tl0 = 0x18; ea = 1;/开总中断使能 et0 = 1;/允许定时器t0溢出中断 tr0 = 1; /t0 运行void timer0interrupt(void) interrupt 1 using 1 uint ms_con,sec_con;th0 = 0xfc; tl0 = 0x18;if(timesendflag=0)/定时发送 ms_con+;if(ms_con=1000)ms_con=0;sec_con+;if(sec_con=6)sec_con=0;timesendflag=1;/采用定时扫描方式 reg_code = 1; /先消隐显示 font_code = display_bufferbit_con; /送字形码 reg_code = s_tabbit_con; /送字位 bit_con+;if(bit_con 7) bit_con = 0;void main()uchar keyval;bit temp_insert_flag;uchar tmp2;uchar i=0;inittimer0();reg_code = 0xff;/关闭显示for(bit_con=0;bit_con8;bit_con+) display_bufferbit_con = show_tab0; bit_con = 0; timesendflag=0;serialini();sim300ini();temperature=0;alarm_temp = 0;while(1) keyval=keyscan(); if(keyval=7) sim300tx1(); if(keyval=6) sim300tx2(); 2.向不同手机发送短信:#include#include#include #define uchar unsigned char#define uint unsigned int#define fosc_12m/设置晶振#define font_code p0 /字符码写地址#define reg_code p2 /字位码写地址code uchar show_tab= 0xc0,/*0*/ 0xf9,/*1*/ 0xa4,/*2*/ 0xb0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xf8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0x88,/*a*/ 0x83,/*b*/ 0xc6,/*c*/ 0xa1,/*d*/ 0x86,/*e*/ 0x8e /*f*/;code uchar s_tab8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar display_buffer8; /显示缓冲区uchar bit_con; /字位码扫描计数器/uchar code at=at; /握手信号/uchar code ate=ate; /关回显/uchar code at_cnmi=at+cnmi=2,1;/设置这组参数来了新信息存在sim卡/uchar code at_csca=at+csca=+8613800516500;/设置徐州移动服务中心号码/uchar code at_csca=at+csca=+8613010350500;/设置徐州联通服务中心号码/uchar code at_cmgf=at+cmgf=1;/设置短信的格式为text格式/uchar code at_cmgr=at+cmgr=;/读取短信指令/uchar code at_cmgs=at+cmgs=;/发送短信指令/uchar code at_cmgd=at+cmgd=;/发送短信指令/char rxbufrxbuf_n=0;/定义串口接收数据缓冲区/uchar rxpoint;/rx缓冲区指针uchar code phonenum115=+8618652148476;/手机号码uchar code phonenum215=+8618652147478;uchar gsmrcv10 = 0;uchar gsmrcvat10 = 0; uchar gsmrcvcnt = 0;bit gsmatflag=0;bit sendflag;/0代表发送成功;1代表发送失败bit timesendflag;/定时发送短信,10分钟uchar sms_text = luheng sb;uchar temperature;uchar alarm_temp;/报警温度/uchar sms_temp=20,30,40,50,60,70;/uint ms_con,sec_con;/*/void delayus(unsigned char us)/delay us while(-us);/*/void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); /*/void delaysec(unsigned char s)while(s-)delayms(250);delayms(250);delayms(250);delayms(250);void serialini()/初始化程序tmod|=0x20;/定时器1操作模式2:8位自动重载定时器#ifdef fosc_12m /在这里根据晶振大小设置不同的数值初始化串口th1=0xf3;/装入初值,波特率2400tl1=0xf3;#else th1=0xfd;/装入初值,波特率9600tl1=0xfd;#endif /end of soc_12mtr1=1;/打开定时器sm0=0;/设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)sm1=1;/(同上)在此模式下,定时器溢出一次就发送一个位的数据ren=1;/串行接收允许位(要先设置sm0sm1再开串行允许)ea=1;/开总中断es=1;/开串行口中断void uartsendasc(uchar d)sbuf=d;while(!ti);ti=0;void uartsendstring(uchar *str)while(*str)uartsendasc(*str) ;str+;void serial_interrupt() interrupt 4 using 1uchar i = 0;if(ri = 1)/收到信息ri=0;/接收中断信号清零,表示将继续接收gsmrcvgsmrcvcnt = sbuf;/uart1send(tmp);gsmrcvcnt+;/收到了完整的at指令,完整的at指令是以0x0a 0x0d结尾的。故作此判断,在接收的过程中是否收到0x0a 0x0dif(gsmrcvgsmrcvcnt-2 = 0x0d & gsmrcvgsmrcvcnt-1 = 0x0a & gsmrcvcnt = 2)/一旦收到0x0a 0x0d,就将数据保存起来。用户主函数的判断。for(i=0; i= 10)/因为内存有限,收到了50个字符还是没有看到0x0a 0x0d的话,就重新开始接收吧。gsmrcvcnt = 0;void sim300ini()while(gsmatflag = 0)uartsendstring(atir);/设置sim300波特率delaysec(1);/延时1秒gsmatflag = 0;while(1)uartsendstring(at+cops?r);delaysec(1);/延时1秒while(gsmatflag = 0);/if(strstr(gsmrcvat, china mobile) )/检测是否收到 china mobile 服务商信息。如果收到证明是连接上网络了if(strstr(gsmrcvat, ok) )/检测是否收到 china unicom 服务商信息。如果收到证明是连接上网络了break;uartsendstring(at+cmgf=1r);/设置使用text格式发送短信,短信有两种格式,另外一种是udpdelaysec(1);/延时3秒uartsendstring(at+cscs=gsmr);/使用gsmdelaysec(1);/延时3秒/uartsendstring(at+csmp=17,167,0,250r);/设备短信模式(手机自动保存模式,平时我们手机发送的是这类)uartsendstring(at+csmp=17,167,0,240r);/设备短信模式(手机非自动保存模式)delaysec(1);/延时3秒p1_2=0;void sim300tx1()uartsendstring(at+cmgs=);/设置发送的号码,自己修改成像发送的号码uartsendasc();uartsendstring(phonenum1);uartsendasc();uartsendasc(r);delaysec(1);/延时3秒uartsendstring(sms_text);/发送的内容。delaysec(1);uartsendasc(temperature/10+0x30);uartsendasc(temperature%10+0x30);uartsendstring(x1ar);/告诉模块内容发送完了。gsmatflag = 0;while(gsmatflag = 0);if(strstr(gsmrcvat, error) )/检测是否收到 +cme error ,如果是这是发送失败,退出重新发送uartsendstring(0x1b);/发送退出指令sendflag=1;else if(strstr(gsmrcvat, ok) )/检测是否收到 +cmgs ,如果收到,表明发送成功了。等待一会重新发送sendflag=0; void sim300tx2()uartsendstring(at+cmgs=);/设置发送的号码,自己修改成像发送的号码uartsendasc();uartsendstring(phonenum2);uartsendasc();uartsendasc(r);delaysec(1);/延时3秒uartsendstring(sms_text);/发送的内容。delaysec(1);uartsendasc(temperature/10+0x30);uartsendasc(temperature%10+0x30);uartsendstring(x1ar);/告诉模块内容发送完了。gsmatflag = 0;while(gsmatflag = 0);if(strstr(gsmrcvat, error) )/检测是否收到 +cme error ,如果是这是发送失败,退出重新发送uartsendstring(0x1b);/发送退出指令sendflag=1;else if(strstr(gsmrcvat, ok) )/检测是否收到 +cmgs ,如果收到,表明发送成功了。等待一会重新发送sendflag=0;unsigned char keyscan(void)unsigned char key,temp;key=0xff;/*串口占用p3=0xff;p3_0=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delayms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=0;break;case 0xb0:key=1;break;case 0xd0:key=2;break;case 0xe0:key=3;break;temp=p3;temp=temp & 0xf0;while(temp!=0xf0)temp=p3;temp=temp & 0xf0;p3=0xff;p3_1=0;temp=p3;temp=temp & 0xf0;if (temp!=0xf0)delayms(50);temp=p3;temp=temp & 0xf0;if (temp!=0xf0)temp=p3;temp=temp & 0xf0;switch(temp)case 0x70:key=4;break;case 0xb0:key=5;break;case 0xd0:key=6;break;case 0xe0:key=7;break;temp=p3;temp=temp & 0xf0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论