新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機控制GSM模塊TC35的方法

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

        作者: 時間:2016-11-23 來源:網絡 收藏
        介紹一種采用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語音信道編碼。其它功能介紹可參見有關資料!

        本文引用地址:http://www.104case.com/article/201611/320309.htm

        二、AT指令的介紹
        TC35模塊的通訊全部采用AT+xxx完成。基本的AT指令見上篇。

        三、 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);
        /|

        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;
        }
        }
        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 商城县| 交口县| 来宾市| 灵石县| 南京市| 镇原县| 乐昌市| 定日县| 东台市| 大渡口区| 门头沟区| 崇明县| 都昌县| 南平市| 来宾市| 政和县| 福清市| 开原市| 梨树县| 隆化县| 贡山| 甘德县| 璧山县| 依安县| 肃南| 宝丰县| 中阳县| 刚察县| 西峡县| 房产| 吴桥县| 平度市| 景泰县| 林口县| 罗江县| 秦安县| 延川县| 新闻| 长子县| 彭泽县| 寿宁县|