我們經常能見到關于PC的MODEM通訊的文章,但關于單片機MODEM通訊的文章卻不多見。現在將我個人單片機MODEM通訊的實踐經歷寫出來供大家參考。
要寫單片機的MODEM通訊必須要有兩個背景知識,一個是AT命令集,另一個是通用異步接收發送器(UART)。
1.AT命令集
下面介紹我通訊程序例子中涉及到的AT命令。
Dn:撥號命令。該命令使MODEM立即進入摘機狀態,并撥出跟在后面的號碼。D命令是基本的撥號命令,它受到其它命令的修飾可構成MODEM何時撥號以及如何撥號等操作。
T:音頻撥號。例如,ATDT2245879,其中2245879為電話號碼。
P:脈沖撥號。例如,ATDP2245879,其中2245879為電話號碼。
,:標準暫停。我們常常碰到撥打外線電話時需要暫停一下,等聽到二次撥號音(外線)之后才能再撥后續的號碼。缺省時暫停時間為2s(秒),它由S8寄存器指定。
Sn:表示MODEM內部的寄存器。
S0:自動應答。如果要求MODEM具有自動應答特性,則應該預先將MODEM的S0寄存器設置為非0。
S8:逗號撥號修飾符的暫停時間。該寄存器決定了當MODEM在撥號中遇到逗號(,)時應該暫停的時間。
2.通用異步接收發送器UART
深入理解UART內部結構以及內部寄存器各位的含義,詳細了解數據發送和接收的過程,有助于編寫出高效、穩定的程序。現以GM16C550為例介紹編寫基本通訊程序需要知道的寄存器。實際的ADDRESS由具體接線決定。表1為GM16C550寄存器的介紹。
表1 GM16C550寄存器
(1) 波特率除數鎖存器(LSB、MSB)
在通訊之前要進行一些參數初始化,波特率是首先應該考慮的一項。該寄存器是一個16位的寄存器,分為低8位(LSB)和高8位(MSB)寄存器。
當 LCR.7=1,且A2A1A0=000/001時,單片機訪問的是波特率除數鎖存器LSB/MSB。GM16C550推薦的工作頻率是 1.8432MHz。這個頻率除以16就是波特率的時鐘頻率,用于控制發送和接收數據的速度。下面給出波特率除數鎖存器值的計算公式:
波特率除數鎖存器值=工作頻率/(16×期望波特率)=1843200/(16×期望波特率)
表2給出了常用波特率與波特率除數鎖存器值。
表2 波特率除數鎖存器
MOV DPTR,#LCR ;除數鎖定允許
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) 接收緩沖寄存器和發送保持寄存器(transmit and receive holding register)
當LCR.7=0,且A2A1A0=000時,讀操作單片機訪問接收緩沖寄存器(RHR),寫操作單片機訪問發送保持寄存器(THR)。
(3) 中斷允許寄存器(interrupt enable register)
當LCR.7=0,且A2A1A0=001時,單片機訪問中斷允許寄存器(IER)。
IER.0=1,允許接收器數據就緒中斷。
IER.1=1,允許發送保持寄存器為空時中斷。即當從發送保持寄存器把一個字節移到移位寄存器時,產生一個中斷,使發送保持寄存器能夠接收下一個字節。
IER.2=1,表示允許接收有錯信息或間斷條件中斷。
IER.3=1,MODEM狀態變化中斷。
IER.4~7,沒有使用,設置為零。
MOV DPTR,#IER
MOV A,#01H
MOVX @DPTR,A
(4) FIFO控制寄存器(FIFO control register)
數據發送和接收模式的選擇。GM16C550提供了兩種模式:FIFO和DMA。其中DMA又有兩種模式DMA的模式0、DMA的模式1可供選擇。我的舉例采用默認的DMA的模式0。感興趣的朋友可試一試其它模式,這里不再說明。
(5) 中斷狀態寄存器(interrupt status register)
前面介紹了幾種中斷,它們在各自的條件下產生中斷,UART都會輸出一個高電平的中斷請求信號,觸發同一個中斷請求。為了具體判斷是哪一種中斷,還應該檢測ISR,如表3所列。
表3 中斷狀態寄存器
ISR.0=1,表示沒有中斷產生。
ISR.4~5沒有使用。
ISR.6~7,當采用FIFO的接收和發送模式時,這兩位都設置為1;反之,都設置為0。
(6) 線路控制寄存器(line control register)
LCR.0~1,表示發送和接收時的字節長度,如表4所列。
LCR.2,這一位與LCR.0~1共同定義了停止位的長度,如表5所列。
LCR.6=1,表示允許間斷,即允許發送器寄存器保持一個完整幀時間以上的空號狀態。
LCR.7,用于區分訪問除數鎖存寄存器還是訪問接收緩沖/發送保持和中斷允許寄存器。 MOVDPTR,#LCR;通訊傳輸長度為8位,停止位為1,;偶校驗
MOVA,#1BH
MOVX @DPTR,A
(7) MODEM控制寄存器(MODEM control register)
這是一個MODEM和外設接口的寄存器。
MCR.0=1時,強制芯片引腳DTR=0;
MCR.0=0時,強制芯片引腳DTR=1。
MCR.1=1時,強制芯片引腳RTS=0;
MCR.1=0時,強制芯片引腳RTS=1。
MCR.2=1時,強制芯片引腳OP1=0;
MCR.2=0時,強制芯片引腳OP1=1。
MCR.3=1時,強制芯片引腳OP2=0;
MCR.2=0時,強制芯片引腳OP2=1。
MCR.4=1時,循環返回模式,可用于芯片自測。
其它位保留。
MOVDPTR,#MCR;異步串口芯片的DTR、RTS引腳送出邏輯低電平
MOVA,#03H
MOVX @DPTR,A
(8) 線路狀態寄存器(line status register)
LSR.0:當接收移位寄存器接收到的字節完全移到接收緩沖寄存器時,該位置1。如果讀該寄存器,那么這一位被清零。
LSR.1:出現超越錯時,這一位被置1。讀該寄存器,這一位被清零。
LSR.2:出現奇偶校驗錯時,這一位被置1。讀該寄存器,這一位被清零。
LSR.3:出現停止位不完整、丟失、空號時,這一位被置1。讀該寄存器,這一位被清零。
LSR.4:當接收寄存器檢測到空號狀態已持續一個完整幀傳輸時間時,這一位被置1。讀該寄存器,這一位被清零。
LSR.5:當發送的字節從發送保持寄存器移到發送移位寄存器時,該位置1。
LSR.6:當發送保持寄存器和發送移位寄存器都沒用字節時,該位置1。
LSR.7:當奇偶校驗錯、幀格式錯、空號錯有一個出現時,該位置1。
Setdata:
MOV DPTR,#LSR
MOVX A,@DPTR
JNB ACC.5,Setdata
MOV A,DataNumber;DataNumber記錄發 ;送字符的個數
MOV DPTR,#AtCommand ;AtCommand定義AT命令參數的起始地址
MOVC A,@A+DPTR
MOV DPTR,#THR ;發送保持寄存器
MOVX @DPTR,A
INC DataNumber
MOV A,DataNumber
CJNE A,#0BH,Setdata ;發送11個字符
AtCommand:DB “A”,“T”,“S”,“0”,“=”,“2”,“S”,“8”, “=”,“5”,0DH
(9) MODEM狀態寄存器(MODEM status register)
MSR.0~3=1時,表示自上一次單片機讀MSR寄存器之后,分別反映MODEM控制邏輯的四個輸入信號的狀態發生了變化。
MSR.0=1時,清除發送信號(CTS)已經發生了變化。
MSR.1=1時,數據設備就緒信號(DSR)已經發生了變化。
MSR.2=1時,振鈴信號(RI)已經發生了變化。
MSR.3=1時,載波信號(DCD)已經發生了變化。
MSR.4~7四位分別反映MODEM控制邏輯的四個輸入信號的當前狀態。
MSR.4=1時,清除發送信號(CTS)有效。
MSR.5=1時,數據設備就緒信號(DSR)有效。
MSR.6=1時,振鈴信號(RI)有效。
MSR.7=1時,載波信號(DCD)有效。
(10) 臨時數據寄存器(scratchpag register)
可以存儲用戶信息。
有了上面知識的準備后就可以輕松地寫出單片機的MODEM通訊程序。現在可把零散的東西組織起來了。
GM16C550芯片初始化模塊
Init_16C550:
MOV DPTR,#LCR ;除數鎖定允許
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;通訊傳輸長度為8位,停止 ;位為1,偶校驗
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
采用中斷的方式接數據
Interrupt2:
PUSH ACC
PUSH DPH
PUSH DPL
PUSH PSW
MOV DPTR,#RHR ;接受數據
MOVX A,@DPTR
……………………
POP PSW
POP DPL
POP DPH
POP ACC
RETI
至此,完成了一個小型的單片機MODEM通訊系統。其中的檢錯寄存器、MODEM狀態寄存器等應用限于篇幅沒有完全涉及到。有興趣的朋友可以試一試,那么你就會對MODEM通訊有一個比較深刻的認識。
上一篇:提高單片機應用系統可靠性的軟件技術與方法介紹
下一篇:PowerPC G4 系列單板機的設計
推薦閱讀
史海拾趣
HARTING公司自1945年成立以來,在電子行業里經歷了多個重要的發展階段,以下是五個與HARTING公司發展相關的事實性故事:
1. 創立與初期發展
創立背景:1945年,Wilhelm和Marie Harting在德國創立了HARTING公司,起初以生產日常所需的設備為主,如節能燈泡、電爐等。隨著德國工業的發展,他們逐漸意識到新興行業對技術產品的需求,于是將公司轉向開發和生產電氣連接器及連接系統。這一轉變標志著HARTING正式進入電子行業,并為其后續發展奠定了基礎。
初期產品:早期,HARTING開發的Han?連接器在市場上取得了巨大成功,該連接器以其堅固耐用、易于操作的特點,迅速成為行業內的標準產品,為HARTING在電子行業樹立了良好的口碑。
2. 技術創新與全球化拓展
技術創新:HARTING始終致力于技術創新,不斷推出新產品以滿足市場需求。例如,他們研發的矩形連接器在1965年問世后,迅速替代了傳統的圓形軍用規格連接器,成為工業連接的新標準。此外,HARTING還在數據通信、網絡技術、芯片卡、多媒體技術等領域取得了顯著成就。
全球化拓展:隨著業務的不斷發展,HARTING開始在全球范圍內設立子公司和生產工廠。目前,HARTING已在40多個國家設立了附屬公司,生產工廠遍布德國、英國、瑞士、美國、羅馬尼亞及中國等7個國家。這種全球化布局不僅提升了HARTING的市場占有率,還使其能夠更好地服務全球客戶。
3. 進入中國市場
中國市場布局:1988年,HARTING正式進入中國市場,并在珠海投資興建了生產基地。這一舉措標志著HARTING對中國市場的重視和承諾。隨著在中國市場的不斷深耕,HARTING已在中國設立了多個銷售和服務中心,覆蓋了包括香港、珠海、深圳、廣州在內的多個城市。
本地化生產與服務:為了更好地服務中國客戶,HARTING在中國實現了本地化生產和服務。他們不僅提供高質量的產品,還為客戶提供設計咨詢、系統集成、定制化解決方案等一系列專業服務。這些舉措使HARTING在中國市場贏得了廣泛認可。
4. 工業4.0與數字化轉型
工業4.0引領者:面對工業4.0和數字化轉型的浪潮,HARTING積極投入研發和創新,推出了多款面向未來的產品和技術。例如,HARTING MICA?是一款將工業4.0功能引入現有機器和設備的工業邊緣網關,它能夠幫助企業實現生產過程的智能化和自動化。
數字化轉型服務:除了產品創新外,HARTING還為客戶提供數字化轉型的解決方案和服務。他們利用自身在連接技術領域的優勢,幫助企業構建高效、可靠的數字化生產體系,提升生產效率和產品質量。
5. 定制化解決方案與行業應用
定制化解決方案:HARTING深知不同行業對連接技術的不同需求,因此他們始終致力于為客戶提供定制化的解決方案。無論是電力、通信、自動化還是航空、汽車等行業,HARTING都能根據客戶的具體需求,提供最適合的連接技術和產品。
行業應用案例:在多個行業領域,HARTING的產品和技術都得到了廣泛應用。例如,在汽車行業,HARTING的3D-MID技術幫助客戶將復雜的電子設備集成到汽車中,提高了汽車的安全性和舒適性;在軌道交通行業,HARTING的連接器產品被廣泛應用于信號傳輸和電源分配等領域,確保了軌道交通的安全運行。
通過以上五個故事,我們可以看出HARTING公司在電子行業里的發展歷程和成就。從創立初期的艱難探索到如今的全球化布局和技術創新,HARTING始終保持著對技術的熱愛和追求,為客戶提供高質量的產品和服務。
2022年5月,英國思百吉集團(Spectris)以5.4億美元的價格收購了Dytran。這次收購是思百吉集團進一步擴大其在傳感器領域的布局的重要舉措。作為思百吉集團旗下的子公司,Dytran將繼續保持其獨立性和品牌特色,同時借助思百吉的全球資源和市場渠道,加速其業務發展和市場拓展。
在被收購后,Dytran與思百吉旗下的其他品牌進行了業務整合。通過共享研發資源、優化供應鏈、拓展銷售渠道等方式,Dytran實現了與思百吉旗下品牌的協同發展。這不僅提高了公司的運營效率和市場競爭力,還為客戶提供了更加全面和優質的服務。
為了進一步加強對大陸市場的投資和管控,Bytesonic Corporation在1998年5月在英屬維爾京群島成立了控股公司——劍橋電子有限公司。這一舉措不僅提升了公司的資本運作能力,也為其在全球范圍內的業務拓展提供了更多的便利。
Akahane深知人才是企業發展的核心動力。因此,公司一直注重人才培養和引進。通過建立健全的培訓機制和激勵機制,Akahane吸引了一批批優秀的研發人才和管理人才。這些人才為公司的技術創新和市場拓展提供了有力支撐。同時,公司還積極與高校和研究機構合作,共同培養電子行業的后備力量。
ELESTA GmbH的前身可以追溯到1952年ELESTA Elektrotechnik AG的成立。在成立初期,該公司就開始在電子領域進行一系列的創新和研發。到了1996年,ELESTA已經成功開發出光學傳感器、測量和控制系統以及繼電器等關鍵產品,這些產品奠定了公司在電子行業中的堅實基礎。
ELESTA GmbH的前身可以追溯到1952年ELESTA Elektrotechnik AG的成立。在成立初期,該公司就開始在電子領域進行一系列的創新和研發。到了1996年,ELESTA已經成功開發出光學傳感器、測量和控制系統以及繼電器等關鍵產品,這些產品奠定了公司在電子行業中的堅實基礎。
《模擬CMOS集成電路設計》作者:畢查德.拉扎維_PDF下載 模擬集成電路的設計與其說是一門技術,還不如說是一門藝術。它比數字集成電路設計需要更嚴格的分析和更豐富的直覺。嚴謹堅實的理論無疑是嚴格分析能力的基石,而設計者的實踐經驗無疑是誕生豐富直覺的源泉。這也正足初學者對學習模擬集成電路設計 ...… 查看全部問答∨ |
|
在三星原驅動的基礎上修改攝像頭驅動(應用程序幾乎沒改,應用BSP原來所帶的demo),修改了相應的設置后,圖像出來后結果是花屏,好像是把屏幕分成4塊(從左往右),顏色也對。 將攝像頭設置為斑馬線測試格式輸出時,出現的也不對,相差很多。 有 ...… 查看全部問答∨ |
|
網上很多網友都反映altium designer在某些方面還是優于10年經典版protel99se ,所以在空閑之余也下載了一個免安裝綠化版的altium designer折騰了下。希望altium designer不要追究我使用了盜版的altium designer,只因個人財力有限。折騰不起正版。 ...… 查看全部問答∨ |
|
時間與地點 日期地點課程地址8月9日北京MSP430 LaunchPad北京市中關村科學院南路2號融科資訊中心A座518室8月16日深圳C2000 LaunchPad深圳市南山區華僑城興隆街漢唐大廈19樓上海C2000 Concerto上海市浦東新區世紀大道1568號中建大廈32樓北京C2000 L ...… 查看全部問答∨ |
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //設置為EXTI0 但是編譯的時候卻說“EXTI0_IRQChannel”沒有定義,之后我吧其他的在固件庫使用手冊中給的中斷的定義試了一下,都不行 ...… 查看全部問答∨ |
沒有去的朋友,看看圖片,看完趕緊去啊,呵呵 復合式土壓平衡盾構機 “蛟龍號”深海探測器 南極科考機器人—海燕飛行器機器人 拳擊對戰機器人 未來工程師 單兵戰術機器人 雙足人形機器人 3D打印機 機器魚 排爆機器 ...… 查看全部問答∨ |
宿舍請個保姆是不可能的事情,不過我們可以通過藍牙和單片機的結合設計一個電子宿舍保姆。早上系統鬧鐘會按時提醒我們起床,之后會通過該模塊上的各種傳感器給我們指出當前環境情況。再有單片機與繼電器相連,很方便的通過藍牙來遙控宿舍內電燈、風 ...… 查看全部問答∨ |