本帖最后由 XINGFUDEWUNAI 于 2015-10-18 15:36 编辑
后来在调试过程中,发现只能进入一次写操作,第二次就不能进入。每次写操作完成后,会置ModbusModule.Status=IDLE_WAIT,在第二次写操作的时候,还一直处于IDLE_WAIT,这是怎么回事?谢谢! switch(ModbusModule.Status)
{
case IDLE_WAIT: //空闲
//如果在空闲状态有数据,开始接收
if(SciaRegs.SCIFFRX.bit.RXFFST!=0)//我觉得也可以换成标志位
{
ModbusModule.Status = RECE_START;
}
break;
case RECE_START://正在接受,停止时间超过5个毫秒结束
SciaRegs.SCIFFRX.bit.RXFFIENA=1;
if (CpuTimer0.InterruptCount>=3)
{ //接收帧结束
ModbusModule.Status = RECE_END;
}
break;
case RECE_END: //接收完毕
if(RTUSlaveFrameAnalyse()==0)
{ //帧解析正确
ModbusModule.Status =SEND_START;
SciaRegs.SCIFFRX.bit.RXFFIENA=0;
}
else
{ //帧解析不正确
ModbusModule.Status =SEND_END; //不打开发送开关
}
break;
case SEND_START: //开始发送
scia_xmit(ModbusModule.Buf);
ModbusModule.Status =SEND_END;
CpuTimer0.InterruptCount=0;
break;
case SEND_END: //发送完毕
SciaRegs.SCIFFRX.bit.RXFIFORESET=0;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
ModbusModule.Status=IDLE_WAIT;
break;
}//end switch
|