傳輸率

傳輸率

所謂傳輸率就是指每秒傳輸多少位,傳輸率也常叫波特率。國際上規定了一個標準波特率系列,標準波特率也是最常用的波特率,標準波特率系列為110、300、600、1200、4800、9600和19200。

概述


傳輸率是指每秒鐘傳送二進位數碼的位數(也稱比特數),單位是bit/s。波特率是串列通信的重要指標,用於表徵數據傳送的速率。波特率越高,數據傳輸速度越快。字元的實際傳送速率與波特率不同,字元的實際傳送速率是指每秒鐘內所傳字元幀的幀數,與字元幀格式有關。
圖1
圖1
例如,波特率為2400bit/s的通信系統,若採用圖1 a)的字元幀,則字元的實際傳送速率為(2400/11)幀/s=218.18幀/s;若採用圖1b)的字元幀,則字元的實際傳送速率為(2400/14)幀/s=171.43幀/s。
每位的傳送時間定義為波特率的倒數。通常,非同步通信的波特率在50~9600bit/s之間。波特率不同於發送時鐘和接收時鐘,時鐘頻率常是波特率的1、16或64倍。在非同步串列通信中,接收設備和發送設備保持相同的傳送波特率,並以字元數據的起始位與發送設備保持同步。起始位、奇偶校驗位和停止位的約定在同一次傳送過程中必須保持一致,這樣才能成功地傳送數據。

設計


在串列通信中,收發雙方或接收的數據速率要有一定的約定,通過軟體對8051串列口編程可約定4種工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波持率是可變的,由定時器T1的溢出率來決定。串列口的4種工作方式對應著3種波特率。由於輸入的移位時鐘的來源不同,所以,各種方式的波特率計算公式也不同。

波特率的計算方法

(1)方式0波特率
串列口方式0的波特率由振蕩器的頻率所確定:
方式0波特率=振蕩器頻率/12
(2)方式2波特率
串列口方式2的波特率由振蕩器的頻率和SMOD(PCON.7)所確定:
方式2波特率= ×振蕩器頻率_/64
SMOD為0時,波特率等於振蕩器頻率的1/64;SMOD為1時,波特率等於振蕩器頻率的1/32。
(3)方式1和方式3的波特率
串列口方式1和方式3的波特率由定時器T1或12(8052等單片機)的溢出率和SMOD所確定。Tl和r12是可編程的,可以選的波特率範圍比較大,因此串列口方式l和方式3是最常用的工作方式。

波特率的產生

(1)用定時器T1產生波特率
當定時器T1作為串列口的波特率發生器時,串列口方式1和方式3的波特率由下式確定:
方式1和方式3波特率= ×(T1溢出率)/32
其中,溢出率取決於計數速率和定時器的預置值。計數速率與TMOD寄存器中C/T的狀態有關。當C/T=o時,計數速率=振蕩器頻率/12;當C/T=1時,計數速率取決於外部輸入時鐘頻率。
當定時器T1作波特率發生器使用時,通常選用可自動裝入初值模式(工作方式2),在工作方式2中,TL1作計數用,而自動裝入的初值放在TH1中,設計數初值為X,則每過“256一X”個機器周期,定時器T1就會產生一次溢出。為了避免因溢出而引起中斷,此時應禁止T1中斷。這時有:
溢出周期=12/振蕩器頻率x(256一X)
溢出率為溢出周期的倒數,所以有:
波特率= ×振蕩器頻率/[32×12×(256一X)]
此時,定時器Tl在工作方式2時的初值為:
(2)用定時器T2產生波特率
8052等單片機內的定時器12也可以作為串列口的波特率發生器,置位T2CON中的TCLK和RCLK位,T2就工作於串列口的波特率發生器方式。
T2的波特率發生器方式和計數初值常數自動再裝入方式相似,若C/T2=0,以振蕩器的二分頻信號作為T2的計數脈衝,C/T2=0時,計數脈衝是外部引腳T2(P1.0)上的輸入信號。T2作為波特率發生器時,當T2計數溢出時,將RCAP2H和RCAP2L中常數(由軟體設置)自動裝入TH2、TL2,使T2從這個初值開始計數,但是並設置“1”TF2,RCAP2H和RCAP2L中的常數由軟體設定后,T2的溢出率是嚴格不變的,因而使串列口方式1和3的波特率非常穩定,其值為
方式1和方式3波特率=振蕩器頻率/32×[65536一(RCAP2H)(RCAP2L)]
T2工作于波特率發生器方式時,計數溢出時不會置“l”TF2,不向CPU請求中斷,因此不必禁止T2的中斷。如果EXEN2為1,當T2EX(P1.1)上輸入電平發生“1”至“0”的負跳變時,也不會引起RCAP2H和RCAP2L中的常數裝入TH2、TL2,僅僅置位EXF2,向cpu請求中斷,因此T2EX可以作為一個外部中斷源使用。
在T2計數過程中(TR2=1)不應該對TH2、TL2進行讀/寫。如果讀,則讀出結果不會精確(因為每個狀態加1);如果寫,則會影響T2的溢出率,使波特率不穩定。在T2的計數過程中,可以對RCAP2H和RCAP2L進行讀,但不能寫,如果寫也將使波特率不穩定。因此,在初始化中,應先對TH2、TL2、RCAP2H、RCAP2L初始化編程以後才置“1”TR2,啟動T2計數。