⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subroutine.asm

📁 镍氢充电器(四并充)&#8722 HT46R53 设计报告
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        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 + -