c8051f060在基于CAN通信中接收程序的问题

  • 大核桃
  • LV2工程师
  • |      2016-04-14 18:35:09
  • 浏览量 936
  • 回复:7

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;

n++;

CAN0DATL=sdata;

}

CAN0ADR=IF1CMDRQST;

CAN0DATL=MagNum;

}

接收程序:

void ISRname(void) interrupt 19

{

temppage=SFRPAGE;

SFRPAGE=CAN0_PAGE;

status=CAN0STA;

if((status&0x10)!=0)

{

CAN0STA&=0xef;

receive_data(MsgNum);

}

SFRPAGE=temppage;

}

..............................................................

请问:temppage=SFRPAGE;和SFRPAGE=temppage;这两句是做什么用的?receive_data(MsgNum);这个子函数该如何写?

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:6
汉云 2016-04-15



CAN总线传送到数据是基于消息而不是地址的。
建议你学一下CAN吧。
有一本书《手把手教你学CAN总线》,你可以看看。

0   回复
举报
发布
大核桃 2016-04-15
0   回复
举报
发布
大核桃 2016-04-15
0   回复
举报
发布
大核桃 2016-04-15
0   回复
举报
发布
大核桃 2016-04-15

1,对于MsgNum的概念还不是太理解,在发送程序中,将MsgNum写入命令请求寄存器后,数据被发送,请问MsgNum的号码,指的是本次发送数据目的地的消息RAM的号码,还是对此条数据进行一个号码的标记,以便接收方能通过此标记进行判断接收?

2,在看了一些资料之后,请问消息对象清0程序和消息对象初始化程序有什么用处?跟MsgNum的号码有关系么?

0   回复
举报
发布
SingleYork 2016-04-15
帮顶,围观各位高手解答……
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子