• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

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

大核桃 2016-04-14 浏览量:1024

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;

SFRPAGE=CAN0_PAGE;

status=CAN0STA;

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

{

CAN0STA&=0xef;

receive_data(MsgNum);

}

SFRPAGE=temppage;

}

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

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

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:6
  • 帮顶,围观各位高手解答……
    • 发布于2016-04-15
    • 举报
    • 评论 0
    • 0
    • 0

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

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

    • 发布于2016-04-15
    • 举报
    • 评论 0
    • 0
    • 0



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

    • 发布于2016-04-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

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