波特率与晶振

波特率怎么发生的

在串行通信中,MCS—51串口可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。见下图寄存器配置:
波特率与晶振_第1张图片

方式02的波特率固定,方式13由波特率发生器产生,计算公式

=2smod32f12(256)

  • 举例说明
    对于频率11.0592MHz晶振,定时器设置为250,smod设置1那么根据计算公式
    =2132(11.059210612(256250))=9600

那么11.0592MHz晶振使用此种方法的最大波特率
=2132(11.059210612(256255))=57600

为什么51单片机经常使用11.0592MHz晶振

因为美国工业电子联盟(Electronic Industries Alliance,EIA) RS-232-C标准中规定了数据传输速率为: 50、75、100、150、300、600、1200、2400、4800、9600、19200、38400。如果继续问为什么它要这么制定, 据Google是因为由电信线路特性决定的电话线路的带通是300-3kHz,当时HAYES先搞的modem,所以用的2400HZ信号,对应波特率是2400。由于基本频率确定了,以后采用的提高通讯速率的方法都是在2400基础上倍频的,所以形成了9600,19200……

经过上面的计算,很清楚就知道了,11.0592Mhz的晶振很容易产生上面的波特率。比如将计时器设置值从255开始减小那么就可以产生这些精准的波特率。
57600/3=19200,57600/6=9600,57600/12=4800,57600/24=2400

使用12MHZ的晶振会带来什么影响

51单片机如果使用12MHz的晶振则每个机器周期是1us,这会很方便的帮助我们计时,所以有时候对串口波特率准确度要求不高时,想获得比较方便的计时可使用12MHz晶振。
下面我们要讨论什么是“要求不高”
一般的串口时序,1位起始位+8位数据位+1位停止位。如下图
enter image description here

我们看两个波特率有误差会出现什么情况。假设接受机器第一次的采样是在起始位的中间开始。
波特率与晶振_第2张图片
当采样与波特率一致,那么一定能接收到正确的数据0x55
波特率与晶振_第3张图片
当采样率与波特率差5%时,那么经过十次误差积累(第一次起始位就开始了)那么就有0.5位的误差这时候最后一位可能出错。这是我们不希望的。

所以什么时候12MHz晶振与11.0592MHz的晶振波特率差别大于5%呢。有人可能认为 (1211.0592)/11.0592=8.51 ,所以串口不能正常通信
事实上并不正确,当使用不同晶振由于计时器的设置值变了所以误差不等于8.51%

注意图中12MHz晶振与11.0592MHz的晶振波特率参考表的定时器设置值变了。
结论就是低波特率下串口通信不会出现问题,当波特率大于4800时,这时候使用串口将会出现错误。那么给单片机烧写程序会不会出错呢,答案是不会,原因是电脑主频以GHz衡量,出的波特率不只是标准波特率,这种频率发生的波特率误差远小于5%,完全可以忽略不计。

:本文参考知乎用户@ycicy,@马千里的回答,网易博主@qiu_zhi2008,CSDN博主@luckystar_sai的博文
链接:
http://blog.csdn.net/qq_33573235/article/details/52638856
https://www.zhihu.com/question/21666542
http://blog.163.com/qiu_zhi2008/blog/static/60140977201092651854445/

你可能感兴趣的:(电子设计)