- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2024-04-10 21:29:05
新手上路
- 积分
- 16
|
发表于 2024-4-10 21:28:21
|
显示全部楼层
请教下,我在STC8H8K64U上面使用 Timer2 做波特率发生器;同时使用串口1,2,3,4在中断方式下收发数据。现在的问题时1,3,4三个串口可以一起正常工作、或者1,2串口能一起正常工作。只要串口3,或者串口4初始化,串口2就不工作了。
串口一初始化代码:
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
TH1 = (u8)((65536UL - (FOSC / 4) / BAUD1) / 256);
TL1 = (u8)((65536UL - (FOSC / 4) / BAUD1) % 256);
ET1 = 0; //禁止中断
TR1 = 1;
SCON = (SCON & 0x3f) | 0x40;
ES = 1; //允许中断
REN = 1; //允许接收
P_SW1 & 0x3f; //Clear bit7,bit6
P_SW1 |= UART_IOSEL;
串口二初始化代码:
AUXR &= ~(1<<4); //Timer2 stop
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
IE2 &= ~(1<<2); //Disable Timer 2 Interrupt.
AUXR |= (1<<4); //Timer run enable
IE2 &= ~1; //Disable Uart2 Interrupt.
S2CON &= ~(1<<7); // 8位数据, 1位起始位, 1位停止位, 无校验
IE2 |= 1; //ES2
S2CON |= (1<<4); //允许接收
P_SW2 & ~(1);
P_SW2 |= UART_IOSEL; //UART2 switch to: 0: P1.0 P1.1
串口三、初始化代码:
AUXR &= ~(1<<4); //Timer stop
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
IE2 &= ~(1<<3); //禁止中断
IE2 &= ~(1<<2);
AUXR |= (1<<4); //Timer run enable
S3CON &= ~(1<<7); //mode0:8位数据, 1位起始位, 1位停止位, 无校验
S3CON &= ~(1<<6); //S3ST3:select Timer 2
//IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
IE2 |= (1<<3); //ES3允许中断
S3CON |= (1<<4); //允许接收
//P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
P_SW2 & ~(1<<1);
P_SW2 |= (UART_IOSEL < 1); //UART3 switch to: 0: P0.0,P0.1
串口四初始化代码:
AUXR &= ~(1<<4); //Timer2 stop
AUXR &= ~(1<<3); //Timer2 set As Timer
AUXR |= (1<<2); //Timer2 set as 1T mode
T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
IE2 &= ~(1<<2);
AUXR |= (1<<4); //Timer run enable
IE2 &= ~(1<<4); //Uart4 Interrupt Disable.
S4CON &= ~(1<<7); // 8位数据, 1位起始位, 1位停止位, 无校验
S4CON &= ~(1<<6); //S3ST3:select Timer 2
//IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
IE2 |= (1<<4); //Uart4 Interrupt Enable.
S4CON |= (1<<4); //允许接收
//S2_S:bit0; S3_S:bit1; S4_S:bit2
//S2_S:0-P1.0,P1.1;1-P4.6,P4.7
//S3_S:0-P0.0,P0.1;1-P5.0,P5.1
//S4_S:0-P0.2,P0.3;1-P5.2,P5.3
//P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
P_SW2 & ~(1<<2);
P_SW2 |= (UART_IOSEL < 2); //UART4 switch to: 0: P0.2 P0.3 |
|