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

关于c8051f060内置CAN通信中消息对象清0程序

大核桃 2016-04-20 浏览量:791
void clear_msg_objects(void)
{
    char old_sfrpage=SFRPAGE;
    unsigned char i;
    SFRPAGE = CAN0_PAGE;
    CAN0ADR = IF1CMDMSK;       
    CAN0DATL = 0xFF;            
    for (i=1;i<33;i++)
    {
        CAN0ADR = IF1CMDRQST;     
        CAN0DATL = i;
    }  
    SFRPAGE=old_sfrpage;
}
请问这段程序为什么能将消息对象清0?是如何工作的?为什么要对IF1命令请求寄存器中的message number重复写1-32呢?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 控制器局域网(CAN2.0B)控制器,具有32个消息对象,每个消息对象有其自己的标识
    通过 CAN0ADR与CAN0DATL还有接口寄存器IF1对CAN寄存器进行配置
    这里是对32个消息对像分配消息标识,以便所有CAN节点进行接收过滤。
    消息对象保存在消息RAM中,用消息对象接口寄存器对其访问和配置,也就是IF1.
    • 发布于 2016-04-20
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 为什么每次CAN0ADR = IF1CMDRQST时,设置CAN0DATL = i时的消息对象自动+1?
    • 发布于2016-04-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 自动+1这是这个51芯片的设计,有很多芯片在配置时,都是寄存器地址自动+1的。
    • 发布于2016-04-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼上威武,啥都懂,真乃全才也
    • 发布于2016-04-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 手册上面写的是在CAN0DATL每次读/写后,CAN0ADR自动+1,而上面的程序每次i++后,又重新指向IF1CMDRQST,我的意思是,为什么随着i++,每次重新指向IF1CMDRQST时,所设置的消息对象就自动+1呢?
    • 发布于2016-04-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 我都晕了。这个可以这样理解:

    IF1CMDRQST应该是0x08吧,这是个消息对你的接口寄存器,这个寄存器是用来配置32个消息对象的,你向里面写入消息对象时,也就把数据传到了CAN的RAM里,我觉得,关键还是你要理解CAN的原理,它是其他消息的不是像modbus那样基于地址的。

    你在板子上跑一跑程序,改一改,写一写就很容易明白。

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

相关问题

问题达人换一批

关于c8051f060内置CAN通信中消息对象清0程序