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

📄 maincharger.asm

📁 镍氢充电器(四并充)&#8722 HT46R53 设计报告
💻 ASM
字号:
#INCLUDE   NIMHCHARGER.INC
;;;;;;;;;;;;;;;;;;;;;MASK OPTION;;;;;;;;;;;;;;;;;;;;;;;;
;;BODY:                HT46R53
;;PRODUCT:             28SKDIP
;;VDD                  5V
;;WDT:                 ENABLE
;;CLR WDT              ONE CLEAR INSTRUCTION
;;WDT CLOCK SOURCE     T1
;;WDT TIME-OUT PERIOD  2^15/fs
;;WAKE-UP              NONE WAKE-UP
;;PULL-HIGH            PA.0,PA.1,PA.2,PA.3,PB AND PC PORT ALL PULL-HIGH
;;NONE PULL-HITH:      PA.4,PA.5,PA.6,PA.7 AND PD.0 ALL NONE PULL-HIGH
;;LVR                  DISABLE
;;OSC                  RC MODEL(ROSC=75k)
;;PD0                  ENABLE PWM
;;PWM MODEL            6+2 MODEL
;;PA3/PFD              DISABLE PFD
;;ESTABLISHED DATE:    2005/05/26
;;;;;;;;;;;;;;;;;;;;;CODE SECTION;;;;;;;;;;;;;;;;;;;;;;;
MAIN. SECTION  AT 00H 'CODE'
        ORG    00H
  		JMP    MAIN    
  
        ORG    04H
        RETI       

        ORG    08H
        JMP    ISR_TIMER

        ORG    0CH
        RETI

        MAIN:
		INI_REGISTER:
				M_INITIATE
				CALL  INI_IOPORTS   
				M_CLRRAM   
				CALL  SBR_DELAY50MS
		MLP_MAIN: 
				CLR   WDT
				MOV   A,28H
				MOV   ADCR,A                           ;;CHECK BATTERY 1 STATUS
				CALL  SBR_CHECKBATSTATUS
				
				MOV   A,29H
				MOV   ADCR,A   				           ;;CHECK BATTERY 2 STATUS               
                CALL  SBR_CHECKBATSTATUS

                MOV   A,2AH
				MOV   ADCR,A                           ;;CHECK BATTERY 3 STATUS   	  	
                CALL  SBR_CHECKBATSTATUS

                MOV   A,2BH
				MOV   ADCR,A                           ;;CHECK BATTERY 4 STATUS  	  	
                CALL  SBR_CHECKBATSTATUS

                CALL  SBR_SHOWBATSTATUS
                MOV   A,0FH
                AND   A,R_FLAG
                SZ    Z                                ;;JUDGE HAVE OR NOT BATTERIES IN THE PACK				                              
                JMP   MLP_MAIN                         ;;NO BATTERIES IN THE PACK    
				MOV   R_TEMP3,A                        ;;THERE ARE BATTERIES IN THE PACK
				MOV   A,0FH
				AND   A,R_FLAG2
				XOR   A,R_TEMP3
				SZ    Z                                ;;JUDGE THE BATTERIES IN THE PACK IS OR NOT NEW
				JMP   MLP_MAIN                         ;;THE BATTERIES IN THE PACK IS NOT NEW
		L_CHARGEMAIN:                                                           
                MOV   A,PB
                SNZ   ACC.5
                JMP   MLP_DISCHARGING
				JMP   L_CHARGING
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;$$$$$$$$$$$$$$$$$ CHARGING PART $$$$$$$$$$$$$$$$$$$$$$$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		L_CHARGING:
				CLR   WDT
				MOV   A,09BH                           ;;TIMER 0.8MS 
				MOV   TMR,A
     		    MOV   A,0FBH
				MOV   R_TMRH,A                 		   ;;TOTAL TIMER TIME IS 0.8MS*250=200MS
				SET   TMRC.4		
;;-----------------------------------------------------;;BATTERY 1 CHARGING
		MLP_CHARGE:
				MOV   A,0FH                 
				AND   A,R_FLAG
				SZ    Z
				JMP   MLP_CHARGINGEXIT                 ;;THERE IS NO BATTERIES IN THE PACK
				MOV   R_TEMP3,A		
				MOV   A,0FH
				AND   A,R_FLAG1
				XOR   A,R_TEMP3
				SZ    Z                                ;;JUDGE BATTERIES IN THE PACK IS OR NOT CHARGING FINISHED
				JMP   MLP_CHARGINGEXIT                 ;;BATTERIES CHARGING FINISHED		
		L_BAT1CHARGE:  
				CLR   WDT                           								
				SNZ   F_BAT1CHARGE
				JMP   L_BAT2CHARGE   
				SZ    F_QCBAT1
				JMP   L_BAT1QCHARGING
				CLR   F_QUICKCHARGE
				JMP   L_BAT1CHARGING
		L_BAT1QCHARGING:
				SET   F_QUICKCHARGE
		L_BAT1CHARGING:
				MOV   A,0FEH
				ANDM  A,PA                             ;;SETTING PA.0 LOW LEVEL, BATTERY 1 CHARGING
				SET   PD.0   
				JMP   L_BATSCHARGING        
;;-----------------------------------------------------;;BATTERY 2 CHARGING
		L_BAT2CHARGE:   
				CLR   WDT				                        								
				SNZ   F_BAT2CHARGE
				JMP   L_BAT3CHARGE  
				SZ    F_QCBAT2
				JMP   L_BAT2QCHARGING
				CLR   F_QUICKCHARGE
				JMP   L_BAT2CHARGING
		L_BAT2QCHARGING:
				SET   F_QUICKCHARGE 
		L_BAT2CHARGING:
				MOV   A,0FDH
				ANDM  A,PA                             ;;SETTING PA.1 LOW LEVEL, BATTERY 2 CHARGING
				SET   PD.0     
				JMP   L_BATSCHARGING         
;;-----------------------------------------------------;;BATTERY 3 CHARGING				
		L_BAT3CHARGE:  
				CLR   WDT				                            
				SNZ   F_BAT3CHARGE
				JMP   L_BAT4CHARGE	
				SZ    F_QCBAT3
				JMP   L_BAT3QCHARGING
				CLR   F_QUICKCHARGE
				JMP   L_BAT3CHARGING
		L_BAT3QCHARGING:
				SET   F_QUICKCHARGE
		L_BAT3CHARGING:
				MOV   A,0FBH
				ANDM  A,PA                             ;;SETTING PA.2 LOW LEVEL, BATTERY 3 CHARGING
				SET   PD.0	
				JMP   L_BATSCHARGING 		        
;;-----------------------------------------------------;;BATTERY 4 CHARGING
		L_BAT4CHARGE:  
				CLR   WDT				                              				
				SNZ   F_BAT4CHARGE
				JMP   MLP_CHARGE  	
				SZ    F_QCBAT4
				JMP   L_BAT4QCHARGING
				CLR   F_QUICKCHARGE
				JMP   L_BAT4CHARGING
		L_BAT4QCHARGING:
				SET   F_QUICKCHARGE
		L_BAT4CHARGING:
				MOV   A,0F7H
				ANDM  A,PA                             ;;SETTING PA.3 LOW LEVEL, BATTERY 4 CHARGING	
				SET   PD.0		
				JMP   L_BATSCHARGING          
;;-----------------------------------------------------
		L_BATSCHARGING:
				CALL  SBR_CHECKBATSDELTAV
				CALL  SBR_CHECKTIMEOUT
				SNZ   F_QUICKCHARGE
				JMP   L_SLOWCHARGING
;;-----------------------------------------------------
L_QUICKCHARGING:
				MOV   A,2CH
				MOV   ADCR,A                           ;;SELECT AN4 CHANNEL
      		    CALL  SBR_ADCONVERT
          		MOV   A,ADRL
       			MOV   R_ADRL_CBAK,A
        		MOV   A,ADRH
        		MOV   R_ADRH_CBAK,A
       			M_JLESS R_ADRL_CBAK,R_ADRH_CBAK,QCURRENTL,QCURRENTH,L_CURRENT_LESS_500MA
       			SZ    PWM
				DEC   PWM
				JMP   MLP_CHARGE
L_CURRENT_LESS_500MA:
				INC   PWM
				JMP   MLP_CHARGE					
;;-----------------------------------------------------
L_SLOWCHARGING:
				MOV   A,2CH
				MOV   ADCR,A                           ;;SELECT AN4 CHANNEL
      		    CALL  SBR_ADCONVERT
          		MOV   A,ADRL
       			MOV   R_ADRL_CBAK,A
        		MOV   A,ADRH
        		MOV   R_ADRH_CBAK,A
        		M_JLESS R_ADRL_CBAK,R_ADRH_CBAK,SCURRENTL,SCURRENTH,L_CURRENT_LESS_180MA
				SZ    PWM
        		DEC   PWM
        		JMP   MLP_CHARGE
L_CURRENT_LESS_180MA:
				INC   PWM
				JMP   MLP_CHARGE	
;;-----------------------------------------------------
MLP_CHARGINGEXIT:
				CLR   PD.0
				CLR   TMRC.4
				JMP   MLP_MAIN		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;$$$$$$$$$$$$$$$$$ DISCHARGING PART $$$$$$$$$$$$$$$$$$$$ 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;           
		MLP_DISCHARGING:   
				CLR   WDT       
				MOV   A,01H
                XORM  A,PC                             ;;CPL THE LED1 
				CALL  SBR_DELAY50MS  
;;-----------------------------------------------------;;BATTERY 1 DISCHARGING
		L_BAT1DISCHARGING:                             ;;CHECK BATTERY 1 STATUS
				MOV   A,28H
				MOV   ADCR,A                      
				MOV   A,0EFH
				ANDM  A,PA         
                CALL  SBR_CHECKBATSTATUS

				SNZ   F_BAT1ON
				JMP   L_DISC_BAT1_REMOVE
				MOV   A,0FDH
				ANDM  A,PC
				SZ    F_OLDBAT1
				JMP   L_BAT2DISCHARGING
				SZ    F_DISCHARGEOK1
				JMP   L_BAT1DISCHARGINGOK
				MOV   A,10H                            ;;SET PA.4 HIGH LEVEL, BATTERY 1 DISCHARGING
				ORM   A,PA
				JMP   L_BAT2DISCHARGING
		L_DISC_BAT1_REMOVE:
				MOV   A,02H
				ORM   A,PC                             ;;SET PC.1, IF THERE IS NO BATTERY 1 IN THE PACK
 				JMP   L_BAT2DISCHARGING
		L_BAT1DISCHARGINGOK:
				MOV   A,0EFH
				ANDM  A,PA
;;-----------------------------------------------------;;BATTERY 2 DISCHARGING
		L_BAT2DISCHARGING:                             ;;CHECK BATTERY 2 STATUS
				MOV   A,29H     
				MOV   ADCR,A               		
				MOV   A,0DFH
				ANDM  A,PA		            
                CALL  SBR_CHECKBATSTATUS

				SNZ   F_BAT2ON
				JMP   L_DISC_BAT2_REMOVE
				MOV   A,0FBH
				ANDM  A,PC
				SZ    F_OLDBAT2
				JMP   L_BAT3DISCHARGING
				SZ    F_DISCHARGEOK2
				JMP   L_BAT2DISCHARGEOK
				MOV   A,20H                            ;;SET PA.5 HIGH LEVEL,BATTERY 2 DISCHARGING
				ORM   A,PA
				JMP   L_BAT3DISCHARGING
		L_DISC_BAT2_REMOVE:
				MOV   A,04H
				ORM   A,PC                             ;;SET PC.2 HIGH LEVEL, IF THERE IS NO BATTERY 2 IN HTE PACK
				JMP   L_BAT3DISCHARGING
		L_BAT2DISCHARGEOK:
				MOV   A,0DFH
				ANDM  A,PA
;;-----------------------------------------------------;;BATTERY 3 DISCHARGING
		L_BAT3DISCHARGING:                             ;;CHECK BATTERY 3 STATUS
				MOV   A,2AH      
				MOV   ADCR,A             		
				MOV   A,0BFH
				ANDM  A,PA		                                  
                CALL  SBR_CHECKBATSTATUS

				SNZ   F_BAT3ON
				JMP   L_DISC_BAT3_REMOVE
				MOV   A,0F7H
				ANDM  A,PC
				SZ    F_OLDBAT3
				JMP   L_BAT4DISCHARGING
				SZ    F_DISCHARGEOK3
				JMP   L_BAT3DISCHARGINGOK
				MOV   A,40H                            ;;SET PA.6 HIGH LEVEL,BATTERY 3 DISCHARGING
				ORM   A,PA
				JMP   L_BAT4DISCHARGING
		L_DISC_BAT3_REMOVE:
				MOV   A,08H
				ORM   A,PC                             ;;SET PC.3 HIGH LEVEL, IF THERE IS NO BATTERY 3 IN THE PACK
				JMP   L_BAT4DISCHARGING
		L_BAT3DISCHARGINGOK:
				MOV   A,0BFH
				ANDM  A,PA
;;-----------------------------------------------------;;BATTERY 4 DISCHARGING
		L_BAT4DISCHARGING:                             ;;CHECK BATTERY 4 STATUS
				MOV   A,2BH     
				MOV   ADCR,A               	
				MOV   A,07FH
				ANDM  A,PA			                				                                 
                CALL  SBR_CHECKBATSTATUS
				SNZ   F_BAT4ON
				JMP   L_DISC_BAT4_REMOVE
				MOV   A,0EFH
				ANDM  A,PC
				SZ    F_OLDBAT4
				JMP   L_CHECK_DISC_BATSTATUS
				SZ    F_DISCHARGEOK4
				JMP   L_BAT4DISCHARGEOK
				MOV   A,80H                            ;;SET PA.7 HIGH LEVEL, BATTERY 4 DISCHARGING
				ORM   A,PA
				JMP   L_CHECK_DISC_BATSTATUS
		L_DISC_BAT4_REMOVE:
				MOV   A,10H
				ORM   A,PC                             ;;SET PC.5 HIGH LEVEL, IF THERE IS NO BATTERY 4 IN THE PACK
				JMP   L_CHECK_DISC_BATSTATUS
		L_BAT4DISCHARGEOK:
				MOV   A,7FH
				ANDM   A,PA 
				JMP   L_CHECK_DISC_BATSTATUS      
		L_CHECK_DISC_BATSTATUS:
				MOV   A,R_FLAG
				AND   A,0FH
				SZ    Z
				JMP   L_DISC_BATS_REMOVED              ;;IF THERE IS NOT BATTERIES IN THE PACK,THEN JMP TO MLP_MAIN
                MOV   R_TEMP3,A                        ;;JUDGE BATTERIES DISCHARGING FINISHED OR NOT
				MOV   A,R_FLAG                         ;;IF THE R_FLAG HIGH NIBBLE EQU LOW NIBBLE THAT INDICATED DISCHARGING FINISHED
				AND   A,0F0H
				SWAP  ACC
				XOR   A,R_TEMP3             
				SZ    Z
				JMP   L_DISCHARGINGEFINISHED
 				JMP   MLP_DISCHARGING
		L_DISC_BATS_REMOVED:
				MOV   A,1FH
				ORM   A,PC
				JMP   MLP_MAIN 

		L_DISCHARGINGEFINISHED:
				MOV   A,0FH
				ANDM  A,PA
				MOV   A,01H
				ORM   A,PC
				JMP   L_CHARGING
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#INCLUDE   SUBROUTINE.ASM

⌨️ 快捷键说明

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