歡迎您光臨本站 登入註冊首頁

單片機控制GSM模塊TC35的方法

admin @ 2014-03-26 , reply:0

概述

 介紹一種採用GSM的簡訊功能,可以使某些控制達到“零距離"。由於簡訊息的費用低廉,可以取代傳統的無線遙控。現在詳細介紹一種採用單片機(MCS51系列)控制TC35(廉……

  介紹一種 採用GSM的簡訊功能,可以使某些控制達到“零距離"。由於簡訊息的費用低廉,可以取代傳統的無線遙控。現在詳細介紹一種採用單片機(MCS51系列)控制TC35(廉價的GSM模塊)發送、接收GSM簡訊的方法。

一、  TC35的控制簡介
    TC35是Siemeils公司推出的新-代無線通信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、改變波特率“AT+IPS=XXXX"
  TC35的默認波特率是19.2k,實際使用時,可以改成9600或38.4K,方法如下:
  AT+IPR=9600 回車

4、簡訊模式的設置
  (GSM模塊的簡訊模式有2種。第1種是:TEXT模式;第2種是:PDU模式。PDU模式可以採用unicode編碼發送英文、漢字。但合成PDU碼比較複雜,而TEXT模式只能發送英文,但無須編碼。實際使用可以採用TEXT模式。
設置如下:
    AT+CMFG=1 回車

5、簡訊模式簡介
    SMS是由Etsi所制定的一個規範(GSM 03.40和GSM 03.38)。當使用7-bits編碼的時候它可以發送最多160個字元;8-bit編碼(最多140個字元)。通常無法直接通過手機顯示;通常被用來作為數據消息,例如:smart messaging中的圖片和鈴聲和OTA WAP設置。16-bit信息(最多70個字元)被用來顯示Unicode(UCS2)文本信息,可以被大多數的手機所顯示。一個以class 0開頭的16-bit的文本信息將在某些手機上作為Flash SMS顯示(閃爍的SMS和警告SMS)。
    有兩種方式來發送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit)模式。文本模式(可能某些手機不支持)實際上也是一種PDU編碼的一種表現形式。在顯示SMS信息,可能使用不同的字符集和不同的編碼方式。

6、簡訊讀取方法
    AT+CMGR=X回車
如果有簡訊息,TC35回應:
AT+CMGR=1
+CMGR:"REC UNREAD","13307496548",,"04/08/17,22:24:32+02
testOK
OK
簡訊息分析:
“test OK"就是簡訊息內容。
簡訊息的存儲容量與Ic卡有關,序號從1-N。
REC UNREAD":代表簡訊息未讀過。
REC READ"    :已讀過。
13307496548"  :接收的手機號碼。
04/08/17,22:24:32+02":簡訊息發送的時間。
無簡訊息,TC35回應:
AT+CMGR=3
+CMGR:0,,0

7、簡訊的刪除方法
    AT+CMGD=1回車

8、簡訊的發送方法
    簡訊息的發送分成兩步:
    1:發送接收的手機號碼,等待應答:“>"
    AT+CMGS="13307496548"回車(目的地址)
    TC35回應:
    AT+CMGS="13307496548"  >
    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[]="AT+";    //連機
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<sizeof(Buf);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;
}
}
}


[admin via 研發互助社區 ] 單片機控制GSM模塊TC35的方法已經有2231次圍觀

http://cocdig.com/docs/show-post-44881.html