精华内容
下载资源
问答
  • 51单片机波特率计算

    2020-07-14 11:12:00
    本文介绍了51单片机波特率计算的公式和方法。
  • 好用的C51单片机波特率计算工具,省去计算的烦恼
  • 两个51单片机波特率计算软件,很好用的适合任意晶振的波特率计算
  • 非原创,摘自51黑的 51黑fan博主,留作日后自己看 ...波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的...

    非原创,摘自51黑的 51黑fan博主,留作日后自己看

    51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。它的各个位的具体定义如下:
                    SM0 SM1 SM2 REN TB8 RB8 TI RI
    SM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。

        波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600 不是每秒种可以传送9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。
        51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。
        模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。

        上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下:
            

            溢出速率=(计数速率)/(256-TH1初值)
            溢出速率=fosc/[12*(256-TH1初值)]


        上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式:
                   11.0592M
                   9600=(2÷32)×((11.0592M/12)/(256-TH1))
                   TH1=250

                   12M
                   9600=(2÷32)×((12M/12)/(256-TH1))
                   TH1≈249.49


        上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

    展开全文
  • STC89C52单片机波特率初值计算器和定时器初值计算器。
  • 计算51单片机波特率程序,应用小程序,方便实用,51单片机开发必备
  • 51单片机波特率的说明,波特率计算工具,文档介绍,对于使用51单片机计算波特率还是不错的
  • 51单片机波特率初值设定,串口波特率计算器,定时器计算软件
  • 51单片机的定时初装入值计算软件, 51单片机波特率设定计算软件,两个非常方便的开发助手
  • 51单片机波特率计算器)方便波特率的计算
  • 波特率计算器,51代码生成,avr单片机波特率计算,复制代码
  • 51单片机波特率计算器V2.0,可以选晶体频率和波特率,再计算即可。
  • 用vc开发的单片机辅助小软件,用以计算定时器的初值和串行波特率设置的初值。
  • 51波特率计算工具.rar

    2021-05-19 03:54:02
    51单片机波特率计算工具
  • 现在开始发布51单片机工具集系列 这个是波特率计算工具 需要工具集里的其他工具的朋友请查看我发布的资源 如有错误欢迎与我联系
  • 8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod/32)×(定时器T1溢出率),其中smod是PCON<7>,表示是否波特率加倍,Fsoc是系统的晶振大小。波特率公式中:T1溢出率=溢出周期...

    8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod/32)×(定时器T1溢出率),其中smod是PCON<7>,表示是否波特率加倍,Fsoc是系统的晶振大小。

    波特率公式中:T1溢出率=溢出周期的倒数;溢出周期=(256-TH1)×12/Fosc;

    最终公式:

    波特率:Baud=(2smod× Fsoc)/(32 ×12×(256-TH1))

    我们一般不太关注波特率的计算,而是关心选用的传输速度(波特率)去反算定时器1(自动重装模式)的初值(TH1),所以将上面的公式导一下,得到TH1的公式:

    TH1=256-(Fsoc×2smod)/(12×32×Baud)

    下面针对串口发送程序,水寒写下例程,供大家参考。(我使用的是STC12C5A40S2调试,原则上在STC89C5x、AT89C5x等8051核心的单片机上都能够成功,由于程序比较简单,我没有试,但应该没有问题的)

    #include"Reg52.H"

    /*******************************************************************

    请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度

    (1)波特率加倍(SMOD=1):Max_Baud=FOSC/12/16

    (2)波特率不加倍(SMOD=0):Max_Baud=FOSC/12/32

    例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400/12/16=115200

    *******************************************************************/

    #defineFOSC22118400//振荡频率

    #defineBAUD9600//波特率

    #defineSMOD1//是否波特率加倍

    #ifSMOD

    #defineTC_VAL(256-FOSC/16/12/BAUD)

    #else

    #defineTC_VAL(256-FOSC/32/12/BAUD)

    #endif

    typedefunsignedcharuint8;

    typedefunsignedintuint16;

    codeconstcharstr1[]="Therstringistransmittedfrom80C51!rn";

    codeconstcharstr2[]="Author:xqlu(at)ysu.edu.cnrn";

    /***************函数声明*******************/

    voidInitUART(void);

    voidSendOneByte(uint8);

    voidSendrStr(constuint8*ptr);

    /****************主函数********************/

    voidmain(void)

    {

    uint8i=0;

    InitUART();

    while(str2[i]!='

    展开全文
  • 51单片机串口波特率计算

    千次阅读 2017-04-04 14:08:58
    bot=256-(11059200/9600/32) 此处波特率为9600 11.0592M晶振可以支持基本波特率 对于12M晶振有所不同 bot=256-(1200000/4800/32) 此处波特率为4800 12M这里波特率设置不能超过4800,因为超过后,时钟...

    对于11.0592M晶振

    bot=256-(11059200/9600/32)    此处波特率为9600

    11.0592M晶振可以支持基本波特率


    对于12M晶振有所不同

    bot=256-(1200000/4800/32) 此处波特率为4800

    12M这里波特率设置不能超过4800,因为超过后,时钟误差过大,在通讯的时候某些数据就会乱码。

    展开全文
  • 计算51单片机波特率,选用个种晶体都可以。 该软件是转载别人的。只供学习用。
  • 51单片机串行口波特率计算

    千次阅读 2019-06-19 21:48:58
    在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。 常用于串行口外接移位寄存器,以...

     

    1.工作方式介绍:

     

    方式 0 这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。 

    常用于串行口外接移位寄存器,以扩展并行I/O口,这种方式不适用与两个MCS-51之间的串行通信。
     

    方式1真正用于数据的串行发送和接收。TXD引脚和RXD引脚分别用于发送和接收数据。

    方式1收发1帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。


    方式 2 串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控为10的第九位数据和1位停止位1。采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 1/32 ,可由 PCON 的最高位选择。 

    方式 3 方式 3 与方式 2 完全类似,唯一的区别是方式 3 的波特率是可变的。而帧格式与方式 2- 样为 11 位一帧。所以方式 3 也适合于多机通信。

     

    SM0  SM1   方式   

     0      0        0   同步移位寄存器方式(用于扩展I/O口)

     0      1        1   8位异步收发,波特率可变(由定时器控制)

     1      0        2   9位异步收发,波特率为fosc/64fosc/32

     1      1        3   9位异步收发,波特率可变(由定时器控制)

     

    2.计算公式总结:

     

    方式0波特率固定为:fosc / 12

     

    方式1波特率的计算公式为:(串行口为波特率可变的8位异步通信接口,SMOD为PCON寄存器的最高位值(0或1))

             方式1波特率 =(2^SMOD / 32) * 定时器T1的溢出率

    注:当SMOD=1时,要比SMOD=0时的波特率加倍,所以也称SMOD位为波特率倍增位

     

    方式2的波特率由下式确定:

             方式2波特率=( 2^SMOD / 64) * fosc

    方式3的波特率由下式确定:

             方式3波特率 = (2^SMOD / 32) * 定时器T1的溢出率

     

    溢出速率 = 1 / 溢出时间

    溢出时间(相当于定时时间)= (2^8 – TH1初值)* Tcy

    机器周期Tcy = 12时钟周期 = 12*(1/fosc)

    故:溢出速率 = 1 / 溢出时间 = 1 / [(256 - TH1初值)* (12 / fosc)] = fosc / [12 *(256-TH1初值)]

    计数速率 = 1 / 计数时间 = 1 / (12 / fosc) = fosc / 12

    故也可写成:溢出速率 = 计数速率 / (256-TH1初值) = fosc / [12 *(256-TH1初值)]   

    注:一般来说,定时器方式2用来确定波特率是比较理想的,它不需要中断服务程序设置初值,且算出的波特率比较准确。在用户使用的波特率不是很低的情况下,建议使用定时器T1的方式2来确定波特率。定时器方式1或方式3定时,常用T1作为波特率发生器。

    而对于定时器方式0和方式1的最大特点是计数溢出后,计数器为全0。因而在循环定时或循环计数应用时就存在反复装入计数初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对此问题而设置的。定时器/计数器的方式2位自动恢复初值的(初值自动装入)8位定时器/计数器,TLX作为常数缓冲器,当TLX计数器溢出时,在置1溢出标志位TFX的同时,还自动的将THX中的初值送入至TLX,使TLX从处置开始重新计数。这种方式可以省去用户软件中重装处置的程序,简化定时器初值的计算方法,可以相当精确的确定定时时间。

    而定时器方式3是为了增加1个附加的8位定时器/计数器而提供的,从而使MCS-51具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR0=0,停止计数(此时T1可以用来做串口波特率发生器。)

    展开全文
  • 学习单片机的小实用工具,很有用的,试试看
  • 单片机开发工具51波特率计算助手,希望能给大家带来方便!
  • 溢出率=1/溢出一次的时间; 溢出一次的时间=(0x100-初始值)*(12/fosc) //fsoc为晶振频率 溢出率=(0x100-初始值)*(fosc/12) 【这里选取定时器1,...所以:波特率=( (2^SMOD)/32 )*T1溢出率 //串口工作模式1 ...
  • 51串行波特率计算

    2012-09-11 16:53:36
    常用51单片机串行波特率计算,全面,精确

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,540
精华内容 1,016
关键字:

51单片机波特率计算