我用PIC16f1509 这段是串口通信接收部分,不知道为什么进不了接收中断里,但是我用16f877a却可以收到数据 ,我看了这两个IC异步串行寄存器没什么很大差别。
求教不知道为什么进不了中断。
void Uart_initial() //串口通信初始化4M晶振
{
SPBRGH=0; //25; //BR=115200
SPBRGL=8; //25; //BR=115200
TXSTA=0X26; //发送状态和控制寄存器 使能发送,波特率设置高速
RCSTA=0X90; //接收状态和控制寄存器 串口使能打开,连续接收使能开
BAUDCON=0X88; //波特率控制寄存器
TRISB5=1; //RB5作为串口通信的输入
TRISB7=0; //RB7作为串口通信的输出
GIE=1; //
TXIF=0;
PEIE=1;
RCIE=1; //USART 接收中断允许位,1=允许
RCIF=0;
}
//接收中断
void interrupt isr()
{
if(RCIF) //接收中断
{
RCIF=0;
if((RCREG=='O'||RCREG=='a')&&!RC_bit) //接收到起始位
{
RC_bit=1; //起始接收标志位置位
RC_cnt=0;
RC_buf[RC_cnt]=RCREG;
}
else
{
if(RC_bit&&RC_cnt<35) //没有接收到末位标志位,并且之前有接收到起始位
{
RC_cnt++;
RC_buf[RC_cnt]=RCREG;
if(RCREG=='\n') //收到结束位
{
RS_flag=1; //接收完成
RC_bit=0; //存储标志位
}
}
else
{
RC_bit=0; //否则接收到的是干扰信号从新接收
}
}
}
}
|