很多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[RegAdr]<br />#define can_write(RegAdr,Val) SJA_Adr[RegAdr]=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[Fbps]); //波特率设置 <br />can_write(BTR1,BTR_TAB[Fbps+1]); <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里。 |
|