<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 詳解波特率發(fā)生器編程/計算/波特率選擇

          詳解波特率發(fā)生器編程/計算/波特率選擇

          作者: 時間:2017-10-14 來源:網(wǎng)絡(luò) 收藏

            是什么

          本文引用地址:http://www.ex-cimer.com/article/201710/366268.htm

            在信息傳輸通道中,攜帶數(shù)據(jù)信息的信號單元叫碼元,每秒鐘通過信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡稱波特率。它用單位時間內(nèi)載波調(diào)制狀態(tài)改變次數(shù)來表示。而的作用是從輸入時鐘轉(zhuǎn)換出需要的波特率clk。常用于單片機方面。每秒鐘通過信道傳輸?shù)男畔⒘糠Q為位傳輸速率,簡稱比特率。比特率表示有效數(shù)據(jù)的傳輸速率。波特率與比特率的關(guān)系是比特率=波特率X單個調(diào)制狀態(tài)對應(yīng)的二進制位數(shù)。波特率是傳輸通道頻寬的指標(biāo)。

            

            的波特率編程

            一個完整的由verilog實現(xiàn)的波特率發(fā)生器:

            module baud_gen(

            clk_50MHz, rst_p, bclk

           ?。?

            input clk_50MHz; /*輸入的系統(tǒng)時鐘,50MHz*/

            input rst_p; /*復(fù)位脈沖,高電平有效*/

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

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

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

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

            reg bclk; //寄存器數(shù)據(jù)類型bclk

            reg [8:0] cnt; //寄存器數(shù)據(jù)類型cnt,9位,UART用它來記錄接收到的主頻脈沖個數(shù),

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

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

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

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

            cnt 《= 0; //對主頻信號計數(shù)器cnt做非阻塞方式復(fù)位賦值,賦值為邏輯0 。此后每當(dāng)時鐘信號到來就變。

            bclk 《= 0; /* 寄存器變量bclk賦值為邏輯0,使該脈沖信號復(fù)位為低電平,以低電平作為開始*/

            end

            else begin

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

            if(cnt 》 324) begin /*如果cnt的數(shù)值大于324,即cnt計數(shù)脈沖數(shù)等于325(0-324個脈沖)*/

            cnt 《= 0; /* 50MHz主頻信號計數(shù)器cnt值,被非阻塞方式復(fù)位*/

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

            end

            else begin

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

            bclk 《= 0; //波特率發(fā)生器時鐘脈沖信號bclk被非阻塞方式賦值為’0’,

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

            end

            end

            end

            endmodule

            

            波特率計算

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

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

            一、方式0的波特率

            方式0時,移位時鐘脈沖由56(即第6個狀態(tài)周期,第12個節(jié)拍)給出,即每個機器周期產(chǎn)生一個移位時鐘,發(fā)送或接收一位數(shù)據(jù)。所以,波特率為振蕩頻率的十二分之一,并不受 PCON寄存器中SMOD的影響,即: 方式0的波特率=fosc/12

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

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

            其中,溢出率取決于計數(shù)速率和定時器的預(yù)置值。計數(shù)速率與TMOD寄存器中C/T的狀態(tài)有關(guān)。當(dāng)C/T=0時,計數(shù)速率=fosc/2;當(dāng)C/T=1時,計數(shù)速率取決于外部輸入時鐘頻率。

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

            波特率發(fā)生器的波特率選擇

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

            方式0

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

            方式2

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

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

            方式1和方式3

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

            T1溢出率= T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù)

            式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當(dāng)工作于定時器狀態(tài)時,T1計數(shù)率為fosc/12;當(dāng)工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,此頻率應(yīng)小于fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預(yù)置值有關(guān)。

            定時器T1工作于方式0:溢出所需周期數(shù)=8192-x 定時器T1工作于方式1:溢出所需周期數(shù)=65536-x

            定時器T1工作于方式2:溢出所需周期數(shù)=256-x

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

            當(dāng)時鐘頻率選用11.0592MHZ時,取易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機系統(tǒng)選用這個看起來“怪”的晶振就是這個道理。

            下表列出了定時器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計數(shù)率/產(chǎn)生溢出所需的周期數(shù)

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



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();