MCS-51单片机串行口工作方式与波特率计算举例

合集下载

MCS-51系列单片机串行通信波特率的研究

MCS-51系列单片机串行通信波特率的研究
Vo 1 . 9 , No . 2 8 , Oc t o be r 2 0 1 3 .
T e h + 8 6 — 5 5 1 — 6 5 6 9 0 9 6 3 6 5 6 9 0 9 6 4
MC S 一 5 1 系列单片机 串行通信波特率的研 究
李鹏
( 长江大学 计算机科 学学 院, 湖北 荆州 4 3 4 0 2 3 )
( C o n e g e o f Co mp u t e r S c i e n c e , Y ANG TZ E Un i v e r s i t y , J i n g z h o u 4 3 4 0 2 3 , Ch i n a )
A bs t r ac t :Th i s pa pe r e xp ou nds t he s t r uc t u r e of 8 9C5 1 s e r i a l c o m m uni c a t i on por t a n d c a l c u l a t i on me t ho d o f ba ud r a t e ,i t po i n t s out t he 8 9C5 2 t he t WO wa ys ofb a ud r a t e ba s e d on 89 C52 s e r i l a c o mm uni c a t i on b a ud r a t e ge ne r a t o r s t r uc t ur e a n a l y s i s .The c o r r e- s po n ̄ n g r e l a t i o n o fba u d r a t e f r o m 8 9 C 51& 8 9 C5 2 a nd i n i t i a l va l ue i s b y c a l c u l a t e d ,a n d i t ind f O Ut t he ma x i m um o fb a u d r a t e , a nd i t p r e s e nt s t he e x a mp l e o fi n i t i li a z a t i o n pr og r a mmi n g.

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串行口的工作方式

方ห้องสมุดไป่ตู้0——同步移位寄存器
时序
1.2 方式1——8位UART
数据在TxD发送,接收使用RxD 帧格式固定,每一帧数据共有10位,包括1个起始位、8个数据
位(最低有效位在前)、1个停止位 接收到的停止位保存到SCON的RB8中 波特率可变取决于T1或T2的溢出率、和PCON中的SMOD位 波特率因子为16
单片机原理与应用
MCS-51串行口的工作方式
方式0——同步移位寄存器 方式1——8位UART 方式2和3——9位UART
1.1 方式0——同步移位寄存器
串行数据通过RxD引脚输入或输出 TxD输出移位时钟 发送和接收不可同时进行 发送或接收的均为8位数据,最低有效位在前 波特率固定为单片机振荡频率的1/12
方式1——8位UART
时序
1.3 方式2和3——9位UART
数据在TxD发送,接收使用RxD 帧格式固定,每一帧数据共有11位,包括1个起始位、8个数据
位(最低有效位在前)、1个可编程的第9位数据、1个停止位。第 9位数据在发送时通过TB8赋值为0或1 接收时将第9位数据存入RB8中 波特率
方式2:只能为振荡器频率的1/32或1/64 方式3:与方式1时相同
方式2和3——9位UART
时序
单片机原理与应用

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单片机中波特率的计算方法在51单片机中波特率的计算方法一、传统51单片机波特率的算法传统51单片机的及其周期是晶振的1/12,一般在使用串口工作方式1使用时,波特率的计算公式:其中:bps----------波特率(bit/s)SMOD------波特率加倍位(PCON.7)n-------------单次收发8为数据X------------初值当设定确定波特率时,需要计算初值,换算公式为:误码率计算公式:其中:WML-------误码率bps1---------实际波特率Bps----------理论波特率注意:误码率一般不要超过3%。

以下举例说明:1、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz,使用串口工作方式1(异步串口通信),bps=9600bit/s。

求定时器1工作方式2的初值?当设定SMOD=0时,根据初值计算公式:转换成HEX(十六进制)为0xfd。

误码率为0当设定SMOD=1时,根据初值计算公式:转换成HEX(十六进制)为0xfa。

误码率为02、传统51单片机(机器周期是晶振的1/12),外部晶振11.1592MHz,使用串口工作方式1(异步串口通信),bps=4800bit/s。

求定时器1工作方式2的初值?当设定SMOD=0时,根据初值计算公式:转换成HEX(十六进制)为0xfa。

误码率为0当设定SMOD=1时,根据初值计算公式:转换成HEX(十六进制)为0xf4。

误码率为0二、STC高性能系列的单片机例如SCT12系列的单片机为12T工作方式,即及其周期与外部晶振频率相同。

一般在使用串口工作方式1使用时,波特率的计算公式有两种,第一种是使用定时器1工作方式2作为波特率发生器,定时器1的初值计算:对应波特率计算公式:其中:X-------------初值fosc---------外部晶振频率SMOD------波特率加倍位bps----------波特率(bit/s)N-------------数据位另一种是使用STC12系列单片机内部独立波特率发生器。

c 51单片机串口初值计算

c 51单片机串口初值计算

c 51单片机串口初值计算单片机是一种集成电路,可以用来实现各种功能。

而串口是一种用于数据传输的通信接口,常用于单片机与外部设备之间的通信。

在单片机中使用串口通信时,需要对串口进行初始化,设置其波特率和各种参数。

本文将通过详细介绍C51单片机串口的初值计算方法,帮助读者更好地理解单片机串口的使用。

在C51单片机中,串口的初始化可以通过设置相应的寄存器来实现。

下面以51系列单片机为例,介绍串口初始化的过程。

首先,需要设置串口的波特率。

波特率是指在一个时间单位内,通过通信线路传输的波形的变化次数。

常用的波特率有9600bps、115200bps等。

要设置波特率,需要先确定所使用的晶振频率和串口的时钟分频系数。

C51单片机的串口通信是通过定时器T1实现的,波特率的计算公式为:波特率 = 晶振频率 / (12 * 2^n * (65536 - T1初值))其中,n为波特率位数,可以取3、4、5等。

按照常用的8位数据位和1位停止位,可以将n取为4。

以晶振频率为11.0592MHz,波特率为9600bps为例,计算T1初值:9600 = 11059200 / (12 * 2^4 * (65536 - T1初值))通过计算得到T1初值为77。

将77转换成16进制,得到的值为4D。

接下来,需要设置串口的工作模式和相关参数。

C51单片机的串口通信有两种模式:帧模式和位模式。

帧模式是指在每个数据字节的前后都添加起始位、停止位和校验位,可以提高数据的可靠性。

位模式是指仅传输数据位,不添加起始位、停止位和校验位,可以提高传输速率。

C51单片机的串口默认为位模式,但可以通过设置相应的寄存器来选择工作模式。

串口相关的寄存器包括SCON、PCON和T2CON。

设置串口工作模式以及数据位数、停止位数和校验方式的方法如下所示:SCON = (模式选择位7) (模式选择位6) 0 (8位数据位选择) (校验方式选择) (停止位数选择) (模式选择位1) (模式选择位0)其中,模式选择位7和模式选择位6可以根据实际需求进行设置。

51单片机波特率计算

51单片机波特率计算

51单片机波特率计算
单片机的波特率计算通常采用以下公式:
波特率=系统频率/(16*(SPBRG+1))
其中,系统频率是单片机的主频或振荡频率,SPBRG是串口波特率发生器的寄存器。

这个公式适用于大多数单片机,但具体的值可能会有所不同。

接下来以51单片机为例,介绍波特率计算的具体步骤。

1.确定系统频率:51单片机的系统频率通常为12MHz,可以根据具体情况进行调整。

我们假设系统频率为12MHz。

2.确定波特率:根据需求,确定所需的波特率。

假设需要设置的波特率为9600。

3.代入公式并求解:将系统频率和所需的波特率代入公式中,计算出SPBRG的值:
解方程得到:
由于SPBRG的值必须是一个整数,因此需要进行四舍五入:
SPBRG=77(四舍五入)
所以,在12MHz的系统频率下,如果需要设置51单片机的波特率为9600,SPBRG的值应为77
需要注意的是,不同的单片机可能会有不同的最小波特率误差和最大波特率误差。

在实际应用中,还需要考虑到波特率误差的范围,以确保数据的可靠传输。

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

MCS-51单片机串行口工作方式与波特率计算举例
1)方式0
方式0是外接串行移位寄存器方式。

工作时,数据从RXD串行地输入/输出,TXD 输出移位脉冲,使外部的移位寄存器移位。

波特率固定为fosc/12(即,TXD每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。

每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。

实际应用在串行I/O口与并行I/O口之间的转换。

2)方式1
方式1是点对点的通信方式。

8位异步串行通信口,TXD为发送端,RXD为
接收端。

一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。

波特率由T1或T2的溢出率确定。

在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。

(1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入
输出移位寄存器的第9位。

发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND
和DATA无效,发送停止位,一帧结束,置TI=1。

(2)接收:REN=1后,允许接收。

接收器以所选波特率的16倍速率采样RXD
端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。

由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。

接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。

此后:
A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。

B、若RI=0、SM2=1,则只有停止位为1时,才有上述结果。

C、若RI=0、SM2=1,且停止位为0,则所接数据丢失。

D、若RI=1,则所接收数据丢失。

无论出现那种情况,检测器都重新检测RXD的负跳变,以便接收下一帧。

3)方式2、方式3
方式2和方式3是9位异步串行通信,一般用在多机通信系统中或奇偶校验的通信过程。

在通讯中,TB8和RB8位作为数据的第9位,位SM2也起作用。

方式2与方式3的区别只是波特率的设置方式不同。

(1)发送
向SBUF写入一个数据就启动串口发送,同时将TB8写入输出移位寄存器第9位。

开始时,SEND和DATA都是低电平,把起始位输出到TXD。

DATA为高,第一次移位时,将‘1’移入输出移位寄存器的第9位,以后每次移位,左边移入‘0’,当TB8移到输出位时,其左边是一个‘1’和全‘0’。

检测到此条件,再进行最后一次移位,/SEND=1,DATA=0,输出停止位,置TI=1。

(2)接收
置REN=1,与方式1类似,接收器以波特率的16倍速率采样RXD端。


起始位0移到输入寄存器的最左边时,进行最后一次移位。

在RI=0,SM2=0或接收到的第9位=1时,收到的一字节数据装入SBUF,第9位进入RB8,置RI=1;然后又开始检测RXD端负跳变。

3、多机通信
在这里,多机系统是指‘一主多从’。

51系列单片机中,利用第9位TB8/RB8
来区分地址与数据信息,用位SM2确定接收方是否对地址或数据帧敏感。

其原则是:
1)发送方用第9位TB8=1标志地址帧,TB8=0标志数据帧。

2)接收方若设置SM2=1,则只能接收到地址信息,若设SM2=0,则不管是地址还
是数据帧,都能接收到。

利用方式2、3的特点,在点对点的通讯中,在发送方可以用第9位TB8
作为奇偶校验位。

在接收方,SM2位必须清0。

4、波特率
1)方式0的波特率=fosc/12
2)方式2的波特率=2^smod*fosc/64
3)方式1、3的波特率由T1或T2的溢出率和SMOD位确定:
(1)用T1:波特率=2^smod*T1定时器的溢出率/32,T1为方式2
T1定时器溢出率=1/((12/fosc)*(256-X))
例:已知fosc=6MHz,SMOD=0,设置波特率为2400,求T1的计数初值X。

波特率=1/((12/fosc)*(256-X))/32=fosc/12*32(256-X)
(256-X)=fosc/2400/384=6M/2400/384;256-X~=6.5104
X~=250=FAH 只能近似计算。

若fosc=11.0592MHz, 则256-X=11.0592M/2400/384=4068/384=12 X=F4H;可精确算出,对其它常用的标准波特率也是能正确算出。

所以这个晶振频率是最常用的。

如果SMOD=1,则同样的X初值得出的波特率加倍。

(3)用T2:
在52型单片机中,串口方式1、3的波特率发生器选择由TCLK、RCLK位
确定是T1还是T2。

若TCLK=1,则发送器波特率来自T2,否则来自T1。

若RCLK=1,则接收器波特率来自T2,否则来自T1。

由T2产生的波特率与SMOD无关。

T2定时的最小单元=2/fosc。

T2的溢出脉冲16分频后作为串口的发送或接收脉冲。

波特率=(1/((2/fosc)(65536-X)))/16=fosc/(32(65536-X))
例:已知fosc=11.0592MHz,求波特率=2400时的X
2400=11059200/(32(65536-X)) 65536-X=144 X=65392=FF70H
计数器初值寄存器:RCAP2H=0FFH,RCAP2L=70H。

相关文档
最新文档