SJA1000初始化标准程序
很多CAN初学者,对SJA1000的初始化感到没有头绪,这里给出一个BASIC模式初始化实验程序。<br />实际上,对一个通信控制器初始化应该是很简单的几条语句。而且像CDR、OCR等等这样的寄存器一般实验中都是标准设置。不必人人都去化时间研究它的设置原理。<br />应该像操作系统一样,有人做过了,只管调用就行。节省下时间,多做些有创意的工作。<br />还有波特率设置参数,有人算过了,我们就不必重复再去计算,只要会调用就行。<br /><br /><br /><br />#pragma SMALL<br />#include<reg51.h><br />#include<sjaregb1.h><br />#define uchar unsigned char<br /><br />uchar xdata *SJA_Adr=0x7f00;<br />#define can_read(RegAdr) SJA_Adr<br />#define can_write(RegAdr,Val) SJA_Adr=Val<br /><br /><br />//BASIC模式初始化程序,调用时直接输入标识符ID、屏蔽码、波特率3个参数.<br />//例如:initial(0x78,0,500k);<br /><br /><br />void initial(uchar B_ACR,uchar B_AMR,uchar Fbps) <br />{<br /> uchar c, B_CDR=0x40, B_OCR=0xfa;<br /> <br /> can_write(CDR,B_CDR); //时钟分频寄存器,默认0x40<br /> IE=0;<br /> c=can_read(IR);<br /><br /> can_write(CR,0x61); //进入复位模式<br /> <br />can_write(OCR,B_OCR); //输出控制寄存器,默认0xfa<br /><br />can_write(BTR0,BTR_TAB); //波特率设置 <br />can_write(BTR1,BTR_TAB); <br />can_write(ACR,B_ACR); //验收代码寄存器<br />can_write(AMR,B_AMR); //验收屏蔽寄存器<br /><br />can_write(CR,0x06); //进入工作模式<br /> <br />}<br /><br /><br />void main(void)<br />{<br />uchar c;<br />initial(0x54,0,250k); //SJA1000初始化<br /><br /> .<br /> .<br /> .<br /> .<br /> .<br /> .<br />}<br /><br /><br /><br />其他在sjaregb1.h里,实际程序initial( )也应在sjaregb1.h里。up
rt
呵呵,终于又见到wxj1952前辈的大作了~!<br />支持~~!一个问题.
关键的内容隐藏在sjaregb1.h里。暂不公开。<br /><br />即:“为什么initial( )参数中可以直接输入波特率值?例如 5k/10k /20k/100k/400k/1M/......,它是怎么简单实现的?”<br /><br />“不是我们做不到,而是我们想不到。”看看与所有人不一样的答案。
没错,所有人都是那么做的。偏偏我懒得打字。又喜欢简约。宏定义太繁了/烦了。加上不喜欢与别人一样。所以,不是宏定义。也许从软件的角度不一定好。但是自己觉得简单,自己得意。再说,只有一个人想到的事情,即使很笨,也可以欣赏。<br /><br />网站上的资料,输入的参数不是直接波特率值吧,好像还要查一个代换表。愿意的话,把答案发给你。
愿意的话,把sjaregb1.h发给你!太感谢了~!
如果前辈愿意,那当然是非常高兴的事~!<br />我的C语言功底还很差,需要大量的练习才能提高;<br />觉得你的帖子所提到的观念都很特别,真正是与众不同的,自己思考的东西!rt
不错已发至信箱
助你毕设得优秀-- 一臂之力。感激不尽~!
信已收到,十分感谢前辈的支持~~!!不用宏定义行吗?
不用宏定义行吗?<br />用?代表整数值,?k --> 0,1,2,...,255, 似乎要用宏定义吧???<br />行吗?
不用宏定义行吗?除了写255条 #define XX YY,没别的方法?是C语言功能太少?有些好书现在好像买不到了,例如《C语言详解》。你好 前辈
看了您的大作 还不是太懂 对于CAN刚上手 能把你的sjaregb1.h发给我么 <br />谢谢 <br />我的邮箱:applelee1106@eyou.com晚生来晚了
wxj1952前辈:<br /> 您好,我刚接触CAN,很多概念性的东西还不懂,最初的感觉是一头雾水分不清方向.现在回贴,不知前辈还能百忙抽空前来看看?迫切希望前辈得到指教,不胜感激.同时恳请您把sjaregb1.h发给我,晚生在此谢了.我会尽一切所能,把它学好~!给我也发一个,谢谢
大大也发份给我吧.谢谢
请大大也发一份给我,初学者.fxshi@163.com.万分感谢感谢前辈
无以表达此时心情,我会尽我最大所能去学好CAN~!<br />谢谢前辈!你好,能否给我一份
我是一个新手,现在想can的开发能否给我一份找peliCAN的例子
大侠们,有没有peliCAN的例子,<br />sn54sn54@qq.com 楼主 您好!最近 一直在摸索CANBUS,用的是SJA1000,想做个简单的自收自发,但是参考一些例称 ,还是不能完成,希望可以得到你的帮助。
能否将你的sjaregb1.h 发我一份jiaruiqiang@126.com谢谢
页:
[1]