• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

什么是波特率?如何计算和设置串行通信的波特率?

SingleYork 2016-10-21 浏览量:2498
本帖最后由 SingleYork 于 2016-11-8 18:13 编辑

[postbg]bg7.png[/postbg]如题:

什么是波特率?如何计算和设置串行通信的波特率?

温馨提示:

请从以下链接中的帖子学习相关内容并进行回答,根据原帖内容,给出总结并能有自己独特的见解的答案将更有可能被选为最佳答案!七天之内答案不可见,答题的童鞋有七天时间修改答案,每周结贴一次,选择最佳答案。获得最佳答案的童鞋将会获得相应的专家积分,专家积分排行榜有丰厚的奖励哦!每周只有5个悬赏问答,机会有限,请认真回答!


答案出处:

I51开发板活动原帖及例程详解汇总
//www.icxbk.com/community/forum.php?mod=viewthread&tid=65414

(出处: ICKEY BBS)
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 汉云 于 2016-10-21 15:52 编辑

    答案出外:
    //www.icxbk.com/community/forum.php?mod=viewthread&tid=69150
    //www.icxbk.com/community/forum.php?mod=viewthread&tid=69162


    一、什么是波特率
    波特率为每秒钟传送二进制数码的位数,也叫比特数,单位为bit/s,即位/秒。

    波特率用于表征数据传输的速度,波特率越高,数据传输速度越快。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内所传字符帧的帧数,而字符的实际传送速率和字符帧格式有关。例如,波特率为1200bps的通信系统,若采用上图(a)的字符帧,每一字符帧包含11位数据,则字符的实际传输速率为 1200/11=109.09帧/秒;若改用上图(b)的字符帧,每一字符帧包含14位数据,其中含3位空闲位,则字符的实际传输速率为1200/14=85.71帧/秒。通常,异步通信的波特率为50~9600bit/s。

    二、计算串口波特率
    1、方式0
    波特率计算:SYSclk/12或SYSclk/2(由UART_M0x6确定是12分频还是2分频)

    波特率仅取决于系统时钟和UART_M0x6的设置,无需使用定时器控制。

    2、方式1
    比特率可变
    比特率由定时器1或定时器2的溢出率决定。定时/计数器的溢出率定义为:单位时间(秒)内定时器/计数器溢出的次数。
    串行口1用定时器1作为波特率发生器且定时器1工作于模式0(16位自动重装模式)时,波特率=(定时器1的溢出率)/4。
    注意:此时波特率与SMOD无关。
    当定时器1工作于模式0(16位自动重装模式)且T1x12=0时,
    定时器1的溢出率=SYSclk/12/(65536-[RL_TH1,TL_TL1])
    此时
    串口1的波特率= SYSclk/12/(65536-[RL_TH1,TL_TL1])/4
    当定时器1工作于模式0(16位自动重装模式)且T1x12=0时,
    定时器1的溢出率=SYSclk/(65536-[RL_TH1,TL_TL1])
    此时
    串口1的波特率= SYSclk/(65536-[RL_TH1,TL_TL1])/4
    其中,RL_TH1是TH1的自动重装载寄存器,TL_TL1是TL1的自动重装载寄存器。
    当串行口1用定时器1作为波特率发生器且定时器1工作于模式2(8位自动重装模式)时,波特率=(2SMOD/32) ×定时器1的溢出率;
    当定时器1工作于模式2(8位自动重装模式)且T1x12=0时,
    定时器1的溢出率=SYSclk/12/(256-TH1)
    此时
    串口1的波特率=(2SMOD/32)×SYSclk/12/(256-TH1)
    当定时器1工作于模式2(8位自动重装模式)且T1x12=1时,
    定时器1的溢出率=SYSclk/(256-TH1)
    此时
    串口1的波特率=(2SMOD/32)×SYSclk/12/(256-TH1)
    当T2x12=0时,
    定时器2的溢出率= SYSclk/12/(65536-[RL_TH2,TL_TL2])
    此时
    串口1的波特率= SYSclk/12/(65536-[RL_TH2,TL_TL2])/4
    当T2x12=1时,
    定时器2的溢出率= SYSclk/(65536-[RL_TH2,TL_TL2])
    此时,串口1的波特率= SYSclk/(65536-[RL_TH2,TL_TL2])/4
    其中,RL_TH1是TH1的自动重装载寄存器,TL_TL1是TL1的自动重装载寄存器。

    3、方式2
    串行通信方式2波特率=(2SMOD/64)×SYSclk,SYSclk为系统工作时钟频率
    PCON寄存器中的SMOD为波特率加倍位,当SMOD=1时,波特率为SYSclk/32;当SMOD=0时,波特率为SYSclk/64。

    4、方式3
    波特率可通过软件对定时器/计数器1或定时器2的设置进行波特率的选择,是可变的。方式3的波特率计算方法与方式1的方法相同。


    三、设置串口波特率

    在串行口控制寄存器中写入相应的控制字节,即可改变串行口的波特率和工作方式。

    掉电控制寄存器PCON,SMOD用于设置方式1、方式2、方式3的波特率是否加倍.
    辅助寄存器AUXR,UART_M0x6:用于串口模式的通信速度设置位。S1ST2:串行口1波特率发生器选择位。
    再将计算的值,对于配置定时器相关寄存器进行配置:RL_TH1、RL_TL1、RL_TH2、RL_TL2。

    注意:对于具有串行口2的STC15F2K60S2单片机,串行口2只能使用定时器2作为波特率发生器,不能选择定时器1作为波特率发生器;串行口1可以选择定时器1作为波特率发生器,也可以选择定时器2作为波特率发生器。
    STC15F2K60S2单片机是1T的8051单片机,复位后兼容传统的8051单片机。
    如果用定时器T1做波特率发生器,AUXR中的T1x12位控制UART串行口速度是12T还是1T。


    • 发布于 2016-10-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 出处:
    I51开发板第二十五讲 串行通信基础_单片机讨论_技术论坛_云汉电子社区
    //www.icxbk.com/community/fo ... hread&tid=69150

    波特率为:每秒钟传送二进制数码的位数,也叫比特数,单位为bit/s,即位/秒。

    波特率用于表征数据传输的速度,波特率越高,数据传输速度越快。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内所传字符帧的帧数,而字符的实际传送速率和字符帧格式有关。
    例如,波特率为1200bps的通信系统,若采用上图(a)的字符帧,每一字符帧包含11位数据,则字符的实际传输速率为 1200/11=109.09帧/秒;若改用上图(b)的字符帧,每一字符帧包含14位数据,其中含3位空闲位,则字符的实际传输速率为1200/14=85.71帧/秒。通常,异步通信的波特率为50~9600bit/s。

    • 发布于2016-10-24
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

什么是波特率?如何计算和设置串行通信的波特率?