本帖最后由 tembo09 于 2018-6-10 21:45 编辑
现在STC15W4K56S2串口3 串口4都能发数据,就是接收中断不响应,求解,有例程借鉴下。谢谢
void Uart1234_Init(void)
{
P_SW1=0X00; //选择P30 P31为串口1
P_SW2=0X00; //选择P10 P11为串口2,选择P00 P01为串口3,选择P02 P03为串口4
//串口1配置 9600bps@11.0592MHz
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
//串口2配置 115200bps@11.0592MHz
S2CON = 0x50; //串口2的8位数据,可变波特率
//串口3配置 115200bps@11.0592MHz
S3CON |= 0x10; //串口3启动串行接收器
S3CON &= 0xBF; //串口3选择定时器2为波特率发生器,8位数据,可变波特率
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE8; //设定定时初值0xE0
T2H = 0xFF; //设定定时初值0xFE
AUXR |= 0x10; //启动定时器2
//串口4配置 9600bps@11.0592MHz
S4CON = 0x10; //8位数据,可变波特率
S4CON |= 0x40; //串口4选择定时器4为波特率发生器
T4T3M |= 0x20; //定时器4时钟为Fosc,即1T
T4L = 0xE0; //设定定时初值
T4H = 0xFE; //设定定时初值
T4T3M |= 0x80; //启动定时器4
ES = 1; // 串口1中断打开
IE2 |= 0x01; // 串口2中断打开
IE2 |= 0x08; // 串口3中断打开
IE2 |= 0x10; // 串口4中断打开
}
void Uart4() interrupt 18 using 1
{
IE2 &= 0xEF; // 串口4中断关闭
if(S4CON & S4RI) //串行接收到停止位的中间时刻时,该位置1
{
S4CON &= ~S4RI; //清除S4CON寄存器对应S4RI位(该位必须软件清零)
uart_count=0;
rev_buff4[uart_count] = S4BUF; //把串口4缓存SBUF寄存器数据依次存放到数组Rec_Buf4中
uart_count++;
if(uart_count>buff_max) //接收数大于定义接收数组最大个数时,覆盖接收数组之前值
{
uart_count = 0;
}
}
if(S4CON & S4TI) //在停止位开始发送时,该位置1
{
S4CON &= ~S4TI; //清除S4CON寄存器对应S4TI位(该位必须软件清零)
}
IE2 |= 0x10; // 串口4中断打开
}
|