51单片机定时计数器溢出率计算和串口的波特率之间的关系

合集下载

c51 串口 波特率的计算

c51 串口 波特率的计算

c51 串口波特率的计算
不同,所以,各种方式的波特率计算公式也不同。

一、方式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 中断。

这时,溢出周期为:
系统晶振频率选为11.0592MHZ 就是为了使初值为整数,从而产生精确的波特率。

如果串行通信选用很低的波特率,可将定时器Tl 置于工作方式0 或工作方式1,但在这种情况下,T1 溢出时,需用中断服务程序重装初值。

中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。

表62 列出了各种常用的波特率及其初值。

51单片机串口通信波特率设置

51单片机串口通信波特率设置

51单片机串口通信波特率设置51单片机串口通信波特率设置MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。

它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。

1. 数据缓冲寄存器SBUFSBUF是可以直接寻址的专用寄存器。

物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。

接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。

对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。

2. 状态控制寄存器SCONSCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。

它的各个位定义如下:MSB LSBSM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。

SM2在工作方式2和3中是多机通信的使能位。

在工作方式0中,SM2必须为0。

在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。

在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。

此功能可用于多处理机通信。

REN为允许串行接收位,由软件置位或清除。

置位时允许串行接收,清除时禁止串行接收。

TB8是工作方式2和3要发送的第9位数据。

在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。

在多处理机通信中,该位用于表示是地址帧还是数据帧。

RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。

MCS-51单片机串行口的应用

MCS-51单片机串行口的应用

方式1的例子
某单片机系统使用中断方式与远端进行串行通信。8位数据,无校验。波特率为4800, 以T1作为波特率发生器,振荡器频率为11.0592MHz
发送由本机启动,需要发送的字符串预先存储于内部RAM从40H开始的单元中,最多16 个8位数据,以EOF字符(-1)结束,字符个数(包括EOF)预先存储于内部RAM单元30H中

波特率的计算
使用定时器/计数器T1作为波特率发生器
方式0时,溢出率为fosc/12/(213-TC) 方式1时,溢出率为fosc/12/(216-TC) 方式2时,溢出率为fosc/12/(28-TC) 方式2最方便
波特率的计算
假设使用T1作为串行口的波特率发生器 T1工作在方式2 SMOD位为1 波特率要求为1200bps 振荡器频率为12MHz 需要对T1如何初始化?这时产生的波特率与所要求的有多大误
方式0的应用——输出
方式0的应用——输入
1.3 方式1的应用
通常用于标准的串行通信 数据有8位,可以传输8位编码的字符,或者传输7位编码字符,
最高位作校验位用
方式1的例子
使用MCS-51的串行口进行8位数据、无校验的异步传输。波特 率为4800,振荡器频率为11.0592MHz。定时器/计数器T2另有 他用,以T1作为波特率发生器。发送使用查询方式,而接收过 程用中断处理
单片机原理与应用
单片机原理与应用
MCS-51单片机串行口的应用
波特率发生器原理
1.1 波特率的计算
方式0的波特率是固定的,为fosc/12 方式2的波特率是fosc/32或fosc/64,取决于PCON中SMOD位的

若SMOD=0,波特率为fosc/64 若SMOD=1,波特率为fosc/32

51系列单片机波特率的计算方法

51系列单片机波特率的计算方法

51系列单片机波特率的计算方法概述51系列单片机是一种常用的低功耗、高性能的8位单片机。

在串行通信中,波特率是指单位时间内传输的数据位数,是一个十分重要的参数。

计算正确的波特率可以确保数据的可靠传输和通信的稳定性。

本文将详细介绍51系列单片机波特率的计算方法,并给出实际应用中的示例。

计算机波特率的原理波特率是通过改变每个数据位的传输时间来实现的。

对于51系列单片机,它的波特率是由两个寄存器控制的,分别是TH1和TL1、这两个寄存器是16位的,它们的值决定了单片机串口的传输速度。

波特率的计算公式如下:波特率=定时器1溢出率×(TH1×256+TL1)其中,定时器1的溢出率是一个常数,取决于单片机的时钟源和预分频系数。

对于常用的外部振荡器时钟源,定时器1的溢出率可以通过以下公式计算:定时器1溢出率=(2^SMOD/32)×(12×10^6/PSM)其中,SMOD是串口模块的倍频系数,可以取1或者0。

PSM是定时器1的预分频系数,可以取1、2、4、8实际应用示例假设我们要使用一个频率为12MHz的外部振荡器作为时钟源,希望设置波特率为9600。

接下来我们按照以下步骤计算波特率:1.根据提供的时钟源频率和波特率,计算出定时器1溢出率:定时器1溢出率=(2^SMOD/32)×(12×10^6/PSM)=(2^1/32)×(12×10^6/1)2.计算TH1和TL1的值:波特率=定时器1溢出率×(TH1×256+TL1)TH1×256+TL1≈0.128由于TH1和TL1都是整数,所以需要找到一个最接近0.128的数作为TH1和TL1的值。

在这个例子中,我们可以选择TH1=0,TL1=333.设置串口的工作模式和配置寄存器:在上述计算中,我们假设SMOD=1,PSM=1、根据实际需求,可以通过修改SM0/SM1和PS0/PS1/PS2位来设置倍频系数和预分频系数。

51单片机定时计数器溢出率计算和串口的波特率之间的关系

51单片机定时计数器溢出率计算和串口的波特率之间的关系

51单片机定时计数器溢出率计算和串口的波特率之间的关系作者:wang1jin | 来源:网络| 查看:128 次51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。

它的各个位的具体定义如下:SM0 SM1 SM2 REN TB8 RB8 TI RISM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。

串行口工 作模式设置。

SMO SM 檯式功能0 0 0 同歩移位寄存器1 1 8 位 UART 10 2 9位UART 1 1 3 9 位 UART 波特率在使用串口做通讯时,一个很重要的 参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。

波特率是指串行端口每秒内可以传输的波特位数。

这里所指的波特率,如标准9600 不是每秒种可以传送 9600个字节,而是指每秒可以传送9600 个二 进位,而一个字节要 8个二进位,如用串口模式 1来传输那么加上起始位和停止位,每个 数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是 9600 - 10 = 960 字节。

51芯片的串口工作模式 0的波特率是固定的,为 fosc/12 ,以一个12M 的晶振 来计算,那么它的波特率可以达到 1M 。

模式2的波特率是固定在 fosc/64 或fosc/32 , 具体用那一种就取决于 PCON 寄存器中的SMOD 位,如SMOD 为0 ,波特率为focs/64,SMOD 为 1,波特率为 focs/32 。

模式1和模式3的波特率是可变的,取决于定时器1或2 (52芯片)的溢出速率, 就是说定时器1每溢出一次,串口发送一次数据 。

那么我们怎么去计算这两个模式的波特 率设置时相关的寄存器的值呢?可以用以下的公式去计算。

发布:2010-1-05 01:08 | 波特率 £osc/12 可变 fosc/32 或fosc/64 可变波特率=(2咤D /32)><八溢出率上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。

51单片机定时器模式2与波特率的应用

51单片机定时器模式2与波特率的应用

51单片机定时器模式2与波特率的应用这里我们主要说的是波特率和定时器2的应用。

一般来说,我们串口通讯用到的都是异步串行通讯,工作的方式为方式1.方式1即为发送一个完整的信号为10个bit.起始信号为低电平,终止信号为高电平,串口通讯的两根线在平常时候都是处于高电平状态,当一旦有数据要进行转发的时候,电平拉低,通讯芯片马上对信号进行监听。

这样子就能正常收发数据了。

一般来说,我们都是采用定时器1的模式2(自动重装模式)来作为波特率发生器的,同理,定时器1的中断也就被我们遗弃了,因为为了波特率产生的时候不会受到干扰(如果定时器1有中断函数,那么处理中断函数会关闭定时器1中断,这时候波特率发生器就处于关闭状态了)。

根据STC给我们的文档,定时器1所具有的功能是比定时器2更强大的,所以,我们更倾向于把定时器1作为一个正常的中断定时器使用,而通过定时器是用说明也可以了解,定时器2的三种用途:1.捕获模式,简单点说就是检测外部引脚跳变时间,在整个负跳变时期记录下所在数值,然后申请中断,我们人工读取数值,得到波形宽度。

2.自动重装模式。

跟定时器01的方式2一样,不过这时候他的定时器范围可以达到2 ,并且这里是用的是硬件重载,所以不存在延迟效果,如果我们要使用在对精度有严格要求,并且苦恼于定时器01只能重装到2 =256,那这个定时器确实就是很强大的选择。

3.波特率发生器,这里跟定时器1的波特率发生器是一样的,同理,他使用的也是自动重装模式,不过这里是使用的是16位的自动重装,这可能也是他其中的优点之一吧,波特率变动范围很广。

关于波特率:波特率就是用来定义串口通讯时候每秒传送的数据量,用bps表示,像我们定义的波特率为600,即每秒发送600个二进制位,而我们每个字符占用十个二进制位,所以我们一秒一共可以发送6个二进制位。

关于波特率选定:一般来说,我们是选用低一点的波特率来进行通讯,因为高的波特率如。

单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第8章习题解答

单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第8章习题解答

第8章思考题及习题8参考答案一、填空1、AT89S51的串行异步通信口为(单工/半双工/全双工).答:全双工。

2。

串行通信波特率的单位是。

答:bit/s3。

AT89S51的串行通信口若传送速率为每秒120帧,每帧10位,则波特率为答:12004.串行口的方式0的波特率为。

答:fosc/125.AT89S51单片机的通讯接口有和两种型式。

在串行通讯中,发送时要把数据转换成数据。

接收时又需把数据转换成数据。

答:并行,串行,并行,串行,串行,并行6.当用串行口进行串行通信时,为减小波特率误差,使用的时钟频率为 MHz.答:11。

05927.AT89S51单片机串行口的4种工作方式中, 和的波特率是可调的,与定时器/计数器T1的溢出率有关,另外两种方式的波特率是固定的.答:方式1,方式38.帧格式为1个起始位,8个数据位和1个停止位的异步串行通信方式是方式 . 答:方式1.9.在串行通信中,收发双方对波特率的设定应该是的。

答:相同的。

10.串行口工作方式1的波特率是 .答:方式1波特率=(2SMOD/32)×定时器T1的溢出率二、单选1.AT89S51的串行口扩展并行I/O口时,串行接口工作方式选择。

A。

方式0 B。

方式1 C. 方式2 D。

方式3答:A2。

控制串行口工作方式的寄存器是。

A.TCON B。

PCON C。

TMOD D.SCON答:D三、判断对错1.串行口通信的第9数据位的功能可由用户定义.对2.发送数据的第9数据位的内容是在SCON寄存器的TB8位中预先准备好的。

对3.串行通信方式2或方式3发送时,指令把TB8位的状态送入发送SBUF中.错4.串行通信接收到的第9位数据送SCON寄存器的RB8中保存。

对5.串行口方式1的波特率是可变的,通过定时器/计数器T1的溢出率设定。

对6。

串行口工作方式1的波特率是固定的,为fosc/32。

错7. AT89S51单片机进行串行通信时,一定要占用一个定时器作为波特率发生器.错8。

描述波特率和溢出率的定义

描述波特率和溢出率的定义

描述波特率和溢出率的定义波特率和溢出率是串行通信中的两个重要概念,它们直接关系到数据传输的速度和可靠性。

一、波特率的定义波特率(Baud Rate)指的是单位时间内传输的比特数,通常用“波特”(Baud)表示,其单位为每秒钟多少个符号。

在串行通信中,每个符号可能占据多个比特,因此波特率与比特率(Bit Rate)并不完全相同。

比特率是指传输速率,即单位时间内传输的比特数,通常用“bps”(Bits Per Second)表示。

波特率越高,每秒钟可以传输的符号数越多,数据传输速度也就越快。

但是,波特率过高可能导致传输出错,因为在高速传输时,数据会受到各种干扰,可能会出现误码(Bit Error)。

因此,在选择波特率时,需要考虑数据传输的可靠性和传输速度之间的平衡。

一般来说,通信设备会提供多个波特率选项,用户可以根据通信需求进行选择。

二、溢出率的定义溢出率(Overrun Rate)是指在串行通信中,接收缓冲区无法及时处理数据,导致数据被丢失的情况。

当接收缓冲区已满时,如果继续接收数据,就会发生溢出。

溢出率是指发生溢出的频率,通常用百分比表示。

溢出率越高,说明数据传输过程中发生的错误越多,数据的可靠性也就越低。

溢出率通常由硬件设备决定,但是用户也可以通过调整串口缓冲区大小和波特率等参数来尽量减少溢出率的发生。

三、波特率与溢出率的关系波特率和溢出率是串行通信中的两个重要参数,它们直接关系到数据传输的速度和可靠性。

波特率越高,数据传输速度越快,但是也会增加出错的可能性。

溢出率越高,数据传输的可靠性越低,可能会导致数据丢失。

因此,在实际应用中,需要根据通信需求来选择合适的波特率和缓冲区大小,以保证数据传输的速度和可靠性。

同时,还需要注意串口线路的质量、干扰等因素,以避免数据传输出错。

波特率和溢出率是串行通信中的两个重要参数,它们直接关系到数据传输的速度和可靠性。

在选择波特率和缓冲区大小时,需要综合考虑通信需求、线路质量和干扰等因素,以保证数据的安全和可靠传输。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机定时计数器溢出率计算和串口的波特率之间的关系
发布: 2010-1-05 01:08 | 作者: wang1jin | 来源: 网络 | 查看: 128次
51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。

它的各个位的具体定义如下:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。

串行口工作模式设置。

波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。

波特率是指串行端口每秒内可以传输的波特位数。

这里所指的波特率,如标准9600 不是每秒种可以传送9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。

51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。

模式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为
focs/64,SMOD 为1,波特率为focs/32。

模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。

那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。

上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。

通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。

在这个定时模式2下定时器1溢出速率的计算公式如下:
溢出速率=(计数速率)/(256-TH1初值)
溢出速率=fosc/[12*(256-TH1初值)]
上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。

通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。

如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。

代入公式:
11.0592M
9600=(2÷32)×((11.0592M/12)/(256-TH1))
TH1=250
12M
9600=(2÷32)×((12M/12)/(256-TH1))
TH1≈249.49
上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。

当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

相关文档
最新文档