最近有個朋友問我單片機如何與手機進行通信,于是我就整理了一篇圖文教程發(fā)給他,順便分享給大家。我們用單片機做產品的時候一般都會遇到單片機要和手機通信的情況,所以今天我們就來學習一下如何用單片機和手機進行通信。
中國聯(lián)通的GSM網(wǎng)是向社會公眾提供通信服務的公用通信網(wǎng),是目前基于時多址技術的移動通信體制中,較成熟完善的也是應用最廣泛的一種系統(tǒng),是我國公眾移動通信網(wǎng)的主要方式。
這個系統(tǒng)是由數(shù)據(jù)接收和發(fā)送部分、數(shù)據(jù)采集部分、終端處理部分三個方面組成。
現(xiàn)在我們就來講講單片機如何與手機進行交互。
整個系統(tǒng)中,三個部分是互相獨立的,但是彼此又相互依賴,共同完成數(shù)據(jù)的傳輸。數(shù)據(jù)收發(fā)模塊在系統(tǒng)中起著承上啟下的作用,是系統(tǒng)的核心模塊。這個模塊以雙單片機為核心,用RS232通信接口,在物理層上實現(xiàn)與GSM模塊的連接。
現(xiàn)在介紹一下它的工作原理是怎樣的
串口控制SMS的工作原理
單片機與GSM模塊一般是采用串行異步通信接口,通信速度可以進行設定,一般為19200bps。采用這種RSM232電纜方式進行連接時,傳輸數(shù)據(jù)的可靠性比較好,通過串行接口集成電路和電平轉換電路與GSM模塊進行連接,電路相對來講比較簡單,其中所涉及的芯片包括單片機89C51與電平轉換芯片MAX232,這是很常見的接口電路。需要注意的是,這個接口通過IIC總線擴展了一個EEPROM存儲器,主要的作用是存儲數(shù)據(jù),而且斷電后信號也不會丟失,這些特性是正式存儲數(shù)據(jù)所必須的。
當前市場上很多手機都支持GSM7.05規(guī)定的AT指令集,該指令集是歐洲通信技術委員單位發(fā)布的,其中就有包含對SMS的控制,通過GSM手機的串行接口,單片機向手機發(fā)布一系列的AT指令,就可以控制GSM模塊收發(fā)SMS的目的。這里需要注意的是用單片機實現(xiàn)時,編程必須要注意它發(fā)送指令與接收到的相應字符都是ASCII碼。
軟件實現(xiàn)的流程講解
上位機模塊和下位機模塊半雙工通信協(xié)議的實現(xiàn)
重發(fā)和應答
上位機模塊和下位機模塊的通信雙方是遵照半雙工通信方式進行的,它的數(shù)據(jù)傳送是雙向的,但是任何時刻只能由其中一方進行數(shù)據(jù)發(fā)送,另一方是數(shù)據(jù)接收,因為EEPROM的寫入和讀出是不可以同時進行的,同時為了避免一方在發(fā)送信息幀時,另一方也會發(fā)送數(shù)據(jù),所以必須要把信道變成半雙工方式,雖然這樣效率不如全雙工方式,但是可以把模塊的工作性能穩(wěn)定。雙方數(shù)據(jù)發(fā)送的順序是:發(fā)——收到且應答——再繼續(xù)發(fā)。
按照這個系統(tǒng)的思路設計,上位機模塊發(fā)送的幀包括確認幀、非確認幀與命令幀;下位機模塊發(fā)送的幀包括確認幀與非確認幀及數(shù)據(jù)幀。其中確認幀和非確認幀發(fā)送數(shù)據(jù)以后待對方回應發(fā)送的應答幀,一次作為繼續(xù)發(fā)送下一幀和重新發(fā)送上一幀的依據(jù)。命令幀和數(shù)據(jù)幀同時發(fā)送信息幀,當一方發(fā)送完成信息幀后,如果接收方收到對方的信息幀而又沒有信息幀需要發(fā)送,那么這種情況就比較簡單了,接收方會根據(jù)信息幀的正確與否以此決定發(fā)送確認幀還是非確認幀,對方也可因此決定是重新發(fā)送還是繼續(xù)發(fā)送,如果此刻接收方也有信息幀的應答幀,那么收方將不立即發(fā)送應答幀,而是馬上發(fā)送本方的信息幀給對方,在收到對方的應答幀后,接收方將依據(jù)應答幀的內容決定是繼續(xù)發(fā)送下一信息幀還是重新發(fā)送原來的信息幀。
延時重發(fā)
雙方在通信的過程當中,有兩個時間T1和T2分別表示重新發(fā)送信息幀的最大延時,T2表示一方發(fā)送信息幀收到對方的應答幀的時間,如果等待應答幀的時間超過了T1,則發(fā)送會重新發(fā)送原來的信息,當收方接收到對方發(fā)送的信息幀,如果對方這時候還有繼續(xù)要發(fā)送的信息幀,接收方此時是不發(fā)送應答幀的,而是發(fā)送信息幀給對方。這種情形就是說,利用對方等待接收方應答幀的時間在T1內,接收方插入發(fā)送本方的信息幀,一樣本方發(fā)送的信息幀也有一個延時重發(fā)的問題。
在規(guī)定的時間內,如果沒有收到對方應答幀,接收方同樣也需要將原來的信息幀重發(fā),規(guī)定的這個時間就是T2,很明顯接收方是利用時間間隙來發(fā)送本方的信息幀的,所以TIT2。
程序設計
主函數(shù)的設計思路
開機上電之后,程序在函數(shù)中運行,GSM模塊和單片機分別會進行初始化,單片機的初始化包括設置串口的工作方式,波特率,并初始化變量和標志位,GSM模塊初始化包括有關閉回顯、重新啟動、設置在TEXT模式下的返回值中不顯示詳細的頭信息,選擇的短信的格式也包括TEXT模式,并且發(fā)串口中斷準備數(shù)據(jù)接收。
GSM返回函數(shù)的處理,用于處理GSM模塊返回參數(shù)的SHELL函數(shù)
SHELL是進入時鐘中斷程序時被調用時,該函數(shù)是對GSM模塊返回的參數(shù)進行處理的函數(shù),根據(jù)系統(tǒng)設計的要求,GSM模塊需要進行以下操作:呼叫對方模塊號碼、閱讀短信、刪除短信、發(fā)送數(shù)據(jù)。基于以上的各種操作指令,操作如果成功GSM模塊會分別返回不同的參數(shù):+CMGR、+CMGS、>、OK。根據(jù)收到各種不用參數(shù),下位機模塊會轉向不同的操作步驟,以此來判斷并改變標志位的值。
處理不同的短信數(shù)據(jù)——EXECDATA函數(shù)
進入時鐘中斷調用SHELL函數(shù)時,如果可以接收到返回的參數(shù)+CMTI,就表示了上位機??煜蛳挛粰C發(fā)送了短信數(shù)據(jù),這個數(shù)據(jù)可能是命令幀,也可能是確認幀或者非確認幀。一般在這種情形下,SHELL函數(shù)需要對短信內容進行分析,并且根據(jù)不同的短信內容進行處理,負責完成以上短信數(shù)據(jù)處理的功能就是EXECDATA函數(shù),EXECDATA函數(shù)是被SHELL函數(shù)調用的,主要是用于分析和處理短信數(shù)據(jù)的。
更多關于單片機與手機交互請關注昇潤科技公眾號:Tunercom168