波特率發生器

波特率發生器

在信息傳輸通道中,攜帶數據信息的信號單元叫碼元,每秒鐘通過信道傳輸的碼元數稱為碼元傳輸速率,簡稱波特率。即波特率是指數據信號對載波的調製速率,它用單位時間內載波調製狀態改變次數來表示。每秒鐘通過信道傳輸的信息量稱為位傳輸速率,簡稱比特率。比特率表示有效數據的傳輸速率。波特率與比特率的關係是比特率=波特率X單個調製狀態對應的二進制位數。波特率是傳輸通道頻寬的指標。

波特率編程

波特率指數據信號對載波的調製速率,它用單位時間內載波調製狀態改變次數來表示 。

波特率發生器不是產生波特率時鐘的,波特率時鐘頻率/波特率因子=波特率。

波特率發生器的作用是從輸入時鐘轉換出需要的波特率clk

一個完整的由verilog實現的波特率發生器:

module baud_gen(

clk_50MHz, rst_p, bclk

);

input clk_50MHz; /*輸入的系統時鐘,50MHz*/

input rst_p; /*復位脈衝,高電平有效*/

/* 倍頻值16乘以9600波特率,即9600*16=153600,得到波特率發生器的實際輸出信號頻率為153.6kbit/s */

output bclk; // 輸出信號:UART(串口)波特率發生器輸出的時鐘脈衝,頻率:153.60kbps

//即每秒1536000個脈衝,*波特率發生器輸出脈衝bclk,注意:除了主頻分頻之外,

//還決定了這個信號的占空比,在本例中輸出信號占空比為 1:325

reg bclk; //暫存器數據類型bclk

reg [8:0] cnt; //暫存器數據類型cnt,9位,UART用它來記錄接收到的主頻脈衝個數,

//注意在修改輸出波特率值時,若占空比小於1:511,需要增加該變數所占位數

//以下語句利用同步計數器完成時鐘分頻,

always @(posedge clk_50MHz) begin /* 每當信號clk_50MHz發生電平變化執行以下語句 */

if(rst_p) begin /* 如果復位脈衝信號為高電平執行以下語句 */

cnt <= 0; //對主頻信號計數器cnt做非阻塞方式復位賦值,賦值為邏輯0 。此後每當時鐘信號到來就變。

bclk <= 0; /* 暫存器變數bclk賦值為邏輯0,使該脈衝信號復位為低電平,以低電平作為開始*/

end

else begin

/* 50MHz除以153600(UART實際頻率)等於325.5 即50_000_000 /153600 = 325.5(波特率除數) */

if(cnt > 324) begin /*如果cnt的數值大於324,即cnt計數脈衝數等於325(0-324個脈衝)*/

cnt <= 0; /* 50MHz主頻信號計數器cnt值,被非阻塞方式復位*/

bclk <= 1; /*串口波特率時鐘脈衝信號bclk賦值為邏輯1,使該脈衝信號跳變到高電平周期*/

end

else begin

cnt <= cnt + 1; /* 50MHz主頻信號計數器cnt值被非阻塞方式增量賦值(加1) */

bclk <= 0; //波特率發生器時鐘脈衝信號bclk被非阻塞方式賦值為’0’,

//使該脈衝信號跳變到低電平周期*/

end

end

end

endmodule

波特率選擇

在串列通訊中,收發雙方的數據傳送率(波特率)要有一定的約定。在8051串列口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。

方式0

方式0的波特率固定為主振頻率的1/12。

方式2

方式2的波特率由PCON中的選擇位SMOD來決定,可由下式表示:

波特率=2的SMOD次方除以64再乘一個fosc,也就是當SMOD=1時,波特率為1/32fosc,當SMOD=0時,波特率為1/64fosc

方式1和方式3

定時器T1作為波特率發生器,其公式如下:

T1溢出率= T1計數率/產生溢出所需的周期數

式中T1計數率取決於它工作在定時器狀態還是計數器狀態。當工作於定時器狀態時,T1計數率為fosc/12;當工作於計數器狀態時,T1計數率為外部輸入頻率,此頻率應小於fosc/24。產生溢出所需周期與定時器T1的工作方式、T1的預置值有關。

定時器T1工作於方式0:溢出所需周期數=8192-x 定時器T1工作於方式1:溢出所需周期數=65536-x

定時器T1工作於方式2:溢出所需周期數=256-x

因為方式2為自動重裝入初值的8位定時器/計數器模式,所以用它來做波特率發生器最恰當。

當時鐘頻率選用11.0592MHZ時,取易獲得標準的波特率,所以很多單片機系統選用這個看起來“怪”的晶振就是這個道理。

下表列出了定時器T1工作於方式2常用波特率及初值。

常用波特率 Fosc(MHZ) SMOD TH1初值 19200 11.0592 1 FDH 9600 11.0592 0 FDH 4800 11.0592 0 FAH 2400 11.0592 0 F4H 1200 11.0592 0 E8H

例如9600 11.0592 0 FDH

T1溢出率= T1計數率/產生溢出所需的周期數

產生溢出所需的周期數=256-FD(253)=3 SMOD=0 11059200/12*3 *1/32=9600

波特率計算

在串列通信中,收發雙方對傳送或接收的數據速率要有一定的約定,我們通過軟體對MCS—51串列口編程可約定四種工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1的溢出率決定。

串列口的四種工作方式對應著三種波特率。由於輸人的移位時鐘的來源不同,所以,各種方式的波特率計算公式也不同。

一、方式0的波特率

方式0時,移位時鐘脈衝由56(即第6個狀態周期,第12個節拍)給出,即每個機器周期產生一個移位時鐘,傳送或接收一位數據。所以,波特率為振盪頻率的十二分之一,並不受 PCON暫存器中SMOD的影響,即: 方式0的波特率=fosc/12

二、方式l和方式3的波特率

方式1和方式3的移位時鐘脈衝由定時器T1的溢出率決定,故波特宰由定時器T1的 溢出率與SMOD值同時決定,即: 方式1和方式3的波特率=2SMOD/32·T1溢出率

其中,溢出率取決於計數速率和定時器的預置值。計數速率與TMOD暫存器中C/T的狀態有關。當C/T=0時,計數速率=fosc/2;當C/T=1時,計數速率取決於外部輸入時鐘頻率。

當定時器Tl作波特率發生器使用時,通常選用可自動裝入初值模式(工作方式2),在 工作方式2中,TLl作為計數用,而自動裝入的初值放在THl中,設計數初值為x,則每過“256一x”個機器周期,定時器T1就會產生一次溢出。為了避免因溢出而引起中斷,此時應禁止T1中斷。這時,溢出周期為:

相關詞條

熱門詞條

聯絡我們