<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 單片機控制GSM手機的技術及應用

          單片機控制GSM手機的技術及應用

          ——
          作者:防空兵指揮學院 陳慧明 時間:2007-11-12 來源:單片機及嵌入式系統(tǒng)應用 收藏

              隨著科技的飛速發(fā)展和人民生活水平的不斷提高,手機的普及率越來越高,更新也越來越快,價格也越來越便宜。因為手機工作的無線網絡覆蓋范圍廣,在信息傳遞方面性能穩(wěn)定、可靠,所以把手機作為信息傳遞的載體,與結合起來構成應用系統(tǒng)有著強大的生命力和廣闊的應用空間,特別是在遠程數據傳輸、遠程監(jiān)控等領域更是受到電子設計應用工程師的關注。一些專業(yè)刊物也介紹了一些有關這方面的文章,然而由于手機的控制指令復雜,數據格式繁瑣,工程技術人員在進行與手機的硬軟件接口設計時經常會遇到很多困難,有時還無資料可查。筆者在完成一個項目的開發(fā)過程中,針對幾種手機進行了大量的測試和實驗,在此基礎上歸納出一些帶規(guī)律性的結論,對此結論,工程設計人員可拿來即用,大大縮短研發(fā)周期,現在把它公布出來,愿與廣大電子設計人員共享。

          1 硬件接口技術方面

              目前市場上流行的大部分手機幾乎都具有數據引出口,并基本上都支持與GsM短信息相關的AT控制指令(GSM-SMS-AT指令),手機通過數據口以串行方式接收指令并向外輸出數據。理論上講,在數據口中找出RxD、TxD和GND引腳與的串口對應連接即完成了硬件接口。然而,實際上由于不同品牌,不同型號手機的RxD、TxD和GND引腳并非一致,找查這三根線有時也非易事;況且手機數據口的電平既不是RS232電平,也不是TTL電平,與由5V供電的單片機串口還不能直接連接。最簡單可靠的方法是使用手機的數據線建立單片機與手機的硬件連接。手機數據線是專為連接PC機9針串口而設計的,信號電平為標準的RS232電平,只要單片機的串口也轉換為Rs 2 3 2電平,就可方便連接。9針串口引腳定義是固定的,即2腳為TxD(手機發(fā)送),3腳為RxD(手機接收)、5腳為GND。這樣,無論什么型號的手機與單片機的連接就成了固定連接,不需要知道手機數據口信號的具體定義,二者通過數據線的連接電路如圖1所示。 

            需要注意的是:不同手機數據線內部電平轉換芯片的供電方式是不同的,有的是通過手機直接供電;有的是通過竊取PC機串口某些引腳(通常為4、6、7、8引腳)的電流經內部整流濾波穩(wěn)壓后提供。判斷的方法是將數據線一端插到手機數據口,測量另一端2腳與5腳之間的電壓,如果有一7V左右的電壓,則為前者,如果測不出電壓,則為后者,對于后者則需要單片機為4、6、7、8引腳任意一引腳提供+5V電壓即可,如圖1中虛線所示。

          2 軟件接口技術及控制原理

              單片機與手機的軟件接口其實就是單片機通過與GSM短信息有關的AT指令控制手機的控制技術,如讀取手機的短消息內容,刪除短消息內容,列出手機中還未讀的短消息等。關于AT指令的功能描述見參考文獻[1,2]的文章內容,此處不再贅述。然而,執(zhí)行一條指令,也并非某些資料中介紹得那么簡單。事實上,指令的執(zhí)行過程需要單片機與手機交互應答完成,每一次發(fā)送或接收的字節(jié)數有嚴格的規(guī)定,二者必須依據這些規(guī)定實現數據交換,否則,通信就是失敗的。筆者經過對幾種手機反復測試,總結出來一些規(guī)律,如表1所列。

              對幾個問題說明如下。

              ①所有AT指令的指令符號、常數、PDu數據包等都是以ASCII編碼形式傳送的,比如“A”的ASCII編碼為41H,“T”的AscII編碼為54H,數字“0,,的AsCⅡ編碼為30H等。

              ②單片機控制手機工作,必須把手機的短信息工作模式設置為PDu格式,即通過指令AT+cMGF=O完成。
           
             ③單片機向手機發(fā)送每一條指令后,必須以回車符作為該條指令的結束,回車的ASCII編碼為0DH。例如,單片機向手機發(fā)送“AT+CMGF=0”這條指令,其ASCII編碼序列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一個字節(jié)0DH就是回車符,表示該條指令結束,如果沒有這個回車符,手機將不識別這條指令。

              ④當手機接收到一條完整的AT指令后,手機并不立即執(zhí)行這條指令,而是先把剛才接收到的AT指令的全部ASCII編碼序列全部反發(fā)送出來(含0DH),然后發(fā)送一個回車符和換行符的ASCII編碼,即0DH和0AH,最后執(zhí)行該條指令。

              ⑤手機向單片機傳送短信息內容時,其PDu數據包的內容是以十六進制表示的數據,但并不是直接向單片機傳遞十六進制數據,而仍然是把每一位十六進制數以AscII編碼來發(fā)送。這樣,二個字節(jié)的十六進制數就變成4字節(jié)的ASCII碼。但是,PDU數據包中的數據字節(jié)長度部分仍然是實際字節(jié)長度,而不是變成AscII碼的字節(jié)長度,這在編程時應特別注意,否則,接收的數據就不完整。單片機接收到PDU數據包數據后,必須將其恢復成十六進制數據,其算法如下:設a為接收的ASCII碼,b為轉換后的十六進制數。如果a<39H,則b=a-30H;如果a>39H,則b=a-30H-07H,最后把前后兩個數合并為一個字節(jié)。

              ⑥手機向單片機應答PDU數據包的字節(jié)數不包括前9字節(jié)數據(短信服務中心地址),但向單片機傳送PDU數據包時,包括這9個字節(jié)的數據。例如,如果手機應答的PDU數據長度為50,而實際向單片機傳送的十六進制數據為59字節(jié),ASCII碼為2



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();