[转]51单片机 11.0592MHz 产生115200 波特率

连接:http://homezzy.blog.hexun.com/29601793_d.html

今天解决了一个小问题(查书后才得到确切结论。。。)用51单片机+11.0592的晶振,如何产生115200的波特率?

本来感觉这个小意思,直接初始化定时器1,程序如下:

void init_com( void )
{
    SCON = 0x50 ; //串口工作方式1,8位UART,波特率可变
    TMOD |= 0x20 ; //定时器1,工作方式2,自动再装入8位定时器
    PCON |= 0x80 ; //SMOD=1; 波特率加倍
    TH1 = 0xfa ; //波特率:9600 晶振=11.0592MHz
    IE |= 0x90 ; //使能串口中断
    TR1 = 1 ; // 定时器1开始
}

结果发现这样只能得到9600的波特率。。。

当SMOD=1时,K=2,波特率加倍,公式为:

波特率=K×11059200/32×12×(256-TH1)

所以,TH1=0xfa=256-(2×11059200/384×波特率) 其中波特率为9600

这时,及时令TH1=0xff,所得波特率最大只能为57600,也就是说,这样无法得到115200的波特率。。。

这样就只有采用其他方法了:

1、换晶振,用22.1184M晶振,在TH1=0xff时,刚好可以产生115200波特率。

2、采用6个时钟周期的单片机(换单片机啊。。。)

3、增强型51单片机有定时器2!(幸好偶用的是增强型。。。)

就用第三种方法啦!这时的公式如下:

波特率=11059200/32×[65535-(RCAP2H,RCAP2L)]

其中的RCAP2H,RCAP2L为自动重装值,由上式得:

RCAP2H,RCAP2L=65536-11059200/32×波特率

这样得波特率为115200时,RCAP2H,RCAP2L=0xff,0xfd,初始化程序如下:

void init_com( void )
{
     SCON=0x50; //串口工作方式1,8位UART,波特率可变
     TH2=0xFF;
     TL2=0xFD;    //波特率:115200 晶振=11.0592MHz
     RCAP2H=0xFF;
     RCAP2L=0xFD; //16位自动再装入值

/*****************/
     TCLK=1;
     RCLK=1;
     C_T2=0;
     EXEN2=0; //波特率发生器工作方式

/*****************/
    TR2=1 ; //定时器2开始
}

OK!这样就实现用51单片机+11.0592的晶振,产生115200的波特率了,当然老鸟看来很基本,但好长时间不用了,再复习一下~~
时间: 2024-12-26 10:06:28

[转]51单片机 11.0592MHz 产生115200 波特率的相关文章

51单片机的Printf使用方法

今天在群里面有一个网友提到51单片机使用printf为什么编译通过了,但是没有效果 .这里将我的笔记翻出来共享一下,这个实验本身没有太大的意义,主要是记录51单片机应该如何使用Printf函数. 实验名称:串口通信之单片机和PC计算梯形面积 MCU型号:STC12C5A60S2(12T模式) 晶振 :11.0592MHZ 实验内容:利用单片机和PC机串口通信的工作方式1(波特率可变),(已经晶振为11.0592MHZ)设置波特率为9600B/S,结合定时器1的工作方式2(TH1=0xfd,TL1

51单片机-PC数据传输 温度 距离 监控系统设计

>_<:功能概述: 通过串口PC和单片机通信,可以询问单片机测得的温度,可以询问声呐测距的测量距离,同时把测量温度显示在数码管上. >_<:PC部分 这里com.cpp和com.h是串口通信的函数封装,在主函数中: 刚开始调用封装好的串口通信函数,设置打开串口COM4,波特率设置为9600,超时设置: 1 if(openport("com4")) 2 printf("open comport success\n"); 3 if(setupdc

【转】看看什么叫51单片机最小系统

单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机.晶振电路.复位电路.下面给出一个51单片机的最小系统电路图. 说明 复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐

【转】什么叫51单片机最小系统

单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机.晶振电路.复位电路. 下面给出一个51单片机的最小系统电路图. 说明 复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书

[51单片机] HC-SR04超声波测距仪 基础代码

>_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: 1 /***********************************************************************************************************/ 2 //HC-SR04 超声波测距模块 DEMO 程序 3 //晶振:11.0592 4 //接线:模块TRIG接 P1.2

nRF2401无线数据用STC 51单片机实现驱动的程序

nRF2401无线数据用STC 51单片机实现驱动的程序 . 大家知道nRF2401是一款无线数据传输芯片,也非常常用,淘宝上几块一片,大批的卖家,那么 51单片机 驱动nRF2401无线数据程序怎么写呢?下面请参考,希望对大家有帮助.单片机使用的是STC89C52RC,8个LED接在P0口,低电平有效,测试直观.转载:nRF2401无线数据传输试验测试程序 nRF2401无线数据传输试验测试程序,两块同样nRF2401学习板子上演示数据同步,这是从网上转载的.单片机使用的是STC89C52RC

51单片机的一些知识点

1.单片机芯片型号:STC 89C51RC 40C—PDIP 0707 STC——STC公司,其他前缀还有AT.Winbond等 8——基于8051内核芯片 9——表示内部含有Flash E2PROM存储器 C——表示该器件为CMOS产品 5——固定不变 1——代表芯片内部存储空间,1为4KB,2为8KB,3为12KB RC——STC单片机内部RAM(随机读写存储器)为512B,还有RD+表示内部RAM为1280B 40——表示外部晶振最高可接入40MHz,对于AT单片机数值一般在24MHz C

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

51单片机中断interrupt……using……

51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器: using 1 是第1组寄存器: using 2 是第2组寄存器: using 3 是第3组寄存器:51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1.RS0位决定的.using 0时设置 RS1=0,RS