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

📄 lcdcharge.asm

📁 sonix 单片机编写的充电程序。希望对编充电程序有所帮助。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	B0BTS1		FC		;
	JMP		ErrorSet	;
	RET				;
IsADC2Temp1:				;
	B0MOV		A,TEMPH		;
	B0MOV		TempADold,A	;
	RET				;
;===================================================================	
TakeBattery:				;
	B0BTS1		ChargeF		;In charge status
	RET				;
	INCMS		CntTestBT	;
	B0BTS1		CntTestBT.7	;
	RET				;
	B0BTS1		CntTestBT.4	;100
	JMP		TakeBT00	;PWM disable
	MOV		A,#00		;
	B0MOV		CntTestBT,A	;	
	JMP		PWMenable	;
TakeBT00:
	MOV		A,#03		;
	AND		A,CntTestBT	;CntTestBT.1.0=0
	B0BTS1		FZ		;
	JMP		TakeBT01	;
	MOV		A,#4		;
	B0MOV		WhichAD,A	;
	JMP		PWMDisable	;Close PWM
TakeBT01:	
	MOV		A,#50H		;
	SUB		A,A0Value	;A0Value<50H
	B0BTS1		FC		;
	RET
	NOP				;
ErrorSet:
	
	B0BTS0		GoodF
	RET
	CALL		PWMDisable	;
	B0BCLR		P1F		;
	B0BCLR		P2F		;
	B0BCLR		P3F
	B0BCLR		P4F		;
	B0BCLR		ChargeF		;
	B0BCLR		BatteryF	;
	B0BSET		ErrorF		;User take out battery in charge proess 
	CALL		DispSum1
	CALL		LCDdisplay	
	MOV		A,#05H		;60ms  NG
	B0MOV		BuzTime,A	;
	MOV		A,#06H		;
	B0MOV		NotBuzTime,A	;
	MOV		A,#06H		;60ms NH
	B0MOV		BuzTime,A	;
	MOV		A,#0CH		;6 times sound
	B0MOV		BuzCnt,A	;
	B0BSET		BuzzerF		;
	RET				;
;------------------------------------------------------------------
Scankey:B0MOV		A,P0		;
	AND		A,#03H		;
	XOR		A,#03H		;
	B0BTS0		FZ		;
	JMP		Nokey		;
	B0BTS0		PressF		;Hold press one key
	RET				;
	B0BSET		PressF		;
	B0BTS1		SW1		;
	JMP		SW1Press	;
	B0BTS1		SW2		;Press SW2
	JMP		SW2Press	;
	RET				;
Nokey:	B0BCLR		PressF		;
	RET				;

;***************************************************************************
;Select charge or discharge battery	;
SW1Press:
	B0BTS1		BatteryF	;If not put on battery ,SW1 select NH or NG
	RET				;
EnOrdis:
	CALL		SelectA		;
	MOV		A,#20		;
	B0MOV		Second60,A	;60mHA
	CLR		Timex1		;
	B0BCLR		Full1minF	;
	MOV		A,#80H		;
	XOR		Flag,A		;
	B0BTS1		ChargeF		;
	JMP		ToDisChar	;
EnCharge:
	MOV		A,#0FCH		;
	AND		LoopWhich,A	;
	CLR		ADindex		;
	MOV		A,#20		;
	B0MOV		Wait500ms,A	;
	CLR		CntTime0	;
	CLR		CntTime1	;
	MOV		A,#22		;
	B0MOV		CntTime2,A	;
	MOV		A,#99		;
	B0MOV		PWMflag,A	;
	CALL		PWMenable	;
	B0BSET		ChargeF		;
	CALL		DispSum1	;
	CALL		LCDdisplay	;
	MOV		A,#0		;
	B0MOV		P1,A		;
InitSound:
	MOV		A,#0AH		;100ms NH
	B0MOV		BuzTime,A	;
	MOV		A,#06H		;
	B0MOV		NotBuzTime,A	;
	MOV		A,#06H		;60ms NH
	B0MOV		BuzTime0,A	;
	MOV		A,#07H		;
	B0MOV		BuzCnt,A	;
	B0BSET		BuzzerF		;
	RET				;
ToDisChar:
	MOV		A,#00
	B0MOV		Cntmh00,A
	B0MOV		Cntmh01,A
	B0MOV		Cntmh10,A
	B0MOV		Cntmh11,A
	B0MOV		Cntmh20,A
	B0MOV		Cntmh21,A
	B0MOV		Cntmh30,A
	B0MOV		Cntmh31,A
	B0MOV		A1VAlue,A
	B0MOV		A2VAlue,A
	B0MOV		A3Value,A
	B0MOV		A4Value,A	;
	B0MOV		Sum3,A
	B0MOV		Sum4,A
	B0MOV		Sum5,A
	B0MOV		Sum6,A
	MOV		A,#0FH		;
	B0MOV		P1,A
	MOV		A,#0FH		;
	B0MOV		P1,A
	B0BCLR		P1F
	B0BCLR		P2F
	B0BCLR		P3F
	B0BCLR		P4F
	CALL		PWMDisable	;
	B0BCLR		ChargeF		;
	B0BCLR		BatteryF	;
	B0BCLR		DischF		;
	CALL		DispSum1
	CALL		LCDdisplay
ToDischar1:
	MOV		A,#6		;
	B0MOV		BuzTime,A	;
	MOV		A,#01		;60 ms one times sound
	B0MOV		BuzCnt,A	;Count buzzer sound time
	B0BSET		BuzzerF		;
	RET				;
;------------------------------------------------------------------
SelectA:
	MOV		A,P5		;
	AND		A,#07H		;
	MOV		TMP,A		;
	MOV		A,#03		;011
	XOR		A,TMP		;
	B0BTS0		FZ		;
	JMP		Select2		;
	MOV		A,#05		;101
	XOR		A,TMP		;
	B0BTS0		FZ		;
	JMP		Select1		;
Select0:
	MOV		A,#08H		;150mA
	B0BTS1		LOWF		;
	MOV		A,#0EH
	MOV		Avalue,A	;
	MOV		A,#2		;
	B0MOV		mHValue,A	;
	RET
Select1:MOV		A,#0BH		;250mA
	B0BTS1		LOWF		;
	MOV		A,#19H
	MOV		Avalue,A	;
	MOV		A,#4		;
	B0MOV		mHValue,A	;
	RET				;
Select2:MOV		A,#19H		;500mA
	B0BTS1		LOWF		;
	MOV		A,#31H
	MOV		Avalue,A	;
	MOV		A,#8		;
	B0MOV		mHValue,A	;
	RET				;
;======================================================================
SW2Press:				
;	B0BTS1		BatteryF	;
;	RET				;
	B0BTS0		ChargeF		;
	RET				;
;	CALL		SelectA		;
	MOV		A,#4H		;
	XOR		Flag1,A		;
	B0MOV		A,mHValue	;
	B0BTS1		LOWF		;
	ADD		mHValue,A	;mAH
	CALL		DispSum1
	CALL		LCDdisplay
	MOV		A,#6		;
	B0MOV		BuzTime,A	;
	MOV		A,#01		;60 ms one times sound
	B0MOV		BuzCnt,A	;Count buzzer sound time
	B0BSET		BuzzerF		;
	RET				;
;============================================================================
ForSound:
	B0BTS1		BuzzerF		;
	RET				;
	B0BTS0		BuzCnt.0	;BuzCnt.0=1 open BuzCnt.0=0 close
	B0BSET		Buz		;Open buzzer
	B0BTS1		BuzCnt.0	;
	B0BCLR		Buz		;Close buzzer
	DECMS 		BuzTime		;Buzzer sound time
	RET				;
	DECMS		BuzCnt		;
	JMP		BuzTload	;Buzzer time reload				;
	B0BCLR		BuzzerF		;
	B0BCLR		Buz		;Close Buz
	B0BTS0		ErrorF		;
	JMP		ErrorSet	;
	RET				;
BuzTload:B0MOV		A,BuzTime0	;
	B0BTS1		BuzCnt.0	;
	B0MOV		A,NotBuzTime	;
	B0MOV		BuzTime,A	;
	B0BTS0		BuzCnt.0	;BuzCnt.0=1 open BuzCnt.0=0 close
	B0BSET		Buz		;Open buzzer
	B0BTS1		BuzCnt.0	;
	B0BCLR		Buz		;Close buzzer
	RET				;
;============================================================================
;Check user put  battery socket?	;
ChkBattery:				;
	B0BTS0		ErrorF		;
	RET				;
	B0BTS1		Is5sF		;
	RET				;
	MOV		A,#25H		;
	SUB		A,A0Value	;
	B0BTS0		FC		;
	JMP		NotPutonB	;
	B0BTS0		ChargeF		;
	RET				;
	B0BSET		BatteryF	;
	CLR		Timex		;
	CALL		DispSum1
	CALL		LCDdisplay
	RET				;
NotPutonB:
	B0BTS0		ChargeF		;
	RET				;
	INCMS		Timex
	B0BTS1		Timex.3
	RET
	B0BCLR		BatteryF	;
	CALL		DispSum1
	CALL		LCDdisplay
	RET				;
;============================================================================
;Check battery full??			;
YesBfull:
	B0BTS1		ChargeF
	RET
	B0MOV		A,A3Value
	B0BTS0		FZ
	JMP		YesB01
	B0BTS1		P4FullF
	RET	
YesB01:	B0MOV		A,A2Value
	B0BTS0		FZ
	JMP		YesB02
	B0BTS1		P3FullF
	RET
YesB02:	B0MOV		A,A2Value
	B0BTS0		FZ
	JMP		YesB03
	B0BTS1		P2FullF
	RET
YesB03:	B0BTS1		P1FullF
	RET
	MOV		A,#1
	B0MOV		A4Value,A
	CLR		CntTestBT	;
	CALL		PWMdisable	;
	MOV		A,#100		;
	B0MOV		PWMFlag,A	;
	CALL		PWMenable	;
	B0BSET		GoodF		;
	;B0BCLR		ChargeF		;
YesBfull1:				;
	MOV		A,#10H		;100ms NH
	B0MOV		BuzTime,A	;
	MOV		A,#6H		;
	B0MOV		NotBuzTime,A	;
	MOV		A,#06H		;60ms NH
	B0MOV		BuzTime0,A	;
	MOV		A,#08H		;
	B0MOV		BuzCnt,A	;
	B0BSET		BuzzerF		;	
	RET				;
;============================================================================
;============================================================================
PWMenable:
	B0BSET		PWMF		;
	B0BCLR		FTC1IEN		;
	B0BCLR		FTC1ENB		;
	MOV		A,#74H		;
	B0MOV		TC1M,A		;
	MOV		A,#256-75	;25*3 150instruct
	B0MOV		TC1C,A		;
	B0MOV		TC1R,A		;	
	B0BSET		FGIE		;
	B0BSET		FTC1IEN		;
	B0BCLR		FTC1IRQ		;
	B0BSET		FTC1ENB		;
	B0BSET		FALOAD1		;
	RET				;
;-----------------------------------------------------------------------------
PWMDisable:
	B0BCLR		PWMF		;
	B0BCLR		FGIE		;
	B0BCLR		PWM1		;
	B0BCLR		FTC1IEN		;
	B0BCLR		FTC1ENB		;
	RET
;============================================================================
Wait1Minute:
	B0BTS1		Full1minF	;
	RET				;
	JMP		YesBfull	;	
;============================================================================	
;charge battery 8 hours
;============================================================================
ToSetAD0to3:
	B0BTS0		ADCoverF	;
	RET				;
	B0BTS0		PWMF		;
	RET				;
	DECMS		WhichAD		;
	NOP
	MOV		A,#3		;
	B0BTS0		WhichAD.7	;
	B0MOV		WhichAD,A	;
	B0BSET		ADCoverF	;
	B0BSET		MustADF		;
	RET
SetAD0:	B0BTS0		ADCoverF	;
	RET				;
	B0BTS0		PWMF		;
	RET				;
	MOV		A,#0
	B0MOV		WhichAD,A
	B0BSET		ADCoverF	;
	B0BSET		MustADF		;
	RET
	

;------------------------------------------------------------------		
MustSetAD45:
	B0BTS0		ADCoverF	;
	RET	
	B0BTS1		PWMF		;
	RET
	MOV		A,#5		;
	B0BTS0		AD4orAD5F
	MOV		A,#4
	B0MOV		WhichAD,A	;
	MOV		A,#04H
	XOR		Flag2,A
	B0BSET		MustADF		;
	RET				;
;============================================================================
ClrRam:	clr 		Y		;Select bank 0 
	b0mov		Z,#0x7f		;Set @YZ address from 7fh
ClrRAM10:
	clr 		@YZ		;Clear @YZ content
	decms		Z   		;z = z - 1 , skip next if z=0
	jmp 		ClrRAM10	;
	clr 		@YZ		;Clear address 0x00
	ret				;
;------------------------------------------------------------------
;ANI2,3,4 set convert			;
ADCsetX:
	B0BTS1		MustADF		;
	RET
	B0BCLR		MustADF		;
	MOV		A,#20H		;60
	B0MOV		ADR,A		;
	MOV		A,WhichAD	;
	OR		A,#90H		;
	B0MOV		ADM,A		;Enable ADC AND SET AIN3 input
	B0BSET		FADS		;Start AD convert
	RET				;
;==========================================================================	
LCDinit:
	B0BCLR		FBLANK		;Lcd display normal
	B0BCLR		FP6HSEG		;
	B0BCLR		FP6LSEG		;
	B0BCLR		FP3LCD		;
	MOV		A,#24
	B0MOV		Tmp,A
	MOV		A,#0FH
	B0MOV		Y,A
	MOV		A,#0
	B0MOV		Z,A
LCDinitLp:
	MOV		A,#0EH		;
	B0MOV		@YZ,A		;
	INCMS		Z
	DECMS		Tmp
	JMP		LCDinitLp
	B0BSET		FLENB		;Lcd enable
	MOV		A,#00
	B0MOV		Z,A
	B0MOV		A,@YZ
	B0MOV		Y,#0
	RET
;============================================================================
LCDdisplay:
	MOV		A,#00
	B0MOV		Tmp,A
LpLcd:	MOV		A,#LCD00
	ADD		A,Tmp
	B0MOV		Z,A
	B0MOV		Y,#0
	MOV		A,@YZ
	B0MOV		CntADtmp0,A
	B0MOV		Y,#0FH		;		
	B0MOV		A,Tmp
	B0MOV		Z,A
	B0MOV		A,CntADtmp0
	B0MOV		@YZ,A
	INCMS		Tmp
	MOV		A,#24
	XOR		A,Tmp
	B0BTS1		FZ
	JMP		LpLcd
	B0MOV		Y,#0
	RET
;============================================================================
DispSum1:
	B0MOV		Y,#0
	B0MOV		Z,#LCD00
	MOV		A,#24
	B0MOV		Tmp,A
ClearLcd:
	MOV		A,#00		;
	B0MOV		@YZ,A		;
	INCMS		Z		;Clear lcd all display
	DECMS		Tmp		;
	JMP		ClearLcd	;
	B0MOV		Y,#Sum09Seg$M	;
	B0MOV		Z,#Sum09Seg$L	;
	B0MOV		A,Sum2		;From sum 1
;	B0BTS0		FZ
;	JMP		DispSum2
	B0ADD		Z,A
	MOVC
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;1A
	B0BSET		LCD_1A
	B0BTS0		Tmp.1		;1B
	B0BSET		LCD_1B
	B0BTS0		Tmp.2		;1C
	B0BSET		LCD_1C		
	B0BTS0		Tmp.3		;1D
	B0BSET		LCD_1D
	B0BTS0		Tmp.4		;1E
	B0BSET		LCD_1E		;
	B0BTS0		Tmp.5		;1F
	B0BSET		LCD_1F		;
	B0BTS0		Tmp.6		;1G
	B0BSET		LCD_1G		;
	B0BTS0		Tmp.7		;1H
;	B0BSET		LCD_1H		;
DispSum2:
	B0MOV		Y,#Sum09Seg$M
	B0MOV		Z,#Sum09Seg$L
	B0MOV		A,Sum1		;From sum 1
	B0BTS0		FZ
	JMP		DispSum3
	B0ADD		Z,A
	MOVC
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;2A
	B0BSET		LCD_2A
	B0BTS0		Tmp.1		;2B
	B0BSET		LCD_2B
	B0BTS0		Tmp.2		;2C
	B0BSET		LCD_2C		
	B0BTS0		Tmp.3		;2D
	B0BSET		LCD_2D
	B0BTS0		Tmp.4		;2E
	B0BSET		LCD_2E
	B0BTS0		Tmp.5		;2F
	B0BSET		LCD_2F		
	B0BTS0		Tmp.6		;2G
	B0BSET		LCD_2G
	B0BTS0		Tmp.7		;2H
;	B0BSET		LCD_2H		
DispSum3:
	B0MOV		Y,#Sum09Seg$M
	B0MOV		Z,#Sum09Seg$L
	B0MOV		A,Sum3		;From sum 1
	B0BTS0		FZ
	JMP		DispSum4
	B0MOV		A,Sum3		;From sum 1
	B0ADD		Z,A
	MOVC
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;3A
	B0BSET		LCD_3A
	B0BTS0		Tmp.1		;3B
	B0BSET		LCD_3B
	B0BTS0		Tmp.2		;3C
	B0BSET		LCD_3C		
	B0BTS0		Tmp.3		;3D
	B0BSET		LCD_3D
	B0BTS0		Tmp.4		;3E
	B0BSET		LCD_3E
	B0BTS0		Tmp.5		;3F
	B0BSET		LCD_3F		
	B0BTS0		Tmp.6		;3G
	B0BSET		LCD_3G
	B0BTS0		Tmp.7		;3H
;	B0BSET		LCD_3H		
DispSum4:
	B0MOV		Y,#Sum09Seg$M
	B0MOV		Z,#Sum09Seg$L
	B0MOV		A,Sum3		;From sum 1
	OR		A,Sum4
	B0BTS0		FZ
	JMP		DispSum5	;
	B0MOV		A,Sum4		;From sum 1
	B0ADD		Z,A		;
	MOVC		
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;4A
	B0BSET		LCD_4A
	B0BTS0		Tmp.1		;4B
	B0BSET		LCD_4B
	B0BTS0		Tmp.2		;4C
	B0BSET		LCD_4C		
	B0BTS0		Tmp.3		;4D
	B0BSET		LCD_4D
	B0BTS0		Tmp.4		;4E
	B0BSET		LCD_4E
	B0BTS0		Tmp.5		;4F
	B0BSET		LCD_4F		
	B0BTS0		Tmp.6		;4G
	B0BSET		LCD_4G
	B0BTS0		Tmp.7		;4H
;	B0BSET		LCD_4H		
DispSum5:
	B0MOV		Y,#Sum09Seg$M
	B0MOV		Z,#Sum09Seg$L
	B0MOV		A,Sum3		;From sum 1
	OR		A,Sum4
	OR		A,Sum5
	B0BTS0		FZ
	JMP		DispSum6
	B0MOV		A,Sum5		;From sum 1
	B0ADD		Z,A
	MOVC
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;5A
	B0BSET		LCD_5A
	B0BTS0		Tmp.1		;5B
	B0BSET		LCD_5B
	B0BTS0		Tmp.2		;5C
	B0BSET		LCD_5C		
	B0BTS0		Tmp.3		;5D
	B0BSET		LCD_5D
	B0BTS0		Tmp.4		;5E
	B0BSET		LCD_5E
	B0BTS0		Tmp.5		;5F
	B0BSET		LCD_5F		
	B0BTS0		Tmp.6		;5G
	B0BSET		LCD_5G
	B0BTS0		Tmp.7		;5H
;	B0BSET		LCD_5H		
DispSum6:
	B0MOV		Y,#Sum09Seg$M
	B0MOV		Z,#Sum09Seg$L
	B0MOV		A,Sum6		;From sum 
	B0ADD		Z,A
	MOVC	
	B0MOV		Tmp,A
	B0BTS0		Tmp.0		;6A
	B0BSET		LCD_6A
	B0BTS0		Tmp.1		;6B
	B0BSET		LCD_6B
	B0BTS0		Tmp.2		;6C
	B0BSET		LCD_6C		
	B0BTS0		Tmp.3		;6D
	B0BSET		LCD_6D
	B0BTS0		Tmp.4		;6E
	B0BSET		LCD_6E
	B0BTS0		Tmp.5		;6F
	B0BSET		LCD_6F		
	B0BTS0		Tmp.6		;6G
	B0BSET		LCD_6G
	B0BTS0		Tmp.7		;6H
	B0MOV		Y,#0
;	B0BSET		LCD_6H		;----
	B0BTS0		AF
	B0BSET		LCD_A
	B0BTS0		VF
	B0BSET		LCD_V
	B0BTS0		MF

⌨️ 快捷键说明

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