- 打卡等级:以坛为家I
- 打卡总天数:224
- 最近打卡:2025-05-07 08:02:46
金牌会员
- 积分
- 1148
|
/*
IE2
EUSB:USB 中断允许位。 (注意:此位为只写位,不可读取,读取始终为 0 )
0:禁止 USB 中断
1:允许 USB 中断
ET4:定时/计数器 T4 的溢出中断允许位。
0:禁止 T4 中断
1:允许 T4 中断
ET3:定时/计数器 T3 的溢出中断允许位。
0:禁止 T3 中断
1:允许 T3 中断
ES4:串行口 4 中断允许位。
0:禁止串行口 4 中断
1:允许串行口 4 中断
ES3:串行口 3 中断允许位。
0:禁止串行口 3 中断
1:允许串行口 3 中断
ET2:定时/计数器 T2 的溢出中断允许位。
0:禁止 T2 中断
1:允许 T2 中断
ESPI:SPI 中断允许位。
0:禁止 SPI 中断
1:允许 SPI 中断
ES2:串行口 2 中断允许位。
0:禁止串行口 2 中断
1:允许串行口 2 中断
P_SW2
I2C_S[1:0]
CMPO_S
S4_S
S3_S
S2_S RxD2 TxD2
0 P1.0 P1.1
1 P4.6 P4.7
S2CFG
S2MOD0:帧错误检测控制位
0:无帧错检测功能
1:使能帧错误检测功能。此时 S2CON 的 S2SM0/FE 为 FE 功能,即为帧错误检测标志位。
S2M0x6:串口 2 模式 0 的通讯速度控制
0:串口 2 模式 0 的波特率不加倍,固定为 Fosc/12
1:串口 2 模式 0 的波特率 6 倍速,即固定为 Fosc/12*6 = Fosc/2
W1:当需要使用串口 2 时,此位必须设置为“1”,否则可能会产生不可预期的错误。若不需使用串口
2,则不用特别设置 W1
S2CON
S2SM0/FE:当S2CFG寄存器中的S2MOD0位为1时,该位为帧错误检测标志位
S2SM1
S2SM2:允许模式 2 或模式 3 多机通信控制位。
S2REN:允许/禁止串口接收控制位
0:禁止串口接收数据
1:允许串口接收数据
S2TB8:当串口 2 使用模式 2 或模式 3 时,S2TB8 为要发送的第 9 位数据,按需要由软件置位或清 0。
在模式 0 和模式 1 中,该位不用。
S2RB8:当串口 2 使用模式 2 或模式 3 时,S2RB8 为接收到的第 9 位数据,一般用作校验位或者地址帧
/数据帧标志位。在模式 0 和模式 1 中,该位不用。
S2TI:串口 2 发送中断请求标志位。在模式 0 中,当串口发送数据第 8 位结束时,由硬件自动将 S2TI
置 1,向主机请求中断,响应中断后 S2TI 必须用软件清零。在其他模式中,则在停止位开始发送
时由硬件自动将 S2TI 置 1,向 CPU 发请求中断,响应中断后 S2TI 必须用软件清零。
S2RI:串口 2 接收中断请求标志位。在模式 0 中,当串口接收第 8 位数据结束时,由硬件自动将 S2RI
置 1,向主机请求中断,响应中断后 S2RI 必须用软件清零。在其他模式中,串行接收到停止位的
中间时刻由硬件自动将 S2RI 置 1,向 CPU 发中断申请,响应中断后 S2RI 必须由软件清零。
*/
void UART2_config(u8 brt) // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
{
/*********** 波特率固定使用定时器2 *****************/
if(brt == 2)
{
SetTimer2Baudraye((u16)(65536UL - (MAIN_Fosc / 4) / Baudrate2));
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
RX2_TimeOut = 0;
B_TX2_Busy = 0;
TX2_Cnt = 0;
RX2_Cnt = 0;
}
}
void UART2_int (void) interrupt 8
{
if(S2RI)
{
S2RI = 0; //Clear Rx flag
RX2_Buffer[RX2_Cnt] = S2BUF;
if(++RX2_Cnt >= UART2_BUF_LENGTH) RX2_Cnt = 0;
RX2_TimeOut = 5;
}
if(S2TI)
{
S2TI = 0; //Clear Tx flag
B_TX2_Busy = 0;
}
}
|
|