ba_wang_mao 发表于 2008-12-22 10:16:42

请教:at90can128如何读取11位标识符?【恢复】

1、我选择CAN2.0A 11位标识符

2、结点2给结点1发送远程帧。 

3、结点1用MOB0邮箱接收结点2的远程帧数据 

    我在结点1的MOB0邮箱中断中读取CANIDT2和CANIDT1获取结点2的11位标识符信息,

    但是标识符信息不对(CANIDT1=0,CANIDT2=8),而读取的结点2的信息是正确的,

    为什么呢? 





结点1的MOB0初始化代码如下 

//------------------------------------------------------------------- 

//MOB0=RX  

//------------------------------------------------------------------- 

   CANPAGE = 0x00;          

   CANSTMOB = 0x00; 

   CANCDMOB = 0x00;    

   CANIDT4 = 0x00;  

   CANIDT3 = 0x00;  

   CANIDT2 = 0x02; // IDT10-->IDT3 = 0000 0010 

   CANIDT1 = 0x00; // IDT2--->IDT0 = 000       ----->接收标识符

   CANIDM4  = 0xFF;  

   CANIDM3  = 0xFF;  

   CANIDM2  = 0xFF;  

   CANIDM1  = 0xFF;                           ------>接收屏蔽码





结点1的接收中断服务程序如下 

#pragma interrupt_handler AT90CAN128_ISR:iv_CANIT 

void AT90CAN128_ISR(void) 

{ 

   uint8 i,flag; 

   uint8 can_page; 



   can_page = CANPAGE; 

//----------------------------------------------------- 

//MOB Interrupt       

//-----------------------------------------------------       

   flag = CANSIT2; 

   if (flag & 0x01) 

   { 

        CANPAGE = 0x00; 



        ID = CANIDT2; 

        IDT = CANIDT1;        --------------------->  在这读取结点2的11位标识符 



        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;        

        USART1_send_buffer = CANMSG;  

         CANSTMOB &= ~(1 << RXOK); 

         CANCDMOB = 0x88;         

     } 

   CANPAGE = can_page;    

} 

ba_wang_mao 发表于 2008-12-26 09:11:59

1、如何读取11位标识符
2、如何读取该报文的长度
3、如何读取该报文是标准格式还是扩展格式
4、如何判断该报文是数据帧还是远程帧
  俺已经知道了。
页: [1]
查看完整版本: 请教:at90can128如何读取11位标识符?【恢复】