微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 详解波特率发生器编程/计算/波特率选择

详解波特率发生器编程/计算/波特率选择

时间:10-14 来源:互联网 点击:

  波特率发生器是什么

在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。它用单位时间内载波调制状态改变次数来表示。而波特率发生器的作用是从输入时钟转换出需要的波特率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计数率/产生溢出所需

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top