• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 利用GSM短信實現實時數據通信

    利用GSM短信實現實時數據通信

    作者: 時間:2007-07-11 來源:網絡 收藏
    進行遠程數據傳輸,在有些場合是一種比較好的選擇。很多文獻里都介紹了有關模塊的功能、使用,以及AT命令等,但實際應用中還有許多技術細節必須考慮。另外通信是在復雜的環境里進行的,模塊除了收到本系統內部有效的命令、數據外,還會收到一些其他信息、數據,如廣告、移動公司的各種通知等。它們會從以下兩個方面影響數據的正常傳輸。一方面,由于這些的長度、出現的時間及次數都是隨機的,為保證系統的正常工作必須將接收緩沖區設置得較大,否則可能會造成緩沖區的溢出而引起系統崩潰;但一般受系統中使用的MCU資源的限制,緩沖區不可能設置得過大。另一方面,由于這些短信的頻繁出現,信箱很快會被塞滿,如不及時刪除勢必影響系統正常的數據傳輸。本文以Motoro1a公司的G20模塊為例,就的細節和上述問題的解決作一介紹,但對GSM模塊與MCU之間的具體硬件連接、AT命令及短信的格式等不再贅述。

    1 GSM模塊軟硬件接口的幾個問題
    GSM模塊一般帶有標準的異步串行接口,MCU通過該串行接口向GSM模塊發送命令和數據,也通過它接收GSM模塊的信息和數據。

    GSM模塊上電后首先要進行初始化。一般來說,MCU首先可向它發送一AT命令“ATEO”,以消除“回顯”,盡量減少MCU串行口接收到的字符;然后發送AT命令“CNMI”,將GSM模塊設置為“主動通知模式”。這樣當GSM模塊收到短信后便會主動地向串口發送信息“CMTI”通知MCU,表示有新的短信到達。另外,還要檢查信箱中是否存放有短信。若有,則將其一一讀出,然后逐一刪除,以保持信箱中為空。

    GSM模塊開始工作后,每當收到短信時便會主動通過串口向MCU發送信息“CMTI”,MCU接收到此信息后發出AT命令“CMGR”讀取短信,GSM模塊即將該短信通過串行口發送給MCU,由MCU判斷該短信是本系統內的正常數據,還是廣告或其他信息。如果是本系統內的正常數據,則提取該短信中的數據,同時發出AT命令“CGMD”以刪除該短信;如果不是正常數據,則直接刪除該短信。MCU發送短信的過程如下:首先,MCU發送AT命令“CMGS”;然后,等待GSM模塊的允許發送短信的響應信息“>”,MCU收到響應信息后即可發送數據,GSM模塊將數據以短信形式發送;最后,GSM模塊通過串行口向MCU發出短信發送成功與否的信息。上述過程如圖1所示。從GSM模塊中讀出的信息除短信本身外,還包括一些其他信息,如SIM卡號、日期時間、各種間隔/結束字符等。在此過程中MCU的串行口會頻繁地收到大量數據,因此必須要為串口設置足夠的接收緩沖區。但由于MCU內RAM資源有限,為有效地使用資源,可將接收緩沖區設置為環形,緩沖區的大小應保證能夠容納一條最長的短信,再加上其他附加信息的長度。至于發送緩沖區,直接設定為合適大小即可。

    2 具體
    在MCU與GSM模塊通過串行口交換數據的過程中,一般串行口可用中斷方式。MCU發送數據的情況較簡單,故這里的重點是MCU串行口的接收。如前所述,接收緩沖區應設置為環形,由于MCU的存儲器實際上是線性結構,因此環形緩沖區是通過指針操作的。

    初始化時使輸入/輸出指針(datain/dataout)同時指向開始位置,此時緩沖區為“空”。串口接收程序CommIsr()每向緩沖區中放入1個寧符后,使輸入指針向后移動1位;移動到最右邊時,指針應循環移動到緩沖器的左邊;當輸入指針移動到輸出指針右邊l位時,緩沖區為“滿”,此時便不能再向緩沖區中放入字符。短信數據處理程序GetShortMsg()每從緩沖區中取出1個字符,輸出指針移動l位,方法同輸入指針。當輸出、輸入指針重合時,緩沖區為“空”。在工作中串行口接收中斷程序將接收的每1個字符按順序放入緩沖區中,而短信數據處理程序按順序從緩沖區中取出每個字符,兩者形成“生產者和消費者”的關系,如圖2所示。

    工作時系統主程序町以隨時檢查緩沖區中是否有接收的數據(即檢查緩沖區是否為“空”),但為減小數據處理程序的開銷,可在只有接收程序收到一個完整的幀時才使用某種信號或標志通知主程序進行,然后由主程序調用短信數據處理程序處理。通過分析可知,GSM模塊發送信息時一般用連續的兩個字符OxD和OxA結束,故MCU的串口接收程序可以在收到OxD和0xA時建立標志或發信號,數據處理程序檢查到標志后即可獲取、分析緩沖區中的短信。短信中包括發送方的SIM卡號,數據處理程序據此判斷是否為本系統的有效數據,若是則讀取其中的數據。這種方式既可以運用于“前一后臺”方式,也可以用于RTOS方式。


    接收緩沖區的管理涉及的數據和函數如下:


    上述方法在MCS-5l系列單片機上成功地短信實現了數據傳輸,系統工作穩定,占用資源少,未出現信箱堵塞的現象。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 平远县| 成安县| 侯马市| 上饶县| 宜宾市| 建瓯市| 兰西县| 西安市| 闽清县| 葵青区| 葫芦岛市| 紫云| 乡宁县| 南投县| 阜平县| 台安县| 灵武市| 繁峙县| 天津市| 陇西县| 宁远县| 望谟县| 娄底市| 乌兰察布市| 新乐市| 广饶县| 庄河市| 南通市| 元朗区| 镇原县| 东丽区| 奎屯市| 江川县| 宣武区| 孝义市| 常德市| 银川市| 东辽县| 九龙坡区| 乌兰察布市| 二连浩特市|