关于c8051F040的can接收多个ID的问题

[复制链接]
2781|1
 楼主| suifeg 发表于 2008-10-20 16:22 | 显示全部楼层 |阅读模式
我用C8051F040调试CAN的时候,我通过设置屏蔽ID在同一消息目标中接收多个ID的报文,但怎么老是不能接受其<br /><br />他的ID,现在我只能接受相同设置的ID,下面是我的接受初始化程序<br /><br />void&nbsp;init_msg_object_RX&nbsp;(unsigned&nbsp;char&nbsp;MsgNum,unsigned&nbsp;int&nbsp;id)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SFRPAGE&nbsp;=&nbsp;CAN0_PAGE;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0ADR&nbsp;=&nbsp;IF2CMDMSK;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;0x00bb;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;IF2&nbsp;Command&nbsp;Mask&nbsp;Registers&nbsp;&nbsp;&nbsp;=0x00bbWR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=1,一次发送8字节数据*/<br />//-----------------------感觉可能是这里设置的不对--------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN0ADR&nbsp;=&nbsp;IF2MSK1;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;0xffc0;//屏蔽掉ID的最低四位,但实际上还是没有被屏蔽,不知是为什么<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0ADR&nbsp;=&nbsp;IF2ARB1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;0x0000;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*IF2&nbsp;Arbitration&nbsp;Registers1&nbsp;=0x0000,即ID15-0=0*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=id&lt&lt2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//标准id为ID28-ID18,所以要左移2位<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&=0x1fff;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp|=0x8000;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;temp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*IF2&nbsp;Arbitration&nbsp;Registers2=100(id)00b<br />&nbsp;&nbsp;&nbsp;&nbsp;MsgVal=1,Xtd=0,为标准模式,扩展ID无效,Dir=0,为接收*/<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DAT&nbsp;=&nbsp;0x1488;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*IF2&nbsp;Message&nbsp;Control&nbsp;Registers=0x0488<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=1,接收中断使&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能;RmtEn=0,TxRqst=0EoB=1,DLC3-0=1000,即数据长度为8*/<br />//-------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0ADR&nbsp;=&nbsp;IF2CMDRQST;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CAN0DATL&nbsp;=&nbsp;MsgNum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*IF2&nbsp;Command&nbsp;Request&nbsp;Registers=MsgNum,将以上配置写入MsgNum号消息*/<br />}<br /><br /><br />希望知道的大侠给指点一下,迷茫了好几天了,谢谢!<br />另外如果从一个消息目标接收多个ID的报文,怎么确认是那个ID的报文那?怎么从RAM中读取消息ID?<br /><br /><br /><br />
 楼主| suifeg 发表于 2008-10-22 13:45 | 显示全部楼层

不要沉了,我顶一下

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

76

帖子

0

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