[CAN-bus/DeviceNet] 公布一下偶的BasicCAN总线实验程序

[复制链接]
 楼主| 桂电飞天鼠 发表于 2007-5-20 22:38 | 显示全部楼层 |阅读模式
看很多朋友在学习CAN,在网上却找不到现成能用的参考例子,本人当初刚开始学习的时候也找不到现成的,所以也明白那种期待的心情。所以我把自己做BasicCAN总线实验时的例子公布,供各位参考~~~<br /><br />唯一要求就是,在完成了CAN总线的学习之后,希望能够回到这里,为这里作一些贡献,让资源共享得到一个推广。<br /><br />BS那些学会了之后却再也不回来这里分享经验的人,那些人,对不起,你没有资格在这里得到帮助。<br /><br />本实验有两个CAN节点,程序的注释不是很详细,而且在完成实验之后一直没时间整理,所以请体谅,不过应该能看得明白。<br /><br />下面压缩包里包括两个文件夹,一个是发送端程序,一个是接收端程序;编译器为Keil&nbsp;uv3,编译的时候会有10个警告,这些只是MAX7219的驱动有一些函数没有使用而引起的,不必介意。<br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20075/2007520223820362.rar'>https://bbs.21ic.com/upfiles/img/20075/2007520223820362.rar</a>
hgchenkv 发表于 2007-5-20 23:21 | 显示全部楼层

谢谢!

谨记教诲!一定分享!顶!桂电飞天鼠-好人!
hq_y 发表于 2007-5-21 01:05 | 显示全部楼层

不错的~~~~~~~~~~up~~~~~~~~

  
hgchenkv 发表于 2007-5-21 14:49 | 显示全部楼层

求助

各位高手好,请帮忙指导!在桂电飞天鼠高手的程序指点下,对BASICCAN的运行方式有了差不多的理解,通过设置跟踪显示,下载运行,还是遇到了以下问题:<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Display1(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;DelayTime(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;DelayTime(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;Display1(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;TimeInit();<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA1000_init();&nbsp;/*主函数执行到这里……*/<br />&nbsp;&nbsp;&nbsp;&nbsp;Display1(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;EX0&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA&nbsp;&nbsp;=&nbsp;1;<br />……<br />}<br /><br />void&nbsp;SJA1000_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;Display1(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;while(connect_OK==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJAconnect_judge();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检测设备连接<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Display1(4);&nbsp;/*一直在循环执行Display1(4)这个显示函数*/<br />&nbsp;&nbsp;&nbsp;}<br />……<br />}<br />#define&nbsp;base_Adr&nbsp;0x8000&nbsp;/*51的P2-7接SJA1000的/CS*/<br />我用万用表检查了所有硬件连接,都是连通的,但一直都是执行到这个地方就不动了,小弟接触CAN不久,请有调试经验的高手们指导,谢谢了~~
 楼主| 桂电飞天鼠 发表于 2007-5-21 15:19 | 显示全部楼层

rt

你的SJA的/CS脚是直接接在P2.7的吗?&nbsp;是的话你用的地址不对,可以用0x0000作基地址.<br /><br />
hgchenkv 发表于 2007-5-21 17:49 | 显示全部楼层

谢谢!

桂电飞天鼠大哥你好!<br />我的SJA的/CS脚是直接接在P2.7的,参照您以前的帖子:<br />//桂电飞天鼠<br />P0口接到SJA上,为低八位的地址线以及8位数据线,然后P2口任选一端口接SJA的/CS位(假如不用74LS138等器件时):<br />如/CS接<br />P2.7,那起始地址为:0x8000;<br />P2.0,&nbsp;那起始地址为:0x0000;<br />//桂电飞天鼠<br />但为什么又是0x0000作基地址呢?而且在P2.7接SJA&nbsp;/CS引脚的情况下我也用<br />#define&nbsp;base_Adr&nbsp;0x0000&nbsp;了,但是还是显示以上硬件设备连接不上,该看的该查的我都整了整整一天了,还是没能发现什么实质性的错误,还请指点,谢谢!<br />另求解:SJA晶振(12M)两端起振电压相差为0.15v左右,我看了51的晶振也就差个0.2V左右(51没问题),所以我感觉这个没什么问题;电路板焊接都查过也没什么问题了,现在剩下的感觉可能是SJA1000的问题了,换了一个片子问题仍旧,怎么检查SJA1000的正常与否,请指点!<br />劳烦高手了~~~~~
 楼主| 桂电飞天鼠 发表于 2007-5-21 19:54 | 显示全部楼层

rt

那个说地址的帖子,我当时写错了,不过我后来改正了,应该都为0x0000,但其实是有一点区别的。<br /><br />你现在的问题,估计还是地址问题。<br /><br />地址确定:<br /><a href="http://www.21icbbs.com/club/bbs/list.asp?boardid=43&page=1&t=2530895&tp=%uFF33%uFF2A%uFF21%uFF11%uFF10%uFF10%uFF10%u7684%u5730%u5740%u5982%u4F55%u786E%u5B9A" target=_blank>http://www.21icbbs.com/club/bbs/list.asp?boardid=43&page=1&t=2530895&tp=%uFF33%uFF2A%uFF21%uFF11%uFF10%uFF10%uFF10%u7684%u5730%u5740%u5982%u4F55%u786E%u5B9A</a><br /><br />在Keil中必须设置的地方:<br /><a href="http://www.21icbbs.com/club/bbs/list.asp?boardid=43&page=2&t=2516686&tp=%u8BF7%u95EE%u600E%u4E48%u770B%u5BC4%u5B58%u5668%u7684%u503C%uFF1F" target=_blank>http://www.21icbbs.com/club/bbs/list.asp?boardid=43&page=2&t=2516686&tp=%u8BF7%u95EE%u600E%u4E48%u770B%u5BC4%u5B58%u5668%u7684%u503C%uFF1F</a><br /><br />
coolhu 发表于 2007-5-22 20:23 | 显示全部楼层

rt

看了飞天鼠老弟的大作,<br />对于can寄存器的配置是否可以不用函数的方式进行配置?<br />直接对寄存器操作赋值的方式是否更简便一些,<br />我的程序是采用的这样方式,也可以运行<br />不过可能我的这样操作方式不够专业化
 楼主| 桂电飞天鼠 发表于 2007-5-22 20:31 | 显示全部楼层

可以的

当初我只是用网上的驱动修改使用的,所以结构还没有整理过,比较烦琐。
hgchenkv 发表于 2007-5-23 22:34 | 显示全部楼层

致谢

几天没来了,谢谢&nbsp;桂电飞天鼠&nbsp;大哥的指导,程序已经调通,运行很好!<br />呵呵,我比较喜欢&nbsp;桂电飞天鼠&nbsp;高手的这种寄存器配置定义方式。<br />还有个问题,郁闷了我这几天了,我两块板子通信,一块/CS接P2.7可以正常跑起来,但另一块/CS接P2.7就跑不起来,只有断开才可以正常运行,我后来对主程序有作了如下修改:<br />SJA_CS&nbsp;=&nbsp;1;/*对SJA1000的片选处理*/<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;DelayTime(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_CS&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;DelayTime(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;SJA_RESET=1;<br />但这样还是相同的问题出现,虽然现在通信正常了,但总感觉不是按照预期的跑起来的,感觉怪怪的,请高手指教!谢谢!
 楼主| 桂电飞天鼠 发表于 2007-5-24 00:20 | 显示全部楼层

恭喜呀~!不错,继续加油~!

至于你说的那个另一块板子有问题,你就自己研究看看,比较有可能是硬件问题。
hgchenkv 发表于 2007-5-24 12:24 | 显示全部楼层

好的,继续研究!出了结果一定把这个不是大问题的疑难留给初学的需要者!
baipengwei 发表于 2007-5-27 13:31 | 显示全部楼层

正在看CAN方面的,支持下

正在看CAN方面的,支持下
魔卡 发表于 2007-5-28 17:06 | 显示全部楼层

rt

正在进行中,还不能够理解的很清楚<br />
willshi 发表于 2007-8-17 10:53 | 显示全部楼层

求助

飞天鼠大哥,我看了你的程序有些地方不太懂,底下那个P1.7为什么取非,它接的是哪个管脚?我已经把P1口接数码管了。望指点。<br /><br /><br />//&nbsp;函数类别&nbsp;&nbsp;&nbsp;SJA1000基本操作<br />//&nbsp;函数名称&nbsp;&nbsp;&nbsp;Write_SJAsendBUF<br />//&nbsp;入口函数&nbsp;&nbsp;&nbsp;无<br />//&nbsp;出口函数&nbsp;&nbsp;&nbsp;setting_success<br />//&nbsp;操作寄存器&nbsp;发送缓存器(10-19)状态寄存器02<br />//&nbsp;函数功能&nbsp;&nbsp;&nbsp;写发送缓存器<br />//&nbsp;特殊要求&nbsp;&nbsp;&nbsp;只能在工作模式下写<br />//------------------------------------------------------------------------------------------------------<br />bit&nbsp;Write_SJAsendBUF(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;setting_success=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;while(SJA_workmode==0)<br />//&nbsp;&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setting_SJA_workingmode();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置SJA在工作模式<br />//&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if((CANREG_read(0x02)&0x10)==0)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((CANREG_read(0x02)&0x04)!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CANREG_write(10,send_BUF.FrameID_H);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CANREG_write(11,(send_BUF.FrameLENTH)|(send_BUF.FrameKIND&lt&lt4)|(send_BUF.FrameID_L3&lt&lt5));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(send_BUF.FrameKIND==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltsend_BUF.FrameLENTH,i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CANREG_write(12+i,send_BUF.Frame_Data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P1_7&nbsp;=&nbsp;!P1_7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送寄存器写成功
 楼主| 桂电飞天鼠 发表于 2007-8-17 14:13 | 显示全部楼层

P1.7接的是发光二极管,只为调试使用

所以可以不用的.
willshi 发表于 2007-8-17 15:11 | 显示全部楼层

多谢了

谢谢了。
cocorocky 发表于 2010-10-10 16:23 | 显示全部楼层
强烈顶!!!
ATM_Emerson 发表于 2010-10-26 14:53 | 显示全部楼层
:Q为什么我下不了啊?
ATM_Emerson 发表于 2010-10-27 10:30 | 显示全部楼层
顶起~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

273

帖子

0

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