📄 jinjun.asm
字号:
mov A, v28h
sbc A, adcVtempH
bts0 FC
jmp badBat ;<4.5v noBat;battery ok
batokcheck:
mov A, v28l ;>3.7v(3.6vbat)
sub A, adcVtempL
mov A, v28h
sbc A, adcVtempH
bts1 FC
jmp Chargstop1 ;>3.7v battery ok
call delay50ms
call AdcPro
mov A, v28l ;>3.7v(3.6vbat)
sub A, adcVtempL
mov A, v28h
sbc A, adcVtempH
bts1 FC
jmp Chargstop1 ;>3.7v
mov a, #30 ;<3.7v,over the max timer?
sub a, timeMtemp
mov a, #5
sbc a, timeHtemp
bts0 FC
jmp ChargFast ;no,chargfast continue
chargstop1:
b0bset FWDRST ;Clear watchdog timer
bts1 flag1s
jmp ChargFaStopWait2s
mov A, v28l ;>3.7v?(3.6vbat)
sub A, adcVtempL
mov A, v28h
sbc A, adcVtempH
bts0 FC
jmp badbat ;<3.7v,badbat
ChargSlow: ;>3.7v 补偿充电
bclr red
bset green ;send charge ok signel
bset flagfinish
mov A, adcVtempL ;save the voltage V1
mov VolTempL, A
mov A, adcVtempH
mov VolTempH, A
WaitNext1s:
ChargSlowWait1s:
b0bset FWDRST ;Clear watchdog timer
;bts1 flag10ms
;jmp stopnoBatyn
;bclr flag10ms
call AdcTemPro
mov A, tHighL ;>high temperature(3.6vbat)?
sub A, adcTtempL
mov A, tHighH
sbc A, adcTtempH
bts0 FC
jmp stopovtyn
mov A, tLowL ;<low temperature(7.2vbat)?
sub A, adcTtempL
mov A, tLowH
sbc A, adcTtempH
bts1 FC
jmp stopovtyn
clr countovt
jmp stopnoBatyn
stopovtyn:
mov a, countovt
add a, #1
mov countovt, a
sub a, #5
bts0 fc
jmp overtemp
stopnoBatyn:
call AdcPro
mov a, vnoBatl ;noBat?
sub a, adcVtempL
mov a, vnoBath
sbc a, adcVtempH
bts1 fc
jmp vbatoveryn ;no
call delay50ms
call AdcPro
mov a, vnoBatl ;noBat?
sub a, adcVtempL
mov a, vnoBath
sbc a, adcVtempH
bts0 fc
jmp noBat ;yes
vbatoveryn:
mov A, v43l ;>4.3v?(7.2vbat)
sub A, adcVtempL
mov A, v43h
sbc A, adcVtempH
bts0 FC
jmp stopshortyn ;<4.3v,ok
call delay50ms
call AdcPro
mov a, vnoBatl ;noBat?
sub a, adcVtempL
mov a, vnoBath
sbc a, adcVtempH
bts1 fc
jmp noBat ;yes
mov A, v43l ;>8.7v?(7.2vbat)
sub A, adcVtempL
mov A, v43h
sbc A, adcVtempH
bts1 FC
jmp ovp ;>8.7v,ovp
stopshortyn:
;mov a, vshortl ;short?
;sub a, adcVtempL
;mov a, vshorth
;sbc a, adcVtempH
;bts1 fc
;jmp volt01v ;no
;call delay50ms
;call AdcPro
;mov a, vshortl
;sub a, adcVtempL
;mov a, vshorth
;sbc a, adcVtempH
;bts0 fc
;jmp short ;short
Volt01v:
mov a, v01L
add a, adcVtempL
mov temp2, a
mov a, v01H
adc a, adcVtempH
mov temp1, a
mov a, temp2
sub a, volTempL
mov a, temp1
sbc a, volTempH
bts0 fc
jmp WaitNext1s ;>8.0v coutinue wait 1s
ChargLow1s:
call Delay50ms
call AdcPro
mov a, v01L
add a, adcVtempL
mov temp2, a
mov a, v01H
adc a, adcVtempH
mov temp1, a
mov a, temp2
sub a, volTempL
mov a, temp1
sbc a, volTempH
bts0 fc
jmp WaitNext1s ;>8.0v coutinue wait 1s
jmp main
;-------------------------
;short bad bat no bat
;-------------------------
BadBat:
bset FlagBadBat
jmp ChargError ;bad cell, error
Short:
bset FlagShort
jmp ChargError ;short, error
noBat:
bset FlagnoBat
jmp ChargError ;no cell, error
ovp:
bset flagovp
jmp ChargError
sysError:
bset flagSysErr
jmp ChargError
;-------------------------------------------------------
; over Temp range
;-------------------------------------------------------
OverTemp:
bset FlagOverTemp
;jmp ChargError ;temp over, error
;-------------------------------------------------------------------
; errormode
;-------------------------------------------------------------------
ChargError:
dint
bset rapid
bclr recover
clr timestemp
eint
bclr green
bclr red
clr countovt
clr countbadbat
clr cntnoBat
clr countshort
clr countOvp
ChargErrorWait10s:
bts1 Flag10ms
jmp chargerrorto10s
bclr Flag10ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; temprature over error process
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ChargErrorOverTemp:
bts1 Flagovertemp
jmp ChargErrorOvp
bclr green
bclr red
call AdcTemPro
mov A, tHighl ;>48c(3.6vbat)?
sub A, adcTtempL
mov A, tHighh
sbc A, adcTtempH
bts0 FC
jmp errorovtto10s
mov A, tLowl ;<-3c(3.6vbat)?
sub A, adcTtempL
mov A, tLowh
sbc A, adcTtempH
bts1 FC
jmp errorovtto10s
mov a, countovt
add a, #1
mov countovt, a
sub a, #5
bts1 fc
jmp chargerrorto10s
clr countovt
jmp ChargErrorToReset;Main1;
errorovtto10s:
clr countovt
jmp chargerrorto10s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; voltage over error process
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ChargErrorOvp:
bts1 flagOvp
jmp ChargErrorShort
bclr green
bclr red
call AdcPro
mov A, vnoBatl ;take away the bad bat>4.5v
sub A, adcVtempL
mov A, vnoBath
sbc A, adcVtempH
bts0 FC
jmp ErrorOvpto10s
mov a, countbadbat
add a, #1
mov countbadbat, a
sub a, #5
bts1 fc
jmp chargerrorto10s
bclr flagOvp
bset flagnoBat
ErrorOvpto10s:
clr countbadbat
jmp ChargErrorto10s
;--------------------
;; short error
;--------------------
ChargErrorShort:
;mov a, time10ms ;flash orange,
;sub a, #50 ;for indicate short,badbat,open,
;bts0 fc
;jmp $+4
;bclr green
;bclr red
;jmp $+3
;bset green
;bset red
bts1 FlagShort
jmp ChargErrorBadBat
call AdcPro
mov A, vshortl ;short?
sub A, adcVtempL
mov A, vshorth
sbc A, adcVtempH
bts0 FC
jmp errorshortto10s ;short
mov a, countshort
add a, #1
mov countshort, a
sub a, #5
bts1 fc
jmp chargerrorto10s
ChargErrorTobadbat:
; bset FlagBadBat
bclr FlagShort
jmp chargErrortoreset
errorshortto10s:
clr countshort
jmp chargerrorto10s
;---------------
;;bad bat error
;---------------
ChargErrorBadBat: ;flash orange
bts1 FlagBadBat ;for indicate badbat
jmp ChargErrornoBat
call AdcPro
mov A, vnoBatl ;take away the bad bat>4.5v
sub A, adcVtempL
mov A, vnoBath
sbc A, adcVtempH
bts0 FC
jmp Errorbadbatto10s
mov a, countbadbat
add a, #1
mov countbadbat, a
sub a, #5
bts1 fc
jmp chargerrorto10s
bclr flagbadbat
bset flagnoBat
Errorbadbatto10s:
clr countbadbat
jmp ChargErrorto10s
;---------------
;;no bat error
;---------------
ChargErrornoBat:
bts1 FlagnoBat
jmp ChargErroradc
checknoBat:
call AdcPro ;noBat?
mov A, vnoBatl
sub A, adcVtempL
mov A, vnoBath
sbc A, adcVtempH
bts0 FC
jmp errornoBatto10s ;yes,noBat
mov a, cntnoBat
add a, #1
mov cntnoBat, a
sub a, #5
bts1 fc
jmp chargerrorto10s
clr cntnoBat
jmp ChargErrorToReset;Main1;
errornoBatto10s:
clr cntnoBat
jmp chargerrorto10s
;----------------------------------
;
;------------------------------------
ChargErroradc:
jmp chargerrorto10s
ChargErrorto10s:
b0bset FWDRST ;Clear watchdog timer
jmp ChargErrorWait10s
ChargErrorToReset:
clr sysflagerror
call Delay50ms
jmp main
;-------------------------------------------------------------------------------
; adc change proc
;-------------------------------------------------------------------------------
adcPro:
;clr adcItempH
;clr adcItempL
clr adcVtempH
clr adcVtempL
clr adcTempH
clr adcTempL
clr frontPoint
clr y
AdcVpro: ;adc v process
b0mov R, #8 ;8 time
AdcVpro1:
clc
rlcm frontPoint
mov a, frontPoint
clc
rrcm frontPoint
b0mov z, #buffer1$l
add z, a
mov a, #00001011b
mov p4con, a
mov a, admVtemp
mov adm, a
call AdcChanger
mov A, temp2
mov @YZ, A
incms z
nop
mov A, temp1
mov @YZ, A
clc
rlcm frontPoint
mov a, frontPoint
clc
rrcm frontPoint
b0mov z, #buffer2$l
add z, a
mov a, #00000111b
mov p4con, a
mov A, admItemp
mov adm, A
call AdcChanger
mov A, temp2
mov @YZ, A
incms z
nop
mov A, temp1
mov @YZ, A
incms frontPoint
nop
decms R
jmp AdcVpro1
AdcVproEnd:
mov a, #buffer1$l
mov frontPoint, a
b0mov r, #8
AdcVproEnd1:
call taxis
adcVDataAdd:
b0mov z, #buffer1$l
mov a, #4
add z, a
b0mov r, #4
adcVDataAdd1:
mov a, @YZ
add adcVtempL, a
incms z
nop
mov a, @YZ
adc adcVtempH, a
incms z
nop
decms r
jmp adcVDataAdd1
clc ;;div 2
rrcm adcVtempH
rrcm adcVtempL
clc ;div 2
rrcm adcVtempH
rrcm adcVtempL
bts1 fc
jmp AdcIpro
AdcVadjust1:
incms adcVtempL
jmp AdcIpro
incms adcVtempH
jmp AdcIpro
jmp AdcErr
AdcIpro: ;adc I process
mov a, #buffer2$l
mov frontPoint, a
b0mov r, #8
call taxis
adcDataAdd:
b0mov z, #buffer2$l
mov a, #4
add z, a
b0mov r, #4
adcDataAdd1:
mov a, @YZ
add adctempL, a
incms z
nop
mov a, @YZ
adc adctempH, a
incms z
nop
decms r
jmp adcDataAdd1
AdcIproEnd:
clc ;;div 4
rrcm adctempH
rrcm adctempL
clc
rrcm adctempH
rrcm adctempL
bts1 fc
jmp AdcProEnd
AdcIadjust2:
incms adctempL
jmp AdcProEnd
incms adctempH
nop
AdcProEnd:
mov A, adctempL ;get the VI - V+
sub a, adcVtempL
mov A, adctempH
sbc a, adcVtempH
bts1 FC ;v+>vI ,error adc, retry
jmp AdcProEnd1
AdcProEnd3:
mov A, adctempL ;get the VI - V+
sub a, adcVtempL
mov adcItempL, a
mov A, adctempH
sbc a, adcVtempH
mov adcItempH, a
bclr flagAdcErr
AdcProEnd2:
clr cntAdcErr
ret
AdcProEnd1:
mov a, #4
add adctempL, a
mov a, #0
adc adctempH, a
mov A, adctempL ;get the VI- V+
sub a, adcVtempL
mov A, adctempH
sbc a, adcVtempH
bts1 fc ;Ibat>vbat?
jmp AdcProEnd4
DEBUG: mov a, adcVtempL
mov adctempL, a
mov a, adcVtempH
mov adctempH, a
jmp adcProEnd3
AdcProEnd4:
AdcErr:
mov a, adcTempL
mov adcVtempL, a
mov a, adcTempH
mov adcVtempH, a
jmp AdcProEnd3;DEBUG
; bset flagAdcErr
; jmp AdcProEnd2
;-----------------------------------------
;adc change
;-------------------------------------------------------
AdcChanger:
bset fwdrst
b0bset FADS
Chang:
bts1 FEOC
jmp Chang
EndOfChang:
clr adm
mov A, ADR
and A, #00001111b
mov Temp2, A
swap ADB
and A, #00001111b
mov Temp1, A
swap ADB
and A, #11110000b
add Temp2, A
mov a, #67
mov countwait, a
changewait1:
decms countwait
jmp changewait1
ret
;----------------------------------;
; temp adc change
;-----------------------------------
AdcTemPro:
AdcTem:
clr adcTtempH
clr adcTtempL
b0mov R, #4 ;4 time
AdcTem4:
mov A, admTtemp ;channel0, temp
mov adm, A
call AdcChanger
mov A, temp2
add adcTtempL, A
mov A, temp1
adc adcTtempH, A
decms R
jmp AdcTem4
AdcTemFinish:
clc ;;div 4
rrcm adcTtempH
rrcm adcTtempL
clc
rrcm adcTtempH
rrcm adcTtempL
b0bts0 FC
jmp AdcTemAdjust2
jmp AdcTemEnd
AdcTemAdjust2:
incms adcTtempL
jmp AdcTemEnd
incms adcTtempH
nop
AdcTemEnd:
ret
;------------------------------------------------------
;delay 52ms
;-=----------------------------------------------------
Delay50ms:
mov a, #5
mov countdelay, a
delay50ms1:
dint ;delay 100ms
bclr Flag10ms ;
eint ;
Delay50ms2: ;
b0bset FWDRST ;Clear watchdog timer
bts1 Flag10ms ;
jmp Delay50ms2
decms countdelay
jmp delay50ms1
Delay50msEnd:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; timePro
;;;;;;;;;;;;;;;;;
timerPro:
timeBatSec:
mov a, timestemp
add a, #1
mov timestemp, a
sub a, #60
bts1 fc
jmp timeProEnd
timeBatMin:
clr timestemp
mov a, timeMtemp
add a, #1
mov timeMtemp, a
sub a, #60
bts1 fc
jmp timeProEnd
timeBatHour:
clr timeMtemp
mov a, timeHtemp
add a, #1
mov timeHtemp, a
sub a, #24
bts1 fc
jmp timeProEnd
clr timeHtemp
timeProEnd:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
taxis:
mov a, frontPoint
mov z, a
bclr flagBufChange
mov a, r
sub a, #1
mov temp, a
getData:
clr y
mov a, @YZ
mov temp2, a
incms z
nop
mov a, @YZ
mov temp1, a
incms z
nop
mov a, @YZ
mov temp4, a
incms z
nop
mov a, @YZ
mov temp3, a
decms z
nop
compareData:
mov a, temp4 ;frontdata<backdata?
sub a, temp2
mov a, temp3
sbc a, temp1
bts0 fc
jmp turnOkYn ;no,don`t change place
changePlace: ;yes,change place
bset flagBufChange
mov a, z
sub a, #2
mov z, a
mov a, temp4
mov @YZ, a
incms z
nop
mov a, temp3
mov @YZ, a
incms z
nop
mov a, temp2
mov @YZ, a
incms z
nop
mov a, temp1
mov @YZ, a
mov a, z
sub a, #1
mov z, a
turnOkYn:
decms temp
jmp getData
taxisOkYn:
decms r
jmp $+2
jmp taxisEnd
bts1 flagBufChange
jmp taxisEnd
mov a, r
mov temp, a
bclr flagBufChange
mov a, frontPoint
mov z, a
jmp getData
taxisEnd:
ret
;;;;;;;;;;;;;;;;;;;;;
userEnd:
; dw 2cc8h
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -