STC89C52RC、22.1184M晶振,产生11…

     STC89C52RC、22.1184M晶振,产生115200波特率。

    这问题还纠结了很久,因为在普通情况下算出来的T1时间常数带小数点,这样通常会导致通信结果出错。其实通过电源控制寄存器PCON将波特率倍频下就解决问题了。下面简单给出计算过程:

    1、首先T1时间常数X的值为:

       X = 2^8 - 2^SMOD * 晶振频率 / (384 * 波特率);

    2、电源控制寄存器PCON控制:

                  PCON      D7   D6   D5   D4   D3   D2   D1  D0

                  位符号   SMOD  ——————   GF1  GF0  PD  IDL

    在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。 各位的定义:
    (1)SMOD:该位与串口通信有关。
          SMOD=0; 串口方式1,2,3时,波特率正常。
          SMOD=1; 串口方式1,2,3时,波特率加倍。
    (2)GF1,GF0:两个通用工作标志位,用户可以自由使用。
          PD:掉电模式设定位。
          PD=0 单片机处于正常工作状态。
          PD=1 单片机进入掉电(Power Down)模式 ,可由外部中断或硬件复位模式唤醒,进入掉电模式后,外部晶振停振,CPU、定时器、串行口全部停止工作,只有外部中断工作。
    (3)IDL:空闲模式设定位。
          IDL=0 单片机处于正常工作状态。
          IDL=1 单片机进入空闲(Idle)模式,除CPU不工作外,其余仍继续工作,在空闲模式下可由任一个中断或硬件复位唤醒。
    3、通过将SMOD置1,可以正常产生115200波特率,由之前公式,可计算出TH1=TL1=X=0xFF;初始化代码如下:  
        UART_init()
        {
            PCON |= 0x80;
            SCON = 0x50;
            TMOD = 0x20;
            TH1  = 0xFF;
            TL1  = 0xFF;
            TR1  = 1;
            ES   = 1;  //串口中断
            EA   = 1;  //总中断
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值