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