知乐空间

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

串行端口的波特率(为了找出为什么为串行端口通信设置波特率)

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

什么是波特率?

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

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

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

有两种更可靠的说法:

1.根据电的物理特性、传输介质和使用串口设备的要求。

为了保证有效的通信,根据电和传输介质的物理特性结合串口设备的要求,确定了RS232的最大传输速率只能是115200,然后逐步分为57600,28800,19200...为了适应这些速率,设计了相应的晶体频率。

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

电话的带通是300-3千赫。海耶斯当时启动了调制解调器,所以用的是2400HZ的信号,波特率是2400。既然基本频率确定了,以后用来提高通信速率的方法都是基于2400,那么9600 …………

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

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

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

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

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

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

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

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

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

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

那么溢出频率自然是:

OSC_FREQ(Hz)/((256-TH1)*12).

因此,波特率最终由下式得出:

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

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

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

32*12*(256-TH1)=(2s mod * OSC _ freq(Hz))/Baud _ rate

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

TH1=256-(2SMOD*OSC_FREQ(Hz))/(波特率*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字节。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。

留言与评论(共有 0 条评论)
验证码: