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

    2020-07-14 11:12:00
    本文介绍了51单片机波特率计算的公式和方法。
  • 华帮8位单片机波特率计算工具
  • MSP430单片机波特率计算工具,方便好用
  • STC89C52单片机波特率初值计算器和定时器初值计算器。
  • 8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod /32)×(定时器T1溢出率),其中smod是PCON,表示是否波特率加倍,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核心的单片机上都能够成功,由于程序比较简单,我没有试,但应该没有问题的)

    1.  #include "Reg52.H" 
    2.  /******************************************************************* 
    3.  请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度 
    4.  (1) 波特率加倍(SMOD=1): Max_Baud = FOSC/12/16 
    5.  (2) 波特率不加倍(SMOD=0):Max_Baud = FOSC/12/32 
    6.  例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400/12/16=115200 
    7.  *******************************************************************/ 
    8.  #define FOSC 22118400 //振荡频率 
    9.  #define BAUD 9600 //波特率 
    10. #define SMOD 1 //是否波特率加倍 
    11. #if SMOD 
    12. #define TC_VAL (256-FOSC/16/12/BAUD) 
    13. #else 
    14. #define TC_VAL (256-FOSC/32/12/BAUD) 
    15. #endif 
    16. 
    17. typedef unsigned char uint8; 
    18. typedef unsigned int uint16; 
    19. 
    20. code const char str1[] = "Ther string is transmitted from 80C51!\r\n"; 
    21. code const char str2[] = "Author: xqlu(at)ysu.edu.cn\r\n"; 
    22. 
    23. /***************函数声明*******************/ 
    24. void InitUART(void); 
    25. void SendOneByte(uint8); 
    26. void SendrStr(const uint8 *ptr); 
    27. 
    28. /****************主函数********************/ 
    29. void main(void) 
    30. { 
    31. uint8 i=0; 
    32. InitUART(); 
    33. 
    34. while(str2[i]!='\0') 
    35. { 
    36. SendOneByte(str2[i++]); 
    37. } 
    38. 
    39. SendrStr(str1); 
    40. 
    41. while(1); 
    42. } 
    43. 
    44. /****************中断服务函数***************/ 
    45. void UART_ISR(void) interrupt 4 
    46. { 
    47. uint8 RX_Data; 
    48. //只响应“接收”中断,“发送”中断来了就直接抹掉 
    49. if(RI) 
    50. { 
    51. RI = 0; //串口中断标志不能自己清除,需要手动清除 
    52. RX_Data=SBUF; 
    53. SendOneByte(RX_Data); 
    54. } 
    55. else 
    56. TI = 0; //串口发中断是发送完缓冲区数据之后产生 
    57. } 
    58. 
    59. /****************串口初始化函数*************/ 
    60. void InitUART(void) 
    61. { 
    62. TMOD = 0x20; 
    63. SCON = 0x50; 
    64. TH1 = TC_VAL; 
    65. TL1 = TH1; 
    66. PCON = 0x80; //发送速率加倍 
    67. ES = 1; 
    68. EA = 1; 
    69. TR1 = 1; 
    70. } 
    71. /**************串口发送字符函数*************/ 
    72. void SendOneByte(uint8 c) 
    73. { 
    74. ES = 0; //禁止发送中断 
    75. SBUF = c; 
    76. while(!TI); 
    77. TI = 0; 
    78. ES = 1; 
    79. } 
    80. /**************串口发送字符串函数*************/ 
    81. void SendrStr(const uint8 *ptr) 
    82. { 
    83. do 
    84. { 
    85. SendOneByte(*ptr); 
    86. }while(*ptr++!='\0'); 
    87. } 
    
    展开全文
  • NXP LPC系列单片机波特率计算工具,NXP LPC系列单片机波特率计算工具
  • STC12C5410AD单片机波特率计算工具-附件资源
  • STC单片机波特率计算器,T1定时器或是独立波特率发生器,计算波特率
  • 分享我学习单片机的一些小程序,陆续上传中: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 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

    展开全文
  • 小工具可以通过输入频率和波特率两个参数后,帮你算出UBR1、UBR0\UMCTL\最大正误差、最大负误差几个参数,方便你编程。
  • 溢出率=1/溢出一次的时间; 溢出一次的时间=(0x100-初始值)*(12/fosc) //fsoc为晶振频率 溢出率=(0x100-初始值)*(fosc/12) 【这里选取定时器1,...所以:波特率=( (2^SMOD)/32 )*T1溢出率 //串口工作模式1 ...

    溢出率=1/溢出一次的时间;

    溢出一次的时间=(0x100-初始值)*(12/fosc)   //fsoc为晶振频率

    溢出率=(0x100-初始值)*(fosc/12)  

    【这里选取定时器1,工作模式2,频率经过12分频。即进入定时器1模式2下的频率为fosc/12(个人理解:每秒的脉冲次数,用于计数)。那么12/fosc就为一次脉冲数的时间,即计数器增加一的时间。】

    所以:波特率=( (2^SMOD)/32 )*T1溢出率   //串口工作模式1

    展开全文
  • 51单片机之串口波特率计算方式0的波特率配置方式2的波特率配置方式1和3的波特率配置 232串口模式,共有4钟方式,其中方式0、方式2的波特率是固定的。方式1、方式3的是可变波特率,这两个是用T1定时器作为波特率发生...
  • 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可以用来做串口波特率发生器。)

    展开全文
  • 华邦8位单片机波特率计算工具,计算单片机定时/计数器寄存器内的值
  • 430单片机波特率 计算助手 430单片机波特率 计算助手 430单片机波特率 计算助手
  • 两个51单片机波特率计算软件,很好用的适合任意晶振的波特率计算
  • 采用的一种波特率自适应方法,该方法充分利用STC单片机运行速度快、拥有片内振荡器、片内资源丰富的特点,在串行通信程序中,利用单片机I/O口和定时器,对主机发送的固定字符进行测量、计算,得到合适的波特率常数,...
  • AVR单片机定时器及波特率计算程序

    热门讨论 2009-07-26 09:33:53
    轻松计算定时器初值和UBRR值,简单实用,方便快捷
  • 采用的一种波特率自适应方法,该方法充分利用STC单片机运行速度快、拥有片内振荡器、片内资源丰富的特点,在串行通信程序中,利用单片机I/O口和定时器,对主机发送的固定字符进行测量、计算,得到合适的波特率常数,...
  • STC单片机波特率计算

    千次阅读 2010-08-17 22:42:00
    正在做STC系列单片机的串口实验, 可是上网没找到适合的波特率计算软件,总不能每次都用脑袋算吧, 干脆花了点时间写了个小程序,粗糙了些,但将就着用呗,呵呵 <br />  程序: #...
  • 用于C8051F580单片机CAN 波特率计算 。根据选择的时钟,需要设置的CAN波特率,生产配置CAN寄存器的参数。

空空如也

空空如也

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

单片机波特率计算