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

📄 lcdcharge.asm

📁 sonix 单片机编写的充电程序。希望对编充电程序有所帮助。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;Write	by:		;
;Date	on:2k40928			;
;Function:charge battery		;
;Chip sonix 1808			;
;Crystal=12M Voltage=5V			;
	Chip	sn8p1808
//{{SONIX_CODE_OPTION
	.Code_Option	OSG		Disable
	.Code_Option	High_Clk	12M_X'tal
	.Code_Option	High_Clk/2	Disable
	.Code_Option	Security	Enable
	.Code_Option	LVD		Enable
	.Code_Option	Watch_Dog	Enable
	.Code_Option	LCD		Enable
//}}SONIX_CODE_OPTION

;=========================================================
;Gener 00----7FH is Bank0
;=========================================================
;	Variables Definition
;=========================================================
.DATA
;----------------------------------------------------------------------------------
	ADByte0H	DS	1
	ADByte1H	DS	1
	ADByte2H	DS	1
	ADByte3H	DS	1
	ADByte4H	DS	1
	ADByte5H	DS	1
	ADByte6H	DS	1
	ADByte7H	DS	1
	ADByte8H	DS	1
	ADByte9H	DS	1
	ADByteAH	DS	1
	ADByteBH	DS	1
	ADByteCH	DS	1
	ADByteDH	DS	1
	ADByteEH	DS	1
	ADByteFH	DS	1
	ADindex		DS	1
	TempADold	DS	1		;TempADold
	A0Value		DS	1		;AN0
	A1Value		DS	1		;AN1
	A2Value		DS	1		;AN2
	A3Value		DS	1		;AN3
	A4Value		DS	1		;AN4
	A5Value		DS	1		;
	CntTime0	DS	1		;
	CntTime1	DS	1		;
	CntTime2	DS	1		;charge count time
	WhichAD		DS	1		;
	BuzTime		DS	1		;Time of buzzer (20ms)
	BuzTime0	DS	1		;Open buzzer time
	BuzCnt		DS	1		;Count buzzer times
	NotBuzTime	DS	1		;Close buzzer time
	Flag		DS	1		;
	CntTestBT	DS	1		;
	LoopWhich	DS	1
	ArrayF		EQU	Flag.0		;Discharge completed flag
	DischF		EQU	Flag.1		;Discharge completed flag
	PressF		EQU	Flag.3		;
	NHNGF		EQU	Flag.4		;
	BatteryF	EQU	Flag.5		;10H
	BuzzerF		EQU	Flag.6		;
	ChargeF		EQU	Flag.7		;
	Flag1		DS	1		;
	ErrorF		EQU	Flag1.7		;
	GoodF		EQU	Flag1.6		;
	mF		EQU	Flag1.5		;
	VF		EQU	Flag1.4		;
	AF		EQU	Flag1.3		;
	LOWF		EQU	Flag1.2
	LilonF		EQU	Flag1.1	
	HF		EQU	Flag1.0
	Flag2		DS	1		;
	Full1minF	EQU	Flag2.6		;
	MustADF		EQU	Flag2.5		;
	ADCoverF	EQU	Flag2.4		;
	PWMF		EQU	Flag2.3		;
	AD4orAD5F	EQU	Flag2.2		;
	Flag3		DS	1
	P1F 		EQU	Flag3.0
	P2F 		EQU	Flag3.1
	P3F 		EQU	Flag3.2
	P4F		EQU	Flag3.3
	Flag4		DS	1
	P1FullF		EQU	Flag4.0
	P2FullF		EQU	Flag4.1
	P3FullF		EQU	Flag4.2
	P4FullF		EQU	Flag4.3
	Is5sF		EQU	Flag4.4
	Cntmh00		DS	1
	Cntmh01		DS	1
	Cntmh10		DS	1
	Cntmh11		DS	1
	Cntmh20		DS	1
	Cntmh21		DS	1
	Cntmh30		DS	1	
	Cntmh31		DS	1
	YBUF		DS	1
	Wait5s		DS	1
	Second60	DS	1
	Minute		DS	1
	Hour		DS	1
	mHValue		DS	1
	Wait500ms	DS	1
	PWMFlag		DS	1		;
	CntADtmp0	DS	1		;
	CntADtmp1	DS	1
	Tmp		DS	1		;
	AccBuf		DS	1		;
	TEMPH		DS	1		;
	TEMPL		DS	1		;
	Timex		DS	1		;
	Timex1		DS	1		;
	Avalue		DS	1		;
	AD4Value	DS	1
	SUM1		DS	1
	SUM2		DS	1
	SUM3		DS	1
	SUM4		DS	1
	SUM5		DS	1
	SUM6		DS	1
;---------------------------------------------------	
	LCD00   	DS	1
	LCD01		DS	1
	LCD02		DS	1
	LCD03		DS	1
	LCD04		DS	1
	LCD05		DS	1
	LCD06		DS	1
	LCD07		DS	1
	LCD08		DS	1
	LCD09		DS	1
	LCD10		DS	1		;---------------
	LCD11		DS	1
	LCD12		DS	1
	LCD13		DS	1
	LCD14		DS	1	
	LCD15		DS	1
	LCD16		DS	1
	LCD17		DS	1
	LCD18		DS	1
	LCD19		DS	1
	LCD20		DS	1
	LCD21		DS	1
	LCD22		DS	1
	LCD23		DS	1
	SW1		EQU	P0.1		;Select recharge ,only input mode
	SW2		EQU	P0.0		;Start recharge ,only input mode
	BatterP1	EQU	P1.3		;
	BatterP2	EQU	P1.2		;
	BatterP3	EQU	P1.1		;
	BatterP4	EQU	P1.0		;
	ADI5		EQU	P4.5		;
	ADI4		EQU	P4.4		;
	ADI3		EQU	P4.3		;
	ADI2		EQU	P4.2		;
	ADI1		EQU	P4.1		;
	ADI0		EQU	P4.0		;
	PWM1		EQU	P5.3		;
	BUZ		EQU	P5.4		;
;===========================================================	
;lcd define
	LCD_1E		EQU	LCD23.1
	LCD_1F		EQU	LCD23.2
	LCD_Lilon	EQU	LCD23.3
	LCD_1D		EQU	LCD22.1
	LCD_1G		EQU	LCD22.2
	LCD_1A		EQU	LCD22.3
	LCD_S1		EQU	LCD21.1
	LCD_1C		EQU	LCD21.2
	LCD_1B		EQU	LCD21.3
	
	LCD_4E		EQU	LCD20.1
	LCD_4F		EQU	LCD20.2
	LCD_S8		EQU	LCD20.3
	LCD_4D		EQU	LCD19.1
	LCD_4G		EQU	LCD19.2
	LCD_4A		EQU	LCD19.3
	LCD_S4		EQU	LCD18.1
	LCD_4C		EQU	LCD18.2
	LCD_4B		EQU	LCD18.3
	
	LCD_6E		EQU	LCD17.1
	LCD_6F		EQU	LCD17.2
	LCD_S9		EQU	LCD17.3
	LCD_6D		EQU	LCD16.1 
	LCD_6G		EQU	LCD16.2
	LCD_6A		EQU	LCD16.3
	LCD_S6		EQU	LCD15.1
	LCD_6C		EQU	LCD15.2
	LCD_6B		EQU	LCD15.3

	LCD_S10		EQU	LCD14.1
	LCD_H 		EQU	LCD14.2
	LCD_A 		EQU	LCD14.3
	LCD_OM		EQU	LCD13.1
	LCD_OC		EQU	LCD13.2
	LCD_V 		EQU	LCD13.3
	LCD_DIS		EQU	LCD12.1
	LCD_LOW		EQU	LCD12.2
	LCD_HiGH	EQU	LCD12.3

	LCD_Time	EQU	LCD11.1
	LCD_P4		EQU	LCD11.2
	LCD_Bat		EQU	LCD11.2
	LCD_Berror	EQU	LCD11.3
	LCD_P1		EQU	LCD10.1
	LCD_P3		EQU	LCD10.2
	LCD_P2		EQU	LCD10.3
	LCD_M		EQU	LCD09.1
	LCD_Pb  	EQU	LCD09.2
	LCD_LiMno	EQU	LCD09.3
	
	LCD_S5		EQU	LCD08.1
	LCD_5C  	EQU	LCD08.2
	LCD_5B  	EQU	LCD08.3
	LCD_5D		EQU	LCD07.1
	LCD_5G  	EQU	LCD07.2
	LCD_5A  	EQU	LCD07.3
	LCD_5E		EQU	LCD06.1
	LCD_5F		EQU	LCD06.2
	LCD_MiMH	EQU	LCD06.3
	LCD_S3		EQU	LCD05.1
	LCD_3C		EQU	LCD05.2			
	LCD_3B		EQU	LCD05.3
	LCD_3D		EQU	LCD04.1
	LCD_3G		EQU	LCD04.2			
	LCD_3A		EQU	LCD04.3
	LCD_3E		EQU	LCD03.1
	LCD_3F		EQU	LCD03.2			
	LCD_NiCD	EQU	LCD03.3
	LCD_23		EQU	LCD02.1
	LCD_2C		EQU	LCD02.2			
	LCD_2B		EQU	LCD02.3
	LCD_2D		EQU	LCD01.1
	LCD_2G		EQU	LCD01.2			
	LCD_2A		EQU	LCD01.3
	LCD_2E		EQU	LCD00.1
	LCD_2F		EQU	LCD00.2			
	LCD_S7   	EQU	LCD00.3
;==========================================================
.List	
;==========================================================
.code
	ORG	0x00			;
        JMP	PowerOn			;
;==============================================================
;Interrupt vector
	ORG	08H			;
Interrupt:
;==============================================================
;	Poweron reset
;	Main program
;==============================================================
;	ORG	10H			;
Interrupt0:
	B0BSET		FWDRST		;Clear the watchdogtimer's counter
	b0xch	  	A,AccBuf	;4 B0xch instruction do not change C,Z flag
	push				;5   
	B0MOV		A,PWMFlag	;6    
	B0BSET		PWM1		;7    
 	B0ADD		PCL,A		;8      
	NOP				;0   
	NOP				;1   
	NOP				;2   
	NOP				;3   
	NOP                             ;4   
	NOP                             ;5
	NOP                             ;6   
	NOP                             ;7    
	NOP                             ;8   
	NOP                             ;9   
	NOP				;10  
	NOP				;11  
	NOP				;12  
	NOP                             ;13  
	NOP                             ;14  
	NOP                             ;15  
	NOP                             ;16  
	NOP                             ;17  
	NOP                             ;18
	NOP				;19
	NOP				;20
	NOP				;21
	NOP				;22
	NOP				;23
	NOP				;24
	NOP				;25
	NOP				;26
	NOP				;27
	NOP				;28  
	NOP				;29  
	NOP				;30  
	NOP				;31  
	NOP                             ;32  
	NOP                             ;33
	NOP                             ;34  
	NOP                             ;35   
	NOP                             ;36  
	NOP                             ;37  
	NOP				;38  
	NOP				;39  
	NOP				;40  
	NOP                             ;41  
	NOP                             ;42  
	NOP                             ;43  
	NOP                             ;44  
	NOP                             ;45  
	NOP                             ;46
	NOP				;47
	NOP				;48
	NOP				;49
	NOP				;50
	NOP				;51
	NOP				;52
	NOP				;53
	NOP				;54
	NOP                             ;55
	NOP				;56
	NOP				;57
	NOP				;58
	NOP				;59
	NOP				;60
	NOP				;61
	NOP				;62
	NOP				;63
	NOP				;64
	NOP                             ;65
	NOP				;66
	NOP				;67
	NOP				;68
	NOP				;69
	NOP				;70
	NOP				;71
	NOP				;72
	NOP				;73
	NOP				;74
	NOP                             ;75
	NOP				;76
	NOP				;77
	NOP				;78
	NOP				;79
	NOP				;80
	NOP				;81
	NOP				;82
	NOP				;83
	NOP				;84
	NOP                             ;85
	NOP				;86
	NOP				;87
	NOP				;88
	NOP				;89
	NOP				;90
	NOP				;91
	NOP				;92
	NOP				;93
	NOP				;94
	NOP                             ;95
	NOP				;96
	NOP				;97
	NOP				;98
	NOP				;99
	B0BCLR		PWM1		;100
	pop				;        Remark this line in SN8P1702 32
	b0bclr		FTC1IRQ		;3
	b0xch		A,AccBuf	;1       B0xch instruction do not change C,Z flag
	reti				;4 
;Clear ram form 00 to 7FH		;
;==================================================================	
ADcompleted:
	B0BTS1		FEOC		;
	RET				;
	B0BCLR		ADCoverF	;
	MOV		A,#0		;
	B0MOV		ADM,A		;
	B0MOV		A,ADB		;
	B0MOV		TEMPH,A		;
	B0MOV		A,ADR		;
	AND		A,#0FH		;
	B0MOV		TEMPL,A		;
	MOV		A,WhichAD	;
	B0BTS0		FZ
	JMP		ADI0Convert	;0
	XOR		A,#1		;
	B0BTS0		FZ		;
	JMP		ADI1Convert	;1
	MOV		A,WhichAD	;
	XOR		A,#2		;
	B0BTS0		FZ		;
	JMP		ADI2Convert	;2
	MOV		A,WhichAD	;
	XOR		A,#3		;
	B0BTS0		FZ		;
	JMP		ADI3Convert	;3
	MOV		A,WhichAD	;
	XOR		A,#4		;
	B0BTS0		FZ		;
	JMP		ADI4Convert	;4
	MOV		A,WhichAD	;
	XOR		A,#5		;
	B0BTS0		FZ		;
	JMP		ADI5Convert	;5
	RET
;-------------------------------------------------------------------
ADI0Convert:
	B0MOV		A,TEMPH		;
	B0MOV		A0Value,A
	B0BTS0		GoodF
	RET
	B0BTS1		ChargeF
	RET	
	SUB		A,#0D3H
	B0BTS1		FC
	RET
	B0BSET		P1FullF
	B0BSET		BatterP1
	RET
;-------------------------------------------------------------------	
ADI1Convert:
	CLR		TMP
	B0MOV		A,TEMPH		;ADI1*2-ADI0
	ADD		A,TEMPH		;
	B0BTS0		FC
	INCMS		Tmp
	NOP
	SUB		A,A0VAlue	;
	B0MOV		A1Value,A	;
	B0BTS1		FC		;
	DECMS		TMP
	NOP
	B0BTS0		TMP.7		;
	JMP		ADI1END0	;
	MOV		A,#0E5H
	B0BTS0		TMP.0		;
	B0MOV		A1Value,A
	JMP		ADI1END1	;
ADI1END0:
	MOV		A,#0
	B0MOV		A1Value,A	;
ADI1END1:
	B0BTS1		ChargeF
	RET
	B0MOV		A,A1Value	;
	SUB		A,#0D3H		;
	B0BTS1		FC		;
	RET
	B0BSET		P2FullF		;
	B0BSET		BatterP2
	RET	
;-------------------------------------------------------------------	
ADI2Convert:
	CLR		Tmp
	B0MOV		A,TEMPH		;1  ADI2*3-ADI1*2
	ADD		A,TEMPH		;2
	B0BTS0		FC		;
	INCMS		Tmp		;
	ADD		A,TEMPH		;3
	B0BTS0		FC
	INCMS		Tmp		;
	SUB		A,A1Value	;
	B0BTS1		FC		;1
	DECMS		Tmp		;
	NOP
	SUB		A,A1Value	;2
	B0BTS1		FC		;
	DECMS		Tmp		;
	NOP
	B0MOV		A2Value,A
	B0MOV		A,A1Value
	B0BTS0		FZ
	JMP		ADI2End0
	B0BTS0		Tmp.7		;
	JMP		ADI2End0	;
	MOV		A,#0EDH		;
	B0BTS0		Tmp.0		;
	B0MOV		A2Value,A	;
	JMP		ADI2End1	;
ADI2End0:
	MOV		A,#00		;ADI2*3-ADI1*2
	B0MOV		A2Value,A	;	
ADI2End1:
	B0BTS1		ChargeF
	RET
	B0MOV		A,A2Value	;
	SUB		A,#0D3H		;
	B0BTS1		FC		;
	RET
	B0BSET		P3FullF		;
	B0BSET		BatterP2
	RET				;
;-------------------------------------------------------------------
;Test discharge Voltage			;
ADI3Convert:
	CLR		Tmp		;
	B0MOV		A,TEMPH		;1  ADI3*4-ADI2*3
	ADD		A,TEMPH		;2
	B0BTS0		FC		;
	INCMS		Tmp		;
	ADD		A,TEMPH		;3
	B0BTS0		FC		;
	INCMS		Tmp		;
	ADD		A,TEMPH		;3
	B0BTS0		FC		;
	INCMS		Tmp		;
	SUB		A,A2Value	;
	B0BTS1		FC		;
	DECMS		Tmp		;
	NOP				;
	SUB		A,A2Value	;
	B0BTS1		FC		;
	DECMS		Tmp		;
	NOP
	SUB		A,A2Value	;
	B0BTS1		FC		;
	DECMS		Tmp		;
	NOP
	B0MOV		A3Value,A
	B0MOV		A,A2Value
	B0BTS0		FZ
	JMP		ADI3End0
	B0BTS0		Tmp.7		;
	JMP		ADI3End0	;
	MOV		A,#0DEH		;
	B0BTS0		Tmp.0		;
	B0MOV		A3Value,A	;
	JMP		ADI3End1	;	
ADI3End0:
	MOV		A,#00		;ADI3*4-ADI2*3
	B0MOV		A3Value,A	;
ADI3End1:
	B0BTS1		ChargeF
	RET
	B0MOV		A,A3Value	;
	SUB		A,#0D3H		;
	B0BTS1		FC		;
	RET
	B0BSET		P4FullF		;
	B0BSET		BatterP4
	RET				;
;====================================================
ADI4Convert:
	B0MOV		A,ADindex	;
	B0MOV		Z,A		;
	CLR		Y		;
	B0MOV		A,TempH		;
	B0MOV		@YZ,A		;
	INCMS		ADindex		;
	B0BTS1		ADindex.4	;16times ad convert
	RET				;
	MOV		A,#16		;
	B0MOV		Tmp,A        	;
	CLR		ADindex		;
	MOV		A,#ADByte0H     ;     
	B0MOV		Z,A             ;     
ADDLp0:	B0MOV		A,@YZ           ;     
	ADD		CntADtmp0,A     ;     
	B0BTS0		FC              ;     
	INCMS		CntADtmp1       ;     
	INCMS		Z               ;     
	DECMS		Tmp             ;     
	JMP		ADDLp0          ;
	B0BCLR		FC		;			
	RRCM		CntADtmp1	;
	RRCM		CntADtmp0	;
	B0BCLR		FC		;
	RRCM		CntADtmp1	;
	RRCM		CntADtmp0	;
	B0BCLR		FC		;
	RRCM		CntADtmp1	;	
	RRCM		CntADtmp0	;
	B0BCLR		FC		;
	RRCM		CntADtmp1	;	
	RRCM		CntADtmp0	;-----------------------------------
	B0MOV		A,CntADtmp0	;
	B0MOV		A4Value,A	;
	B0MOV		A,CntADtmp1	;>0
	B0BTS1		FZ		;
	JMP		SetPWM02	;
	B0MOV		A,Avalue	;A max
	SUB		A,CntADtmp0	;
	B0BTS0		FZ		;
	RET				;
	B0BTS1		FC		;
	JMP		SetPWM02	;
SetPWM00:				;
	MOV		A,#0H		;Avalue>CntADtmp0=
	XOR		A,PWMflag	;
	B0BTS1		FZ		;
	DECMS		PWMflag		;---------------------------------
	NOP
	RET				;
SetPWM02:
	B0MOV		A,Avalue	;Avalue<CntADtmp0
	B0MOV		A4Value,A	;				
	INCMS		PWMFlag         ;-----------------------CntADtmp0>=0D
	MOV		A,#101		;
	XOR		A,PWMFlag       ;
	B0BTS1		FZ              ;
	RET                             ;
	MOV		A,#100		;
	B0MOV		PWMFlag,A	;
	RET                             ;
;***************************************************************************
;------------------------------------------------------------------
ADI5Convert:
	RET				;
	MOV		A,#50		;
	ADD		A,TEMPH		;
	B0BTS0		FC		;
	RET				;overflow
	SUB		A,TempADold	;
	B0BTS1		FC		;
	JMP		ErrorSet	;
	B0MOV		A,TempADold	;
	ADD		A,#50		;
	SUB		A,TEMPH		;A-M

⌨️ 快捷键说明

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