單片機(jī)的MODEM通訊
|
(發(fā)布日期:2008-6-3 9:41:35) 來源:http://www.szmodem.com/news-id-79.asp |
![]() |
|
摘要 探討單片機(jī)之間或單片機(jī)與PC之間采用MODEM的實現(xiàn)方法,以及通訊參數(shù)的設(shè)定、數(shù)據(jù)的接收發(fā)送和部分AT命令的介紹,并給出演示程序。 關(guān)鍵詞 MODEM通訊 AT命令 單片機(jī) MODEM 我們經(jīng)常能見到關(guān)于PC的MODEM通訊的文章,但關(guān)于單片機(jī)MODEM通訊的文章卻不多見。現(xiàn)在將我個人單片機(jī)MODEM通訊的實踐經(jīng)歷寫出來供大家參考。 要寫單片機(jī)的MODEM通訊必須要有兩個背景知識,一個是AT命令集,另一個是通用異步接收發(fā)送器(UART)。 1 AT命令集 下面介紹我通訊程序例子中涉及到的AT命令。 Dn:撥號命令。該命令使MODEM立即進(jìn)入摘機(jī)狀態(tài),并撥出跟在后面的號碼。D命令是基本的撥號命令,它受到其它命令的修飾可構(gòu)成MODEM何時撥號以及如何撥號等操作。 T:音頻撥號。例如,ATDT88888888,其中88888888為電話號碼。 P:脈沖撥號。例如,ATDP88888888,其中88888888為電話號碼。 ,:標(biāo)準(zhǔn)暫停。我們常常碰到撥打外線電話時需要暫停一下,等聽到二次撥號音(外線)之后才能再撥后續(xù)的號碼。缺省時暫停時間為2s(秒),它由S8寄存器指定。 Sn:表示MODEM內(nèi)部的寄存器。 S0:自動應(yīng)答。如果要求MODEM具有自動應(yīng)答特性,則應(yīng)該預(yù)先將MODEM的S0寄存器設(shè)置為非0。 S8:逗號撥號修飾符的暫停時間。該寄存器決定了當(dāng)MODEM在撥號中遇到逗號(,)時應(yīng)該暫停的時間。 2 通用異步接收發(fā)送器UART 深入理解UART內(nèi)部結(jié)構(gòu)以及內(nèi)部寄存器各位的含義,詳細(xì)了解數(shù)據(jù)發(fā)送和接收的過程,有助于編寫出高效、穩(wěn)定的程序。現(xiàn)以GM16C550為例介紹編寫基本通訊程序需要知道的寄存器。實際的ADDRESS由具體接線決定。表1為GM16C550寄存器的介紹。 表1 GM16C550寄存器
 (1) 波特率除數(shù)鎖存器(LSB、MSB) 在通訊之前要進(jìn)行一些參數(shù)初始化,波特率是首先應(yīng)該考慮的一項。該寄存器是一個16位的寄存器,分為低8位(LSB)和高8位(MSB)寄存器。 當(dāng)LCR.7=1,且A2A1A0=000/001時,單片機(jī)訪問的是波特率除數(shù)鎖存器LSB/MSB。GM16C550推薦的工作頻率是1.8432MHz。這個頻率除以16就是波特率的時鐘頻率,用于控制發(fā)送和接收數(shù)據(jù)的速度。下面給出波特率除數(shù)鎖存器值的計算公式: 波特率除數(shù)鎖存器值=工作頻率/(16×期望波特率)=1843200/(16×期望波特率) 表2給出了常用波特率與波特率除數(shù)鎖存器值。 表2 波特率除數(shù)鎖存器
 MOV DPTR,#LCR ;除數(shù)鎖定允許 MOV A,#80H MOVX @DPTR, A MOV DPTR,#LSB ;波特率為9600baud MOV A,#0CH MOVX @DPTR, A INC DPTR CLR A MOVX @DPTR, A  圖1 GM16C550與RS232接線圖 (2) 接收緩沖寄存器和發(fā)送保持寄存器(transmit and receive holding register) 當(dāng)LCR.7=0,且A2A1A0=000時,讀操作單片機(jī)訪問接收緩沖寄存器(RHR),寫操作單片機(jī)訪問發(fā)送保持寄存器(THR)。 (3) 中斷允許寄存器(interrupt enable register) 當(dāng)LCR.7=0,且A2A1A0=001時,單片機(jī)訪問中斷允許寄存器(IER)。 IER.0=1,允許接收器數(shù)據(jù)就緒中斷。 IER.1=1,允許發(fā)送保持寄存器為空時中斷。即當(dāng)從發(fā)送保持寄存器把一個字節(jié)移到移位寄存器時,產(chǎn)生一個中斷,使發(fā)送保持寄存器能夠接收下一個字節(jié)。 IER.2=1,表示允許接收有錯信息或間斷條件中斷。 IER.3=1,MODEM狀態(tài)變化中斷。 IER.4~7,沒有使用,設(shè)置為零。 MOV DPTR,#IER MOV A,#01H MOVX @ DPTR ,A (4) FIFO控制寄存器(FIFO control register) 數(shù)據(jù)發(fā)送和接收模式的選擇。GM16C550提供了兩種模式:FIFO和DMA。其中DMA又有兩種模式DMA的模式0、DMA的模式1可供選擇。我的舉例采用默認(rèn)的DMA的模式0。感興趣的朋友可試一試其它模式,這里不再說明。 (5) 中斷狀態(tài)寄存器(interrupt status register) 前面介紹了幾種中斷,它們在各自的條件下產(chǎn)生中斷,UART都會輸出一個高電平的中斷請求信號,觸發(fā)同一個中斷請求。為了具體判斷是哪一種中斷,還應(yīng)該檢測ISR,如表3所列。 表3 中斷狀態(tài)寄存器
 ISR.0=1,表示沒有中斷產(chǎn)生。 ISR.4~5沒有使用。 ISR.6~7,當(dāng)采用FIFO的接收和發(fā)送模式時,這兩位都設(shè)置為1;反之,都設(shè)置為0。 (6) 線路控制寄存器(line control register) LCR.0~1,表示發(fā)送和接收時的字節(jié)長度,如表4所列。 LCR.2,這一位與LCR.0~1共同定義了停止位的長度,如表5所列。 表4 線路控制寄存器LCR.0~1
 表5 線路控制寄存器LCR.2
 LCR.3=1,進(jìn)行奇偶校驗。 LCR.4=0,進(jìn)行奇校驗;LCR.4=1,進(jìn)行偶校驗。 LCR.5=1,奇偶校驗位恒為1或0。 表6為線路控制寄存器LCR.3~5。 表6 線路控制寄存器LCR.3~5
 LCR.6=1,表示允許間斷,即允許發(fā)送器寄存器保持一個完整幀時間以上的空號狀態(tài)。 LCR.7,用于區(qū)分訪問除數(shù)鎖存寄存器還是訪問接收緩沖/發(fā)送保持和中斷允許寄存器。 MOVDPTR,#LCR;通訊傳輸長度為8位,停止位為1, ;偶校驗 MOVA,#1BH MOVX @DPTR,A (7) MODEM控制寄存器(MODEM control register) 這是一個MODEM和外設(shè)接口的寄存器。 MCR.0=1時,強(qiáng)制芯片引腳DTR=0; MCR.0=0時,強(qiáng)制芯片引腳DTR=1。 MCR.1=1時,強(qiáng)制芯片引腳RTS=0; MCR.1=0時,強(qiáng)制芯片引腳RTS=1。 MCR.2=1時,強(qiáng)制芯片引腳OP1=0; MCR.2=0時,強(qiáng)制芯片引腳OP1=1。 MCR.3=1時,強(qiáng)制芯片引腳OP2=0; MCR.2=0時,強(qiáng)制芯片引腳OP2=1。 MCR.4=1時,循環(huán)返回模式,可用于芯片自測。 其它位保留。 MOVDPTR,#MCR;異步串口芯片的DTR、RTS引腳送出邏輯低電平 MOVA,#03H MOVX @DPTR,A (8) 線路狀態(tài)寄存器(line status register) LSR.0:當(dāng)接收移位寄存器接收到的字節(jié)完全移到接收緩沖寄存器時,該位置1。如果讀該寄存器,那么這一位被清零。 LSR.1:出現(xiàn)超越錯時,這一位被置1。讀該寄存器,這一位被清零。 LSR.2:出現(xiàn)奇偶校驗錯時,這一位被置1。讀該寄存器,這一位被清零。 LSR.3:出現(xiàn)停止位不完整、丟失、空號時,這一位被置1。讀該寄存器,這一位被清零。 LSR.4:當(dāng)接收寄存器檢測到空號狀態(tài)已持續(xù)一個完整幀傳輸時間時,這一位被置1。讀該寄存器,這一位被清零。 LSR.5:當(dāng)發(fā)送的字節(jié)從發(fā)送保持寄存器移到發(fā)送移位寄存器時,該位置1。 LSR.6:當(dāng)發(fā)送保持寄存器和發(fā)送移位寄存器都沒用字節(jié)時,該位置1。 LSR.7 |
|
|
深圳市隆星科技有限公司
|
所在區(qū)域: |
廣東.深圳 |
郵編:
518055
|
公司地址: |
深圳市南山區(qū)西麗新光路新源工業(yè)區(qū)24棟四樓 |
聯(lián)系人:陳志 先生 (產(chǎn)品經(jīng)理) |
辦公電話: |
0755-33201582 |
傳真:
空
|
移動電話: |
空
|
電郵:
登錄查看或通過本網(wǎng)留言
|
|
通過中國電氣自動化網(wǎng)在線聯(lián)系該用戶: |
|
|
|
|