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