[STC单片机] STC90C51单片机串口设置的怪现象

[复制链接]
 楼主| ipman 发表于 2014-7-28 14:28 | 显示全部楼层 |阅读模式
设置成9600波特率,实际测试测量发现输出波特率是14400?  哪里多了1.5倍?
#define MAIN_Fosc                11059200L        //定义主时钟
#define        BaudRate1                9600UL        //选择波特率
#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))  //Timer 1 重装值

void InitUart0(void)
{
        TR1 = 0;                        //波特率使用Timer1产生
        AUXR &= ~0x01;                //S1 BRT Use Timer1;
        AUXR |=  (1<<6);        //Timer1 set as 1T mode
        TH1 = (u8)(Timer1_Reload >> 8);
        TL1 = (u8)Timer1_Reload;
        TR1  = 1;
                           TMOD = 0x20;                //设定定时器1为8位自动重装方式
}
wangch_sh 发表于 2014-7-28 14:34 | 显示全部楼层
是不是算错了?
 楼主| ipman 发表于 2014-7-28 14:41 | 显示全部楼层
#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))  //Timer 1 重装值
预编译自己算的
coody 发表于 2014-7-28 14:46 | 显示全部楼层
你这个程序是用在STC15系列的,16位自动重装。而90系列的,使用Timer1是8位自动重装,跟标准51的计算一样
ayb_ice 发表于 2014-7-28 14:51 | 显示全部楼层
用浮点数算,结果再强制转换

另外是溢出率的多少分之一吧
 楼主| ipman 发表于 2014-7-28 15:37 | 显示全部楼层
8位怎么够用? 超出255了吧
ayb_ice 发表于 2014-7-28 15:50 | 显示全部楼层
T1做波特率只能用方式2,8位自动重装载方式

你写个65536有什么用

基本公式都错了

**中波特率好象是T1溢出率的16分之一或32分之一吧
 楼主| ipman 发表于 2014-7-28 16:05 | 显示全部楼层
难道是
#define        Timer1_Reload        (255 -(MAIN_Fosc / 32 / BaudRate1) +1 )  //Timer 1 重装值
ayb_ice 发表于 2014-7-28 16:18 | 显示全部楼层
ipman 发表于 2014-7-28 16:05
难道是
#define        Timer1_Reload        (255 -(MAIN_Fosc / 32 / BaudRate1) +1 )  //Timer 1 重装 ...

难道你都不看手册就定义的
 楼主| ipman 发表于 2014-7-28 23:06 | 显示全部楼层
STC的手册看起来多痛苦你懂的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:汽车电子

89

主题

550

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:汽车电子

89

主题

550

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部