微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我用STC89C52单片机和12MHZ晶振怎么产生9600的波特率

我用STC89C52单片机和12MHZ晶振怎么产生9600的波特率

时间:10-02 整理:3721RD 点击:
求哪位大神可以在这个基础上帮我改一下吗?
        PCON = 0x80;                     
        SCON = 0x50;            
        TMOD = 0x21;                     
        TH1 = 0xfa;
        TL1 = 0xfa;
        TR1 = 1;
        TH0 = 0x00;
        TL0 = 0x01;
        ET0 = 1;        
        TR0 = 1;        
        EA = 1;
        SerDTvalid = FALSE;                         
    REN = 1;
         ES = 1;

这段程序应该是用11.0592M的晶振正好产生9600的波特率,但是我只有12M的晶振没有办法啊

初值设为0xF9,不过误差很大,不建议使用。可以将波特率改为4800,或换11.0952M.

你还是换个晶振的好

好吧,谢谢了,52是不是提供个timer2,用这个方式误差也是很大吗?

好吧,谢谢了,52是不是提供个timer2,用这个方式误差也是很大吗?

52是有timer2.不过波特率和用哪个定时器没有关系的。都一样。

void UartInit(void)                //9600bps@12.000MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF9;                //设定定时初值
        TH1 = 0xF9;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
}
误差百分之六点多,没办法,无不太懂你为什么定时器0也设置了,串口本身是不用,你可以干别的

这个是1T模式还是12T模式啊

这个波特率的误差我也曾被折腾过,最后还是换晶振。

就是调的再好也会有乱码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top