我在一个电路板上用3套89C51+SJA1000+PCA82C250构成具有3个节点的通信实验板,现在仅用一个节点进行数据发送实验(还未考虑到数据接收和其它节点,仅是利用一个独立的节点),但是不成功,代码及具体现象如下,请大家帮忙分析,谢谢.<br />代码如下:<br />CR EQU 0000H ;控制寄存器(BasicCAN)或模式寄存器(PeliCAN)<br />CMR EQU 0001H ;命令寄存器<br />SR EQU 0002H ;状态寄存器<br />IR EQU 0003H ;中断寄存器<br />ACR EQU 0004H ;验收代码寄存器<br />AMR EQU 0005H ;验收屏蔽寄存器<br />BTR0 EQU 0006H ;总线时序寄存器0<br />BTR1 EQU 0007H ;总线时序寄存器1<br />OCR EQU 0008H ;输出控制寄存器<br />CDR EQU 001FH ;时钟分频寄存器<br />CANTXB EQU 000AH ;发送缓冲区首地址<br />CANRXB EQU 0014H ;接收缓冲区首地址<br /><br /> ORG 0000H<br /> SJMP CANINIT<br /> ORG 0040H<br /><br />;***************************CAN初始化******************************<br />CANINIT: SETB P1.1<br /><br /> MOV DPTR,#CR ;开放接收、出错、溢出中断并进入复位模式<br /> MOV A,#1BH ;进入复位模式,对SJA1000开始初始化<br /> MOVX @DPTR,A<br /><br /> MOVX A,@DPTR ;判复位请求有效<br /> JNB ACC.0,CANINIT<br /> <br /> MOV DPTR,#ACR ;接收代码寄存器为03H<br /> MOV A,#03H<br /> MOVX @DPTR,A<br /><br /> MOV DPTR,#AMR ;接收屏蔽寄存器为0FCH<br /> MOV A,#0FCH<br /> MOVX @DPTR,A <br /><br /> MOV DPTR,#BTR0<br /> MOV A,#00H<br /> MOVX @DPTR,A<br /><br /> MOV DPTR,#BTR1 ;500Kbps<br /> MOV A,#1CH<br /> MOVX @DPTR,A<br /><br /> MOV DPTR,#OCR ;正常输出模式<br /> MOV A,#0AAH<br /> MOVX @DPTR,A<br /><br /> MOV DPTR,#CR ;初始化结束,SJA1000进入工作模式<br /> MOV A,#1AH<br /> MOVX @DPTR,A<br />;**************************发送数据***************************<br />CANSEND: MOV DPTR,#SR ;状态寄存器<br /> MOVX A,@DPTR ;从SJA1000读入状态寄存器值<br /> JB ACC.4,CANSEND ;判断是否正在接收,正在接收则等待<br /> <br />TS0: MOVX A,@DPTR<br /> JNB ACC.3,TS0 ;判断上次发送是否完成 <br /><br />TS1: MOVX A,@DPTR<br /> JNB ACC.2,TS1 ;判断发送缓冲区是否锁定,锁定则等待<br /> CPL P1.0<br />TS2: MOV DPTR,#CANTXB ;SJA1000发送缓存区首地址<br /> MOV A,#03H ;发送标识符为03的帧数据<br /> MOVX @DPTR,A<br /> INC DPTR<br /> MOV A,#01H ;发送1个数<br /> MOVX @DPTR,A<br />MTBF: MOV A,#0AAH ;发送数据AA<br /> INC DPTR<br /> MOVX @DPTR,A<br /> MOV DPTR,#CMR<br /> MOV A,#01H ;启动发送<br /> MOVX @DPTR,A<br /> <br /> LJMP CANSEND<br />现象如下:<br />程序在运行到TS0处就不断循环,跳不出来,此时SR的植是04H,也就是说上次发送总是未完成,不知这是什么原因?请大家帮忙解答.谢谢<br />还有2个问题:<br />1:是否单个节点无法调试,也就是说一个节点不能只发送数据,而没有另外一个节点接收么?我感觉不应该是这样.<br />2:82C250的RS引脚的电阻值应该如何选择,我是用的电位计,怎么判断哪一个阻值使用效果最好呢?<br />问题就这些,再次感谢大家,恳请大家不吝赐教. |
|