文档库 最新最全的文档下载
当前位置:文档库 › AT指令与实例讲解

AT指令与实例讲解

AT指令与实例讲解

1.相关的GSM A T指令

与SMS有关的GSM A T指令(from GSM07.05)如表1所示:

表1 相关的GSM A T指令

A T 指令功能

AT+CMGC Send an SMS command(发出一条短消息命令)

AT+CMGD Delete SMS message(删除SIM卡内存的短消息)

AT+CMGF Select SMS message formate(选择短消息信息格式:0-PDU;1-文本)

AT+CMGL List SMS message from preferred store (列出SIM卡中的短消息PDU/text: 0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的)

AT+CMGR Read SMS message(读短消息)

AT+CMGS Send SMS message(发送短消息)AT+CMGW Write SMS message to memory(向SIM 内存中写入待发的短消息)

AT+CMSS Send SMS message from storage(从SIN|M内存中发送短消息)

AT+CNMI New SMS message indications(显示新收到的短消息)

AT+CPMS Preferred SMS message storage(选择短消息内存)

AT+CSCA SMS service center address(短消息中心地址)

AT+CSCB Select cell broadcast messages(选择蜂窝广播消息)

AT+CSMP Set SMS text mode parameters(设置短消息文本模式参数)

AT+CSMS Select Message Service(选择短消息服务)

对短消息的控制共有三种模式:

Block Mode

基于A T命令的PDU Mode

基于A T命令的Text Mode

使用Block模式需要手机生产厂家提供驱动支持,目前,PDU Mode 已取代 Block Mode, Text Mode比较简单,本文重点介绍模式PDU Mode,以西门子公司的产品TC35T为例。

TC35基本命令

1.设置短消息中心

AT+CSCA=“+86138********”回车(具体的号码由当地的运营商决定。)

2.接收短消息

+CMTI:“SM”,X (X表示接收短消息的SIM卡存储号码)

AT+CMGR=X回车 (从X存储区读短消息)

AT+CMGD=X回车 (从X存储区删除短消息) 3.发送短消息

AT+CMGF=1回车(采用文本格式发送,如用PDU 格式,则A T+CMGF=0)

AT+CMGS=“+8613xxxxxxxxx”回车

>输入短消息。Crtl+Z结束并发送。

4.重要的指令

ATZ;E 回车 Echo OFF

ATZ;E1回车 Echo ON

AT+CREG?回车回答x(X=2脱网,X=1注册,X=0状态不明)

AT+COPS?回车表示SIM卡是否被网络接受

AT+COPS=?回车显示所有可用的网络。

5.建立语音呼叫

AT+CREG?回车(是否网络注册)

ATD13xxxxxxxxx;回车(语音呼叫和数据呼叫建立的区别在于号码后所接的分号上)

6.改变并保存参数

AT+IPR=2400 回车(改变RS232口的速率至2400bps)

AT&W 回车 (保存已改参数)

7.输入PIN码

AT+CPIN=“xxxx”

2.计算机与TC35T的通信

(1)RS232串口连接

由于TC35T自带RS232串口线,故只需将其连接到计算机串口即可。打开超级终端,选择相应的串口,将端口参数设置为:速率—4800、奇偶校验位—无、数据位—8、停止位—1、流量控制—硬件。(2)连接测试

输入“AT”然后回车,屏幕上返回“OK”表明计算机与TC35T已连接成功,TC35T能够正常工作。这时就可以测试各类A T命令。

当测试命令“AT+CMGS=?”时,如果返回“OK”标明TC35T支持该指令。该指令的完整语法如下:

如果此时TC35T处于PDU Mode(即“AT+CMGF?”返回“0”)

AT+CMGS=PDU is given<^Z/ESC>

如果短消息发送成功,则返回“OK”,并显示信息号:+CMGS: [,]

如果短消息发送失败,则返回如下信息号:

+CMS ERROR:

如果此时TC35T处于Text Mode(即“A T+CMGF?”返回“1”)

AT+CMGS=[,toda]text is entered<^Z/ESC>

如果短消息发送成功,则返回“OK”,并显示信息号:+CMGS: [,]

如果短消息发送失败,则返回如下信息号:

+CMS ERROR:

另外,由于使用的是TC35T,当有新的短消息到来时,需要TC35T产生提示,使用指令“AT+CNMI”。该指令的完整语法如下:

AT+CNMI=[][,][,][,][,]

如果有新的短消息来到,则TC35T将自动返回下列提示:

+CMTI: “SM”,

此时读出,然后用“AT+CMGR”指令即可读出短消息内容。

3.PDU数据格式分析:

例如,我们要将字符“Hi”字符发送到目的地“138********”

PDU字符串为:

08 91 683108701305F0 11 00 0D 91 3128738839F5 0

0 00 00 02 C834

⑴08—短信息中心地址长度。指(91)+(683108701305F0)的长度。

⑵91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加…+?号;此外还有其它数值,但91最常用。

91—10010001

BIT No. 7 6 5 4 3 2 1 0

Name 1 数值类型号码鉴别数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展;

号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;

⑶683108701305F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800731500(字母F 是指长度减1)。这需要根据不同的地域作相应的修改。

⑴、⑵、⑶通称短消息中心地址(Address of the SMSC)。

⑷11—文件头字节。

11&h=00010001&b

BIT No. 7 6 5 4 3 2 1 0

Name TP-RP TP-UDHI TP-SPR TP-VFP TP-R D TP-MTI

Value 0 0 0 1 0 0 0 1

应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置

用户数据头标识—TP-UDHL (TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息

状态报告要求—TP-SPR (TP-Status-Report-Request):0—需要报告; 1—不需要报告

有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准);01—预留; 11—提供8位字节的一半(Semi-Octet Represented)

拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制

信息类型提示—TP-MTI (TP-Message-Type-Indicator):00—读出(Deliver); 01—提交(Submit)

⑸00—信息类型(TP-Message-Reference)

⑹0B—被叫号码长度。

⑺91—被叫号码类型(同⑵)。

⑻3128738839F5—被叫号码,经过了位移处理,实际号码为“138********”。

⑹、⑺、⑻通称目的地址(TP-Destination-Address)。

⑼00—协议标识TP-PID(TP-Protocol-Identifier)BIT No. 7 6 5 4 3 2 1 0

Bit No.7与Bit No.6: 00—如下面定义的分配Bit No.0—Bit No.5;01—参见GSM03.40协议标识完全定义;10—预留;11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。

一般将这两位置为00。

Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。

Bit No.0—Bits No.4:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理系统;10010—Email。

⑽00—数据编码方案TP-DCS (TP-Data-Coding-Scheme)

BIT No. 7 6 5 4 3 2 1 0

Bit No.7与Bit No.6 :一般设置为00;Bit No.5:0—文本未压缩,1—文本用GSM标准压缩算法压缩;Bit No.4:0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息,1—表示Bit No.1、Bit No.0含有信息类型信息;Bit No.3与Bit No.2:00—默认的字母表,01—8bit,10—USC2(16bit),11—预留;Bit No.1与Bit No.0:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3。

⑾00—有效期TP-VP(TP-Valid-Period)

VP value(&h) 相应的有效期

00 to 8F (VP+1)*5 分钟

90 to A7 12小时+(VP-143)*30分钟

A8 to C4 (VP-166)*1天

C5 to FF (VP-192)*1 周

⑿02—用户数据长度TP-UDL (TP-User-Data-Length)

⒀C834—用户数据TP-UD(TP-User-Data)“Hi”4.短消息编码

设需要发送的短消息内容为“Hi”,使用的GSM字符集为7位编码。首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:H翻译成1001000,i翻译成1101001,显然H的二进制编码不足八位,那么就将i的最后一位补足到H的前面。那么就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100(34),于是“Hi”就变成了两个八进制数 C8 34。5.短消息的发送与接收案例鉴于TC35(T)支持TEXT格式,我们在试验中主要测试该格式。

(1)设置短消息中心

AT+CSCA="+86138********"(短消息中心);

(2)设置短消息发送格式

AT+CMGF=1 (1-TEXT; 0-PDU);

(3)发送短消息(短消息内容为“test”)

AT+CMGS="138********"(目的地址)

> test ^z ;

(4)设置短消息到达自动提示: 设置短消息到达提示当短消息被接收,将获取指令: +CMTI:"SM",INDEX(信息存储位置)

AT+CNMI=1,1,0,0,1();

(5)获取短消息内容(Once more),假设INDEX=8。

AT+CMGR=8

返回信息如下:

+CMGR: "REC UNREAD","+86138********",,"01/ 07/16,15:37:28+32",Once more

6.注意事项

(1)短消息中心一般不会改动,如果短消息中心号码改动,在使用“AT+CSCA”语句时,记住TC35要重新启动,否则TC35不能正常工作(TC35T不存在此问题)。

(2)某些SIM卡带有密码,启动时需要输入密码。

汉字编码

区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。由此可见,区位码与汉字或符号之间是一一对应的。

内码:汉字的内码是指在计算机中表示汉字的编码。机内码与区位码稍有区别。为什么不直接用区位码作为计算机内的编码呢? 这是因为汉字的区码和位码的范围都在1到94内, 如果直接用区位码作机内码, 就

会与基本ASCII码冲突。汉字的内码通常与所使用的计算机系统有关。目前,对于国内大多数的计算机系统,一个汉字的内码占两个字节,分别称为高位字节与低位字节,且这两位字节与区位码的关系如下: 内码高位=区码+A0H(H表示十六进制) 内码低位=位码+A0H 例如,汉字"啊"的区位码为"1601",区码和位码分别用十六进制表示即为"1001H",则它的内码为"B0A1H"。其中B0H为内码的高位字节,A1H为内码的低位字节。

汉字国标交换码和机内码

西文处理系统的交换码和机内码均为ASCII,用一个字节表示,一般只用低七位。1981年我国在国标GB2312-80制定了汉字交换码也称为国标交换码(简称国标码)。在国标码中,一个汉字用两个字节表示,每个字节也只用其中的七位,每个字节的取值范围和94个可打印的ASCII字符的取值范围相同(21H-7EH),涵盖了一、二级汉字和符号。为了避免ASCII码和国标码同时使用时产生二义性问题,大部分汉字系统一般都采用将国标码每个字节高位置“1”作为汉字机内码。这样既解决了汉字机内码与西文机内码之间的二义性,又使汉字机内码与国标码具有极简单的对应关系。区位码、国标码和机内码之间的关系可以概括为(区位码的十六进制表示)+2020H=国标码,国标码+8080H=机内码,以汉字“大”为例,“大”字的区内码为2083,将其转换为十六进制表示为1453H,加上2020H得到国标码3473H,再加上8080H得到机内码为B4F3H。

单片机控制GSM模块

TC35的方法

介绍一种采用GSM的短信功能,可以使某些控制达到“零距离"。由于短信息的费用低廉,可以取代传统的无线遥控。现在详细介绍一种采用单片机(MCS51系列)控制TC35(廉价的GSM模块)发送、接收GSM短信的方法。

一、TC35的控制简介

TC35是Siemens公司推出的新-代无线通信GSM模块。自带RS232通讯接口,可以方便地与PC机、单片机连机通讯。可以快速、安全、可靠地实现系统方案中的数据、语音传输、短消息服务(Short Message Service)和传真。TC35模块的工作电压为3.3—5.5V,可以工作在900MHz和1800MHz两个频段,所在频段功耗分别为2w(900M)和1w(1800M)。

模块有AT命令集接口,支持文本和PDU模式的短消息、第三组的二类传真、以及2.4k,4.8k,9.6k的非透明模式。此外,该模块还具有电话簿功能、多方通话,漫游检测功能,常用工作模式有省电模式、IDLE、TALK 等模式。通过独特的40引脚的ZIF连接器,实现电源连接、指令、数据、语音信号、及控制信号的双向传输。通过ZIF连接器及50Ω天线连接器,可分别连接SIM卡支架和天线。

TC35模块主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。在不需要额外硬件电路的前提下,可支持FR、HR和EFR 语音信道编码。其它功能介绍可参见有关资料!

二、AT指令的介绍

TC35模块的通讯全部采用AT+xxx完成。基本的AT指令见:/html/zonghejishu/2007/0514/2078.html

三、TC35的连机方法

任何一个TC35模块首次使用时,必须要测试其工作是否正常,由于其自带RS232接口,所以我们可以用PC机的串口调试软件进行调试。

1、启动串口调试软件(见界面)

串口调试软件有许多,可以使用任意一款软件,也可以使用WINDOWS自带的“超级终端"。设置波特率19.2k,这是TC35的默认

波特率,首次连机可以从2400~57.6k不断测试,直到TC35有应答。

2、发送“AT"’

AT 回车

3、改变波特率“A T+IPS=XXXX"

TC35的默认波特率是19.2k,实际使用时,可以改成9600或38.4K,方法如下:

A T+IPR=9600 回车

4、短信模式的设置

(GSM模块的短信模式有2种。第1种是:TEXT模式;第2种是:PDU模式。PDU模式可以采用unicode编码发送英文、汉字。但合成PDU码比较复杂,而TEXT模式只能发送英文,但无须编码。实际使用可以采用TEXT模式。

设置如下:

A T+CMFG=1 回车

5、短信模式简介

SMS是由Etsi所制定的一个规范(GSM 03.40和GSM 03.38)。当使用7-bits编码的时候它可以发送最多160个字符;8-bit编码(最多140个字符)。通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart messaging中的图片和铃声和OTA W AP设置。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS和警告SMS)。

有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit)模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集和不同的编码方式。

6、短信读取方法

A T+CMGR=X回车

如果有短信息,TC35回应:

AT+CMGR=1 +CMGR:"REC UNREAD","133********",,"04/08/17,22:24:32+02

testOK

OK

短信息分析:

“test OK"就是短信息内容。

短信息的存储容量与Ic卡有关,序号从1-N。REC UNREAD":代表短信息未读过。REC READ" :已读过。133********" :接收的手机号码。

04/08/17,22:24:32+02":短信息发送的时间。

无短信息,TC35回应:

AT+CMGR=3

+CMGR:0,,0

7、短信的删除方法

AT+CMGD=1回车

8、短信的发送方法

短信息的发送分成两步:

1:发送接收的手机号码,等待应答:“>"

AT+CMGS="133********"回车(目的地址)

TC35回应:

AT+CMGS="133********" >

2:输入短信息的内容(只能是英文):Test 回车

四、单片机控制TC35的方法

上面介绍了用PC机控制TC35的方法,我们只需将PC机输出的控制命令转化成单片机输出的指令即可。

1、硬件连接

电路见下图只需设计一个TTL转RS232电平电路,连接到MCU的UART口,另一端直接连接到TC35。

2、指令输出的方法

单片机串口设置成模式1(9600,N,8,1),依次将AT+xxx以ASCII码形式输出到UART口;接收TC35的数据采用中断方式。这里给出详细的程序清单(Keil C51),不介绍编程的方法。程序见下:

//AT指令的定义

char code AT_Tc35[]="A T+"; //连机

char code Bps_Tc35[]="IPR=38400"; //波特率

char code Text_Tc35[]="CMGF=1"; //文本模式

char code Read_Tc35[]="CMGR="; //读信息

char code Erase_Tc35[]="CMGD="; //删除信息

char code Send_Tc35[]="CMGS="; //发送信息

char code Creg_Tc35[]="CREG?"; //注册

//模式设置

void UART_Init(void)

{

SCON=0x50; //01010000b=>1模式scon,#11011000b;

ES=l;

}

//发送-个ASCII

void SendASC(unsigned char ASC)

{

bit es;

es=ES;

ES=0;//关闭中断

TI=0;

SBUF=ASC;

while(!TI);

TI=0;

ES=es;

)

//发送命令到TC35

void SendToTc35(unsigned char* p,unsigned char Long)

{

while(Long--)

{

SendASC(*p++);

} }

// 通讯中断接收程序

void Rs485_Do(void) interrupt 4 using 1 {

if(RI==l)

{

RI=0;

RsBuq[RsPoint++]=SBUF;

if fRsPoint>=sizeof(RsBuf))

{

RsPoint=0;//FlagRs485=0;

} //数据处理

}

}

// 发送AT连机命令

char code AT_Code[]="OK";

void Send_AT(void)

{

unsigned char *p;

while(1)

{

ClrRsBuf(RsBuf,sizeof(RsBuf));

SendToTc35(AT_Tc35,2); //"AT"

SendASC(OVER);

//************等待应答“ok"

ES=1; //必须中断

Delay(50);

P=strstr(RsBuf,AT_Code);

if(p!=NULL) break;

}

)

//发送bps连机命令

void Send_BPS(void)

{

SendToTc35(AT_Tc35,3); //"AT+"

SendToTc35(Bps_Tc35,sizeof(Bps_Tc35)-1);// "IPR=19200"

SendASC(OVER);

}

//设置文本

void SetText(void)

{

SendToTc35(AT_Tc35,3); //"AT+" SendToTc35(Text_tc35,sizeof(Text_tc35)-1);// "IPR=19200"

SendASC(OVER);

Delay(100):

//删除短信息

unsigned char EraseMsg(unsigned char index) {

unsigned char *p,i=20;

SendToTc35(AT_Tc35,3); //"AT+"

SendToTc35(Erase_Tc35,sizeof(Erase_Tc35)-1);//"IPR=19200"

SendASC(index);

SendASC(OVER);

ES=1;

while(i--)

{

Delay(200);

P=strstr(RsBuf,AT_Code);

if(P!=NULL) {return 1;}

}

return 0;

}

//读取短信息

char code Ask_No[]="+CMGR:0,,0";

char code ERROR{]="ERROR";

char code Ask_Tc35[]="/";

unsigned char ReadMsg(unsigned char index) {

unsigned char *p,i;

unsigned char Buf[40];

SendToTc35(AT_Tc35,3); //"AT+" SendToTc35(Read_Tc35,sizeof(Read_Tc35)-1 );

SendASC(index);

SendASC(OVER);

ES=1; //必须中断

Delay(600); /*-------

ES=0:

SendToTc35(RsBuf,99);

ES=1;

*/|

p=strstr(RsBuf,ERROR);

if(P!=NULL)

{

Send_AT();return 0;

p=strstr(RsBuf,Ask_No);//无信息

if(p!=NULL)return 0;

p=strstr(RsBuf,Ask_Tc35);//20个字节后是MSG

if(p==NULL) return 0;

p=p+21;

for(i=0;i

{

Buf[i]=*p++;

}

if(EraseMsg(index)==0) return 0;

p=strcpy(RsBuf,Buf); //放回RsBuf

return 1;

)

//发送短信息

char code SK[]=">";

void SendMsgStart(void)

{

unsigned char *p,i=10;

SendToTc35(AT_Tc35,3); //"AT+" SendToTc35(Send_Tc35,sizeof(Send_Tc35)-1 );//"IPR=19200"

SendASC(YinHao);

SendToTc35(Mp1.Hand,sizeof(Mp1.Hand)); //"AT+"

SendASC(YinHao);

SendASC(OVER);

ES=1;

while(i--)

{

Delay(100); //Get">"

p=strstr(RsBuf,SK);//">"

if(p!=NULL)

{

ClrRsBuf(RsBuf,sizeof(RsBuf));

Delay(150); //Get">"

break;

}

}

}

相关文档