pic18内核,串口持续接收几个小时后出现从0地址运行的情况,表现出来跟复位一样,请问一下,串口编写中断需要注意什么吗?第一次接触pic,快被这个问题折磨死了,怀疑堆栈溢出,可是编译器没提示,而且,屏蔽掉其他代码,只保留串口收发还是有这个问题,接收是靠中断外加一个定时器检测超时,发送主函数,发送不会引起这个问题,这是中断处理程序
if (TMR1IF && TMR1IE)
{
TMR1IF=0;
TMR1ON=0;
TMR1IE=0;
if( GetBit(RS485State,InRcPro) )
{
rs485_ReciTime();
ClrBit(RS485State,InRcPro);
CREN=0 ;
CREN=1 ;
serial_count = 25;
return;
}
Self.second +=4;
TimeSecond +=5;
return;
}
if( RCIF && RCIE ) //485接收中断
{
RCIF = 0;
if( FERR || OERR ) //监测是否有帧错误
{
CREN=0 ;
CREN=1 ; //接收模块被复位重置,OERR清零
tmp=RCREG;
return;
}
tmp = RCREG;
if( GetBit(RS485State,InRcPro)==0 )
{
Rs485TimeMs(5);
SetBit(RS485State,InRcPro);
}
if( Rs485_buff.count < 110 )
{
Rs485_buff.data[ Rs485_buff.count++ ] = tmp;
sleep_timera=15;
TMR1H=0xEC ; //5ms
TMR1L=0x78;
}
return;
} |