- 打卡等级:初来乍到
- 打卡总天数:6
- 最近打卡:2025-02-15 22:45:37
高级会员
- 积分
- 604
|
本帖最后由 DebugLab 于 2024-9-5 00:22 编辑
四路串口全开,其中1 2 4三均为115200,全部共用定时器2,串口3为9600,单独用定时器3,测试发送测试数据,发现1和4都是115200的波特率,可是2和3都是9600的波特率,2应该为115200的,却成了9600,有点奇怪,配置如下:
void Serial_Init(void)//串口初始化函数
{
TMOD = 0xf0;//16位自动重装
TL0 = 0x78;
TH0 = 0xec; //5毫秒 @12.000MHz
TF0 = 0;
TR0 = 1; //开启定时器0
ET0 = 1; //开启定时器0中断
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xE6; //设置定时初始值 115200 @12.000MHz
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
ES = 1;
S2CON = 0x50; //8位数据,可变波特率 串口2 115200
ES2 = 1;
S3CON = 0x10; //8位数据,可变波特率
S3CON |= 0x40; //串口3选择定时器3为波特率发生器
T4T3M |= 0x02; //定时器时钟1T模式
T3L = 0xC7; //设置定时初始值 9600
T3H = 0xFE; //设置定时初始值
T4T3M |= 0x08; //定时器3开始计时
ES3 = 1;
S4CON = 0x10; //8位可变波特率,
S4CON &= 0xBF; //串口4选择定时器2为波特率发生器
ES4 = 1;
EA = 1; //开启全局中断
}
|
|