[CAN-bus/DeviceNet] SJA1000初始化标准程序

[复制链接]
8420|19
 楼主| wxj1952 发表于 2007-5-4 09:27 | 显示全部楼层 |阅读模式
很多CAN初学者,对SJA1000的初始化感到没有头绪,这里给出一个BASIC模式初始化实验程序。<br />实际上,对一个通信控制器初始化应该是很简单的几条语句。而且像CDR、OCR等等这样的寄存器一般实验中都是标准设置。不必人人都去化时间研究它的设置原理。<br />应该像操作系统一样,有人做过了,只管调用就行。节省下时间,多做些有创意的工作。<br />还有波特率设置参数,有人算过了,我们就不必重复再去计算,只要会调用就行。<br /><br /><br /><br />#pragma&nbsp;SMALL<br />#include&ltreg51.h&gt<br />#include&ltsjaregb1.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br /><br />uchar&nbsp;xdata&nbsp;*SJA_Adr=0x7f00;<br />#define&nbsp;can_read(RegAdr)&nbsp;&nbsp;SJA_Adr[RegAdr]<br />#define&nbsp;can_write(RegAdr,Val)&nbsp;SJA_Adr[RegAdr]=Val<br /><br /><br />//BASIC模式初始化程序,调用时直接输入标识符ID、屏蔽码、波特率3个参数.<br />//例如:initial(0x78,0,500k);<br /><br /><br />void&nbsp;initial(uchar&nbsp;B_ACR,uchar&nbsp;B_AMR,uchar&nbsp;Fbps)&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;uchar&nbsp;c,&nbsp;B_CDR=0x40,&nbsp;B_OCR=0xfa;<br />&nbsp;<br />&nbsp;&nbsp;can_write(CDR,B_CDR);&nbsp;&nbsp;&nbsp;//时钟分频寄存器,默认0x40<br />&nbsp;&nbsp;IE=0;<br />&nbsp;&nbsp;c=can_read(IR);<br /><br />&nbsp;&nbsp;can_write(CR,0x61);&nbsp;&nbsp;&nbsp;//进入复位模式<br />&nbsp;<br />can_write(OCR,B_OCR);&nbsp;&nbsp;&nbsp;//输出控制寄存器,默认0xfa<br /><br />can_write(BTR0,BTR_TAB[Fbps]);&nbsp;&nbsp;&nbsp;&nbsp;//波特率设置&nbsp;&nbsp;<br />can_write(BTR1,BTR_TAB[Fbps+1]);&nbsp;&nbsp;&nbsp;&nbsp;<br />can_write(ACR,B_ACR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//验收代码寄存器<br />can_write(AMR,B_AMR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//验收屏蔽寄存器<br /><br />can_write(CR,0x06);&nbsp;&nbsp;//进入工作模式<br />&nbsp;<br />}<br /><br /><br />void&nbsp;main(void)<br />{<br />uchar&nbsp;c;<br />initial(0x54,0,250k);&nbsp;&nbsp;&nbsp;//SJA1000初始化<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;.<br />}<br /><br /><br /><br />其他在sjaregb1.h里,实际程序initial(&nbsp;)也应在sjaregb1.h里。
hq_y 发表于 2007-5-4 10:31 | 显示全部楼层
桂电飞天鼠 发表于 2007-5-4 13:38 | 显示全部楼层

rt

呵呵,终于又见到wxj1952前辈的大作了~!<br />支持~~!
 楼主| wxj1952 发表于 2007-5-4 18:26 | 显示全部楼层

一个问题.

关键的内容隐藏在sjaregb1.h里。暂不公开。<br /><br />即:“为什么initial(&nbsp;)参数中可以直接输入波特率值?例如&nbsp;5k/10k&nbsp;/20k/100k/400k/1M/......,它是怎么简单实现的?”<br /><br />“不是我们做不到,而是我们想不到。”
 楼主| wxj1952 发表于 2007-5-4 21:09 | 显示全部楼层

看看与所有人不一样的答案。

没错,所有人都是那么做的。偏偏我懒得打字。又喜欢简约。宏定义太繁了/烦了。加上不喜欢与别人一样。所以,不是宏定义。也许从软件的角度不一定好。但是自己觉得简单,自己得意。再说,只有一个人想到的事情,即使很笨,也可以欣赏。<br /><br />网站上的资料,输入的参数不是直接波特率值吧,好像还要查一个代换表。
 楼主| wxj1952 发表于 2007-5-6 21:56 | 显示全部楼层

愿意的话,把答案发给你。

愿意的话,把sjaregb1.h发给你!
桂电飞天鼠 发表于 2007-5-6 22:03 | 显示全部楼层

太感谢了~!

如果前辈愿意,那当然是非常高兴的事~!<br />我的C语言功底还很差,需要大量的练习才能提高;<br />觉得你的帖子所提到的观念都很特别,真正是与众不同的,自己思考的东西!
coolhu 发表于 2007-5-7 13:59 | 显示全部楼层

rt

不错
 楼主| wxj1952 发表于 2007-5-7 14:35 | 显示全部楼层

已发至信箱

助你毕设得优秀--&nbsp;一臂之力。
桂电飞天鼠 发表于 2007-5-7 17:25 | 显示全部楼层

感激不尽~!

信已收到,十分感谢前辈的支持~~!!
xhtxzxw 发表于 2007-5-10 12:22 | 显示全部楼层

不用宏定义行吗?

不用宏定义行吗?<br />用?代表整数值,?k&nbsp;--&gt&nbsp;0,1,2,...,255,&nbsp;&nbsp;似乎要用宏定义吧???<br />
 楼主| wxj1952 发表于 2007-5-16 08:54 | 显示全部楼层

行吗?

&nbsp;&nbsp;&nbsp;&nbsp;不用宏定义行吗?除了写255条&nbsp;#define&nbsp;XX&nbsp;YY,没别的方法?是C语言功能太少?有些好书现在好像买不到了,例如《C语言详解》。
tang219 发表于 2007-5-30 22:14 | 显示全部楼层

你好 前辈

看了您的大作&nbsp;&nbsp;还不是太懂&nbsp;&nbsp;对于CAN刚上手&nbsp;能把你的sjaregb1.h发给我么&nbsp;<br />谢谢&nbsp;&nbsp;&nbsp;<br />我的邮箱:applelee1106@eyou.com
iamxzg 发表于 2007-7-17 22:05 | 显示全部楼层

晚生来晚了

&nbsp;wxj1952前辈:<br />&nbsp;&nbsp;&nbsp;&nbsp;您好,我刚接触CAN,很多概念性的东西还不懂,最初的感觉是一头雾水分不清方向.现在回贴,不知前辈还能百忙抽空前来看看?迫切希望前辈得到指教,不胜感激.同时恳请您把sjaregb1.h发给我,晚生在此谢了.我会尽一切所能,把它学好~!
泥巴 发表于 2007-7-18 16:49 | 显示全部楼层

给我也发一个,谢谢

  
sfxboy 发表于 2007-7-19 00:17 | 显示全部楼层

大大也发份给我吧.谢谢

请大大也发一份给我,初学者.fxshi@163.com.万分感谢
iamxzg 发表于 2007-7-19 20:52 | 显示全部楼层

感谢前辈

无以表达此时心情,我会尽我最大所能去学好CAN~!<br />谢谢前辈!
whs310 发表于 2007-8-18 23:16 | 显示全部楼层

你好,能否给我一份

我是一个新手,现在想can的开发能否给我一份
sn54 发表于 2008-9-26 11:33 | 显示全部楼层

找peliCAN的例子

大侠们,有没有peliCAN的例子,<br />sn54sn54@qq.com
ryanchia 发表于 2012-10-23 17:53 | 显示全部楼层
楼主 您好!
最近 一直在摸索CANBUS,用的是SJA1000,想做个简单的自收自发,但是参考一些例称 ,还是不能完成,希望可以得到你的帮助。
    能否将你的sjaregb1.h 发我一份  jiaruiqiang@126.com  谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

757

帖子

1

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