打印
[CAN-bus/DeviceNet]

c8051f040 can屏蔽与接收id

[复制链接]
2868|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
clj368|  楼主 | 2011-3-18 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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 了.

使用特权

评论回复
5
clj368|  楼主 | 2011-3-21 09:31 | 只看该作者
谢谢啊,呵呵,我再试试,可能我的掩码寄存器一直设置不对吧

使用特权

评论回复
6
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;             修改后

使用特权

评论回复
7
xlsbz| | 2011-3-23 20:16 | 只看该作者
大概看了一下,接收函数应该没有问题 。

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

        CAN0ADR = IF2ARB1;           
        CAN0DAT = 0x0000;

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

你现在的学习CAN的方法好像属于那种不看手册那种 就是随便找个例子一顿改 不求甚解那种。
当然有时候这也是个绝佳的方法,能快速搞定项目

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝