📄 f310kz4.29.asm
字号:
CLR P1.6
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV A,SPI0DAT
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV A,SPI0DAT
SETB P1.6
lcall can_5
CJNE A,#0FFH,CAN_4
ACALL CAN_RST0
LJMP CAN_STOP
CAN_4:
JB ACC.1,CAN_0
JB ACC.0,CAN_1
ACALL CLR_INT
;ACALL CAN_RST0
LJMP CAN_STOP
RET
CAN_1:
CLR P1.6
MOV SPI0DAT,#03H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#60H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV A,SPI0DAT
MOV SPI0DAT,#60H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV R0,#80H
MOV R1,#0FH
MOV A,SPI0DAT
SJMP CAN0_INT_LOOP1
CAN_0:
LCALL CLR_INT
MOV R0,#80H
CLR P1.6
MOV SPI0DAT,#03H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#70H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV A,SPI0DAT
MOV SPI0DAT,#60H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV R0,#80H
MOV R1,#0FH
MOV A,SPI0DAT
CAN0_INT_LOOP1:
MOV @R0,A
MOV SPI0DAT,#03H
JNB TXBMT,$
JNB SPIF,$
MOV A,SPI0DAT
INC R0
DJNZ R1,CAN0_INT_LOOP1
SETB P1.6
MOV R0,#80H
MOV A,@R0
JNB ACC.3,CAN_INT_LOOP2
SETB CAN_START
CAN_INT_LOOP2:
MOV R0,#81H
MOV A,@R0
CJNE A,#0A1H,CAN_STOP
MOV R0,#87H
MOV R1,#0A0H
MOV R2,#08H
CAN_INT_LOOP3:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,CAN_INT_LOOP3
CAN_STOP:
SETB P1.6
MOV R0,AL
MOV R1,AH
SETB EA
SETB EA
POP ACC
POP PSW
RETI
can_5:
CLR P1.6
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0A0H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV A,SPI0DAT
SETB P1.6
ret
can_send1:
CLR P1.6
MOV SPI0DAT,#02H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#30H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#03H;TXB0CTRL
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0A1H;TXB0SIDH
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#00H;TXB0SIDL
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0FFH;TXB00EID0
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#0FFH;TXB0EID8
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#08;TXB0DLC
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#00H;D0
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#01H;D1
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#02H;D2
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#03H;D3
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#04H;D4
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#05H;D5
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#06H;D6
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#07H;D7
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
SETB P1.6
LCALL TDELAY1MS
CLR P1.6
MOV SPI0DAT,#81H;D7
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
SETB P1.6
RET
CAN_SEND:
CLR P1.6
MOV R0,#90H
MOV R1,#0EH
MOV SPI0DAT,#02H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
MOV SPI0DAT,#30H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
CAN_SEND_LOOP:
MOV SPI0DAT,@R0
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
INC R0
DJNZ R1,CAN_SEND_LOOP
SETB P1.6
LCALL TDELAY1MS
CLR P1.6
MOV SPI0DAT,#81H
JNB TXBMT,$
JNB SPIF,$
CLR SPIF
SETB P1.6
CAN_SEND_STOP:
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; 系统状态监测子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; |0 |待机 |
; --------------------
;|2 |输入欠压 |
;|0B|运行指示 |
;|0A|电池故障 |
;-------------------
;|1 |输入过压 |
;|3 |输出过压 |
;|4 |输出欠压 |
;|5 |输入过流 |
;|6 |输出过流 |
;|7 |输出过载 |
;|8 |IPM保护 |
;|9 |充电机过热 |
STATE_EIR:
;MOV A,EVR0
JNB ACC.0,STATE_LOOP0
RET ;待机 0
STATE_LOOP0:
JNB ACC.1,STATE_LOOP1
RET ;输入欠压 2
STATE_LOOP1:
JNB ACC.2,STATE_LOOP2
RET ;运行 P
STATE_LOOP2:
JNB ACC.3,STATE_LOOP3
SJMP ERROR ;电池故障 A
STATE_LOOP3:
;MOV A,EVR1
JNB ACC.0,STATE_LOOP4
SJMP ERROR ;输入过压1
STATE_LOOP4:
JNB ACC.1,STATE_LOOP5
SJMP ERROR ;输出过压3
STATE_LOOP5:
JNB ACC.2,STATE_LOOP6
SJMP ERROR ;输出欠压4
STATE_LOOP6:
JNB ACC.3,STATE_LOOP7
SJMP ERROR ;输入过流5
STATE_LOOP7:
JNB ACC.4,STATE_LOOP8
SJMP ERROR ;输出过流6
STATE_LOOP8:
JNB ACC.5,STATE_LOOP9
SJMP ERROR ;输出过载7
STATE_LOOP9:
JNB ACC.6,STATE_LOOP10
SJMP ERROR ;IPM短路保护8
STATE_LOOP10:
JNB ACC.7,STATE_LOOP11
SJMP ERROR ;充电机过热9
STATE_LOOP11:
RET
ERROR:
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@ 延时子程序 @;CH BH CL
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TDELAY: ;延时公共子程序
NOP
TDELAY_1S:
MOV R1,#100
SJMP TDELAY_MS_LOOP
RET
TDELAY_500MS:
MOV R1,#50
SJMP TDELAY_MS_LOOP
RET
TDELAY_100MS:
MOV R1,#10
SJMP TDELAY_MS_LOOP
RET
TDELAY_20MS:
MOV R1,#2
TDELAY_MS_LOOP:
ACALL TDELAY_10MS
DJNZ R1,TDELAY_MS_LOOP
RET
TDELAY_10MS:
MOV TMR3L,#0E5H
MOV TMR3H,#0BEH
ORL TMR3CN,#00000100B
TDELAY_10MS_WAIT:
nop
ret
MOV A,TMR3CN
JNB ACC.7,TDELAY_10MS_WAIT
ANL TMR3CN,#11111011B
RET
TDELAY_1MS:
MOV TMR3L,#0dH
MOV TMR3H,#01H
ORL TMR3CN,#00000100B
TDELAY_1MS_WAIT:
MOV A,TMR3CN
JNB ACC.7,TDELAY_1MS_WAIT
ANL TMR3CN,#11111011B
RET
TDELAY1MS:
PUSH CH
PUSH BH
PUSH CL
MOV CH,#01H
TFL2:
MOV BH,#5FH
TFL0:
MOV CL,#5FH
TFL1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ CL,TFL1
DJNZ BH,TFL0
DJNZ CH,TFL2
POP CL
POP BH
POP BL
RET
;ORG 2000H
BELAY:
DB 0,1,2,3,4,5,6,7,8,9,10
DB 11,12,13,14,15,16,17,18,19,20
DIS_DPTD:
DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H
DB 0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH
DIS_RE_BELAY: ;系统运行状态显示代码段
DB 7eh,06h,0dah,9eh,0a6h ;0 1 2 3 4
DB 0bch,0fch,0eh,0feh,0beh,00h ;5 6 7 8 9 B P ;
DIS_RESS_BELAY: ;按键状态显示代码段
DB 0EEH,0EFH,76H,77H,0E6H ; A A. U U. H ;0BH 0CH 0DH 0EH 0FH 10H
DB 0E7H,0FCH,0FDH,0F8H,0F9H,0DDH ;H. G G. E E. R. ;11H 12H 13H 14H 15H 16H
DB 0D7H,0ABH,71H,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,0F0H;; ;D. N. L. ;17H 18H 19H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -