***请教CAN数据通讯的几个问题*** 点击:2404 | 回复:17



whm

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-10-22 16:01:00
楼主
各位高手: 我有几个问题请教一下: 1.我的系统是AT89C52+SJA1000+82C250,采用中断接收。我在测试CAN接收程序,发现每次进入中断后在读取IR.0时,结果总是0(正常发生中断,此接收中断位应为1),致使我总接收不到数据,而我如不判断它,只是读取(清零),就可以正常接受数据,请问这是为什么?我在接收数据时是否需要判断IR.0?如需要,如何读取 2.关闭总线是如何实现的 3.我用一个主机带64个从机节点,各节点能否采用不同波特率 4.主从采用轮循方式,主机向从机发请求,从机接到后向主机发送数据,主机接收数据,那么从机发送数据后如何知道发送成功呢?是否还需要主机返回从机一个接受成功信号呢? 谢谢



lhsw

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 69回
  • 年度积分:0
  • 历史总积分:69
  • 注册:2001年6月29日
发表于:2002-07-22 11:08:00
1楼
1.不需要,因为你一读取中断寄存器,他就自动清零了,所以你读不到他高的时候 2,当两个错误计数器都达到128(好象是)时,总线就关闭了 3不可以 4是

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-07-22 11:14:00
2楼
谢谢你 lhsw,那我如果有多个中断,需要我必须读取中断寄存器怎么办 另外,能否通过软件关闭总线

ruth

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 17回
  • 年度积分:0
  • 历史总积分:127
  • 注册:2002年3月28日
发表于:2002-07-23 13:47:00
3楼
1.中断寄存器的中断标志位,读取之后就会被清除,但接收中断并不会,只有通过软件才能清除(向命令寄存器发命令0x04);是否是你在中断使能寄存器中没有开接收中断?所以不会产生接收中断。 2.总线出错(有各种原因),总线关闭。 3.不可以 4.从机发送数据后如何知道发送成功,其实发送成功后主机会有一个类似ACK的回应给从机(CAN控制器本身就已实现的),并且从机发送成功会有发送中断产生(中断使能寄存器中开发送中断)。

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-07-23 14:42:00
4楼
谢谢你RUTH,你的答复我有些看法: 1. 我的中断使能是打开的,我用BASICCAN方式,给控制寄存器位1即CR.1置位就可以了,而且我也能产生接收中断,只是在接收中断中判断IR.0时,总是零,我见到的一些例子在接收中断也对它进行了判断,为什么总是零,我不太清楚 2. DEVICENET协议中有在主从连接中关闭总线的情况,那应该是软件关闭吧? 以上测试程序我只打开接收中断

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-07-23 19:03:00
5楼
我想你的问题可能是这样的,你开了很多中断,但不一定是进的接收中断,也许你的发送和接收有问题。如果你进了接收中断,那一定可以读到IR.0为1。

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-07-23 19:04:00
6楼
我想你的问题可能是这样的,你开了很多中断,但不一定是进的接收中断,也许你的发送和接收有问题。如果你进了接收中断,那一定可以读到IR.0为1。

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-07-24 08:32:00
7楼
谢谢,可我只开了接收中断啊,而且我接数发数都是正常的啊

lhsw

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 69回
  • 年度积分:0
  • 历史总积分:69
  • 注册:2001年6月29日
发表于:2002-07-31 22:50:00
8楼
把第一次读出的数据进行备份保留

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-02 12:53:00
9楼
你可以用示波器测一下到底进如89C52的是不是SJA1000的中断。

enoch

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 11回
  • 年度积分:0
  • 历史总积分:20
  • 注册:2002年6月24日
发表于:2002-08-13 12:40:00
10楼
你可以看一下,是否是使用的自监测方式?如是,则有可能是ir.0为0 ,我就遇到过这种情况。

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-08-14 08:33:00
11楼
谢谢,请问自监测方式是由哪个寄存器设定的,如何判断是自监测方式,为什么这种状态下IR.0为0

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-16 16:33:00
12楼
在PELINcan模式下寄存器0的第三位为自检位,1为自检,0为正常。

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-08-19 09:28:00
13楼
可我用BASIC CAN模式啊

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-19 10:21:00
14楼
basic can 没有自检方式,我建议你检查一下硬件,你的SJA1000的中断与89C52的哪个中断相连

whm

  • 精华:1帖
  • 求助:0帖
  • 帖子:30帖 | 39回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2002年3月09日
发表于:2002-08-19 12:55:00
15楼
我的SJA1000中断与89C52的INT0相连,不会错的

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-08-20 15:59:00
16楼
那INT0还与别的相连了吗?把你产生中断前后的状态寄存器的值写出来,我帮你看一下。

小电容

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 24回
  • 年度积分:0
  • 历史总积分:200
  • 注册:2001年3月14日
发表于:2002-10-22 16:01:00
17楼
BASIC CAN方式下接收到PELI CAN方式的数据包时正常中断,但无接收数据!!!

热门招聘
相关主题

官方公众号

智造工程师