单片机串口通信的串口波特率计算什么意思,为何不同环境下一定要设置某一个值?

全部行业分类
波特率是什么?波特率是什么意思!
波特率是一个电子信号上的术语,用于描述信道的数据传输速度。所谓信道,可以是无线的,也可以是有线的,说白了就是两个东西之间传输数据
时,一个模拟频道的带宽为8M,那么其符号率=8/(1+0.16)=6.896Ms/s。如果采用64QAM调制方式,那么其比特率=6.896*log2 64=6.896*6=41.376Mbps
波特率 即 调制速率 ,指的是信号被 调制 以后在单位时间内的 波特 数,即单位时间内 载波 参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。 波特率有时候会同 比特率 混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上负载多个比特信息。因此信息传输速率即比特率在数值上和波特率有这样的关系
计算机内部采用二进制的方式计数,那么它为什么又能识别十进制数和各种字符、图形呢?其实,不论是数值数据还是文字、图形等,在计算机内部都采用了一种编码标准。通过编码标准可以把它转换成二进制数来进行处理,计算机将这些信息处理完毕再转换成可视的信息显示出来。常用的字符代码是ASCII码,它原来是美国的国家标准,1967年被定为国际标准。
ASCII码由8位二进制数组成,其中最高位为校验位,用于传输过程检验数据正确性。其余7位二进制数表示一个字符,共有128种组合。如回车的ASCII码为),空格的ASCII码为),“0” 的ASCII码为),“A” 的ASCII码为),“a”的ASCII码为)。
波特率计算
在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS—51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。
一、方式0的波特率
方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即:
方式0的波特率=fosc/12
二、方式2的波特率
串行口方式2波特率的产生与方式0不同,即输入时钏源的频率不同,控制接收与发送的移位时钟由振荡频率Foec的第二节拍P2(即Foec/2)给出,所以,方式2波特率取决于PCON中SMOD位的值,当SMOD=0时,波特率为Foec的六十四分之一;若SMOD=1,则波特率为Foec的三十二分之一,即:方式2的波特率=2smod/64*Foec。
三、方式l和方式3的波特率
方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特宰由定时器T1的
溢出率与SMOD值同时决定,即:方式1和方式3的波特率=2SMOD/32oT1溢出率
其中,溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/2;当C/T=1时,计数速率取决于外部输入时钟频率。
当定时器Tl作波特率发生器使用时,通常选用可自动装入初值模式(工作方式2),在工作方式2中,TLl作为计数用,而自动装入的初值放在THl中,设计数初值为x,则每过“256一x”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止T1中断。这时,溢出周期为:
系统晶振频率选为11.0592MHZ就是为了使初值为整数,从而产生精确的波特率。
如果串行通信选用很低的波特率,可将定时器Tl置于工作方式0或工作方式1,但在这种情况下,T1溢出时,需用中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。上表列出了各种常用的波特率及其初值。波特率:用来衡量数据传输速率的指标,表示在1s的时间内可以传输符号的个数。
比特率:每秒可以传输二进制比特的个数.
比特率 = 波特率*单个调制状态对应的二进制位数。
但是在书本《MCU工程师练成记--我和MSP430单片机》一书的P104的12行中写到:在UART中,波特率就代表了可以1s可以传输的位的个数。
我是否可以理解在UART中,波特率是否等于比特率?
我们平常所讲的UART波特率9600,就是每秒传9600位(BIT)?还是9600Baud/s?这和通信领域中的波特率有区别吗?
波特率是什么?波特率是什么意思!
相关推荐:
本周热门资讯排行51 单片机串行通讯中波特率的自动检测
> 51 单片机串行通讯中波特率的自动检测
51 单片机串行通讯中波特率的自动检测
本文介绍一种在 80C51 应用中自动检测的方法。按照经验,程序起动后所接收到的第1个字符用于测量。 这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间隔。 显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。可是,在 RS-232 模式下,许多 ASCII 字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在一定范围内发生变化。此外,许多系统采用 8 位数据、无奇偶校验的格式传输 ASCII 字符。在这种格式里,普通 ASCII 字节不会有 MSB 设定,并且,UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。 在下面的波特率检测程序中,先等待输入管脚的起始信号(下降沿),然后起动定时器T0。在其后的串行数据的每一个上升沿,将定时器 T0的数值捕获并保存。当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位)过程所持续的时间。 CmpTable 表格列出了每一波特率的最大测量时间。这些数据是经过选择的,所以,4 个数据位时间(加上起始位时间)仍可产生正确的波特率。 使用这种方法时,必须遵守一个假设:这种技术仅取决于所接收到的一个字符,接收这个字符的波特率必须大于最低波特率。本质上来说,这意味着这个字符必须来自正常敲击键盘时所产生的字符。 在PC上,我们不可能快速、连续地敲击两个字符,以欺骗程序。但是,PC的功能键具有一个问题,因为它会连续发送两个紧挨着的字符,使程序检测得到错误的波特率。在为 12MHz时钟频率而设计的的例子程序中,其总采样时间大约为 65mS,大约可以在 RS-232 通讯中以300bps的速度发送两个字符。 假如使用了奇偶校验,当4 个MSB以及所接收字节的奇偶校验位均这同一值时,就可能会发生错误。这类错误的发生取决于系统是使用了奇校验或偶校验,可能发生于小写的字母“p”到“z”,还有花括号({})、垂直条(|)、波纹线(~),以及删除键“delete”。值得注意的是,惯常的提示符按键(如,空格键、回车键、及返回键),是没有这些限制的(奇数还是偶数的限制?)。 在以此方式运行程序时,如第一个字节已经过去,但串行口(UART)的波特率未能正确设置,那将造成用于检测波特率的第一个字符丢失。同样,如果在正常通讯中检测到串行口的通讯“帧”错误,绝大部分“实时”程序必须重复这一检测波特率的过程。 如需采用另外设定的晶体振荡频率、波特率,请使用下列公式计算 CmpTable的表项目:
记住,表项目是两个字节的数值,所以上述公式的结果一定要分成高位字节及低位字节(如果采用十六进制,则容易得出高位、低位字节)。当然,也可以用汇编程序来完成所有的运算。 上述的公式是由以下得来的:
备注:在 8-N-1 格式的数据通讯中,‘#-of-bits’(“可见”位数)是 9,以及‘bits-to-recognize’(最小认可位数)是5。 ;********************************************** ;自动的波特率检测程序 ;********************************************************** $ Title(Automatic Baud Rate Detection Test) $ Date(12–16–91) $ MOD552 ;******************************************************* ; Definitions ;************************************************* RX BIT P3.0 ;串行口的接收管脚 CharH DATA 30h ;捕获定时器T0的高位字节 CharL DATA 31h ;捕获定时器T0的低位字节 BaudRate DATA 32h ;存贮最终确定的波特率 Display EQU P4 ;显示结果的端口 ;******************************************************* ; Reset and Interrupt Vectors ;***************************************************
ORG 8000h Start: ACALL AutoBaud ;检测波特率
MOV Display, BaudRate ;显示波特率值
SJMP Start ;********************************************************** ; Subroutines ;********************************************************** ;AutoBaud Rate Detect Routine. ;通过测量接收第一个字符所需要的时间来确定波特率。部分接收字符可能会发生错误, ;主要是那些以3(4?)位同样数值结束的字符。波特率指针(检测结果)保存在ACC中。 ;********************************************************
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一

我要回帖

更多关于 串口波特率计算 的文章

 

随机推荐