- 打卡等级:常住居民III
- 打卡总天数:101
- 最近打卡:2026-01-28 10:26:01
高级会员
- 积分
- 865
|
串口1 的 例程是 :10-串口1中断模式与电脑收发测试
配置流程是 UART1_config;
串口1 可以使用的定时器 是 timer1 和 timer2;
S1BRT = 1; //S1 为0 是 使用timer1,为1 是 使用timer2, 当前这个例程用的是timer2
SetTimer1Baudraye(Baudrate);
SetTimer2Baudraye(Baudrate);
设置完定时器后,就是设置引脚了。
SCON = (SCON & 0x3f) | 0x40; //UART1模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
// PS = 1; //高优先级中断
ES = 1; //允许中断
REN = 1; //允许接收
P_SW1 &= 0x3f;
P_SW1 |= 0x00; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
void SetTimer2Baudraye(u32 dat)
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
}
void SetTimer1Baudraye(u32 Baudrate1)
{
TR1 = 0;
T1_CT = 0; //Timer1 set As Timer
T1x12 = 1; //Timer1 set as 1T mode
TMOD &= ~0x30;//Timer1_16bitAutoReload;
TH1 = (u8)(Baudrate1 / 256);
TL1 = (u8)(Baudrate1 % 256);
ET1 = 0; //禁止中断
TR1 = 1;
}
串口2 的 例程是 :11-串口2中断模式与电脑收发测试
配置流程是 UART2_config;
串口2 可以使用的定时器 是 timer2;
S2CFG |= 0x01; //使用串口2时,W1位必需设置为1,否则可能会产生不可预期的错误
S2CON = (S2CON & 0x3f) | 0x40; //UART2模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
ES2 = 1; //允许中断
S2REN = 1; //允许接收
S2_S = 1; //UART2 switch to: 0: P1.0 P1.1, 1: P4.6 P4.7
void SetTimer2Baudraye(u32 dat)
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
}
串口3 的 例程是 :12-串口3中断模式与电脑收发测试
配置流程是 UART3_config;
串口3 可以使用的定时器 是 timer2 和 timer3;
ES3 = 1; //允许UART3中断
S3_S = 1; //UART3 switch bit1 to: 0: P0.0 P0.1, 1: P5.0 P5.1
void SetTimer2Baudraye(u32 dat) // 使用Timer2做波特率.
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
S3CON = 0x10; //8位数据, 使用Timer2做波特率发生器, 允许接收
}
void SetTimer3Baudraye(u32 Baudrate3 )
{
T3R = 0; //Timer stop
S3CON = 0x50; //8位数据, 使用Timer3做波特率发生器, 允许接收
T3H = (u8)(Baudrate3 / 256);
T3L = (u8)(Baudrate3 % 256);
T3_CT = 0; //Timer3 set As Timer
T3x12 = 1; //Timer3 set as 1T mode
T3R = 1; //Timer run enable
}
串口4 的 例程是 :13-串口4中断模式与电脑收发测试
配置流程是 UART4_config
串口4 可以使用的定时器 是 timer2 和 timer4;
ES4 = 1; //允许UART4中断
S4_S = 0; //UART4 switch bit2 to: 0: P0.2 P0.3, 1: P5.2 P5.3
void SetTimer2Baudraye(u32 dat) // 使用Timer2做波特率.
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
S4CON = 0x10; //8位数据, 使用Timer2做波特率发生器, 允许接收
}
void SetTimer4Baudraye(u32 Baudrate4 )
{
T4R = 0; //Timer stop
S4CON = 0x50; //8位数据, 使用Timer4做波特率发生器, 允许接收
T4H = (u8)(Baudrate4 / 256);
T4L = (u8)(Baudrate4 % 256);
T4_CT = 0; //Timer3 set As Timer
T4x12 = 1; //Timer3 set as 1T mode
T4R = 1; //Timer run enable
}
|
|