📄 maincharger.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 + -