51单片机中串口波特率的计算方法详解

本文解析了串口通信中波特率的定义,介绍51单片机如何通过定时器实现数据发送,并揭示了波特率计算背后的原理,涉及分频与倍频策略。特别关注了方式1的公式及其背后的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,波特率并不是指每秒传送多少个字节,而是指每秒能够传送多少个二进制。举例:波特率为9600代表每秒能够传送9600个二进制,而一个字节=8个二进制。

那么,串口是按照什么时间标准来发送数据的?

其实,串口是在定时器计数时,每溢出一次发送一个二进制。溢出的意思就是假设我现在定时器设置为8位计数器,那么说明计数到256就会溢出,然后设置计数器的起始值为0,那么计数器开始工作后,将会从0开始,一个数一个数往上数(1,2,3.....),当达到256时,一次计数完成,这时候串口就会发送一个二进制。

既然这样,那么我们就要通过设置这个起始值的大小,来改变它没发送一个二进制所需要的时间。

在51单片机中,计数一次的时间时多少呢?也就是从1数到2间隔多长时间?

其实,在51单片机中,一个机器周期计数一次,而一个机器周期等于12个振荡周期。假设我们51单片机使用的晶振频率为12Mhz,那么振荡周期就是1/(12M),那么一个机器周期=1/(1M)。

通过上面的描述,大概就能推算出波特率的计算方法:

波特率 = (12M/12)/(256-起始值)

但结果并不是这样子,而是:

波特率 = [(12M/12)/(256-起始值)]*((2^mod)/32)

这其实是因为单片机中为我们提供了串口的几种方式:(方式0,1,2,3),详细内容自己查询

上面的公式为方式一的公式,为什么要在加上后面的括号内容呢?

其实起初的公式是我们自己根据单片机晶振频率推算出来,但是单片机串口中提供的方法不是直接用单片机的晶振频率,而是将它进行32分频,而2^mod也是这种方法提供给我们用来选择分频后放大几倍,假如现在你选择mod为1,则放大2倍。(就是一种先分频后倍频的感觉,我感觉这么做是为了好让用户可以自己选择放大倍数,至于真实原因不必深究)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丑爱表现

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值