1,在发送程序中,将消息编号(MsgNum)写入IF1命令请求寄存器后,数据被发出,请问在接收程序中,如何通过消息编号相关的子函数,取出数据。
2,消息编号在CAN通信中都有哪些作用?是如何工作的?本人水平较低,希望各位可以提供相关代码参考。
我所学习的代码如下:
CAN启动程序:
void start_CAN(void)
{
SFPRAGE=CAN0_PAGE;
CAN0CN丨=0x41;
CAN0ADR=BITREG;
CAN0DAT=0x49c2;
CAN0CN丨=0x06;
CAN0CN&=~0x41;
}
发送程序:
void transmit(char MsgNum)
uchar num;
SFRPAGE=CAN0_PAGE;
CAN0ADR=IF1CMDMSK;
CAN0DAT=0x0087;
CAN0ADR=IF1DATA1;
for(num=0;num<8;num++)
CAN0DATH=sdata[num];
n++;
CAN0DATL=sdata[num];
CAN0ADR=IF1CMDRQST;
CAN0DATL=MagNum;
接收程序:
void ISRname(void) interrupt 19
temppage=SFRPAGE;
status=CAN0STA;
if((status&0x10)!=0)
CAN0STA&=0xef;
receive_data(MsgNum);
SFRPAGE=temppage;
..............................................................
请问:temppage=SFRPAGE;和SFRPAGE=temppage;这两句是做什么用的?receive_data(MsgNum);这个子函数该如何写?
1,对于MsgNum的概念还不是太理解,在发送程序中,将MsgNum写入命令请求寄存器后,数据被发送,请问MsgNum的号码,指的是本次发送数据目的地的消息RAM的号码,还是对此条数据进行一个号码的标记,以便接收方能通过此标记进行判断接收?
2,在看了一些资料之后,请问消息对象清0程序和消息对象初始化程序有什么用处?跟MsgNum的号码有关系么?
CAN总线传送到数据是基于消息而不是地址的。 建议你学一下CAN吧。 有一本书《手把手教你学CAN总线》,你可以看看。