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

📄 jinjun.asm

📁 SONIX汇编语言
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -