我用的是S51+SJA1000+TJA1050做的两个一样的板子通信 一个发送一个接收<br />现在出现的问题是接收端老是提示数据溢出。下面是我的发送接收程序,懂行的帮我看看,提出意见,谢谢、!!<br /><br />void init_can()<br />{<br /> WriteSjaReg(REG_CONTROL,0x01);<br /> WriteSjaReg(REG_ACR,0x00);<br /> WriteSjaReg(REG_AMR,0xFF);<br /> WriteSjaReg(REG_BTR0,0x03);<br /> WriteSjaReg(REG_BTR1,0x1C);<br /> WriteSjaReg(REG_CDR,0x48);<br /> WriteSjaReg(REG_OCR,0xaa);<br /> WriteSjaReg(REG_CONTROL,0x1E);<br />}<br /><br /><br />void SendData(void)<br />{<br /> SendBuf[0] = 0x11;<br /> SendBuf[1] = 0x28;<br /> if((ReadSjaReg(REG_CONTROL)&0x01)==0) //JA1000处于工作模式<br /> { <br /> if((ReadSjaReg(REG_CONTROL)&0x08)==0x08)<br /> {<br /> if((ReadSjaReg(REG_CONTROL)&0x04)==0x04)<br /> {<br /> *((unsigned char xdata *)REG_TxBuffer1) = 0x55;<br /> *((unsigned char xdata *)REG_TxBuffer2) = 0;<br /> *((unsigned char xdata *)REG_TxBuffer3) =0;<br /> *((unsigned char xdata *)REG_TxBuffer4) = 0;<br /> *((unsigned char xdata *)REG_TxBuffer5) = 0;<br /> *((unsigned char xdata *)REG_TxBuffer6) = 0; *((unsigned char xdata *)REG_TxBuffer7) = SendBuf[6];<br /> *((unsigned char xdata *)REG_TxBuffer8) = 0;<br /> *((unsigned char xdata *)REG_TxBuffer9) = 0; *((unsigned char xdata *)REG_TxBuffer10) = 0;<br /><br /> BCAN_CMD_PRG(TR_CMD); //置位发送请求位<br /> P2_1=0;<br /> } <br /> } <br /> }<br /> else //SJA1000在复位模式<br /> {<br /> printf("SJA1000 is working as Reset Mode!
");<br /> init_can();<br /> } <br />}<br /><br />接收程序:<br />void ReceiveData(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 /> 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 /> //P2_1=0; <br /><br /> if(ReadSjaReg(REG_STATUS) & 0x03 == 0x03)<br /> {<br /> WriteSjaReg(REG_COMMAND,0x0c); //释放缓冲区并清除溢出标志<br /> P2_2 = 0; (问题就在这里,这个LED亮,数据溢出!)<br /> }<br /> else<br /> {<br /> WriteSjaReg(REG_COMMAND,0x04);; //释放缓冲区<br /> P2_3 = 0;<br /> }<br /> }<br /> }<br />} |
|