我用9S12DT128用CAN4发给CAN0,到老接收不到。自检模式又可以。(自发自收)。那位高人指点一下。程序如下: ///////////////////////////////////////////CAN初始化 void CAN_init(){ CAN0CTL0_INITRQ=1; CAN4CTL0_INITRQ=1; while((CAN0CTL1_INITAK==0)&&(CAN4CTL1_INITAK==0)) ; CAN0IDAC=0X20; CAN4IDAC=0X20; CAN0IDMR0=0XFF; CAN0IDMR1=0XFF; CAN0IDMR2=0XFF; CAN0IDMR3=0XFF; CAN0IDMR4=0XFF; CAN0IDMR5=0XFF; CAN0IDMR6=0XFF; CAN0IDMR7=0XFF; CAN4IDMR0=0XFF; CAN4IDMR1=0XFF; CAN4IDMR2=0XFF; CAN4IDMR3=0XFF; CAN4IDMR4=0XFF; CAN4IDMR5=0XFF; CAN4IDMR6=0XFF; CAN4IDMR7=0XFF; CAN0BTR0=0X40; CAN4BTR0=0X40; CAN0BTR1=0X3F; CAN4BTR1=0X3F; CAN0CTL1=0X80; CAN4CTL1=0X80; CAN0CTL0_INITRQ=0; CAN4CTL0_INITRQ=0; while((CAN0CTL1_INITAK==1)&&(CAN4CTL1_INITAK==1)); CAN0RIER_RXFIE=1; }
///////////////////////////发送 void CAN4_TX(){ uchar i; i=CAN4TFLG; CAN4TBSEL=i; i=CAN4TBSEL; CAN4TXIDR1=0X01; CAN4TXIDR2=0X00; CAN4TXDSR0=1; CAN4TXDSR1=2; CAN4TXDSR2=3; CAN4TXDSR3=4; CAN4TXDSR4=5; CAN4TXDSR5=6; CAN4TXDSR6=7; CAN4TXDSR7=8; CAN4TXDLR=8; CAN4TFLG=i; }
////////////////////////////中断接收 void interrupt 38 CAN0_RX(void){
CAN0CTL0_RXFRM=1; rx[0]=CAN0RXDSR0; rx[1]=CAN0RXDSR1; rx[2]=CAN0RXDSR2; rx[3]=CAN0RXDSR3; rx[4]=CAN0RXDSR4; rx[5]=CAN0RXDSR5; rx[6]=CAN0RXDSR6; rx[7]=CAN0RXDSR7; CAN0RFLG=0X01; }
void main(void) {
CAN_init(); CAN4_TX(); for(;;) {}} |