📄 subroutine.asm
字号:
RET
L_BAT_LESS_0D1V:
MOV A,07H
AND A,ADCR
MOV R_TEMP1,A
L_BAT1_LESS_0D1V:
MOV A,00H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT2_LESS_0D1V
CLR F_BAT1ON
CLR F_OCBAT1
CLR F_QCBAT1
CLR F_DISCHARGEOK1
RET
L_BAT2_LESS_0D1V:
MOV A,01H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT3_LESS_0D1V
CLR F_BAT2ON
CLR F_OCBAT2
CLR F_QCBAT2
CLR F_DISCHARGEOK2
RET
L_BAT3_LESS_0D1V:
MOV A,02H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT4_LESS_0D1V
CLR F_BAT3ON
CLR F_OCBAT3
CLR F_QCBAT3
CLR F_DISCHARGEOK3
RET
L_BAT4_LESS_0D1V:
MOV A,03H
XOR A,R_TEMP1
SNZ Z
RET
CLR F_BAT4ON
CLR F_OCBAT4
CLR F_QCBAT4
CLR F_DISCHARGEOK4
RET
L_BAT_LESS_1D15V:
MOV A,07H
AND A,ADCR
MOV R_TEMP1,A
L_BAT1_LESS_1D15V:
MOV A,00H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT2_LESS_1D15V
SET F_BAT1ON
CLR F_OCBAT1
CLR F_QCBAT1
SET F_DISCHARGEOK1
RET
L_BAT2_LESS_1D15V:
MOV A,01H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT3_LESS_1D15V
SET F_BAT2ON
CLR F_OCBAT2
CLR F_QCBAT2
SET F_DISCHARGEOK2
RET
L_BAT3_LESS_1D15V:
MOV A,02H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT4_LESS_1D15V
SET F_BAT3ON
CLR F_OCBAT3
CLR F_QCBAT3
SET F_DISCHARGEOK3
RET
L_BAT4_LESS_1D15V:
MOV A,03H
XOR A,R_TEMP1
SNZ Z
RET
SET F_BAT4ON
CLR F_OCBAT4
CLR F_QCBAT4
SET F_DISCHARGEOK4
RET
L_BAT_LESS_1D25V:
MOV A,07H
AND A,ADCR
MOV R_TEMP1,A
L_BAT1_LESS_1D25V:
MOV A,00H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT2_LESS_1D25V
SET F_BAT1ON
CLR F_OCBAT1
CLR F_QCBAT1
CLR F_DISCHARGEOK1
RET
L_BAT2_LESS_1D25V:
MOV A,01H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT3_LESS_1D25V
SET F_BAT2ON
CLR F_OCBAT2
CLR F_QCBAT2
CLR F_DISCHARGEOK2
RET
L_BAT3_LESS_1D25V:
MOV A,02H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT4_LESS_1D25V
SET F_BAT3ON
CLR F_OCBAT3
CLR F_QCBAT3
CLR F_DISCHARGEOK3
RET
L_BAT4_LESS_1D25V:
MOV A,03H
XOR A,R_TEMP1
SNZ Z
RET
SET F_BAT4ON
CLR F_OCBAT4
CLR F_QCBAT4
CLR F_DISCHARGEOK4
RET
L_BAT_LESS_1D55V:
MOV A,07H
AND A,ADCR
MOV R_TEMP1,A
L_BAT1_LESS_1D55V:
MOV A,00H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT2_LESS_1D55V
SET F_BAT1ON
CLR F_OCBAT1
SET F_QCBAT1
CLR F_DISCHARGEOK1
RET
L_BAT2_LESS_1D55V:
MOV A,01H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT3_LESS_1D55V
SET F_BAT2ON
CLR F_OCBAT2
SET F_QCBAT2
CLR F_DISCHARGEOK2
RET
L_BAT3_LESS_1D55V:
MOV A,02H
XOR A,R_TEMP1
SNZ Z
JMP L_BAT4_LESS_1D55V
SET F_BAT3ON
CLR F_OCBAT3
SET F_QCBAT3
CLR F_DISCHARGEOK3
RET
L_BAT4_LESS_1D55V:
MOV A,03H
XOR A,R_TEMP1
SNZ Z
RET
SET F_BAT4ON
CLR F_OCBAT4
SET F_QCBAT4
CLR F_DISCHARGEOK4
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_ADCONVERT:
CLR EMI
CLR START
SET START
CLR START
NOP
CLR WDT
SZ EOCB
JMP $-1
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;16 BIT AD VALUE CONVERT TO 12 BIT
SBR_CONVERT16212:
CLR C
RRC R_ADRH_BAK
RRC R_ADRL_BAK
RRC R_ADRH_BAK
RRC R_ADRL_BAK
RRC R_ADRH_BAK
RRC R_ADRL_BAK
RRC R_ADRH_BAK
RRC R_ADRL_BAK
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_SHOWBATSTATUS:
MOV A,01H
ORM A,PC
L_SHOWBAT1STATUS:
SZ F_BAT1ON
JMP L_ONBAT1LED
MOV A,02H
ORM A,PC
JMP L_SHOWBAT2STATUS
L_ONBAT1LED:
MOV A,0FDH
ANDM A,PC
L_SHOWBAT2STATUS:
SZ F_BAT2ON
JMP L_ONBAT2LED
MOV A,04H
ORM A,PC
JMP L_SHOWBAT3STATUS
L_ONBAT2LED:
MOV A,0FBH
ANDM A,PC
L_SHOWBAT3STATUS:
SZ F_BAT3ON
JMP L_ONBAT3LED
MOV A,08H
ORM A,PC
JMP L_SHOWBAT4STATUS
L_ONBAT3LED:
MOV A,0F7H
ANDM A,PC
L_SHOWBAT4STATUS:
SZ F_BAT4ON
JMP L_ONBAT4LED
MOV A,10H
ORM A,PC
RET
L_ONBAT4LED:
MOV A,0EFH
ANDM A,PC
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_AD_FILTER:
M_NOTEQU R_ADRL_TEMP1,R_ADRH_TEMP1,R_ADRL_TEMP2,R_ADRH_TEMP2,L_TEMP1_NOTEQU_TEMP2
MOV A,R_ADRL_TEMP1
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMP1
MOV R_ADRH_BAK,A
RET
L_TEMP1_NOTEQU_TEMP2:
M_NOTEQU R_ADRL_TEMP1,R_ADRH_TEMP1,R_ADRL_TEMP3,R_ADRH_TEMP3,L_TEMP1_NOTEQU_TEMP3
MOV A,R_ADRL_TEMP1
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMP1
MOV R_ADRH_BAK,A
RET
L_TEMP1_NOTEQU_TEMP3:
M_NOTEQU R_ADRL_TEMP2,R_ADRH_TEMP2,R_ADRL_TEMP3,R_ADRH_TEMP3,L_AD_NOTEQU
MOV A,R_ADRL_TEMP2
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMP2
MOV R_ADRH_BAK,A
RET
L_AD_NOTEQU:
M_JLESS R_ADRL_TEMP1,R_ADRH_TEMP1,R_ADRL_TEMP2,R_ADRH_TEMP2,L_TEMP1LESTHENTEMP2
MOV A,R_ADRL_TEMP2
MOV R_ADRL_TEMPS,A
MOV A,R_ADRH_TEMP2
MOV R_ADRH_TEMPS,A
MOV A,R_ADRL_TEMP1
MOV R_ADRL_TEMPB,A
MOV A,R_ADRH_TEMP1
MOV R_ADRH_TEMPB,A
JMP L_AD_FILTER1
L_TEMP1LESTHENTEMP2:
MOV A,R_ADRL_TEMP1
MOV R_ADRL_TEMPS,A
MOV A,R_ADRH_TEMP1
MOV R_ADRH_TEMPS,A
MOV A,R_ADRL_TEMP2
MOV R_ADRL_TEMPB,A
MOV A,R_ADRH_TEMP2
MOV R_ADRH_TEMPB,A
L_AD_FILTER1:
M_JLESS R_ADRL_TEMPS,R_ADRH_TEMPS,R_ADRL_TEMP3,R_ADRH_TEMP3,L_AD_FILTER2
MOV A,R_ADRL_TEMPS
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMPS
MOV R_ADRH_BAK,A
RET
L_AD_FILTER2:
M_JLESS R_ADRL_TEMPB,R_ADRH_TEMPB,R_ADRL_TEMP3,R_ADRH_TEMP3,L_AD_FILTER3
MOV A,R_ADRL_TEMP3
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMP3
MOV R_ADRH_BAK,A
RET
L_AD_FILTER3:
MOV A,R_ADRL_TEMPB
MOV R_ADRL_BAK,A
MOV A,R_ADRH_TEMPB
MOV R_ADRH_BAK,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_CHECKBATSDELTAV:
SZ R_FLAG2.4
JMP L_CHECKBAT1VPEAK
SZ R_FLAG2.5
JMP L_CHECKBAT2VPEAK
SZ R_FLAG2.6
JMP L_CHECKBAT3VPEAK
SZ R_FLAG2.7
JMP L_CHECKBAT4VPEAK
RET
L_CHECKBAT1VPEAK:
M_JLESS R_ADRL_BAK,R_ADRH_BAK,R_BAT1_VPEAKVL,R_BAT1_VPEAKVH,L_NOTUPDATE_BAT1_VPEAK
MOV A,R_ADRL_BAK
MOV R_BAT1_VPEAKVL,A
MOV A,R_ADRH_BAK
MOV R_BAT1_VPEAKVH,A
CLR R_BAT1VPEAKTIMEL
CLR R_BAT1VPEAKTIMEH
RET
L_NOTUPDATE_BAT1_VPEAK:
M_JLESS R_BAT1VPEAKTIMEL,R_BAT1VPEAKTIMEH,VPEAK_TIMEL,VPEAK_TIMEH,L_BAT1CHARGINGNOTOK
SET F_OCBAT1
CLR R_BAT1VPEAKTIMEL
CLR R_BAT1VPEAKTIMEH
RET
L_BAT1CHARGINGNOTOK:
RET
L_CHECKBAT2VPEAK:
M_JLESS R_ADRL_BAK,R_ADRH_BAK,R_BAT2_VPEAKVL,R_BAT2_VPEAKVH,L_NOTUPDATE_BAT2_VPEAK
MOV A,R_ADRL_BAK
MOV R_BAT2_VPEAKVL,A
MOV A,R_ADRH_BAK
MOV R_BAT2_VPEAKVH,A
CLR R_BAT2VPEAKTIMEL
CLR R_BAT2VPEAKTIMEH
RET
L_NOTUPDATE_BAT2_VPEAK:
M_JLESS R_BAT2VPEAKTIMEL,R_BAT2VPEAKTIMEH,VPEAK_TIMEL,VPEAK_TIMEH,L_BAT2CHARGINGNOTOK
SET F_OCBAT2
CLR R_BAT2VPEAKTIMEL
CLR R_BAT2VPEAKTIMEH
RET
L_BAT2CHARGINGNOTOK:
RET
L_CHECKBAT3VPEAK:
M_JLESS R_ADRL_BAK,R_ADRH_BAK,R_BAT3_VPEAKVL,R_BAT3_VPEAKVH,L_NOTUPDATE_BAT3_VPEAK
MOV A,R_ADRL_BAK
MOV R_BAT3_VPEAKVL,A
MOV A,R_ADRH_BAK
MOV R_BAT3_VPEAKVH,A
CLR R_BAT3VPEAKTIMEL
CLR R_BAT3VPEAKTIMEH
RET
L_NOTUPDATE_BAT3_VPEAK:
M_JLESS R_BAT3VPEAKTIMEL,R_BAT3VPEAKTIMEH,VPEAK_TIMEL,VPEAK_TIMEH,L_BAT3CHARGINGNOTOK
SET F_OCBAT3
CLR R_BAT3VPEAKTIMEL
CLR R_BAT3VPEAKTIMEH
RET
L_BAT3CHARGINGNOTOK:
RET
L_CHECKBAT4VPEAK:
M_JLESS R_ADRL_BAK,R_ADRH_BAK,R_BAT4_VPEAKVL,R_BAT4_VPEAKVH,L_NOTUPDATE_BAT4_VPEAK
MOV A,R_ADRL_BAK
MOV R_BAT4_VPEAKVL,A
MOV A,R_ADRH_BAK
MOV R_BAT4_VPEAKVH,A
CLR R_BAT4VPEAKTIMEL
CLR R_BAT4VPEAKTIMEH
RET
L_NOTUPDATE_BAT4_VPEAK:
M_JLESS R_BAT4VPEAKTIMEL,R_BAT4VPEAKTIMEH,VPEAK_TIMEL,VPEAK_TIMEH,L_BAT4CHARGINGNOTOK
SET F_OCBAT4
CLR R_BAT4VPEAKTIMEL
CLR R_BAT4VPEAKTIMEH
RET
L_BAT4CHARGINGNOTOK:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_CHECKTIMEOUT:
SZ R_FLAG2.4
JMP L_CHECKBAT1TIMEOUT
SZ R_FLAG2.5
JMP L_CHECKBAT2TIMEOUT
SZ R_FLAG2.6
JMP L_CHECKBAT3TIMEOUT
SZ R_FLAG2.7
JMP L_CHECKBAT4TIMEOUT
RET
L_CHECKBAT1TIMEOUT:
M_JLESS R_BAT1CHARGETIMEL,R_BAT1CHARGETIMEH,TCHARGETIMEL,TCHARGETIMEH,L_BAT1NOTTIMEOUT
SET F_OCBAT1
CLR R_BAT1CHARGETIMEL
CLR R_BAT1CHARGETIMEH
RET
L_BAT1NOTTIMEOUT:
RET
L_CHECKBAT2TIMEOUT:
M_JLESS R_BAT2CHARGETIMEL,R_BAT2CHARGETIMEH,TCHARGETIMEL,TCHARGETIMEH,L_BAT2NOTTIMEOUT
SET F_OCBAT2
CLR R_BAT2CHARGETIMEL
CLR R_BAT2CHARGETIMEH
RET
L_BAT2NOTTIMEOUT:
RET
L_CHECKBAT3TIMEOUT:
M_JLESS R_BAT3CHARGETIMEL,R_BAT3CHARGETIMEH,TCHARGETIMEL,TCHARGETIMEH,L_BAT3NOTTIMEOUT
SET F_OCBAT3
CLR R_BAT3CHARGETIMEL
CLR R_BAT3CHARGETIMEH
RET
L_BAT3NOTTIMEOUT:
RET
L_CHECKBAT4TIMEOUT:
M_JLESS R_BAT4CHARGETIMEL,R_BAT4CHARGETIMEH,TCHARGETIMEL,TCHARGETIMEH,L_BAT4NOTTIMEOUT
SET F_OCBAT4
CLR R_BAT4CHARGETIMEL
CLR R_BAT4CHARGETIMEH
RET
L_BAT4NOTTIMEOUT:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;DELAY 50MS
SBR_DELAY50MS:
MOV A,7DH
MOV R_DELAY2,A
MOV A,0C9H
MOV R_DELAY1,A
CLR WDT
SDZ R_DELAY1
JMP $-2
SDZ R_DELAY2
JMP $-4
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INI_IOPORTS:
MOV A,0FH
MOV PA,A
MOV A,00H
MOV PAC,A
MOV A,00H
MOV PC,A
MOV A,00H
MOV PCC,A
MOV A,00H
MOV PD,A
MOV PDC,A
MOV A,10H
MOV PWM,A
MOV A,00101000B
MOV ADCR,A
MOV A,02H
MOV ACSR,A
MOV A,7EH
MOV MP0,A
MOV A,55H
MOV R0,A
INC MP0
MOV A,0AAH
MOV R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -