波特率发生器是什么
在信息传输通道中,带着数据信息的信号单元叫码元,每秒钟经过信道传输的码元数称为码元传输速率,简称波特率。它用单位时间内载波调制状况改动次数来表明。而波特率发生器的作用是从输入时钟转换出需求的波特率clk。常用于单片机方面。每秒钟经过信道传输的信息量称为位传输速率,简称比特率。比特率表明有用数据的传输速率。波特率与比特率的联系是比特率=波特率X单个调制状况对应的二进制位数。波特率是传输通道频宽的目标。
波特率发生器的波特率编程
一个完好的由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
波特率核算
在串行通信中,收发两边对发送或接纳的数据速率要有必定的约好,咱们经过软件对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中止。
波特率发生器的波特率挑选
在串行通讯中,收发两边的数据传送率(波特率)要有必定的约好。在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