| 
 
| 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 /> | 
 |