STC單片機自適應波特率串口的實現(xiàn)方法
STC單片機自適應波特率串口的實現(xiàn)方法通常有以下幾種:
(1)協(xié)議約定通信開始時主機固定發(fā)送1 個字符,從機以不同的波特率試探接收,當接收到的數(shù)據(jù)與約定相同時,確定該波特率即是正確的通信波特率。
。2)協(xié)議約定通信開始時主機發(fā)送1 串字符,從機以某固定波特率接收,然后通過軟件分析接收到的數(shù)據(jù),計算出接收數(shù)據(jù)與發(fā)送數(shù)據(jù)之間的倍數(shù)關系,從而確定正確的波特率。
。3)協(xié)議約定通信開始時主機固定發(fā)送1 個字符,從機用單片機定時器檢測RXD 上的信號寬度,通過計算來確定主機的波特率。
以上3 種方法,第一種由于需要多次試探,效率很低;第二種計算量過大,不適合單片機處理;第三種方式單片機有現(xiàn)成的定時器資源,計算也相對簡單,所以優(yōu)選這種。
要測量脈沖寬度,前提是單片機的時鐘信號必須穩(wěn)定。目前很多STC單片機可選外接晶振時鐘或片內(nèi)RC振蕩時鐘,片內(nèi)RC振蕩時鐘省去了外部的晶振等元件,成本降低、電路板的體積也可以縮小,這對成本及體積敏感的應用很具優(yōu)勢。但選用片內(nèi)RC振蕩時,頻率會有±15%左右的誤差,頻率的穩(wěn)定性也比外接晶振要差,按理論計算值設置波特率參數(shù),無法保證可靠的通信,但按以上自適應波特率串口的第三種方法,每次通信前實測、計算、確定波特率常數(shù),就可以實現(xiàn)穩(wěn)定可靠的通信,這樣充分利用了STC單片機的優(yōu)勢。
1 STC 單片機的特點
標準51 芯片由于定時器最高分辨率只有1 μs,對于較高的通信波特率來說,測量精度不夠,導致計算值不準,無法正常工作。STC系列單片機是在標準51單片機基礎上發(fā)展起來的,它增加了很多實用的接口電路,擴大了時鐘的頻率范圍,設計出了1T 時鐘的芯片,可以通過軟件對系統(tǒng)時鐘分頻,并提供了片內(nèi)RC振蕩時鐘,在目前51芯片的市場占有極大的份額。STC系列單片機采用片內(nèi)RC振蕩時鐘、自適應波特率串口通信技術,可以廣泛地應用于分布式控制、智能儀表、通信等行業(yè)。
2 自適應工作原理
STC 單片機采用異步通信,UART 工作于模式1(8位UART,波特率可變),用定時計數(shù)器2做波特率發(fā)生器,工作于模式2(8位自動重裝模式),主從機按圖1方式連接,從機自適應主機的波特率。
自適應過程由主機發(fā)送聯(lián)絡字符開始。為了使從機獲得最大的測量脈寬,提高測量精度,由主機發(fā)送二進制“0”.如圖2所示,二進制“0”由1位起始位,8位數(shù)據(jù)位(低位在先)及1位停止位構成,其中1位起始位和8位數(shù)據(jù)位全為0,所以低電平的寬度為9 b.
從機查詢RXD引腳的電平,檢測到低電平后就啟動定時器0開始計時,再檢測到高電平就停止定時器0計時,根據(jù)定時器0的定時值就可以計算出主機的波特率。
當時鐘分頻寄存器CLK_DIV=0(不分頻),特殊功能寄存器AUXR=0xC0(T0 用1T 時鐘),則:
而STC51 系列單片機在UART 模式1,時鐘模式為1T 時,其波特率公式為:
從機UART在模式1下,將式(4)或式(6)計算結果作為定時器1重裝值,設定通信參數(shù),通過串口回送應答信號給主機。主機如正確接收到從機回送的信號,就說明從機已完成波特率自適應,可以開始正常通信了。
3 誤差分析
為保證可靠通信,要求通信雙方的波特率相對誤差小于2.5%.
在自適應波特率校準系統(tǒng)中,誤差主要來自兩個方面,一是定時器T0 啟動和停止滯后造成的誤差ΔT0;二是波特率發(fā)生器T1 本身固有的一個機器周期誤差ΔT1 = ±1.由于STC51單片機采用1T 時鐘定時,ΔT0 誤差只有標準51系列芯片的1 12,系統(tǒng)誤差主要由ΔT1 決定。
以STC12C5620為例,當采用片內(nèi)RC振蕩,時鐘頻率通常在5.2~6.9 MHz 之間。當時鐘頻率為5.2 MHz,SMOD=1時,UART時鐘分別按12T,1T 計算,見表1,表2.
表1、表2中加粗部分表示可以選用的波特率值,由表1、表2可知,只要編程時選擇合適的時鐘,在5.2 MHz時鐘頻率下,波特率可以在300~115 200 b/s 之間實現(xiàn)自適應,由T1 取整帶來的誤差在0.5%以內(nèi)。當系統(tǒng)時鐘為6.9 MHz時,用同樣的方法計算,也可以證明波特率可以在300~115 200 b/s 之間實現(xiàn)自適應,由T1 取整帶來的誤差也在0.5%以內(nèi)。由此可見,STC12C5620采用片內(nèi)RC振蕩,可以在300~115 200 b/s之間完成波特率自適應,實現(xiàn)穩(wěn)定可靠的通信。
4 軟件流程與程序
主機軟件流程圖如圖3所示,從機軟件流程圖如圖4所示。
以下為C51波特率自適應程序:
5 應用實例
采用STC12C5620 設計的重力檢測開關,如圖5 所示。為降低成本、縮小體積,采用了片內(nèi)RC振蕩,不設按鍵及顯示。重力檢測開關首次工作前需設定一些參數(shù),并校準。由于沒有鍵盤及顯示,采用和計算機聯(lián)機設置、校準。本電路采用了上述的自適應波特率工作方式,由PC機作主機,通過串口來初始化重力檢測開關的各參數(shù)。
設置時,將重力檢測開關與計算機之間用RS 232線連接好,然后點擊PC機軟件界面上的“連接串口”按鈕進行波特率自適應,當界面上狀態(tài)欄提示“連接串口成功!”時,表示波特率自適應工作正確完成, 如圖6所示,可以進行參數(shù)設置和校準操作。設置、校準后,重力檢測開關就可脫機正常工作了。
經(jīng)反復驗證,該電路在300~115 200 b/s 波特率范圍內(nèi)可穩(wěn)定通信工作。
6 結語
該波特率自適應方法,可擴展應用于其他單片機系統(tǒng),解決對方的波特率未知、或?qū)Ψ降牟ㄌ芈视衅疃鵁o法正常通信的問題,即使對方的波特率不是標準值也可正常工作,具有較大的實用價值。

編輯:admin 最后修改時間:2018-05-08