打印
[技术问答]

MS51EC0AE 的 UART0 使用 T1 作为波特率发生器失败

[复制链接]
511|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我的板子使用了 UART0 和 UART1,借鉴新唐官方提供的例程,这两个串口分别使用T3作为波特率发生器是都没有问题的,因为目前的这个方案同时使用了串口0和1,所以只能给串口1分配了T3为波特率发生器,串口0分配了T1作为波特率发生器,但是串口0说啥也不工作,初始化代码是官方例程提供的:

void Uart0_MyInit(u32 Baudrate)
{       
    SFRS = 0;
       
        P07_INPUT_MODE;
        P06_PUSHPULL_MODE;
               
    SCON = 0x50;          //UART0 Mode1,REN=1,TI=1
    TMOD |= 0x20;         //Timer1 Mode1
    set_PCON_SMOD;        //UART0 Double Rate Enable
    set_CKCON_T1M;
    clr_T3CON_BRCK;       //Serial port 0 baud rate clock source = Timer1
    TH1 = 256 - (24000000/16/Baudrate);
    set_TCON_TR1;
    set_IE_ES;
}

上面串口0的初始化代码,对方发来数据之后,根本不会引起接收中断,这是为什么呢?

使用特权

评论回复
沙发
taobaofarmer|  楼主 | 2022-11-3 16:25 | 只看该作者
不好意思找到原因了,因为在其它功能函数里访问了 SFRS 其它页的寄存器,访问完之后 SFRS 没有切换回页0,所以导致 SBUF = X;是发送不出去数据的

3543763637a95bb7d5.png (663 Bytes )

3543763637a95bb7d5.png

使用特权

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

本版积分规则

71

主题

460

帖子

3

粉丝