波特率发生器(51单片机用定时器T1或T2作为波特率发生器,为什么不用T0)

2024-03-30 15:40:05 :32

波特率发生器(51单片机用定时器T1或T2作为波特率发生器,为什么不用T0)

大家好,今天小编来为大家解答以下的问题,关于波特率发生器,51单片机用定时器T1或T2作为波特率发生器,为什么不用T0这个很多人还不知道,现在让我们一起来看看吧!

本文目录

51单片机用定时器T1或T2作为波特率发生器,为什么不用T0

51单片机只有 T1、T0,没有T2(52才有)。如果工作在方式0,方式1、方式2 的话,51单片机的T0、T1都可以做波特率发生器(一般是方式2做波特率发生器)。但是T0可以工作在方式3,T1不能工作在方式3。这种情况下,只能用T1作为波特率发生器,T1 的资源TF1、TR1给了t0,t0工作在方式3,可以当做定时器、计数器用。而如果用t0做波特率发生器,因为T1不能工作在方式3,方式3就没法用了。

AT89S51单片机时钟振荡频率为11.0592MHz,选用定时器T1工作模式2作为波特率发生器,

void UartInit(void) //2400bps@11.0592MHz

{

PCON &= 0x7F; //波特率不倍速

SCON = 0x50; //8位数据,可变波特率

TMOD &= 0x0F; //清除定时器1模式位

TMOD |= 0x20; //设定定时器1为8位自动重装方式

TL1 = 0xF4; //设定定时初值

TH1 = 0xF4; //设定定时器重装值

ET1 = 0; //禁止定时器1中断

TR1 = 1; //启动定时器1

}

1.T1定时器的初值计算:

波特率=((2的SMOD次方)x F)/(32x12x(256-N)

其中:

SMOD是特殊功能寄存器zhiPCON的第7位,取1或0(波特率倍增dao,或不倍增)。

N是置入定时器TH1的时间常数初值

F是晶振频率

当SMOD取0,波特率=F/(32x12x(256-N)),

N=256-F/(波特率x32x12)=256-1105920/(9600x32x12)=253 即0FDh

扩展资料:

波特率可以被理解为一个设备在一秒钟内发送(或接收)了多少码元的数据,它是对符号传输速率的一种度量,表示单位时间内传输符号的个数(传符号率)。

通过不同的调制方法可以在一个符号上负载多个比特信息。在计算机网络通信中,比特率指单片机或计算机在串口通信时的速率,指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数模拟线路信号的速率,以波形每秒的振荡数来衡量。 

如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。

参考资料来源:百度百科-波特率

波特率发生器的波特率选择

在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在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 FDHT1溢出率= T1计数率/产生溢出所需的周期数产生溢出所需的周期数=256-FD(253)=3 SMOD=0 11059200/12*3 *1/32=9600

52系列单片机T2用作波特率发生器怎么使用

//你说的是STC89C52吗?下面供参考9600bps  @11.0592MHzvoid UartInit(void)//9600bps@11.0592MHz{SCON = 0x50;//8位数据,可变波特率AUXR |= 0x01;//串口1选择定时器2为波特率发生器AUXR &= 0xFB;//定时器2时钟为Fosc/12,即12TT2L = 0xE8;//设定定时初值T2H = 0xFF;//设定定时初值AUXR |= 0x10;//启动定时器2}

波特率发生器的波特率计算

在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对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中断。这时,溢出周期为:

波特率发生器原理

波特率编程波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示 。波特率发生器不是产生波特率的,波特率时钟频率/波特率因子=波特率。波特率发生器的作用是从输入时钟转换出需要的波特率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:325reg bclk; //寄存器数据类型bclkreg 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,使该脉冲信号复位为低电平,以低电平作为开始*/endelse 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值,被非阻塞方式复位*/

关于波特率发生器到此分享完毕,希望能帮助到您。

波特率发生器(51单片机用定时器T1或T2作为波特率发生器,为什么不用T0)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.