我用S51+SJA1000+TJA1050做的两个板子,连接在一起通信,一个发送一个接收;现在出现以下几个问题:
接收数据后,判断是否有数据溢出,有就清除数据溢出并释放缓冲区,没有的话就直接释放缓冲区,可是每次接收数据后同样是显示数据溢出,进行数据溢出处理。(即使我只发送一次也是如此) 请问这个怎么解决??
下面是我的发送程序和接收处理程序:
void SendData(void) { unsigned char datalong; SendBuf[0] = 0x11; SendBuf[1] = 0x28; if((ReadSjaReg(REG_CONTROL)&0x01)==0) //JA1000处于工作模式 { for (i=0; i<8; i++) SendBuf[i+2]=testdata;
if((ReadSjaReg(REG_STATUS)&0x08)==0x08) { if((ReadSjaReg(REG_STATUS)&0x04)==0x04) { *((unsigned char xdata *)REG_TxBuffer1) = SendBuf[0]; *((unsigned char xdata *)REG_TxBuffer2) = SendBuf[1]; datalong = SendBuf[1] & 0x0f; if(datalong!=0) { *((unsigned char xdata *)REG_TxBuffer3) = SendBuf[2]; *((unsigned char xdata *)REG_TxBuffer4) = SendBuf[3]; *((unsigned char xdata *)REG_TxBuffer5) = SendBuf[4]; *((unsigned char xdata *)REG_TxBuffer6) = SendBuf[5]; *((unsigned char xdata *)REG_TxBuffer7) = SendBuf[6]; *((unsigned char xdata *)REG_TxBuffer8) = SendBuf[7]; *((unsigned char xdata *)REG_TxBuffer9) = SendBuf[8]; *((unsigned char xdata *)REG_TxBuffer10) = SendBuf[9]; } BCAN_CMD_PRG(TR_CMD); //置位发送请求位 P2_0=0; } } } else //SJA1000在复位模式 { Config_SJA(); } }
//接收处理程序
void CanRcv_Prg(void) { unsigned char DataLong; if(ReadSjaReg(REG_STATUS) & 0x01 == 0x01)//工作模式下 { RcvBuf[0] = *((unsigned char xdata *)REG_RxBuffer1); RcvBuf[1] = *((unsigned char xdata *)REG_RxBuffer2); DataLong = RcvBuf[1]&0x0f;
if(DataLong != 0) { RcvBuf[2] = *((unsigned char xdata *)REG_RxBuffer3); RcvBuf[3] = *((unsigned char xdata *)REG_RxBuffer4); RcvBuf[4] = *((unsigned char xdata *)REG_RxBuffer5); RcvBuf[5] = *((unsigned char xdata *)REG_RxBuffer6); RcvBuf[6] = *((unsigned char xdata *)REG_RxBuffer7); RcvBuf[7] = *((unsigned char xdata *)REG_RxBuffer8); RcvBuf[8] = *((unsigned char xdata *)REG_RxBuffer9); RcvBuf[9] = *((unsigned char xdata *)REG_RxBuffer10); } if(ReadSjaReg(REG_STATUS) & 0x03 == 0x03) { WriteSjaReg(REG_COMMAND,0x0c); //释放缓冲区并清除溢出标志 P2_2 = 0; //(问题就在这里!!!!!!!!!) } else { WriteSjaReg(REG_COMMAND,0x04); //释放缓冲区 } } }
|