请教: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;
} 1、如何读取11位标识符
2、如何读取该报文的长度
3、如何读取该报文是标准格式还是扩展格式
4、如何判断该报文是数据帧还是远程帧
俺已经知道了。
页:
[1]