当前位置:首页 > 单片机 > 单片机
[导读]在模式0和模式2下,串口波特率固定,模式0为Fosc/12。模式2为Fosc/32或Fosc/64,具体由PCON寄存器的SMOD位决定。在模式1和模式3下,波特率是一个可变值,波特率可以由定时器1产生(8052可以由定时2产生),那么波特率到

在模式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))(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。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

开关稳压电源非常关键的一个指标就是纹波,它主要是由开关变换的方式导致的,也因纹波的存在会影响到后续电路的工作,尤其是在对纹波比较敏感的场合下。

关键字: 示波器 串口波特率 波形

示波器是电子测量领域中常用的一种仪器,用于观察和测量电压波形。在电源测试中,示波器可以用来测量电源的纹波峰峰值,即电源输出电压的波动幅度。

关键字: 示波器 串口波特率 电源纹波

测量时选择的耦合方式为直流,边沿类型为下降沿,所测串口的电平为TTL 电平,该电平的串口在不传输数据时电平为高,靠拉低判断起始位。

关键字: 示波器 串口波特率 直流

  8月20日消息,知情人士透露了中国移动首次TD-LTE设备招标的进展,据悉,各系统设备厂商已于8月16日递交了商务标书,这意味着此次招标进入最重要的价格比拼环节,而10个厂商中只有三星未回标

关键字: can总线 8051单片机 pca82c250

对于电网短路和线路故障检测保护已有不少研究。市面上的电器短路、过载、超压的保护器功能单一。容易损坏,没用提示功能,不够人性化。但随人们生活水平的不断提高。用电设备也不断增加,产生了肓目用电现象。这给人们造成极大的安全隐患...

关键字: 8051单片机 用电故障控制器

#include#define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(); uint intnum;...

关键字: pic单片机 定时器1

STM32中的高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。使

关键字: STM32 定时器1 高级控制

//环境:winavr+avr studiochar temp=0;ISR(TIMER1_COMPA_vect )//中断函数{ // user code here temp++; if (temp==10) temp=...

关键字: atmega128 定时器1

我的彩屏的大小是240*320~以下是代码//common.h#ifndef __COMMON_H__#define __COMMON_H__#include #include typedef unsigned int...

关键字: 8051单片机 ads7843 驱动程序 xpt2046 触摸屏芯片

//利用T1中断实现每秒加1功能 // //PORTC为段选控制端a-g,D0-D4分别控制共阳极数码管的位选, #include #include #define uint unsigned int #d...

关键字: pic 动态显示 定时器1 秒计数
关闭