|
2个节点都通过了单节点测试,2个节点收发时不能通讯,示波器测2个节点的中断脚都没有中断信号!这是怎么回事?<br /><br />//--------------------------------------------------------------<br />void SJA_Init(void)<br />{<br /> unsigned char temp;<br /> <br /> do<br /> {<br /> SJA_Write(REG_CONTROL, 0x01);<br /> temp = SJA_Read(REG_CONTROL); <br /> }<br /> while (!(temp & 0x01)); <br /><br /> SJA_Write(REG_BTR0, 0x05);<br /> SJA_Write(REG_BTR1, 0xff);<br /><br /> SJA_Write(REG_ACR, 0xaa);<br /> SJA_Write(REG_AMR, 0x00);<br /><br /> SJA_Write(REG_CDR, 0xaa);<br /> SJA_Write(REG_OCR, 0x48);<br /><br /> do<br /> {<br /> SJA_Write(REG_CONTROL, 0x06);<br /> temp = SJA_Read(REG_CONTROL); <br /> }<br /> while(!(temp & 0x06)); <br /><br /> <br />}<br /><br /><br />//--------------------------------------------------------------<br />void SJA_SendBuf(void)<br />{<br /> unsigned char i;<br /> unsigned char temp;<br /> unsigned char TxBufB;<br /><br /> TxBufB = REG_TxBuffer1;<br /> <br /> while ((SJA_Read(REG_STATUS) & 0x04) == 0); // 等待发送缓冲区释放<br /> <br /> for (i=0; i<10; i++)<br /> {<br /> SJA_Write(TxBufB++, TxData);<br /> }<br /><br /> SJA_Write(REG_COMMAND, 0x01);<br /><br /> temp = SJA_Read(REG_STATUS);<br /> PC_send(temp);<br /><br /> <br />}<br /><br /><br />//--------------------------------------------------------------<br />void SJA_ReceiveBuf(void)<br />{<br /> unsigned char i;<br /> unsigned char RxBufB;<br /><br /> RxBufB = REG_RxBuffer1;<br /><br /> while ((SJA_Read(REG_STATUS) & 0x01) == 0);<br /> for (i=0; i<10; i++)<br /> {<br /> RxData = SJA_Read(RxBufB++);<br /> }<br /><br /> SJA_Write(REG_COMMAND, 0x04);<br />}<br /><br /><br />//--------------------------------------------------------------<br />void SJA_INT(void) interrupt 0 using 1 <br />{<br /> unsigned char status;<br /> unsigned char temp;<br /> EX0 = 0;<br /> status = SJA_Read(REG_INTERRUPT); <br /> temp = status & 0x02;<br /> if(temp == 0x02) <br /> { <br /> ;<br /> }<br /> <br /> temp = status & 0x01;<br /> if(temp == 0x01) <br /> {<br /> <br /> CAN_RxFlag = 1;<br /> } <br /><br /> EX0 = 1;<br /><br />}<br />//节点1主程序<br />void main(void)<br />{<br /><br /> MCU_Init();<br /> PC_send(0x01);<br /> SJA_Init();<br /> PC_send(0x02);<br /><br /> ANOLD = AN;<br /><br /><br /><br /> while (1)<br /> {<br /> while (AN == ANOLD);<br /> AN = ANOLD;<br /> SJA_SendBuf();<br /> BEEP = 0;<br /> Delay(500);<br /> BEEP = 1;<br /><br /> while (CAN_RxFlag == 0);<br /> CAN_RxFlag = 0;<br /> SJA_ReceiveBuf();<br /> BEEP = 0;<br /> Delay(100);<br /> BEEP = 1;<br /> Delay(100);<br /> BEEP = 1; <br /> }<br /> <br />}<br />//节点2主程序<br />void main(void)<br />{<br /> unsigned char temp;<br /> MCU_Init();<br /> SJA_Init();<br /> while (1)<br /> {<br /> <br /> if (CAN_RxFlag == 1)<br /> {<br /> CAN_RxFlag = 0;<br /> SJA_ReceiveBuf();<br /> BEEP = 0;<br /> Delay(100);<br /> BEEP = 1;<br /> Delay(100);<br /> BEEP = 1;<br /><br /> Delay(100);<br /> SJA_SendBuf();<br /> BEEP = 0;<br /> Delay(100);<br /> BEEP = 1;<br /> }<br /> } <br />}<br /> |
|