C51单片机 波特率选择 和 串口的工作方式

时间:2022-01-09 23:32:00

串口的工作方式  


MCS-51串行口有0、1、2、3四种工作方式。

方式0:8位同步移位寄存器方式
方式1:10位通用异步通信
方式2:11位异步通信
方式3:可变波特率11位异步通信。

方式0:同步移位寄存器方式,波特率固定为fosc/12.
由RXD(P3.0)引脚输入和输出数据,由TXD(P3.1)引脚输出同步移位时钟。
发送:当执行一条写SBUF的指令(MOV SBUF ,A)时,就启动串行数据的发送。
接收:当满足REN=1(允许接受)且接收中断标志RI=0是,就会启动一次接受过程。

方式1:10位通用异步通信
一帧信息为10位:1位为起始位(0),8位数据位,1位停止位(1)
TXD(P3.1)是发送端。RXD(p3.2)是接收端。
采用T1作为串行口接收和发送的波特率发生器,数据传输波特率可调,由T1的溢出决定,可用程序设定。


TI:发送中断标志
方式0中,在发送第8位末尾置位;其它方式中,在发送停止位开始时设置。TI=1表示发送帧结束。由硬件置位,用
软件清零。必须清零,因为如果TI始终等于1,则表示发送帧结束,也就不会再发送帧 。(TI=1表示一直处于中断状态,也就无法发送了,所以要清零)

RI:接收中断标志
方式0中,在接收第8位末尾置位;其他方式中,在接收停止位中间设置,RI=1表示帧接收结束。由硬件置位,用软件清除。(RI=1表示一直处于中断状态,也就无法接受了,所以要清零。)

TI和RI是同一个中断源,两者共用一个中断向量。CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求,所以在全双工通信时,必须由软件来判别。

REN:允许接收位
REN=0,禁止接收;REN=1,允许接受。软件设置。

TB8:方式2和方式3中要发送的第9位数据。在通信协议中,常规定TB8为奇偶校验位。在8051多机通信中,
TB8用来表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址。用软件来置位/清除。

RB8:方式2和方式3中接受到的第9位数据。
方式1中接收到的是停止位。方式0中不使用这一位

波特率选择

在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在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作为波特率发生器,其公式如下:
波特率=C51单片机 波特率选择 和 串口的工作方式定时器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
波特率=C51单片机 波特率选择 和 串口的工作方式定时器T1溢出率

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

C51单片机 波特率选择 和 串口的工作方式

三、方式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中断。这时,溢出周期为:

C51单片机 波特率选择 和 串口的工作方式


系统晶振频率选为11.0592MHZ就是为了使初值为整数,从而产生精确的波特率。
如果串行通信选用很低的波特率,可将定时器Tl置于工作方式0或工作方式1,但在
这种情况下,T1溢出时,需用中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。
表6—2列出了各种常用的波特率及其初值。

C51单片机 波特率选择 和 串口的工作方式C51单片机 波特率选择 和 串口的工作方式