中文名 | 波特率发生器 | 外文名 | Baud rate generator |
---|---|---|---|
适用范围 | 信息工程 | 类 别 | 通信 |
在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在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中断。这时,溢出周期为:2100433B
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示 。
波特率发生器不是产生波特率的,波特率时钟频率/波特率因子=波特率。
波特率发生器的作用是从输入时钟转换出需要的波特率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
波特率 即 调制速率 ,指的是信号被 调制 以后在单位时间内的 波特 数,即单位时间内 载波 参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。 波特率有时候会同 比特...
什么叫波特率:1、单片机或计算机在串口通信时的速率。2、指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止...
单片机中计算串行口的波特率时,根据波特率是公式计算,我总是算不出正确值,波特率的单位是什么
波特率的单位是:波特/秒,也就是一秒内接收到多少个字符,根据你单片机的晶振频率、机器周期设定波特率,也就是设定在定时器中的初值,此时为了精确,要考虑到每一句程序的时间
设计了一种基于硬件电路的RS-485光电收发器。对光电收发器模块的原理及使用场合进行简要论述。比较了工业控制领域中3种常用的光电收发器实现原理,对波特率自适应方法进行了详细介绍并给出原理说明。模块使用硬件电路搭建方向控制及整形电路,与软件控制相比更加实时,可靠,同时降低了通信系统的复杂性。经现场验证表明,相关性能指标完全满足要求。
第 1 页 共 14 页 正弦信号发生器 姜守军 指导教师:张珂 摘要 本设计基于 DDS 芯片 AD9854 和单片机芯片 AT89S52设计信号发生 器。该发生器能够稳定输出电压峰 -峰值 6V 的正弦信号 、1MHz—10Mhz的模 拟幅度调制 (AM)信号、 100KHz固定载波二进制 PSK、ASK信号,并能适时显 示正弦信号发生器的频率。本设计采用模块化的设计思想,包括 DDS信号发 生电路,单片机控制电路,调制信号产生电路等功能模块。单片机主要用做 控制 DDS和频率显示, DDS经七阶椭圆函数低通滤波器型和放大器可产生 2.2V 左右稳定的正弦波信号, 该信号经不同功能模块可产生题目所要求的信 号。本信号发生器经过软件、硬件的综合调试,能准确地用单片机控制,能 产生 1kHz---100MHz正弦波信号。整个系统较好的实现了题目的要求,大部 分性能指标已完成或超过任务书指标
· USB 2.0兼容接口
支持12 Mbps的USB全速数据率
支持USB暂停,恢复和远程唤醒操作
· 每个UART的增强功能:
最高可达12 Mbps 的数据传输速率波特率发生器
128字节TX FIFO
384字节的RX FIFO中7,8或9个数据位,1或2个停止位
自动硬件(RTS / CTS或DTR / DSR)流量控制
自动软件(XON / XOFF)流控制
多点模式W /自动半双工收发器控制
多点模式W /自动发送启用
半双工模式
远程唤醒的睡眠模式
可选的GPIO或调制解调器的I / O
· 内置48 MHz时钟
· 2.97 - 3.63V单电源
· 5V宽容输入
·32引脚QFN封装
·虚拟COM端口驱动程序
Windows 2000,XP和Vista
Windows CE的4.2,5.0,6.0
Linux
MAC
1. 全双工操作(相互独立的接收数据和发送数据);
2. 同步操作时,可主机时钟同步,也可从机时钟同步;
3. 独立的高精度波特率发生器,不占用定时/计数器;
4. 支持5、6、7、8和9位数据位,1或2位停止位的串行数据帧结构;
5. 由硬件支持的奇偶校验位发生和检验;
6. 数据溢出检测;
7. 帧错误检测;
8. 包括错误起始位的检测噪声滤波器和数字低通滤波器;
9. 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;
10.支持多机通信模式;
11.支持倍速异步通信模式。
USART收发模块一般分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为所有的模块共享。
时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,
发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同帧结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多帧数据无延时的通信。
接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检测。
与UART兼容性
AVR USART 和AVR UART 兼容性 USART 在如下方面与AVR UART 完全兼容:
· 所有USART 寄存器的位定义。
· 波特率发生器。
· 发送器操作。
· 发送缓冲器的功能。
· 接收器操作。
然而,接收器缓冲器有两个方面的改进,在某些特殊情况下会影响兼容性:
· 增加了一个缓冲器。两个缓冲器的操作好象是一个循环的FIFO。因此对于每个接收到的数据只能读一次!更重要的是错误标志FE 和DOR,以及第9 个数据位RXB8与数据一起存放于接收缓冲器。因此必须在读取UDR 寄存器之前访问状态标志位。否则将丢失错误状态。
· 接收移位寄存器可以作为第三级缓冲。在两个缓冲器都没有空的时候,数据可以保存于串行移位寄存器之中( 参见 Figure 61),直到检测到新的起始位。从而增强了 USART 抵抗数据过速(DOR) 的能力。
下面的控制位的名称做了改动,但其功能和在寄存器中的位置并没有改变:
· CHR9改为UCSZ2。
· OR改为DOR。
时钟产生时钟产生逻辑为发送器和接收器产生基础时钟。USART 支持4 种模式的时钟: 正常的异步模式,倍速的异步模式,主机同步模式,以及从机同步模式。USART 控制位UMSEL和状态寄存器C (UCSRC) 用于选择异步模式和同步模式。倍速模式( 只适用于异步模式) 受控于UCSRA 寄存器的U2X。使用同步模式 (UMSEL = 1) 时,XCK 的数据方向寄存器 (DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)。仅在同步模式下XCK 有效。
片内时钟产生-波特率发生器内部时钟用于异步模式与同步主机模式。
USART 的波特率寄存器UBRR 和降序计数器相连接,一起构成可编程的预分频器或波特率发生器。降序计数器对系统时钟计数,当其计数到零或UBRRL 寄存器被写时,会自动装入UBRR 寄存器的值。当计数到零时产生一个时钟,该时钟作为波特率发生器的输出时钟,输出时钟的频率为fosc/(UBRR 1)。发生器对波特率发生器的输出时钟进行2、8或16 的分频,具体情况取决于工作模式。波特率发生器的输出被直接用于接收器与数据恢复单元。数据恢复单元使用了一个有2、8或16个状态的状态机,具体状态数由UMSEL、U2X 与 DDR_XCK 位设定的工作模式决定。