MODE EQU 0100H sja1000定义地址为0100H <br />CMR EQU 0101H<br />SR EQU 0102H<br />IR EQU 0103H<br />IER EQU 0104H<br />BTR0 EQU 0106H<br />BTR1 EQU 0107H<br />OCR EQU 0108H<br />ALC EQU 010BH<br />ECC EQU 010CH<br />EWLR EQU 010DH<br />RXERR EQU 010EH<br />TXERR EQU 010FH<br />TXB EQU 0110H (定义的地址是否正确?)是否为0116H??<br />RXB EQU 0110H (定义的地址是否正确?)<br />RXCMD EQU 0115H<br />RTRDLC EQU 0110H (定义的地址是否正确?)是否为0116H<br />ACR EQU 0116H (定义的ACR地址是否正确?)<br />AMR EQU 0114H<br />RMC EQU 011DH<br />RBSA EQU 011EH<br />CDR EQU 011FH<br />CBFRTP EQU 30H<br />FRNUM EQU 40H<br />RECOK BIT 00H<br />RFRM BIT 01H<br />CANINI: ;初始化程序<br /> MOV DPTR,#MODE ;方式寄存器<br /> MOV A,#09H ;进入复位模式<br /> MOVX @DPTR,A <br /> MOV DPTR,#CDR ;时钟分频寄存器<br /> MOV A,#88H ;选择peliCAN模式,关闭时钟输出<br /> MOVX @DPTR,A <br /> MOV DPTR,#IER ;中段允许寄存器<br /> MOV A,#0DH ;开放发送中断,溢出中断和错误警告中断<br /> MOVX @DPTR,A <br /> MOV DPTR,#AMR ;接收屏蔽寄存器<br /> MOV R6,#4 ;<br /> MOV A,#0 <br />AMRINI:<br /> MOVX @DPTR,A ;接收屏蔽寄存器赋予0,都参与滤波<br /> INC DPTR<br /> DJNZ R6,AMRINI<br /> MOV DPTR,#ACR <br /> MOV R6,#4<br /> MOV A,#0<br />ACRINI:<br /> MOVX @DPTR,A ;接收代码寄存器全置0(这样在自检测模式下是否可行?????)<br /> INC DPTR<br /> DJZN R6,ACRINI<br /> MOV DPTR,#BTR0 ;总线定时寄存器0<br /> MOV A,#03H <br /> MOVX @DPTR,A<br /> MOV DPTR,#BTR1 ;总线定时寄存器1<br /> MOV A,#0FFH ;设置波特率<br /> MOVX @DPTR,A <br /> MOV DPTR,#OCR ;输出控制寄存器<br /> MOV A,#0AAH<br /> MOV @DPTR,A<br /> MOV DPTR,#RBSA ;接收缓存器起始地址寄存器<br /> MOV A,#0 ;设置接收缓存器FIFO起始地址为0<br /> MOVX @DPTR,A<br /> MOV DPTR,#TXERR ;发送错误计数寄存器<br /> MOV A,#0 ;清除发送错误计数寄存器<br /> MOVX @DPTR,A<br /> MOV DPTR,#ECC ;错误代码捕捉寄存器 <br /> MOVX A,@DPTR ;清除错误代码捕捉寄存器<br /> MOV DPTR,#MODE ;方式寄存器<br /> MOV A,#0CH ;设置自检测模式,单滤波接收方式,并返回工作状态 <br /> MOVX @DPTR,A<br /> RET |
|