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