| 
在线时间1 小时
UID2048281
注册时间2013-10-15
NXP金币0 
 该用户从未签到 注册会员 
 
 
	积分73 
最后登录1970-1-1 | 
 
| 用DT256单片机,实现CAN通信接收,并显示帧类型,是数据帧显示1,远程帧显示2. 函数ssss()和CANRCVFRM()。直接调用函数ssss()正常,但如果用CANRCVFRM(),不管接收什么类型的帧,都只显示2. 
 
 unsigned char ssss() {
 unsigned char * CANRCVBUF;
 unsigned char i;
 unsigned char IDEFlag;              //IDE标志
 unsigned char RTRFlag;              //RTR标志
 unsigned char FrameFlag;            //帧标志
 unsigned char  * addr;               //接收帧首地址
 if ((CAN0RFLG &(1 << RXF)) == 0)
 return 0xFF;            //未收到数据,返回0xFF
 //RXF=1,表示收到数据,取数据处理
 addr = (unsigned char  *)(&CAN0RXFG);
 for(i = 0; i < 16; i++)
 CANRCVBUF = addr; //将CAN接收缓冲区中的数据取到临时缓冲区
 CAN0RFLG = 0xFF;            //清所有接收标志
 //------判断是标准帧还是扩展帧-----------------------------------------
 IDEFlag = (CANRCVBUF[1] & (1 << IDE)); //取标识符中IDE标志
 if (IDEFlag == 0)           //标准帧
 {
 RTRFlag = (CANRCVBUF[1] & (1 << RTR)); //取标识符中RTR标志
 //判断是数据帧还是远程帧
 FrameFlag = ((RTRFlag == 0)?DataFrm:RemoteFrm);
 }
 else                        //扩展帧
 {
 RTRFlag = (CANRCVBUF[3] & (1 << ERTR)); //取标识符中RTR标志
 //判断是数据帧还是远程帧
 FrameFlag = ((RTRFlag == 0)?DataFrm:RemoteFrm);
 }
 CAN0SND(0x1111,&FrameFlag,1);
 
 return FrameFlag;           //返回数据帧标志(1)或远程帧(2)标志
 }
 
 unsigned char CANRCVFRM()
 {
 return  ssss();
 }
 
 
 
 | 
 |