📄 canbridge.txt
字号:
MODE EQU 7F00H
CMR EQU 7F01H
SR EQU 7F02H
IR EQU 7F03H
IER EQU 7F04H
BTR0 EQU 7F06H
BTR1 EQU 7F07H
OCR EQU 7F08H
ALC EQU 7F0BH
CDR EQU 7F1FH
ECC EQU 7F0CH
TXERR EQU 7F0FH
RXERR EQU 7F0EH
TXBUF EQU 7F10H
RXBUF EQU 7F10H
ACR0 EQU 7F10H
ACR1 EQU 7F11H
ACR2 EQU 7F12H
ACR3 EQU 7F13H
AMR0 EQU 7F14H
AMR1 EQU 7F15H
AMR2 EQU 7F16H
AMR3 EQU 7F17H
RBSA EQU 7F1EH
SEND_1 EQU 30H
SEND_2 EQU 31H
SEND_3 EQU 32H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXIT0
ORG 0100H
MAIN:
MOV SP,#60H
;MOV TCON,#00H
LCALL CANINI
SETB EA
SETB EX0
LOOP1:
MOV SEND_1,#12H
MOV SEND_2,#08H
MOV SEND_3,#26H
LCALL SDATA
LJMP LOOP1
EXIT0:
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
CLR EA
CLR EX0
LCALL RECEIVE
SETB EA
SETB EX0
POP DPH
POP DPL
POP ACC
POP PSW
RETI
CANINI:
MOV DPTR,#MODE ;方式寄存器
MOV A,#05H ;进入复位模式对SJA1000 进行初始化.
MOVX @DPTR,A
MOV DPTR,#CDR ;时钟分频寄存器
MOV A,#0C8H ;选择PeliCAN 模式关闭时钟输出CLKOUT
MOVX @DPTR,A
MOV DPTR,#IER ; 中断允许寄存器
MOV A,#01H
MOVX @DPTR,A
;MOV DPTR,#IER
;MOVX A,@DPTR
;MOV R1,#70H
;MOV @R1,A
MOV DPTR,#AMR0 ;接收屏蔽寄存器
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#AMR1 ;接收屏蔽寄存器
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#AMR2 ;接收屏蔽寄存器
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#AMR3 ;接收屏蔽寄存器
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#ACR0
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#ACR1
MOV A,#02H
MOVX @DPTR,A
MOV DPTR,#ACR2
MOV A,#03H
MOVX @DPTR,A
MOV DPTR,#ACR3
MOV A,#60H
MOVX @DPTR,A
MOV DPTR,#BTR0
MOV A,#67H
MOVX @DPTR,A
MOV DPTR,#BTR1
MOV A,#2FH
MOVX @DPTR,A
MOV DPTR,#OCR
MOV A,#1AH
MOVX @DPTR,A
MOV DPTR,#RBSA
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#TXERR
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#ECC
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#MODE
MOV A,#04H
MOVX @DPTR,A
RET
SDATA:
;MOV DPTR,#SR ;状态寄存器
;MOVX A,@DPTR ;从SJA1000 读入状态寄存器值
;JB ACC.4,SDATA
TS0:
;MOVX A,@DPTR
;JNB ACC.3,TS0 ;判断上次发送是否完成未完成则等待发送完成
TS1:
;MOVX A,@DPTR
;JNB ACC.2,TS1 ;判断发送缓冲区是否锁定锁定则等待
TS2:
MOV DPTR,#TXBUF ;SJA1000 发送缓存区首址
MOV A,#83H ;发送数据长度为8 个字节的扩展帧格式报文
MOVX @DPTR,A
INC DPTR
MOV A,#11H ;4 个字节的标识符ID0-ID3 依据实际情况赋值
MOVX @DPTR,A
INC DPTR
MOV A,#12H
MOVX @DPTR,A
INC DPTR
MOV A,#13H
MOVX @DPTR,A
INC DPTR
MOV A,#14H
MOVX @DPTR,A
INC DPTR
MOV A,SEND_1
MOVX @DPTR,A
INC DPTR
MOV A,SEND_2
MOVX @DPTR,A
INC DPTR
MOV A,SEND_3
MOVX @DPTR,A
MOV DPTR,#CMR ;命令寄存器地址
MOV A,#10H
MOVX @DPTR,A ;启动SJA1000 发送
RET
RECEIVE:
MOV DPTR,#RXBUF
MOV R1,#50H
MOVX A,@DPTR
MOV @R1,A
ANL A,#0FH
ADD A,#4
MOV R6,A
RDATA0:
INC DPTR
INC R1
MOVX A,@DPTR
MOV @R1,A
DJNZ R6,RDATA0
MOV DPTR,#CMR
MOV A,#04H
MOVX @DPTR,A
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -