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


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

文章插图
串行端口的波特率(为了找出为串行通信设置波特率的原因)
串行通信为什么要设置波特率?要知道这个答案,我们先来了解一下什么是波特率:
什么是波特率?波特率以bps为单位-每秒传输的字节数 。
波特率表示每秒传输的符号数,是衡量数据传输速率的指标 。用单位时间内载波调制状态变化的次数来表示 。波特率是指数据信号对载波的调制速率 。用单位时间内载波调制状态变化的次数来表示,单位为波特(信息资源网Ba信息资源网ud) 。

串行通信为什么要设置波特率?有两种可靠的说法:
1.根据电、传输介质等的物理特性 。,结合串口设备的要求 。
为了保证有效的通信,根据电、传输介质等的物理特性 。结合串口设备的要求,确定了RS232的最大传输速率只能是115200,然后57600,28800,19200分两部分逐步实现...为了适应这些速率,设计了相应的晶体振荡器频率 。

2.这是由电信线路的特性决定的 。
电话的带通是300-3千赫 。海斯当时启动了调制解调器,所以用的是2400HZ信号,对应的波特率是2400 。由于基本频率已经确定,未来采用的所有提高通信速率的方法都是基于2400的倍频,因此形成了“2400”
【为了搞清楚串口通信为啥设置波特率 串口波特率】无论哪种方式,波特率之后都是晶振频率 。

单片机串行通信的波特率计算在模式0和模式2下,串行端口波特率是固定的,模式0是Fosc/12 。2模式为Fosc/32或Fosc/64,由PCON寄存器的SMOD位决定 。
在模式1和模式3下,波特率是一个可变值 。波特率可以由定时器1产生(8052可以由定时器2产生),那么波特率是多少呢?
波特率由定时器1的溢出率决定:
波特率= (2SMOD/32)*(定时器1溢出速率)
注意:这里2SMOD中的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))/波特率
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)= 0x FD 。
波特率与字节的关系1GB=1024MB
1MB=1024KB
1KB=1024B(字节)
我们需要串口每秒接收512字节的数据,串口的波特率是每秒115200位 。
波特率115200 = 115200(位/秒)
如果没有校验位,要除以10得到每秒字节数:波特率115200 = 115200(位/秒)= 11520(字节/秒)
除以1024,就是每秒的KB数:波特率115200 = 115200(位/秒)= 11.25(KB/秒),也就是每秒可以接收512字节 。


    推荐阅读