📄 can-only.asm
字号:
;应答机
IDADDR EQU 00H
IDADDR1 EQU 00H
IDADDR2 EQU 00H
MODE EQU 00H
CMR EQU 01H
SR EQU 02H
IR EQU 03H
IER EQU 04H
BTR0 EQU 06H
BTR1 EQU 07H
OCR EQU 08H
ALC EQU 0BH
ECC EQU 0CH
EWLR EQU 0DH
RXERR EQU 0EH
TXERR EQU 0FH
TXB EQU 10H
RXB EQU 10H
RXCMD EQU 15H
RTRDLC EQU 10H
ACR EQU 10H
AMR EQU 14H
RMC EQU 1DH
RBSA EQU 1EH
CDR EQU 1FH
DACR EQU 50H
DAMR EQU 54H
ID0 EQU 00H
ID1 EQU 00H
ID2 EQU 00H
ID3 EQU 00H
ID4 EQU 0FFH
ID5 EQU 0FFH
ID6 EQU 0FFH
ID7 EQU 0FFH
CBFRTP EQU 30H
SRXD EQU 3DH
STXD EQU 3DH
RECOK BIT 00H
CHZH BIT 01H
COM_CAN BIT 02H
CAN_COM BIT 03H
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP,#60H
MOV R0,#6FH
CLR A
CLAIR: MOV @R0,A
DJNZ R0,CLAIR
MOV R0,#DACR
MOV A,#ID0
MOV @R0,A
INC R0
MOV A,#ID1
MOV @R0,A
INC R0
MOV A,#ID2
MOV @R0,A
INC R0
MOV A,#ID3
MOV @R0,A
INC R0
MOV R0,#DAMR
MOV A,#ID4
MOV @R0,A
INC R0
MOV A,#ID5
MOV @R0,A
INC R0
MOV A,#ID6
MOV @R0,A
INC R0
MOV A,#ID7
MOV @R0,A
LCALL CANINI ;SJA1000初始化
MOV P1,#0FFH
mov r3,#1
MOV IE,#00H ;关闭所有中断
MLOOP: CALL TSDATA ;调用CAN发送程序发送一帧
MOV R2,#1FH
LOOP: DJNZ R2,LOOP
SJMP MLOOP
;CAN初始化设置
CANINI: MOV DPTR,#MODE ;0复位模式
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#IER ;4中断使能
MOV A,#03H
MOVX @DPTR,A
MOV DPTR,#BTR0 ;6波特率1/15时钟800k
MOV A,#0EH
MOVX @DPTR,A
MOV DPTR,#BTR1 ;7波特率
MOV A,#25H
MOVX @DPTR,A
MOV DPTR,#OCR ;8输出控制为正常输出
MOV A,#0AAH
MOVX @DPTR,A
MOV DPTR,#TXERR ;15 TX错误计数器
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#ACR ;16 ACR接收代码赋初值
MOV R6,#4
MOV R0,#DACR
ACRINI: MOV A,@R0
MOVX @DPTR,A
INC DPTR
INC R0
DJNZ R6,ACRINI
MOV DPTR,#AMR ;20 AMR屏蔽代码赋初值
MOV R6,#4
MOV R0,#DAMR
AMRINI: MOV A,@R0
MOVX @DPTR,A
INC DPTR
INC R0
DJNZ R6,AMRINI
MOV DPTR,#RBSA ;30设置接收缓冲器地址0
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#CDR ;31时钟分频器
MOV A,#85H
MOVX @DPTR,A
MOV DPTR,#ECC ;12错误捕捉寄存器
MOVX A,@DPTR ;读,清零
MOV DPTR,#MODE
MOV A,#08h ;设为单滤波器方式工作模式
MOVX @DPTR,A ;
RET
TSDATA: MOV CBFRTP,#85H
MOV A,#IDADDR
MOV CBFRTP+1,A
MOV A,#IDADDR1
MOV CBFRTP+2,A
MOV A,#IDADDR2
MOV CBFRTP+3,A
MOV CBFRTP+4,#0
MOV CBFRTP+5,#0FH
MOV CBFRTP+6,#0
MOV CBFRTP+7,#0FH
MOV CBFRTP+8,#0
MOV CBFRTP+9,#0FH
;MOV CBFRTP+10,#6
;MOV CBFRTP+11,#7
;MOV CBFRTP+12,#8
LCALL TDATA
RET
TDATA: mov a,r3
subb a,#1
mov r3,#8
jz ts2
ts: MOV DPTR,#SR
MOVX A,@DPTR
JB ACC.4,ts
TS0: MOVX A,@DPTR
JNB ACC.3,TS0
TS1: MOVX A,@DPTR
JNB ACC.2,TS1
ts2: MOV DPTR,#TXB
MOV R1,#CBFRTP
MOV A,@R1
MOVX @DPTR,A
ANL A,#0FH
ADD A,#4
MOV R6,A
MTBE: INC R1
INC DPTR
MOV A,@R1
MOVX @DPTR,A
DJNZ R6,MTBE
MOV DPTR,#CMR
MOV A,#01H
MOVX @DPTR,A
CPL P1.2
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -