kamfun 发表于 2013-11-2 14:51:52

求助!!Can通信只能发送数据,不能接受数据,请大神帮...

/*-------------------------------------------------------------------------------------------------------
CAN中断函数0
作用:用于CAN接受信息
---------------------------------------------------------------------------------------------------------*/
void        SJA1000_INT0(void)        interrupt        0       
{
        uchar Rebuf;
        uchar len;
        uchar Data,i;
//        HAND=0;   //CAN接收到数据
//        TR0=0;                //先关闭定时器0
    //ET0=0;
        if(ReadSJAReg(REG_CAN_IR)&0x01)                        //产生了接收中断并允许接收
        {
                  ReadSJARegBlock(16,Rebuf,13);       
                  WriteSJAReg(REG_CAN_CMR,RRB_BIT);                //释放SJA1000接收缓冲区
                  len=Rebuf&0x08;//数据长度
                  for(i=0;i<len;i++){
                     Data=Rebuf;           //第五字节为所需的字节书,前面的都是ID信息帧
                com_sendbyte(Data);
//                  display(Data);        //数据01 显示一号机发送的地址
//                        delay1s();
//                        delay1s();
//                        delay1s();
//                        delay1s();
                //       SendData(1,8,Data);
                  }                            
   }
//        TR0=1;                //先关闭定时器0
//ET0=1;
}

中断函数如上所述,请问大侠们为什么CAN只能发送数据,不能接受数据?这个问题困惑了好久了,希望大神解惑,感激不尽,小弟在此谢过~~

zhycircle 发表于 2013-11-2 15:11:10

中断允许了吗?终端引脚有电平变化吗?进中断后是否需要清除标志位?

kamfun 发表于 2013-11-2 16:58:53

本帖最后由 kamfun 于 2013-11-2 21:24 编辑

这位朋友先谢谢啦~~有的。而且can的INT接外部中断0,中断函数是CAN的引脚引起的,但是米有变化,接收灯RXD2也不亮,不像发送的时候灯都会亮。
低电平触发,程序我是在其他板子弄好移植过来的,这里加了光耦隔离就变成样子了,不知道什么原因。貌似进入中断不用清标志位吧。之前没光耦的两块板用同样的程序都是可以收发通信的。现在怀疑是硬件问题,因为进入中断了,就是没反应,求高人指教!

陶新成 发表于 2016-9-19 22:01:42

你好,我也在做CAN和你遇到同样的问题,CAN能发不能收,而且接收死机,不知道你解决了没有,这是我的电路和程序,如果你做完了能不能给我发一个参考资料,1534256154@qq.com这是我邮箱
http://www.amobbs.com/thread-5660036-1-1.html

tdh03z 发表于 2016-9-19 22:32:10

CAN如果能发送数据,说明基本配置初始化没问题,接收死机看看是不是开了接收中断,但程序中没处理
页: [1]
查看完整版本: 求助!!Can通信只能发送数据,不能接受数据,请大神帮...