色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設(shè)計應(yīng)用 > 微控制器的GPRS無線上網(wǎng)方案

          微控制器的GPRS無線上網(wǎng)方案

          作者: 時間:2009-07-17 來源:網(wǎng)絡(luò) 收藏

            其中模塊與微間是通過串行口進行通信的,通信速率最快可以達到115 200b/s。模塊與間的通信協(xié)議是AT命令集,其中大部分命令是符合協(xié)議“AT command set for GSM Mobile Equipment (ME) (GSM 07.07 version 6.4.0 Release 1997)”的,但也有一些是Wavecom自己定義的AT命令。除了串口發(fā)送(TX)、串口接收(RX)之外,微模塊之間還有一些硬件握手信號,如DTR、CTS、DCD等。為了簡化微控制器的控制,硬件設(shè)計時沒有使用全部的硬件握手信號,而只使用數(shù)據(jù)載波檢測(Data Carrier Detect, DCD)和終端準(zhǔn)備(Data Terminal Ready, DTR)信號。DCD信號可以檢測模塊是處于數(shù)據(jù)傳送狀態(tài)還是處于AT命令傳送狀態(tài)。DTR信號用來通知GPRS模塊傳送工作已經(jīng)結(jié)束。

          本文引用地址:http://cafeforensic.com/article/157972.htm

            硬件連接完成后,在進行GPRS操作之前,首先要對GPRS模塊進行一定的設(shè)置。主要的設(shè)置工作有:① 設(shè)置通信波特率,可以使用AT+IPR=38400命令,把波特率設(shè)為38 400b/s或其它合適的波特率,默認的通信速度為9600b/s。② 設(shè)置接入網(wǎng)關(guān),通過AT+ CGD CONT=1, “IP”, “CMNET”命令設(shè)置GPRS接入網(wǎng)關(guān)為移動夢網(wǎng)。③設(shè)置移動終端的類別,通過AT+CGCLASS=“B”設(shè)置移動終端的類別為B類,即同時監(jiān)控多種業(yè)務(wù);但只能運行一種業(yè)務(wù),即在同一時間只能使用GPRS,或者使用GSM的語音通信。④ 測試GPRS服務(wù)是否開通,使用AT+CGACT=1,1命令激活GPRS功能。如果返回OK,則GPRS連接成功;如果返回ERROR,則意味著GPRS失敗。這時應(yīng)檢查一下SIM卡的GPRS業(yè)務(wù)是否已經(jīng)開通,GPRS模塊天線是否安裝正確等問題。(其它相關(guān)的AT命令請參閱文獻3。)

            中國移動在GPRS與Internet網(wǎng)中間建立了許多相當(dāng)于ISP的網(wǎng)關(guān)支持節(jié)點(GGSN),以連接GPRS網(wǎng)與外部的Internet網(wǎng)。GPRS模塊可以通過撥“*99***1#”登錄到GGSN上動態(tài)分配到Internet網(wǎng)的IP地址。其間GPRS模塊與網(wǎng)關(guān)的通信要符合點對點協(xié)議(Point to Point Protocol, PPP),其中身份驗證時用戶名、密碼都為空。使用PPP協(xié)議登錄上之后,就可以通過GGSN接上Internet了。

          3 軟件整體結(jié)構(gòu)

          3.1 軟件層次結(jié)構(gòu)

            程序中的所有代碼都是由C語言編寫的,并采用分層的結(jié)構(gòu),從底到上分別為:串口驅(qū)動層、GPRS模塊驅(qū)動層、PPP協(xié)議層、IP協(xié)議層、UDP協(xié)議層與應(yīng)用層。上層函數(shù)的實現(xiàn)需要應(yīng)用到底層函數(shù),而底層函數(shù)的任務(wù)就是為上層函數(shù)提供服務(wù),最終完成應(yīng)用層任務(wù)――傳送數(shù)據(jù)。各層的主要函數(shù)如圖2所示。


          圖2 軟件層次結(jié)構(gòu)


          3.2 驅(qū)動程序編寫

            首先是串行口驅(qū)動層。它實現(xiàn)打開串口(OpenComm)、關(guān)閉串口(CloseComm)、讀串口數(shù)據(jù)(ReadComm)、寫串口數(shù)據(jù)(WriteComm)等函數(shù)。例如WriteComm函數(shù)向串口發(fā)送一個字節(jié)的數(shù)據(jù),而transmit函數(shù)向串口發(fā)送一個字符串的數(shù)據(jù):

          void WriteComm(char c){
            ES = 0;
            SBUF = c;
            while(TI==0);
            TI=0;
            ES = 1;
          }
          void transmit (char *data) {
            Delay (250);
            while (*data) {
              WriteComm (*data++);
            }
          }

            然后,在這些串口函數(shù)的基礎(chǔ)上編寫GPRS模塊的驅(qū)動函數(shù)。微控制器通過串行口控制GPRS模塊,進行撥號、設(shè)置等操作??刂频姆椒ㄊ遣捎肁T命令。在控制GPRS模塊撥打移動夢網(wǎng)GGSN的登錄號碼“*99***1#”之后,GPRS模塊就轉(zhuǎn)入在線模式(On-Line)。此時微控制器向串行口發(fā)送的所有數(shù)據(jù)都透明地傳送給了GGSN,同樣GGSN的回答也傳回單片機的串行口。當(dāng)數(shù)據(jù)傳送完成后,微控制器需要通知GPRS模塊結(jié)束會話,并從在線模式轉(zhuǎn)回普通的命令模式,這可以通過置高DTR線完成。同時,如果線路由于異常斷開,CD線會回復(fù)到平常的低電平,所以處于在線模式下也要不斷檢測CD線是否處于高電平。根據(jù)這些操作,可以編寫GPRS驅(qū)動函數(shù):初始化GPRS模塊函數(shù)(GPRSInit)、撥號函數(shù)(GPRSDial)、斷開連接函數(shù)(GPRSHangup)、檢測是否處于在線狀態(tài)函數(shù)(GPRSOnline)。其中,GPRS的撥號和掛斷代碼如下:

          BYTE GPRSDial (void) {
            signed char delayCount = 80;
            transmit (ATV0r); // 要求返回數(shù)字表示的回答
            if (!Waitfor (0, 30)) { // 等待 OK 回答
              return -1;
            }
            DTR_ON;
            transmit (ATD*99***1#r); // 撥GGSN的號碼
            GPRSBuffFlush (); // 清空buffer
            // 等待回答
            while ((!GPRSBuffNotEmpty()) (--delayCount > 0)) {
              Delay (250);
            }
            if (delayCount) {
              return GPRSGetch (); // 返回回答的數(shù)字
            }
            return -1; // 沒有返回,錯誤
          }

          void GPRSHangup (void) {
            DTR_ON; // 置高DTR
            Delay (40); // 保持一定時間
            DTR_OFF; // 完成連接的斷開
          }

            這些底層的驅(qū)動函數(shù)將會使上層協(xié)議的編寫很方便,更重要的是,它為我們提供了一個驅(qū)動抽象層。當(dāng)?shù)讓佑布龀龈膭拥臅r候,只需要對底層的驅(qū)動函數(shù)進行改動,而上層函數(shù)的代碼不變。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉