打印
[STC单片机]

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

[复制链接]
3010|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的计算一样

使用特权

评论回复
5
ayb_ice| | 2014-7-28 14:51 | 只看该作者
用浮点数算,结果再强制转换

另外是溢出率的多少分之一吧

使用特权

评论回复
6
ipman|  楼主 | 2014-7-28 15:37 | 只看该作者
8位怎么够用? 超出255了吧

使用特权

评论回复
7
ayb_ice| | 2014-7-28 15:50 | 只看该作者
T1做波特率只能用方式2,8位自动重装载方式

你写个65536有什么用

基本公式都错了

**中波特率好象是T1溢出率的16分之一或32分之一吧

使用特权

评论回复
8
ipman|  楼主 | 2014-7-28 16:05 | 只看该作者
难道是
#define        Timer1_Reload        (255 -(MAIN_Fosc / 32 / BaudRate1) +1 )  //Timer 1 重装值

使用特权

评论回复
9
ayb_ice| | 2014-7-28 16:18 | 只看该作者
ipman 发表于 2014-7-28 16:05
难道是
#define        Timer1_Reload        (255 -(MAIN_Fosc / 32 / BaudRate1) +1 )  //Timer 1 重装 ...

难道你都不看手册就定义的

使用特权

评论回复
10
ipman|  楼主 | 2014-7-28 23:06 | 只看该作者
STC的手册看起来多痛苦你懂的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:汽车电子

89

主题

550

帖子

4

粉丝