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

📄 subroutine.asm

📁 镍氢充电器(四并充)&#8722 HT46R53 设计报告
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;
;;SUBROUTINE PART
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ISR_TIMER:
		M_PUSH
		CLR  TMRC.4
		SDZ  R_TMRH
		JMP  ISR_TIMEREXIT
		CLR  PD.0
		MOV  A,0FBH
		MOV  R_TMRH,A
		MOV  A,0FH
		ORM  A,PA                                     ;;SETTING PA.0,PA.1,PA.2,PA.3 HIGH LEVEL SO THAT BATTERIES STOP CHARGING
		CALL  SBR_DELAY50MS
;;----------------------------------------------------
L_C_BAT1STATUS:
		CLR  WDT
		MOV  A,28H
		MOV  ADCR,A                                   ;;CHECK BATTERY 1 STATUS
		CALL SBR_CHECKBATSTATUS
		SNZ   F_BAT1ON
		JMP   L_C_BAT1REMOVED
		SZ    F_OCBAT1
		JMP   L_BAT1CHARGINGOK
		JMP   L_C_BAT2STATUS
L_C_BAT1REMOVED:
		MOV   A,02H
        ORM   A,PC                                    ;;SET PC.1 HIGH LEVEL, IF THERE IS NO BATTERY 1 IN THE PACK
        CLR   F_OLDBAT1
        JMP   L_BAT1CHARGINGEXIT
L_BAT1CHARGINGOK:	
		MOV   A,0FDH
		ANDM  A,PC			
		SET   F_OLDBAT1
L_BAT1CHARGINGEXIT:
		CLR   F_BAT1CHARGE
		CLR   R_BAT1CHARGETIMEL
		CLR   R_BAT1CHARGETIMEH
		CLR   R_BAT1VPEAKTIMEL
        CLR   R_BAT1VPEAKTIMEH
		CLR   R_BAT1_VPEAKVL
		CLR   R_BAT1_VPEAKVH
;;-----------------------------------------------------
L_C_BAT2STATUS:
		CLR  WDT		
		MOV  A,29H
		MOV  ADCR,A   				                   ;;CHECK BATTERY 2 STATUS               
        CALL SBR_CHECKBATSTATUS
		SNZ   F_BAT2ON
		JMP   L_C_BAT2REMOVED
		SZ    F_OCBAT2
		JMP   L_BAT2CHARGINGOK 
		JMP   L_C_BAT3STATUS
L_C_BAT2REMOVED:
		MOV   A,04H
		ORM   A,PC
		CLR   F_OLDBAT2				
		JMP   L_BAT2CHARGINGEXIT
L_BAT2CHARGINGOK:	
		MOV   A,0FBH
		ANDM  A,PC		
		SET   F_OLDBAT2
L_BAT2CHARGINGEXIT:
		CLR   F_BAT2CHARGE
		CLR   R_BAT2CHARGETIMEL
		CLR   R_BAT2CHARGETIMEH
		CLR   R_BAT2VPEAKTIMEL
		CLR   R_BAT2VPEAKTIMEH
		CLR   R_BAT2_VPEAKVL
		CLR   R_BAT2_VPEAKVH
;;------------------------------------------------------
L_C_BAT3STATUS:
		CLR  WDT
        MOV  A,2AH
		MOV  ADCR,A                                   ;;CHECK BATTERY 3 STATUS   	  	
        CALL SBR_CHECKBATSTATUS
		SNZ   F_BAT3ON
		JMP   L_C_BAT3REMOVED
		SZ    F_OCBAT3
		JMP   L_BAT3CHARGINGOK  
		JMP   L_C_BAT4STATUS
L_C_BAT3REMOVED:
		MOV   A,08H
		ORM   A,PC
		CLR   F_OLDBAT3
		JMP   L_BAT3CHARGINGEXIT
L_BAT3CHARGINGOK:	
		MOV   A,0F7H
		ANDM  A,PC			
		SET   F_OLDBAT3
L_BAT3CHARGINGEXIT:
		CLR   F_BAT3CHARGE
		CLR   R_BAT3CHARGETIMEL
		CLR   R_BAT3CHARGETIMEH
		CLR   R_BAT3VPEAKTIMEL
		CLR   R_BAT3VPEAKTIMEH
		CLR   R_BAT3_VPEAKVL
		CLR   R_BAT3_VPEAKVH
;;----------------------------------------------------
L_C_BAT4STATUS:
		CLR  WDT
        MOV  A,2BH
		MOV  ADCR,A                                   ;;CHECK BATTERY 4 STATUS  	  	
        CALL SBR_CHECKBATSTATUS
		SNZ   F_BAT4ON
		JMP   L_C_BAT4REMOVED
		SZ    F_OCBAT4
		JMP   L_BAT4CHARGINGOK
		JMP   L_CHECKCHARGINGFLAG
L_C_BAT4REMOVED:
		MOV   A,10H
		ORM   A,PC
		CLR   F_OLDBAT4
		JMP   L_BAT4CHARGINGEXIT
L_BAT4CHARGINGOK:		
		MOV   A,0EFH
		ANDM  A,PC		
		SET   F_OLDBAT4
L_BAT4CHARGINGEXIT:
		CLR   F_BAT4CHARGE
		CLR   R_BAT4CHARGETIMEL
		CLR   R_BAT4CHARGETIMEH
		CLR   R_BAT4VPEAKTIMEL
		CLR   R_BAT4VPEAKTIMEH
		CLR   R_BAT4_VPEAKVL
		CLR   R_BAT4_VPEAKVH
;;----------------------------------------------------
L_CHECKCHARGINGFLAG:
		CLR  WDT
		MOV  A,0F0H
		AND  A,R_FLAG2
		SWAP ACC
		ADDM A,PCL
		JMP  L_CHECKCHARGINGFLAG0                      ;;IF THE F_BATXCHARGE EQU 1
		JMP  L_CHECKCHARGINGFLAG1                      ;;IF THE F_BAT1CHARGE EQU 1 
		JMP  L_CHECKCHARGINGFLAG2                      ;;IF THE F_BAT2CHARGE EQU 1
		JMP  ISR_TIMEREXIT	
		JMP  L_CHECKCHARGINGFLAG3                      ;;IF THE F_BAT3CHARGE EQU 1
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  L_CHECKCHARGINGFLAG4	                   ;;IF THE F_BAT4CHARGE EQU 1
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
		JMP  ISR_TIMEREXIT
;;-----------------------------------------------------
L_CHECKCHARGINGFLAG0:
L_CHECKCHARGINGFLAG0_BAT1:
		SNZ  F_BAT1ON
		JMP	 L_CHECKCHARGINGFLAG0_BAT2
		SZ   F_OCBAT1
		JMP  L_CHECKCHARGINGFLAG0_BAT2
		SZ   F_OLDBAT1
		JMP  L_CHECKCHARGINGFLAG0_BAT2
		SET  F_BAT1CHARGE
		MOV  A,02H
		XORM A,PC 
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG0_BAT2:
		SNZ  F_BAT2ON
		JMP  L_CHECKCHARGINGFLAG0_BAT3
		SZ   F_OCBAT2
		JMP  L_CHECKCHARGINGFLAG0_BAT3
		SZ   F_OLDBAT2
		JMP  L_CHECKCHARGINGFLAG0_BAT3
		SET  F_BAT2CHARGE
		MOV  A,04H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG0_BAT3:
		SNZ  F_BAT3ON
		JMP  L_CHECKCHARGINGFLAG0_BAT4
		SZ   F_OCBAT3
		JMP  L_CHECKCHARGINGFLAG0_BAT4
		SZ   F_OLDBAT3
		JMP  L_CHECKCHARGINGFLAG0_BAT4
		SET  F_BAT3CHARGE
		MOV  A,08H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG0_BAT4:
		SNZ  F_BAT4ON
		JMP  ISR_TIMEREXIT
		SZ   F_OCBAT4
		JMP  ISR_TIMEREXIT
		SZ   F_OLDBAT4
		JMP  ISR_TIMEREXIT
		SET  F_BAT4CHARGE
		MOV  A,10H
		XORM A,PC
		JMP  ISR_TIMEREXIT
;;-----------------------------------------------------
L_CHECKCHARGINGFLAG1:
		MOV  A,0FH
		ANDM A,R_FLAG2                                  ;;SETTING THE R_FLAG2 HIGH NIBBLE EQU 0
		MOV  A,01H
		ADDM A,R_BAT1CHARGETIMEL
		MOV  A,00H
		ADCM A,R_BAT1CHARGETIMEH

		MOV  A,01H
		ADDM A,R_BAT1VPEAKTIMEL
		MOV  A,00H
		ADCM A,R_BAT1VPEAKTIMEH
L_CHECKCHARGINGFLAG1_BAT2:
		SNZ  F_BAT2ON
		JMP  L_CHECKCHARGINGFLAG1_BAT3		
		SZ   F_OCBAT2
		JMP  L_CHECKCHARGINGFLAG1_BAT3
		SZ   F_OLDBAT2
		JMP  L_CHECKCHARGINGFLAG1_BAT3
		SET  F_BAT2CHARGE
		MOV  A,04H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG1_BAT3:
		SNZ  F_BAT3ON
		JMP  L_CHECKCHARGINGFLAG1_BAT4	
		SZ   F_OCBAT3
		JMP  L_CHECKCHARGINGFLAG1_BAT4
		SZ   F_OLDBAT3
		JMP  L_CHECKCHARGINGFLAG1_BAT4
		SET  F_BAT3CHARGE
		MOV  A,08H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG1_BAT4:
		SNZ  F_BAT4ON
		JMP  L_CHECKCHARGINGFLAG1_BAT1	
		SZ   F_OCBAT4
		JMP  L_CHECKCHARGINGFLAG1_BAT1
		SZ   F_OLDBAT4
		JMP  L_CHECKCHARGINGFLAG1_BAT1
		SET  F_BAT4CHARGE
		MOV  A,10H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG1_BAT1:
		SNZ  F_BAT1ON
		JMP	 ISR_TIMEREXIT
		SZ   F_OCBAT1
		JMP  ISR_TIMEREXIT
		SZ   F_OLDBAT1
		JMP  ISR_TIMEREXIT
		SET  F_BAT1CHARGE
		MOV  A,02H
		XORM A,PC                                      ;;CPL PC.1
		JMP  ISR_TIMEREXIT
;;-----------------------------------------------------
L_CHECKCHARGINGFLAG2:
		MOV  A,0FH
		ANDM A,R_FLAG2                                  ;;SETTING THE R_FLAG2 HIGH NIBBLE EQU 0
		MOV  A,01H
		ADDM A,R_BAT2CHARGETIMEL
		MOV  A,00H
		ADCM A,R_BAT2CHARGETIMEH

		MOV  A,01H
		ADDM A,R_BAT2VPEAKTIMEL
		MOV  A,00H
		ADCM A,R_BAT2VPEAKTIMEH
L_CHECKCHARGINGFLAG2_BAT3:
		SNZ  F_BAT3ON
		JMP  L_CHECKCHARGINGFLAG2_BAT4
		SZ   F_OCBAT3
		JMP  L_CHECKCHARGINGFLAG2_BAT4
		SZ   F_OLDBAT3
		JMP  L_CHECKCHARGINGFLAG2_BAT4
		SET  F_BAT3CHARGE
		MOV  A,08H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG2_BAT4:
		SNZ  F_BAT4ON
		JMP  L_CHECKCHARGINGFLAG2_BAT1	
		SZ   F_OCBAT4
		JMP  L_CHECKCHARGINGFLAG2_BAT1
		SZ   F_OLDBAT4
		JMP  L_CHECKCHARGINGFLAG2_BAT1
		SET  F_BAT4CHARGE
		MOV  A,10H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG2_BAT1:
		SNZ  F_BAT1ON
		JMP	 L_CHECKCHARGINGFLAG2_BAT2
		SZ   F_OCBAT1
		JMP  L_CHECKCHARGINGFLAG2_BAT2
		SZ   F_OLDBAT1
		JMP  L_CHECKCHARGINGFLAG2_BAT2
		SET  F_BAT1CHARGE
        MOV  A,02H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG2_BAT2:
		SNZ  F_BAT2ON
		JMP  ISR_TIMEREXIT
		SZ   F_OCBAT2
		JMP  ISR_TIMEREXIT
		SZ   F_OLDBAT2
		JMP  ISR_TIMEREXIT
		SET  F_BAT2CHARGE
		MOV  A,04H
		XORM A,PC                                      ;;CPL PC.2
		JMP  ISR_TIMEREXIT
;;-----------------------------------------------------
L_CHECKCHARGINGFLAG3:
		MOV  A,0FH
		ANDM A,R_FLAG2                                  ;;SETTING THE R_FLAG2 HIGH NIBBLE EQU 0
		MOV  A,01H
		ADDM A,R_BAT3CHARGETIMEL
		MOV  A,00H
		ADCM A,R_BAT3CHARGETIMEH

		MOV  A,01H
		ADDM A,R_BAT3VPEAKTIMEL
		MOV  A,00H
		ADCM A,R_BAT3VPEAKTIMEH
L_CHECKCHARGINGFLAG3_BAT4:
		SNZ  F_BAT4ON
		JMP  L_CHECKCHARGINGFLAG3_BAT1	
		SZ   F_OCBAT4
		JMP  L_CHECKCHARGINGFLAG3_BAT1
		SZ   F_OLDBAT4
		JMP  L_CHECKCHARGINGFLAG3_BAT1
		SET  F_BAT4CHARGE
		MOV  A,10H
		XORM A,PC
		JMP  ISR_TIMEREXIT		
L_CHECKCHARGINGFLAG3_BAT1:
		SNZ  F_BAT1ON
		JMP	 L_CHECKCHARGINGFLAG3_BAT2
		SZ   F_OCBAT1
		JMP  L_CHECKCHARGINGFLAG3_BAT2
		SZ   F_OLDBAT1
		JMP  L_CHECKCHARGINGFLAG3_BAT2
		SET  F_BAT1CHARGE
		MOV  A,02H
		XORM A,PC
		JMP  ISR_TIMEREXIT		
L_CHECKCHARGINGFLAG3_BAT2:
		SNZ  F_BAT2ON
		JMP  L_CHECKCHARGINGFLAG3_BAT3		
		SZ   F_OCBAT2
		JMP  L_CHECKCHARGINGFLAG3_BAT3
		SZ   F_OLDBAT2
		JMP  L_CHECKCHARGINGFLAG3_BAT3
		SET  F_BAT2CHARGE
		MOV  A,04H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG3_BAT3:
		SNZ  F_BAT3ON
		JMP  ISR_TIMEREXIT
		SZ   F_OCBAT3
		JMP  ISR_TIMEREXIT
		SZ   F_OLDBAT3
		JMP  ISR_TIMEREXIT
		SET  F_BAT3CHARGE
		MOV  A,08H
		XORM A,PC                                      ;;CPL PC.3
		JMP  ISR_TIMEREXIT
;;-----------------------------------------------------
L_CHECKCHARGINGFLAG4:
		MOV  A,0FH
		ANDM A,R_FLAG2                                  ;;SETTING THE R_FLAG2 HIGH NIBBLE EQU 0
		MOV  A,01H
		ADDM A,R_BAT4CHARGETIMEL
		MOV  A,00H
		ADCM A,R_BAT4CHARGETIMEH

		MOV  A,01H
		ADDM A,R_BAT4VPEAKTIMEL
		MOV  A,00H
		ADCM A,R_BAT4VPEAKTIMEH
L_CHECKCHARGINGFLAG4_BAT1:
		SNZ  F_BAT1ON
		JMP	 L_CHECKCHARGINGFLAG4_BAT2
		SZ   F_OCBAT1
		JMP  L_CHECKCHARGINGFLAG4_BAT2
		SZ   F_OLDBAT1
		JMP  L_CHECKCHARGINGFLAG4_BAT2
		SET  F_BAT1CHARGE
		MOV  A,02H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG4_BAT2:
		SNZ  F_BAT2ON
		JMP  L_CHECKCHARGINGFLAG4_BAT3		
		SZ   F_OCBAT2
		JMP  L_CHECKCHARGINGFLAG4_BAT3
		SZ   F_OLDBAT2
		JMP  L_CHECKCHARGINGFLAG4_BAT3
		SET  F_BAT2CHARGE
		MOV  A,04H
		XORM A,PC
		JMP  ISR_TIMEREXIT
L_CHECKCHARGINGFLAG4_BAT3:
		SNZ  F_BAT3ON
		JMP  L_CHECKCHARGINGFLAG4_BAT4	
		SZ   F_OCBAT3
		JMP  L_CHECKCHARGINGFLAG4_BAT4
		SZ   F_OLDBAT3
		JMP  L_CHECKCHARGINGFLAG4_BAT4
		SET  F_BAT3CHARGE
		MOV  A,08H
		XORM A,PC
		JMP  ISR_TIMEREXIT	
L_CHECKCHARGINGFLAG4_BAT4:
		SNZ  F_BAT4ON
		JMP  ISR_TIMEREXIT
		SZ   F_OCBAT4
		JMP  ISR_TIMEREXIT
		SZ   F_OLDBAT4
		JMP  ISR_TIMEREXIT
		SET  F_BAT4CHARGE
		MOV  A,10H
		XORM A,PC                                      ;;CPL PC.4
		JMP  ISR_TIMEREXIT	
;;-----------------------------------------------------				
ISR_TIMEREXIT:
		M_POP
		SET  TMRC.4
		RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SBR_CHECKBATSTATUS:                
        CALL  SBR_ADCONVERT
        MOV   A,ADRL
        MOV   R_ADRL_TEMP1,A
        MOV   A,ADRH
        MOV   R_ADRH_TEMP1,A
        CALL  SBR_ADCONVERT
        MOV   A,ADRL
        MOV   R_ADRL_TEMP2,A
        MOV   A,ADRH
        MOV   R_ADRH_TEMP2,A
        CALL  SBR_ADCONVERT
        MOV   A,ADRL
        MOV   R_ADRL_TEMP3,A
        MOV   A,ADRH
        MOV   R_ADRH_TEMP3,A
        CALL  SBR_AD_FILTER      

        CALL  SBR_CONVERT16212
         
        M_JLESS  R_ADRL_BAK,R_ADRH_BAK,V100MVL,V100MVH,L_BAT_LESS_0D1V   ;;CHECK THERE HAVE OR NOT BATTERY IN THE PACK
        M_JLESS  R_ADRL_BAK,R_ADRH_BAK,DISCHARGEVL,DISCHARGEVH,L_BAT_LESS_1D15V
        M_JLESS  R_ADRL_BAK,R_ADRH_BAK,QCHARGEVL,QCHARGEVH,L_BAT_LESS_1D25V
        M_JLESS  R_ADRL_BAK,R_ADRH_BAK,MAXVL,MAXVH,L_BAT_LESS_1D55V       ;;CHECK EACH BATTERY VOLTAGE IS OR NOT LESS THAN 1.8V  
L_BAT_BIGGER_1D55V:
		MOV    A,07H
		AND    A,ADCR
		MOV    R_TEMP1,A
L_BAT1_BIGGER_1D55V:
        MOV    A,00H
        XOR    A,R_TEMP1
        SNZ    Z
        JMP    L_BAT2_BIGGER_1D55V  
        SET    F_BAT1ON
        SET    F_OCBAT1
        CLR    F_QCBAT1
        CLR    F_DISCHARGEOK1
        RET
L_BAT2_BIGGER_1D55V:
        MOV    A,01H
        XOR    A,R_TEMP1
        SNZ    Z
        JMP    L_BAT3_BIGGER_1D55V
        SET    F_BAT2ON
        SET    F_OCBAT2
        CLR    F_QCBAT2
        CLR    F_DISCHARGEOK2
        RET
L_BAT3_BIGGER_1D55V:
        MOV    A,02H
        XOR    A,R_TEMP1
        SNZ    Z
        JMP    L_BAT4_BIGGER_1D55V
        SET    F_BAT3ON
        SET    F_OCBAT3
        CLR    F_QCBAT3
        CLR    F_DISCHARGEOK3
        RET
L_BAT4_BIGGER_1D55V:
        MOV    A,03H
        XOR    A,R_TEMP1
        SNZ    Z
        RET
        SET    F_BAT4ON
        SET    F_OCBAT4
        CLR    F_QCBAT4
        CLR    F_DISCHARGEOK4

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -