[技术问答] 定时器3作为串口0,1的波特率发生器

[复制链接]
1270|3
 楼主| uptown 发表于 2025-1-11 10:40 | 显示全部楼层 |阅读模式
定时器3串口0模式3代码实现:



                P06_Quasi_Mode;
                P07_Quasi_Mode;
       
       
        SCON = 0xD0;       //UART0 Mode3,REN=1,TI=1
        set_SMOD;        //UART0 Double Rate Enable
        T3CON = 0xF8;   //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
        set_BRCK;        //UART0 baud rate clock source = Timer3
#ifdef  FOSC_240000
        RH3   = HIBYTE(65536 - (1500000/u32Baudrate));  
        RL3   = LOBYTE(65536 - (1500000/u32Baudrate));
#endif       
        set_TR3;         //Trigger Timer3
        set_RB8;                                        //This bit is for setting the stop bit 2 high/low status,
        TI = 0;
       
    set_ES;           //enable UART interrupt
    set_EA;           //enable global interrupt
定时器3串口1模式3代码实现:



                P02_Quasi_Mode;
                P16_Quasi_Mode;
       
                SCON_1 = 0xD2;       //UART1 Mode3,REN=1,TI=1
                set_SMOD_1;        //UART1 Double Rate Enable
                T3CON = 0xF8;   //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
                set_BRCK;        //UART1 baud rate clock source = Timer3
#ifdef FOSC_160000
                RH3   = HIBYTE(65536 - (1000000/u32Baudrate));  
                RL3   = LOBYTE(65536 - (1000000/u32Baudrate));
#endif
#ifdef FOSC_240000
                        RH3   = HIBYTE(65536 - (1500000/u32Baudrate));  
                        RL3   = LOBYTE(65536 - (1500000/u32Baudrate));
#endif
                set_TR3;         //Trigger Timer3
                set_RB8_1;                                        //This bit is for setting the stop bit 2 high/low status,
                TI_1 = 1;
       
    set_ES_1;           //enable UART interrupt
    set_EA;           //enable global interrupt



小灵通2018 发表于 2025-1-13 18:59 | 显示全部楼层
UART就是通过时钟来控制波特率的,所以就需要依赖定时器。
Stahan 发表于 2025-1-19 23:39 来自手机 | 显示全部楼层
可不可以搞调整波特率啊?
花开了相爱吧 发表于 2025-9-15 16:14 | 显示全部楼层
将定时器 3 配置为串口 0 和 1 的波特率发生器,需先设定定时器 3 工作在定时模式,计算并加载初值以生成所需波特率的时钟信号。串口 0 和 1 初始化时,选择定时器 3 作为时钟源,使波特率由定时器 3 输出脉冲决定,确保串口通信速率稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

3829

帖子

2

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