需要使用到双串口单片机,于是选用PIC18F24K22,调试串口EUSART1、EUSART2,但是遇到了个问题,EUSART2死活不接收,进入不了中断接收,EUSART1接收没问题,EUSART2只会发送但不会接收,很无语,两个模块初始化程序都一样的,程序如下,请高手帮忙解决下,谢谢
void Uart_Init1(void)//串口1初始化
{
BAUDCON1|=0b00001000;//波特率控制 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN
SPBRG1=0x8a;//低字节 0x069d=2400 0x364=4800 0x1a5=9600
SPBRGH1=0x06;//高字节
RCSTA1|=0b10110000;//SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
TXSTA1|=0b10100000;//CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
TRISC7=1;//RX
RC6=1;
PIE1|=0b00100000;//允许EUSART1 接收中断
INTCON|=0B11000000;//中断控制寄存器
}
void Uart_Init2(void)//串口2初始化
{
BAUDCON2|=0b00001000;//波特率控制 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN
SPBRG2=0x64;//低字节 0x069d=2400 0x364=4800 0x1a5=9600
SPBRGH2=0x03;//高字节
TXSTA2|=0b10100000;//CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
RCSTA2|=0b10010000;//SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
TRISB6=0;//TX
TRISB7=1;//RX
RB6=1;
PIE3|=0b00100000;//EUSART2 接收中断允许位
INTCON|=0B11000000;//中断控制寄存器
}
void interrupt HiSir(void)//
{
unsigned char data;
if(RC1IF)//EUSART1 接收中断 串口1发送和接收正常
{
RC1IF=0;
data=RCREG1;//RC1IF=0;
Send_UART(0xaa);
Send_UART(data);
}
if(RC2IF)//EUSART2 接收中断 串口2发送正常,接收不到数据,不进入这里中断
{
RC2IF=0;
data=RCREG2;//RC1IF=0;
Send_UART(0xa1);
Send_UART(data);
}
}
|