GSM通信模塊與單片機(jī)通信的區(qū)別在哪?應(yīng)用有哪些?
GSM模塊用于許多基于GSM(全球移動(dòng)通信系統(tǒng))技術(shù)的通信設(shè)備。它用于使用計(jì)算機(jī)與 GSM 網(wǎng)絡(luò)進(jìn)行交互。GSM 模塊只理解AT 指令,并能做出相應(yīng)的響應(yīng)。最基本的命令是“AT”,如果 GSM 響應(yīng) OK,那么它工作正常,否則它響應(yīng)“ERROR”。AT 指令有很多種,例如 ATA 接聽(tīng)電話(huà),ATD 撥打電話(huà),AT+CMGR 讀取信息,AT+CMGS 發(fā)送短信等。AT 指令后面應(yīng)該有回車(chē),即 \r(十六進(jìn)制的 0D ),如“AT+CMGS\r”。我們可以使用這些命令來(lái)使用 GSM 模塊。
GSM 與 8051 接口
我們可以不使用 PC,而是使用單片機(jī)與 GSM 模塊進(jìn)行交互,在LCD上顯示 GSM 模塊的響應(yīng)。因此,我們將GSM 與 單片機(jī)(AT89S52) 連接。
GSM 與 8051 的連接非常簡(jiǎn)單,我們只需要從單片機(jī)發(fā)送 AT 命令并接收來(lái)自 GSM 的響應(yīng)并顯示在 LCD 上。我們可以使用單片機(jī)的串口與 GSM 通信,即使用 PIN 10(RXD)和 11(TXD)。
首先,我們需要將 LCD 連接到單片機(jī),然后我們需要將GSM模塊連接單片機(jī)?,F(xiàn)在我們需要注意一下。首先,您需要檢查您的 GSM 模塊是否能夠在 TTL 邏輯下工作,或者它只能與 RS232 一起工作?;旧?,如果您的模塊板上有 RX 和 TX(帶 GND)引腳,那么它可以在 TTL 邏輯上工作。如果它沒(méi)有任何RX,TX引腳并且只有一個(gè)RS232端口(9針的串行端口),那么您需要使用MAX232 IC將串行端口連接到微控制器。基本上MAX232用于將串行數(shù)據(jù)轉(zhuǎn)換為 TTL 邏輯,因?yàn)槲⒖刂破髦荒茉?TTL 邏輯上工作。但如果GSM模塊有RX、TX引腳,則不需要使用MAX232或任何串口轉(zhuǎn)換器,可以直接將GSM的RX連接到8051的TX(PIN 11),將GSM的TX連接到8051的RX(PIN 10) 。在我們的例子中,使用了 SIM900A 模塊,它有 RX、TX 引腳,所以我沒(méi)有使用 MAX232。
GSM 與 AT89S52單片機(jī)連接的電路圖如上圖所示。連接后,我們只需要編寫(xiě)程序?qū)?AT 命令發(fā)送到 GSM 并在 LCD 上接收其響應(yīng)。如上所述,AT 命令有很多,但本文的范圍只是測(cè)試GSM 與 8051 連接,因此我們將發(fā)送命令“AT”,后跟“\r”(十六進(jìn)制的 0D)。這會(huì)給我們一個(gè)“OK”的響應(yīng)。但是您可以以此擴(kuò)展此程序以使用 GSM 的其他功能。
GPRS模塊和GSM模塊的對(duì)比
GPRS模塊其實(shí)是GSM模塊的一種拓展,傳輸功能及分組數(shù)據(jù)承載是GPRS模塊后續(xù)發(fā)展出來(lái)的。GPRS是通用分組無(wú)線(xiàn)業(yè)務(wù),GSM是全球移動(dòng)通訊系統(tǒng),他們一個(gè)是電路交換,一個(gè)是分組交換屬于兩個(gè)不一樣的系統(tǒng)。
下面我們?cè)诰唧w分析一下GSM模塊和GPRS模塊的幾個(gè)不同點(diǎn)
1.計(jì)算方式的不同
GSM根據(jù)連接時(shí)間收費(fèi)。如果對(duì)視頻通話(huà)和互聯(lián)網(wǎng)接入沒(méi)有要求,7。成本比較。就成本而言,GSM模塊更合適。
2.傳輸距離不同。
GPRS模塊可以在一個(gè)數(shù)據(jù)包中傳輸1024字節(jié),也可以傳輸更多數(shù)據(jù)。如果有自動(dòng)分包協(xié)議,就傳輸距離而言,傳輸數(shù)據(jù)的大小是不同的。
3.傳輸模式的不同。
GSM模塊傳輸相當(dāng)于2G頻段,包括主動(dòng)模式和被動(dòng)模式??梢钥闯?,GPRS模塊的傳輸速度很快。
4所使用的環(huán)境場(chǎng)景不同。
在儀表數(shù)據(jù)采集等應(yīng)用環(huán)境方面,GPSR模塊適用的應(yīng)用環(huán)境是單數(shù)據(jù)量大、頻率高的數(shù)據(jù)采集環(huán)境,GSM模塊適用于數(shù)據(jù)量小、采集間隔大的環(huán)境。
5.訪(fǎng)問(wèn)速度不同。
超過(guò)十倍的速度一直受到大多數(shù)人的青睞。GPRS不僅具有更快的接入速度,而且GSM需要10-30秒。與GSM的9.6kbps接入速度相比,“快”。
GPRS模塊與GSM模塊的區(qū)別。
6.信號(hào)的不同。
就網(wǎng)絡(luò)要求而言,GSM網(wǎng)絡(luò)信號(hào)要求較低,一個(gè)網(wǎng)格信號(hào)發(fā)送信息沒(méi)有問(wèn)題。
前面講解的都是單片機(jī)自身的一些功能,并未涉及單片機(jī)與其它單片機(jī)或者計(jì)算機(jī)之間通信。那么單片機(jī)與其它設(shè)備之間又是怎么通信的呢?通常來(lái)講有兩種通信方式,即并行通信與串行通信。
兩個(gè)單片機(jī)之間的并口通信,以 8 位為例,直接將單片機(jī) 1 的 8 位 I/O 口 P0 與單片機(jī) 2 的 P1 相連接,在同步時(shí)鐘信號(hào)的作用進(jìn)行數(shù)據(jù)的傳輸。以單片機(jī) 1 向單片機(jī) 2 傳輸數(shù)據(jù) 0x7B 為例,單片機(jī) 1 只需將數(shù)據(jù) 0x7B 輸出到 P0 口上,單片機(jī) 2 在同步時(shí)鐘信號(hào)的步調(diào)下將 0x7B 直接讀取。此時(shí)同步時(shí)鐘信號(hào)的周期長(zhǎng)短將決定數(shù)據(jù)傳輸?shù)乃俣?,周期越短,速度越快。并口通信的最大?yōu)點(diǎn)為速度快,一個(gè)時(shí)鐘周期內(nèi)可以傳播一個(gè)字節(jié),甚至多個(gè)字節(jié),缺點(diǎn)為需要占用大量的 I/O 口資源,對(duì)于大多數(shù)資源緊張的應(yīng)用場(chǎng)合來(lái)說(shuō),這種方法是不可取的,而串行通信有效的解決了資源問(wèn)題。
STC89C52 系列單片機(jī)配置了串行方式通信接口,對(duì)應(yīng)單片機(jī)的管腳 P3.0/RxD,串行數(shù)據(jù)接收引腳、P3.1/TxD,串行數(shù)據(jù)發(fā)送引腳。如上圖所示,單片機(jī) 1 的串行發(fā)送引腳 TxD 與單片機(jī) 2 的串行數(shù)據(jù)接收引腳 RxD 相連接,形成了一條單片機(jī) 1 發(fā)送、單片機(jī) 2 接收的數(shù)據(jù)通信鏈路。單片機(jī) 2 的 TxD 與單片機(jī) 1 的 RxD 連接,形成了一條單片機(jī) 2 發(fā)送、單片機(jī) 1 接收數(shù)據(jù)的通信鏈路。單片機(jī) 1 的 GND 與單片機(jī) 2 的 GND 相連接確保了兩個(gè)單片機(jī)在同一電源基準(zhǔn)下工作。接下來(lái)講解單片機(jī)串行通信的工作原理。
同樣以單片機(jī) 1 向單片機(jī) 2 發(fā)送數(shù)據(jù) 0x7B 為例,二進(jìn)制表示為 01111011,單片機(jī)依次 01111011 的最低位‘1’到最高位‘0’依次發(fā)送出去。發(fā)送 1 的時(shí)候?yàn)閷?TxD 拉高’一段時(shí)間’,發(fā)送 0 的時(shí)候?yàn)閷?TxD 拉低‘一段時(shí)間’,即發(fā)送數(shù)據(jù)的時(shí)候后,每發(fā)送一位都持續(xù)‘一段時(shí)間’,發(fā)送 0x7B 的從低位到高位的順序?yàn)椋?->1->0->1->1->1->1->0。“一段時(shí)間”的長(zhǎng)短決定了單片機(jī)的串口傳輸?shù)乃俣?,時(shí)間越短,傳輸速度越快。那么在同樣位傳輸速率的情況下,并行通信速度為串行通信的 8 倍,顯然串行通信以犧牲速度的方式換取了更多的資源,這就是時(shí)間換資源的概念。
上面講解的“一段時(shí)間”實(shí)際上為單片機(jī)串口傳輸 1 位數(shù)據(jù)所耗費(fèi)的時(shí)間,在應(yīng)用中我們常常把 1 秒傳輸多少位來(lái)衡量單片機(jī)串口傳輸速率,這就是波特率的概念。例如通信雙方約定波特率為:9600bps,即每秒傳輸 9600 位(bps:bit per second)。波特率在單片串口通信中為非常重要的參數(shù)指標(biāo),通信雙方只有在約定共同的波特率下才能保證數(shù)據(jù)的正確傳輸。
在單片機(jī)串口通信中,并沒(méi)有同步時(shí)鐘信號(hào)來(lái)統(tǒng)一數(shù)據(jù)發(fā)送和接收,通過(guò)雙方約定的波特率來(lái)保證數(shù)據(jù)的通信。以單片機(jī) 1 向單片機(jī) 2 發(fā)送數(shù)據(jù)為例,假設(shè)雙方設(shè)定的波特率為 9600bps,那么單片機(jī) 2 是怎么知道單片機(jī) 1 什么時(shí)候給它發(fā)送數(shù)據(jù),又是什么時(shí)候結(jié)束的呢?
這里我們引入兩個(gè)重要的概念,起始位和停止位。單片機(jī)在沒(méi)有進(jìn)行串口通信的情況下,數(shù)據(jù)發(fā)送引腳 TxD 為高電平,當(dāng)單片機(jī) 1 需要發(fā)送數(shù)據(jù)時(shí),首先通過(guò) TXD 發(fā)送一位“0”,即把單片機(jī) TxD 從高電平拉低,當(dāng)單片機(jī) 2 檢測(cè)到數(shù)據(jù)接收引腳 RxD 的低電平后便開(kāi)始接收數(shù)據(jù)了。那么這里單片機(jī) 1 發(fā)送的第一位“0”稱(chēng)為起止位。緊接著單片機(jī) 1 將 8 位數(shù)據(jù)依次發(fā)送出去,當(dāng) 8 位數(shù)據(jù)發(fā)送完后,單片機(jī)發(fā)送一位“1”,單片機(jī) 2 接收完 8 位數(shù)據(jù)后,又接收到一位“1”,便知道停止發(fā)送數(shù)據(jù)了,至此便完成了一次數(shù)據(jù)的傳輸。這里單片機(jī) 1 發(fā)送的最后一位“1”稱(chēng)之為停止位。根據(jù)上面的步驟,完成一次數(shù)據(jù)的傳輸,包括起始位、8 位數(shù)據(jù)、停止位,總共 10 位數(shù)據(jù),如下圖所示。這里的 10 位數(shù)據(jù)稱(chēng)之為一幀數(shù)據(jù)。
下面講解一下單片機(jī)串口的工作原理。STC89C52系列單片機(jī)串口內(nèi)部模塊有兩個(gè)獨(dú)立的串行口緩沖寄存器(SBUF),兩個(gè)寄存器均為8位,一個(gè)為發(fā)送SBUF,只能往里寫(xiě)數(shù)據(jù)、另一個(gè)為接收SBUF、只能讀取數(shù)據(jù)。當(dāng)單片機(jī)要通過(guò)串口往外發(fā)送數(shù)據(jù)時(shí),只需要將待發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送SBUF中,通過(guò)TxD引腳將數(shù)據(jù)發(fā)送出去。當(dāng)一幀數(shù)據(jù)發(fā)送完成后,內(nèi)部硬件自動(dòng)置位TI,即TI=1,請(qǐng)求中斷處理。前面講過(guò)串口中斷是單片機(jī)中斷源的一種,產(chǎn)生中斷后,程序進(jìn)入串口中斷函數(shù)。同樣,當(dāng)單片機(jī)接收到一幀數(shù)據(jù)后,內(nèi)部硬件自動(dòng)置位RI,即RI=1,請(qǐng)求串口中斷處理,進(jìn)入串口中斷函數(shù)。讀取接收SBUF可獲得通過(guò)串口接收到的數(shù)據(jù)。
在單片機(jī)內(nèi)部編程中兩個(gè)寄存器共用 SBUF 這個(gè)名字,那么怎么區(qū)分是對(duì)發(fā)送還是接收 SBUF 進(jìn)行操作呢?由于這兩個(gè)寄存器一個(gè)只能讀、另一個(gè)只能寫(xiě)。當(dāng)程序中往 SBUF 中寫(xiě)入數(shù)據(jù)時(shí),則代表操作發(fā)送 SBUF,當(dāng)程序中讀取 SBUF 的數(shù)據(jù)時(shí),則代表操作接收 SBUF。
通過(guò)上面的介紹,無(wú)論是接收到一幀數(shù)據(jù),還是發(fā)送完一幀數(shù)據(jù),程序都會(huì)產(chǎn)生串口中斷,那么在串口中斷程序中是怎么區(qū)分來(lái)的是接收中斷還是發(fā)送中斷呢?在單片機(jī)串口中斷程序開(kāi)始的地方通過(guò)查詢(xún)中斷標(biāo)志位 TI、RI 哪個(gè)為 1 來(lái)判斷串口中斷的類(lèi)型。