串行端口的波特率(为了找出为什么为串行端口通信设置波特率)
串行通信为什么要设置波特率?要知道这个答案,我们先来了解一下什么是波特率:
什么是波特率?
波特率单位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 举报,一经查实,立刻删除。