宏晶STC89C52产生波特率115200,需要C语言的,晶振11.0592MHz

单片机小白,需要宏晶STC89C52产生波特率115200,需要C语言的,晶振11.0592MHz,要确实调试可以使用的,网上好多都没法用,我有一套source check console信息的,不过波特率是9600的,网上各种设置说是115200的但都没法check过,求给力大师,谢谢

串口通讯一般采用 工作模式1——10位异步收发(1起始+8数据+1停止),由定时器1 提供 波特率,而此模式的 波特率 计算公式:Baud=2^(SMOD)/32 ×T1溢出率;
注:T1溢出率=1/T1中断时间; SMOD 为 倍频系数(0 跟 1);

当 T1 溢出率最大时(即中断时间最短),波特率最大,中断最短也只能 =1个机械周期,晶振Fosc=11.0592MHz, 机械周期 t=12/Fosc,溢出率就= Fosc/12,代入上面公式,
Baud=(2^1)÷32×11059200/12= 57600 bps,支持不了LZ 要的 115200 的波特率,不过 好在,STC89C52单片机,是支持 机械周期 倍频的(在烧录时选择“双倍频”),它可以把 12T 模式 倍频为 6T模式,也就是 把上面 的12 替代为 6,计算结果 = 115200,刚好等于 LZ 要的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-22
void
UartInit(void)
//[email protected]
{
SCON
=
0x50;
//8位数据,可变波特率
AUXR
|=
0x40;
//定时器1时钟为Fosc,即1T
AUXR
&=
0xFE;
//串口1选择定时器1为波特率发生器
TMOD
&=
0x0F;
//设定定时器1为16位自动重装方式
TL1
=
0xE8;
//设定定时初值
TH1
=
0xFF;
//设定定时初值
ET1
=
0;
//禁止定时器1中断
TR1
=
1;
//启动定时器1
}
第2个回答  2019-03-14
宏晶的stc下载软件里有计算的方法,可以直接计算。
第3个回答  2015-08-09
楼主采纳的答案,是没有错的。

但是,才用“双倍频”,之后,整个单片机的时间,

包括定时、软件延时,都会受到了影响。

如果用 T2 控制波特率,也可以满足题目要求,
而且不需要改动整个系统的时间。