[CAN-bus/DeviceNet] c8051f040 can屏蔽与接收id

[复制链接]
4137|6
 楼主| clj368 发表于 2011-3-18 16:15 | 显示全部楼层 |阅读模式
最近在做can通信,用c8051f040,设置掩码寄存器一直没作用,只有在发送端与接收端ID相同时才能通信,还有就是不知道怎么接收发送端得ID,哪位大哥用过040帮帮忙,困扰我很久了
 楼主| clj368 发表于 2011-3-18 16:27 | 显示全部楼层
void init_msg_object_RX_1 (char MsgNum,uint id)
{
        uint temp;
           SFRPAGE = CAN0_PAGE;
        CAN0ADR = IF2CMDMSK;
        CAN0DAT = 0x00ba;            
        /*   IF2 Command Mask Registers  =0x00bb
        WR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=1,一次发送8字节数据*/

        CAN0ADR=IF2MSK1;
        CAN0DAT=0x0000;
        CAN0DAT=0x0000;

        CAN0ADR = IF2ARB1;           
        CAN0DAT = 0x0000;
        /*IF2 Arbitration Registers1 =0x0000,即ID15-0=0*/            
        temp=id<<2;//标准id为ID28-ID18,所以要左移2位
        temp&=0x1fff;
        temp|=0x8000;
        CAN0DAT = temp;
        /*IF2 Arbitration Registers2=100(id)00b
        MsgVal=1,Xtd=0,为标准模式,扩展ID无效,Dir=0,为接收*/
        CAN0DAT = 0x1488;
        /*IF2 Message Control Registers=0x0488
        NewDat=0,MsgLst=0,IntPnd=0,UMask=1,TxIE=0,RxIE=1,接收中断使能;RmtEn=0,TxRqst=0
        EoB=1,DLC3-0=1000,即数据长度为8*/
       

        CAN0ADR = IF2CMDRQST;        
        CAN0DATL = MsgNum;           
          /*IF2 Command Request Registers=MsgNum,将以上配置写入MsgNum号消息*/
}
接收初始化
 楼主| clj368 发表于 2011-3-18 16:28 | 显示全部楼层
void receive_data(uchar MsgNum,char *p,char len) //接收ID
/*将接收数据存入*p指针中,len为接收长度*/
{
        char i;
          SFRPAGE = CAN0_PAGE;
        CAN0ADR = IF2CMDMSK;              
        CAN0DATL = 0x7f;         
        /*   IF1 Command Mask Registers  =0xxx0f
        WR/RD=0,Mask=0,Arb=1,Control=1,ClrIntPnd=1,NewDat=1,DataA=1,DataB=1,一次发送8字节数据*/
    CAN0ADR = IF2CMDRQST;      
        CAN0DATL = MsgNum;              
        CAN0ADR = IF2DATA1;               
        for(i=0;i<len;i+=2){
                *p++=CAN0DATH;
                *p++=CAN0DATL;
        }

}
接收函数,不知道哪里有问题
airwill 发表于 2011-3-20 07:22 | 显示全部楼层
最近在做can通信,用c8051f040,设置掩码寄存器一直没作用,只有在发送端与接收端ID相同时才能通信,还有就是不知道怎么接收发送端得ID,哪位大哥用过040帮帮忙,困扰我很久了 ...
clj368 发表于 2011-3-18 16:15


用过 CAN, 没有用过 F040.
是不是可以在掩码寄存器 里增加几个允许的 ID 号进去. 这样发送和接收就可以使用不同的 ID 了.
 楼主| clj368 发表于 2011-3-21 09:31 | 显示全部楼层
谢谢啊,呵呵,我再试试,可能我的掩码寄存器一直设置不对吧
 楼主| clj368 发表于 2011-3-23 17:27 | 显示全部楼层
修改了一下就好了
void init_msg_object_RX_1 (char MsgNum,uint id)
{
        uint temp;
           SFRPAGE = CAN0_PAGE;
        CAN0ADR = IF2CMDMSK;
        CAN0DAT = 0x00F0;             修改后
xlsbz 发表于 2011-3-23 20:16 | 显示全部楼层
大概看了一下,接收函数应该没有问题 。

配置你可以重点看看
       CAN0ADR=IF2MSK1;
        CAN0DAT=0x0000;
        CAN0DAT=0x0000;

        CAN0ADR = IF2ARB1;           
        CAN0DAT = 0x0000;

至少这两个寄存器应该有问题=================

你现在的学习CAN的方法好像属于那种不看手册那种 就是随便找个例子一顿改 不求甚解那种。
当然有时候这也是个绝佳的方法,能快速搞定项目
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部