日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]我們經(jīng)常能見到關(guān)于PC的MODEM通訊的文章,但關(guān)于單片機(jī)MODEM通訊的文章卻不多見?,F(xiàn)在將我個(gè)人單片機(jī)MODEM通訊的實(shí)踐經(jīng)歷寫出來供大家參考。要寫單片機(jī)的MODEM通訊必須要有兩個(gè)背景知識(shí),一個(gè)是AT命令集,另一個(gè)是通用

我們經(jīng)常能見到關(guān)于PC的MODEM通訊的文章,但關(guān)于單片機(jī)MODEM通訊的文章卻不多見?,F(xiàn)在將我個(gè)人單片機(jī)MODEM通訊的實(shí)踐經(jīng)歷寫出來供大家參考。

要寫單片機(jī)的MODEM通訊必須要有兩個(gè)背景知識(shí),一個(gè)是AT命令集,另一個(gè)是通用異步接收發(fā)送器(UART)。

1.AT命令集

下面介紹我通訊程序例子中涉及到的AT命令。
??Dn:撥號(hào)命令。該命令使MODEM立即進(jìn)入摘機(jī)狀態(tài),并撥出跟在后面的號(hào)碼。D命令是基本的撥號(hào)命令,它受到其它命令的修飾可構(gòu)成MODEM何時(shí)撥號(hào)以及如何撥號(hào)等操作。
??T:音頻撥號(hào)。例如,ATDT2245879,其中2245879為電話號(hào)碼。
??P:脈沖撥號(hào)。例如,ATDP2245879,其中2245879為電話號(hào)碼。
??,:標(biāo)準(zhǔn)暫停。我們常常碰到撥打外線電話時(shí)需要暫停一下,等聽到二次撥號(hào)音(外線)之后才能再撥后續(xù)的號(hào)碼。缺省時(shí)暫停時(shí)間為2s(秒),它由S8寄存器指定。
??Sn:表示MODEM內(nèi)部的寄存器。
??S0:自動(dòng)應(yīng)答。如果要求MODEM具有自動(dòng)應(yīng)答特性,則應(yīng)該預(yù)先將MODEM的S0寄存器設(shè)置為非0。
??S8:逗號(hào)撥號(hào)修飾符的暫停時(shí)間。該寄存器決定了當(dāng)MODEM在撥號(hào)中遇到逗號(hào)(,)時(shí)應(yīng)該暫停的時(shí)間。
??2.通用異步接收發(fā)送器UART

深入理解UART內(nèi)部結(jié)構(gòu)以及內(nèi)部寄存器各位的含義,詳細(xì)了解數(shù)據(jù)發(fā)送和接收的過程,有助于編寫出高效、穩(wěn)定的程序?,F(xiàn)以GM16C550為例介紹編寫基本通訊程序需要知道的寄存器。實(shí)際的ADDRESS由具體接線決定。表1為GM16C550寄存器的介紹。
 
表1 GM16C550寄存器

(1) 波特率除數(shù)鎖存器(LSB、MSB)

在通訊之前要進(jìn)行一些參數(shù)初始化,波特率是首先應(yīng)該考慮的一項(xiàng)。該寄存器是一個(gè)16位的寄存器,分為低8位(LSB)和高8位(MSB)寄存器。

當(dāng) LCR.7=1,且A2A1A0=000/001時(shí),單片機(jī)訪問的是波特率除數(shù)鎖存器LSB/MSB。GM16C550推薦的工作頻率是 1.8432MHz。這個(gè)頻率除以16就是波特率的時(shí)鐘頻率,用于控制發(fā)送和接收數(shù)據(jù)的速度。下面給出波特率除數(shù)鎖存器值的計(jì)算公式:

波特率除數(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接線圖。


     圖1 GM16C550與RS232接線圖

(2) 接收緩沖寄存器和發(fā)送保持寄存器(transmit and receive holding register)

當(dāng)LCR.7=0,且A2A1A0=000時(shí),讀操作單片機(jī)訪問接收緩沖寄存器(RHR),寫操作單片機(jī)訪問發(fā)送保持寄存器(THR)。

(3) 中斷允許寄存器(interrupt enable register)

當(dāng)LCR.7=0,且A2A1A0=001時(shí),單片機(jī)訪問中斷允許寄存器(IER)。
??IER.0=1,允許接收器數(shù)據(jù)就緒中斷。
??IER.1=1,允許發(fā)送保持寄存器為空時(shí)中斷。即當(dāng)從發(fā)送保持寄存器把一個(gè)字節(jié)移到移位寄存器時(shí),產(chǎn)生一個(gè)中斷,使發(fā)送保持寄存器能夠接收下一個(gè)字節(jié)。
??IER.2=1,表示允許接收有錯(cuò)信息或間斷條件中斷。
??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)

前面介紹了幾種中斷,它們?cè)诟髯缘臈l件下產(chǎn)生中斷,UART都會(huì)輸出一個(gè)高電平的中斷請(qǐng)求信號(hào),觸發(fā)同一個(gè)中斷請(qǐng)求。為了具體判斷是哪一種中斷,還應(yīng)該檢測(cè)ISR,如表3所列。

表3 中斷狀態(tài)寄存器


       ISR.0=1,表示沒有中斷產(chǎn)生。
??ISR.4~5沒有使用。
??ISR.6~7,當(dāng)采用FIFO的接收和發(fā)送模式時(shí),這兩位都設(shè)置為1;反之,都設(shè)置為0。

(6) 線路控制寄存器(line control register)
?? LCR.0~1,表示發(fā)送和接收時(shí)的字節(jié)長(zhǎng)度,如表4所列。
??LCR.2,這一位與LCR.0~1共同定義了停止位的長(zhǎng)度,如表5所列。

??LCR.6=1,表示允許間斷,即允許發(fā)送器寄存器保持一個(gè)完整幀時(shí)間以上的空號(hào)狀態(tài)。
??LCR.7,用于區(qū)分訪問除數(shù)鎖存寄存器還是訪問接收緩沖/發(fā)送保持和中斷允許寄存器。 MOVDPTR,#LCR;通訊傳輸長(zhǎng)度為8位,停止位為1,;偶校驗(yàn)
MOVA,#1BH
MOVX @DPTR,A

(7) MODEM控制寄存器(MODEM control register)

這是一個(gè)MODEM和外設(shè)接口的寄存器。
??MCR.0=1時(shí),強(qiáng)制芯片引腳DTR=0;
??MCR.0=0時(shí),強(qiáng)制芯片引腳DTR=1。
??MCR.1=1時(shí),強(qiáng)制芯片引腳RTS=0;
??MCR.1=0時(shí),強(qiáng)制芯片引腳RTS=1。
??MCR.2=1時(shí),強(qiáng)制芯片引腳OP1=0;
??MCR.2=0時(shí),強(qiáng)制芯片引腳OP1=1。
??MCR.3=1時(shí),強(qiáng)制芯片引腳OP2=0;
??MCR.2=0時(shí),強(qiáng)制芯片引腳OP2=1。
??MCR.4=1時(shí),循環(huán)返回模式,可用于芯片自測(cè)。
??其它位保留。
MOVDPTR,#MCR;異步串口芯片的DTR、RTS引腳送出邏輯低電平
MOVA,#03H
MOVX @DPTR,A

(8) 線路狀態(tài)寄存器(line status register)
??LSR.0:當(dāng)接收移位寄存器接收到的字節(jié)完全移到接收緩沖寄存器時(shí),該位置1。如果讀該寄存器,那么這一位被清零。
??LSR.1:出現(xiàn)超越錯(cuò)時(shí),這一位被置1。讀該寄存器,這一位被清零。
??LSR.2:出現(xiàn)奇偶校驗(yàn)錯(cuò)時(shí),這一位被置1。讀該寄存器,這一位被清零。
??LSR.3:出現(xiàn)停止位不完整、丟失、空號(hào)時(shí),這一位被置1。讀該寄存器,這一位被清零。
??LSR.4:當(dāng)接收寄存器檢測(cè)到空號(hào)狀態(tài)已持續(xù)一個(gè)完整幀傳輸時(shí)間時(shí),這一位被置1。讀該寄存器,這一位被清零。
??LSR.5:當(dāng)發(fā)送的字節(jié)從發(fā)送保持寄存器移到發(fā)送移位寄存器時(shí),該位置1。
??LSR.6:當(dāng)發(fā)送保持寄存器和發(fā)送移位寄存器都沒用字節(jié)時(shí),該位置1。
??LSR.7:當(dāng)奇偶校驗(yàn)錯(cuò)、幀格式錯(cuò)、空號(hào)錯(cuò)有一個(gè)出現(xiàn)時(shí),該位置1。


Setdata:
MOV DPTR,#LSR
MOVX A,@DPTR
JNB ACC.5,Setdata
MOV A,DataNumber;DataNumber記錄發(fā) ;送字符的個(gè)數(shù)
MOV DPTR,#AtCommand ;AtCommand定義AT命令參數(shù)的起始地址
MOVC A,@A+DPTR
MOV DPTR,#THR ;發(fā)送保持寄存器
MOVX @DPTR,A
INC DataNumber
MOV A,DataNumber
CJNE A,#0BH,Setdata ;發(fā)送11個(gè)字符
AtCommand:DB “A”,“T”,“S”,“0”,“=”,“2”,“S”,“8”, “=”,“5”,0DH

(9) MODEM狀態(tài)寄存器(MODEM status register)
??MSR.0~3=1時(shí),表示自上一次單片機(jī)讀MSR寄存器之后,分別反映MODEM控制邏輯的四個(gè)輸入信號(hào)的狀態(tài)發(fā)生了變化。
??MSR.0=1時(shí),清除發(fā)送信號(hào)(CTS)已經(jīng)發(fā)生了變化。
??MSR.1=1時(shí),數(shù)據(jù)設(shè)備就緒信號(hào)(DSR)已經(jīng)發(fā)生了變化。
??MSR.2=1時(shí),振鈴信號(hào)(RI)已經(jīng)發(fā)生了變化。
??MSR.3=1時(shí),載波信號(hào)(DCD)已經(jīng)發(fā)生了變化。
??MSR.4~7四位分別反映MODEM控制邏輯的四個(gè)輸入信號(hào)的當(dāng)前狀態(tài)。
??MSR.4=1時(shí),清除發(fā)送信號(hào)(CTS)有效。
??MSR.5=1時(shí),數(shù)據(jù)設(shè)備就緒信號(hào)(DSR)有效。
??MSR.6=1時(shí),振鈴信號(hào)(RI)有效。
??MSR.7=1時(shí),載波信號(hào)(DCD)有效。

(10) 臨時(shí)數(shù)據(jù)寄存器(scratchpag register)

可以存儲(chǔ)用戶信息。

有了上面知識(shí)的準(zhǔn)備后就可以輕松地寫出單片機(jī)的MODEM通訊程序?,F(xiàn)在可把零散的東西組織起來了。

GM16C550芯片初始化模塊
Init_16C550:
??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
??MOV DPTR,#LCR;通訊傳輸長(zhǎng)度為8位,停止 ;位為1,偶校驗(yàn)
??MOV A,#1BH
??MOVX @DPTR, A
??MOV DPTR,#MCR;異步串口芯片的DTR。RTS ;引腳送出邏輯低電平
??MOV A,#03H
??MOVX @DPTR,A
??MOV DPTR,#IER
??MOV A,#01H
??MOVX @DPTR,A

采用中斷的方式接數(shù)據(jù)
Interrupt2:
??PUSH ACC
??PUSH DPH
??PUSH DPL
??PUSH PSW
??MOV DPTR,#RHR ;接受數(shù)據(jù)
??MOVX A,@DPTR
??……………………
??POP PSW
??POP DPL
??POP DPH
??POP ACC
??RETI

至此,完成了一個(gè)小型的單片機(jī)MODEM通訊系統(tǒng)。其中的檢錯(cuò)寄存器、MODEM狀態(tài)寄存器等應(yīng)用限于篇幅沒有完全涉及到。有興趣的朋友可以試一試,那么你就會(huì)對(duì)MODEM通訊有一個(gè)比較深刻的認(rèn)識(shí)。
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機(jī)在嵌入式設(shè)計(jì)領(lǐng)域已經(jīng)成為半個(gè)多世紀(jì)以來的主流選擇。盡管嵌入式系統(tǒng)市場(chǎng)日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對(duì)新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨(dú)立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設(shè)計(jì)與硬件實(shí)現(xiàn)的關(guān)鍵環(huán)節(jié)。當(dāng)前主流的單片機(jī)燒錄技術(shù)已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應(yīng)用編程)三大技術(shù)體系,分別對(duì)應(yīng)開發(fā)調(diào)試、量產(chǎn)燒錄、遠(yuǎn)程升級(jí)等不同場(chǎng)景。...

關(guān)鍵字: 單片機(jī) ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時(shí)機(jī)的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個(gè)維度,系統(tǒng)分析看門狗初始化的最佳實(shí)踐...

關(guān)鍵字: 單片機(jī) 看門狗 嵌入式系統(tǒng)

本文中,小編將對(duì)單片機(jī)予以介紹,如果你想對(duì)它的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。

關(guān)鍵字: 單片機(jī) 開發(fā)板 Keil

隨著單片機(jī)系統(tǒng)越來越廣泛地應(yīng)用于消費(fèi)類電子、醫(yī)療、工業(yè)自動(dòng)化、智能化儀器儀表、航空航天等各領(lǐng)域,單片機(jī)系統(tǒng)面臨著電磁干擾(EMI)日益嚴(yán)重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關(guān)鍵字: 單片機(jī) 電磁兼容

以下內(nèi)容中,小編將對(duì)單片機(jī)的相關(guān)內(nèi)容進(jìn)行著重介紹和闡述,希望本文能幫您增進(jìn)對(duì)單片機(jī)的了解,和小編一起來看看吧。

關(guān)鍵字: 單片機(jī) 復(fù)位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C(jī)的相關(guān)報(bào)道。如果你對(duì)本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機(jī) 異常復(fù)位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C(jī)的有關(guān)報(bào)道,通過閱讀這篇文章,大家可以對(duì)它具備清晰的認(rèn)識(shí),主要內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 仿真器

單片機(jī)將是下述內(nèi)容的主要介紹對(duì)象,通過這篇文章,小編希望大家可以對(duì)它的相關(guān)情況以及信息有所認(rèn)識(shí)和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 中斷 boot

一直以來,單片機(jī)都是大家的關(guān)注焦點(diǎn)之一。因此針對(duì)大家的興趣點(diǎn)所在,小編將為大家?guī)韱纹瑱C(jī)的相關(guān)介紹,詳細(xì)內(nèi)容請(qǐng)看下文。

關(guān)鍵字: 單片機(jī) 數(shù)字信號(hào) 模擬信號(hào)
關(guān)閉