谢谢大家帮忙啦。下面分别是发送单片机和接收单片机的程序,肯请帮我看看哪里出错了,<br />//发送数据,第一片PIC18F2580的发送数据程序<br />#include "p18f2580.h" <br />char CAN_TX_Adress_H,CAN_TX_Adress_L; <br /><br />void initial()<br />{<br />// TRISC=0;<br /> INTCON=0x00; <br /> ADCON1=0X07; <br /> PIE1=0; <br /> PIE2=0; <br /> PIE3=0; <br />} <br /><br />void initcan()<br />{<br /> TXB0CONbits.TXREQ=0;<br /> CAN_TX_Adress_H=0x33; <br /> CAN_TX_Adress_L=0xe0;<br /> CAN_TX_Adress_L=CAN_TX_Adress_L&0xe0; <br /> <br /> TRISB=(TRISB|0x08)&0XFB;<br /> CANCON=0X80; <br /> while((CANSTAT&0X80)==0) <br /> { <br /> ;<br /> } <br /> BRGCON1=0; <br /> BRGCON2=0X90; <br /> BRGCON3=0X42; <br /><br /> TXB0CON=0X03; <br /> TXB0SIDL=CAN_TX_Adress_L&0xe0;<br /> TXB0SIDH=CAN_TX_Adress_H; <br /> TXB0DLC=0X08; <br /> TXB0D0=0; <br /> TXB0D1=0; <br /> TXB0D2=0;<br /> TXB0D3=0;<br /> TXB0D4=0;<br /> TXB0D5=0;<br /> TXB0D6=0;<br /> TXB0D7=0;<br /><br /> CANCON=0X00; <br /> while((CANSTAT&0XE0)!=0) <br /> {<br /> ;<br /> }<br /> <br />}<br /><br /><br />void main()<br />{<br /> initial(); <br /> initcan(); <br /> RCONbits.IPEN=1; <br /> INTCON=INTCON|0xc0; <br /> TXB0CONbits.TXREQ=1; <br /> while(1)<br /> {<br /> TXB0CONbits.TXREQ=0;<br /> if(TXB0CONbits.TXABT==1)<br /> { <br /><br /> TXB0D0=0xff; <br /> TXB0D1=0xff;<br /> TXB0D2=0xff;<br /> TXB0D3=0xff;<br /> TXB0D4=0xff;<br /> TXB0D5=0xff;<br /> TXB0D6=0xff;<br /> TXB0D7=0xff;<br /><br /> TXB0CONbits.TXREQ=1; <br /> }<br /> }<br />}<br />//收数据,另一片18F2580的数据接收程序<br />#include "p18f2580.h" <br />char CAN_RX_Adress_H,CAN_RX_Adress_L;<br />int CAN_FLAG;<br />int i;<br />void InterruptHandlerHigh(void );<br /><br />void initial()<br />{<br /> INTCON=0x00; <br /> ADCON1=0X07; <br /> PIE1=0; <br /> PIE2=0; <br /> PIE3=0; <br /> i=0;<br /> CAN_FLAG=0; <br />} <br /><br />void initcan()<br />{<br /> TXB0CONbits.TXREQ=0;<br /> CAN_RX_Adress_H=0x33;<br /> CAN_RX_Adress_L=0xe0;<br /> CAN_RX_Adress_L=CAN_RX_Adress_L&0xe0; <br /> <br /> TRISB=(TRISB|0x08)&0XFB;<br /> CANCON=0X80; <br /> while((CANSTAT&0X80)==0) <br /> { <br /> ;<br /> } <br /> BRGCON1=0; <br /> BRGCON2=0X90; <br /> BRGCON3=0X42; <br /><br /> RXB0SIDL=CAN_RX_Adress_L&0xe0;<br /> RXB0SIDH=CAN_RX_Adress_H;<br /> RXB0CON=0x20;<br /> RXB0DLC=0x08;<br /> RXB0D0=0;<br /> RXB0D1=0;<br /> RXB0D2=0;<br /> RXB0D3=0;<br /> RXB0D4=0;<br /> RXB0D5=0;<br /> RXB0D6=0;<br /> RXB0D7=0;<br /> <br /> RXF0SIDH=CAN_RX_Adress_H;<br /> RXF0SIDL=CAN_RX_Adress_L&0xE0;<br /> RXM0SIDH=0xFF;<br /> RXM0SIDL=0xE0;<br /><br /> CANCON=0X00; <br /> while((CANSTAT&0XE0)!=0) <br /> {<br /> ;<br /> }<br /><br /> PIR3=0;<br /> PIE3=PIE3|0x01;<br /> IPR3=IPR3|0x01; <br />}<br /><br /># pragma code InterruptVectorHigh=0x08<br />void InterruptVectorHigh (void)<br />{<br /> _asm<br /> goto InterruptHandlerHigh<br /> _endasm<br />}<br /><br /># pragma code<br /># pragma interrupt InterruptHandlerHigh<br />void InterruptHandlerHigh( )<br />{<br /> if(PIR3bits.RXB0IF==1)<br /> {<br /> CAN_FLAG=1; <br /> PIR3bits.RXB0IF=0; <br /> RXB0CONbits.RXFUL=0; <br /> }<br />}<br /><br />void main()<br />{<br /> initial(); <br /> initcan(); <br /> RCONbits.IPEN=1; <br /> INTCON=INTCON|0xc0; <br /> while(1)<br /> { <br /> if(CAN_FLAG=1)<br /> {<br /> i=++i;<br /> CAN_FLAG=0;<br /> }<br /> <br /> }<br />}<br />急死人啦,各位一定要帮忙啊
|