| 
 
| 发送总是显示应答错,发送忙 AERR=1
 TXBSY=1
 程序如下:
 
 void CAN_INIT ( void )
 {
 CANGCON = 0x01 ; /*进入复位模式并且复位MOb*/
 while ((CANGSTA & 0x04)); /*测试CANGSTA中的ENFG位是否为0*/
 CANBT1 = 0x12;            //16Mhz,100kbps
 CANBT2 = 0x0c;
 CANBT3 = 0x37;
 CANTCON = 0xff ; /*设置定时器预定标*/
 //--------------can_MOB INITIAL-------------------
 //MOB0=RX[CMD]  接收上位机发来的指令    格式:3,0,0,177,239,33
 CANPAGE = 0x00;                               //MOB0,自动增量,初值为0
 CANSTMOB = 0;
 CANCDMOB = 0x18;                               //can2B,DLC=8
 CANIDT4 = 0x08;                                // 00001 0xx
 CANIDT3 = 0x79;                                // 01111 001       33
 CANIDT2 = 0x8f;                                // 10001 111       239
 CANIDT1 = 0x65;                                // 01100 101       177
 
 CANIDM4 = 0xfc;                               //               11111 100
 CANIDM3 = 0xff;                               //               11111 111
 CANIDM2 = 0xff;                               //               11111 111
 CANIDM1 = 0x07;                               //CANIDM4-1数据校验屏蔽寄存器 00000 111
 
 //MOB1=TX[STA1] 向上位机报告状态组1     6,0,0,178,239,33
 CANPAGE = 0x10;
 CANSTMOB = (1<<TXOK);
 CANCDMOB = 0x18;
 CANIDT4 = 0x08;                                // 00001 000
 CANIDT3 = 0x79;                                // 01111 001       33
 CANIDT2 = 0x97;                                // 10010 111       239
 CANIDT1 = 0xc5;                                // 11000 101       178
 
 CANGIE |= ((1<<ENIT) + (1<<ENRX));                      //开全局中断 和 接收中断
 CANIE2 |= 0x00;                                //开MOB3 & MOB0信箱接收中断(接收邮箱)
 CANPAGE = 0x00;
 
 CANGCON = 0x0a ; /*进入操作模式*/
 while (!(CANGSTA & (1<<2))); /*测试CANGSTA中的ENFG位是否为1*/
 }
 void CAN_TX ( void )
 {
 byte i;
 CANGIE &= 0xdf;//ENRX=0
 CANPAGE = 0x10 ; /*指定此消息的MOb页(寄存器中的高4位)*/
 if (CANSTMOB & 0x40)
 {
 CANSTMOB &= 0xbf;
 for(i = 0; i < 8; i++) CANMSG = 0x41+i;
 
 CANCDMOB = 0x58;                //帧发送
 }
 CANGIE |=0x20; //ENRX=1
 }
 
 | 
 |