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

/ 0评 / 0

串口波特率(为了搞清晰串口通讯为啥设置波特率)

串口通讯为什么要设置波特率?想要知道这个答案,首先我们先懂得一下什么是波特率:

什么是波特率?

波特率(Baud Rate)单位 bps -- 每秒传送的字节数 Byte Per Second。

波特率表现每秒钟传送的码元符号的个数,是权衡数据传送速率的指百思特网标,它用单位时光内载波调制状况转变的次数来表现。波特率是指数据信号对载波的调制速率,它用单位时光内载波调制状况转变的次数来表现,其单位是波特(Baud)。

串口通讯为什么要设置波特率?

有两种比拟可靠的说法:

1、依据电、传输介质等的物理特征联合串口装备应用的请求

为了保证有效通信,依据电、传输介质等的物理特征联合串口装备应用的请求,肯定RS232最大传输速率只能是115200,然后逐级二分得到57600,28800,19200……为适应这些速率,设计相应的晶振频率。

2、这是由电信线路特征决议的

电话线路的带通是300--3KHz,当时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的溢出率来决议:

Baud Rate = (2SMOD/32)*(Timer 1 Overflow Rate)

注意:2SMOD这里的SMOD是指数,SMOD为波特率双倍波特率位,该位在PCON存放器中。

当应用timer 1作为波特率发生器时,通常须要将timer 1配置成8位主动重装的工作模式下,同时还要制止timer 1中止,那么timer 1的溢出率是怎样盘算的呢?溢出率即溢出的频率,假设晶振频率为12MHz,TH1值为0xFE,则只须要两个时钟脉冲就会溢出,溢出的周期为2us,那么溢出的频率就为500KHz。

依据定时器一节,定时时光有如下盘算公式:

定时时光=(最大计数值-计数器初值)*机器周期=(最大计数值-计数器初值)*(12/晶振频率(Hz))(原创版权www.isoyu.com)(s)=(256-TH1)*(12/OSC_FREQ(Hz))(s)。

那么溢出频率自然就为:

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

所以最后推导出波特率为:

(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)*12))。

波特率的盘算公式有了,那自然就可以依据波特率推导出TH1的初值了:

BAUD_RATE=(2SMOD/32)*(OSC_FREQ(Hz)/((256-TH1)*12))

32*12*(256-TH1)=(2SMOD*OSC_FREQ(Hz))/BAUD_RATE

256-TH1=(2SMOD*OSC_FREQ(Hz))/(BAUD_RATE*32*12)

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