/*********************************************************** 函数名称:void UartInit(void) 函数功能:uart初始化 入口参数: 出口参数: 备注: ***********************************************************/ void UartInit(void) { TRISB5 = 1; TRISB7 = 1; ANS11 = 0; // 引脚配置 SPEN = 1; // 允许串口
//RABPU = 0; // 波特率 SPBRGH:SPBRG:= ((FOSC/BAUD_RATE)/16) - 1; BRGH = 0; // 低波特率 BRG16 = 1; // 16位模式
SPBRGH = ((FOSC/BAUD_RATE)/16) - 1; SPBRG = 1;
// 异步模式 SYNC = 0; // 异步 TXEN = 0; // 允许发送 TXIE = 0; // 禁止发送中断 CREN = 1; // 使能接收 RCIE = 1; // 允许接收中断
GIE = 1; PEIE = 1; }
/*********************************************************** 函数名称:void UartRxInt(void) 函数功能:uart 接收中断 入口参数: 出口参数: 备注: ***********************************************************/ void interrupt UartRxInt(void) { volatile uchar data;
RB4 = 1; // 控制LED灯亮 if(RCIE && RCIF) // RCIF不能软件清0 { // 数据 data = RCREG; g_UartRxBuf[g_UartRxCnt++] = data;
if(g_UartRxCnt >= UART_RECEBUF_LENGTH) // 防止溢出 { g_UartRxCnt = 0; } } if(1 == FERR) // 帧错误 { RB4 = 1; // test data = RCREG; // 无效字符 if(1 == FERR) { SPEN = 0; NOP(); SPEN = 1; } }
if(1 == OERR) // 溢出错误 { RB4 = 1; // test CREN = 0; NOP(); CREN = 1; } }
通过PC发数据给它,就是进入不了中断! 搞了1天,基本上想不出什么思路了,大家帮我看看吧 |