串口波特率(为了搞清楚串口通信为啥设置波特率)

文章目录[隐藏]

  • 波特率是多少?
  • 为什么要为串行通信设置波特率?
  • 单片机串行通信波特率的计算
  • 波特率与字节的关系

串行端口波特率(以便找出设置串行端口通信的原因)

为什么要为串行通信设置波特率?要知道这个答案,首先我们来了解一下波特率是多少:

波特率是多少?

波特率,以bps为单位-每秒传输的字节数。

波特率表示每秒传输的符号数,是衡量数据传输速率的指标。它用单位时间内载波调制状态变化的次数来表示。波特率是指数据信号对载波的调制速率,用单位时间内载波调制状态变化的次数来表示,其单位为波特。

为什么要为串行通信设置波特率?

有两种可靠的说法:

1、根据电的物理特性,传输介质等。,结合串口设备的要求

为了保证有效的通信,根据电、传输介质的物理特性和串口设备的要求,只能确定RS232的最大传输速率为115,200,然后逐步得到57,600、28,800和19,200。

2.这是由电信线路的特性决定的

电话线的带通是300-3千赫。当时hayes启动了modem,所以使用的2400HZ信号对应的是2400的波特率。因为确定了基本频率,未来提高通信速率的方法都是在2400的基础上倍频,所以是9600.19200…

无论哪种方式,晶振频率之前都有波特率。

单片机串行通信波特率的计算

在模式0和模式2下,串口的波特率是固定的,模式0是Fosc/12。模式2是Fosc/32或Fosc/64,由PCON寄存器的SMOD位决定。

在模式1和模式3中,波特率是一个变量值,可以由定时器1产生(8052可以由定时器2产生),那么波特率是多少呢?

波特率由定时器1的溢出率决定:

波特率= (2SMOD/32)*(定时器1溢出率)

注:这里的2SMOD是指数,SMOD是波特率双波特率位,在PCON寄存器中。

当定时器1用作波特率发生器时,通常需要将定时器1配置为8位自动重载模式,并禁止定时器1中断。那么tim是如何计算er 1的溢出率的呢?溢出率是溢出的频率。假设晶振频率为12MHz,TH1值为0xFE,溢出只需要两个时钟脉冲,溢出周期为2us,因此溢出频率为500KHz。

根据计时器部分,计时时间有以下计算公式:

计时时间=(最大计数值-初始计数器值)*机器周期=(最大计数值-初始计数器值)*(12/晶振频率(Hz))(s)=(256-TH1)*(12/OSC _ freq(Hz))(s)。

那么溢出频率自然是:

OSC_FREQ(赫兹)/((256-TH1)*12).

因此,波特率最终推导如下:

(2s mod/32)*(OSC _ FREQ(Hz)/((256-TH1)* 12)).

有了波特率的计算公式,自然可以根据波特率推导出TH1的初始值:

波特率=(2SMOD/32)*(OSC _ FREQ(Hz)/((256-TH1)* 12))

32 * 12 *(256-TH1)=(2SMOD * OSC _ FREQ(赫兹))/波特率

256-TH1=(2SMOD*OSC_FREQ(赫兹))/(波特率*32*12)

TH1=256-(2SMOD*OSC_FREQ(赫兹))/(波特率*32*12)

假设晶振频率为11.0592MHz,波特率为9600,SMOD=0,那么TH1的初始值应该是多少?根据上述公式,可以计算出TH1=256-11059200/(9600*32*12)=0xFD。

波特率与字节的关系

1GB=1024MB

1MB=1024KB

1KB=1024B(字节)

我们需要串口每秒接收512字节的数据,串口的波特率为115200位/秒

波特率115200 = 115200(位/秒)

如果没有奇偶校验位,应该除以10得到每秒字节数:波特率115200 = 115200(比特/秒)= 11520(字节/秒)

除以1024,就是KB/秒:波特率115200 = 115200(比特/秒)= 11.25(KB/秒),也就是每秒可以接收512个字节。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平