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

📄 p08003-1.asm

📁 智能多功能太阳能充电器的源程序....采用ETA的MCU
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		LDM		PV_ADCR3_S,#0
		LDM		PV_ADCRX_S,#0
		LDM		PV_ADCRXX_S,#0
		;;;;;;;;;;;;;;;;处理结果,确认是否到17V
		CMNE		PV_MARK,#0000B
		BR		!PVOLTAGE_F_3
		CLRC
		SUBC		PV_ADCR1,#0BH
		SUBC		PV_ADCR2,#0CH
		SUBC		PV_ADCR3,#0DH
		TSTC
		BR		!PVOLTAGE_F_RET
		LDM		PV_MARK,#1111B
		LDM		PWM_GRADE1,#0		;超过输入电压境界线关闭输出
		LDM		PWM_GRADE2,#0
		LDM		PWM_GRADE3,#0
		LDM		I_STANDARD1,#0
		LDM		I_STANDARD2,#0
		RET
PVOLTAGE_F_3:
		CLRC
		SUBC		PV_ADCR1,#0AH		;设定恢复充电电压界限
		SUBC		PV_ADCR2,#0EH
		SUBC		PV_ADCR3,#0DH
		TSTC
		BR		!PVOLTAGE_F_4
		RET
PVOLTAGE_F_4:
		LDM		PV_MARK,#0000B
		CALL		!SET_CURRENT
PVOLTAGE_F_RET:
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BVOLTAGE_F:
		CALL		!BV_AD_F	;取电池电压
		CLRC
		LDA		ADCR1_M		;累加电池电压
		ADDC		BV_ADCR1_S,A
		LDM		BV_ADCR1_S,A
		LDA		ADCR2_M
		ADDC		BV_ADCR2_S,A
		LDM		BV_ADCR2_S,A
		LDA		ADCR3_M
		ADDC		BV_ADCR3_S,A
		LDM		BV_ADCR3_S,A
		ADDC		BV_ADCRX_S,#0
		LDM		BV_ADCRX_S,A
		TSTC
		BR		!RESET
		CLRC
		ADDC		BV_LOGIC,#1	;电池电压扫描16次
		LDM		BV_LOGIC,A
		CMNE		BV_LOGIC,#0
		BR		!BVOLTAGE_F
		;;;;;;;;;;;;;;;;电池电压计算
		CMLE		BV_ADCR1_S,#7	;是否需要四舍五入
		BR		!BVOLTAGE_F_1
		CLRC
		ADDC		BV_ADCR2_S,#1
		LDM		BV_ADCR2_S,A
		ADDC		BV_ADCR3_S,#0
		LDM		BV_ADCR3_S,A
		ADDC		BV_ADCRX_S,#0
		LDM		BV_ADCRX_S,A
		TSTC
		BR		!RESET
BVOLTAGE_F_1:
		LDA		BV_ADCRX_S
		LDM		BV_ADCR3,A
		LDA		BV_ADCR3_S
		LDM		BV_ADCR2,A
		LDA		BV_ADCR2_S
		LDM		BV_ADCR1,A
		LDM		BV_ADCR1_S,#0
		LDM		BV_ADCR2_S,#0
		LDM		BV_ADCR3_S,#0
		LDM		BV_ADCRX_S,#0
		;;;;;;;;;;;;;;;;开始判断电池电压准备设定电流
		CLRC
		SUBC		BV_ADCR1,#08H
		SUBC		BV_ADCR2,#0CH
		SUBC		BV_ADCR3,#0EH
		TSTC
		BR		!BVOLTAGE_F_2
		SET1		BV_MARK.#0		;电压 > 8.4V
		RET
BVOLTAGE_F_2:
		CLR1		BV_MARK.#0		;电压小于8.4V
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;SECOND LAYER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_CURRENT:
		TM		PHDR_MARK.#2
		BR		!SET_CURRENT_1
		LDM		I_STANDARD1,#0CH		;1CH=250MA  5CH=950MA
		LDM		I_STANDARD2,#01H
		RET
SET_CURRENT_1:
		LDM		I_STANDARD1,#0CH
		LDM		I_STANDARD2,#05H
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FLASH_F:
		CMNE		PV_MARK,#0
		BR		!FLASH_F_1
		LDM		FLASH_M,#0
		LDM		FLASH_C1,#0
		LDM		FLASH_C2,#0
		LDM		FLASH_C3,#0
		SET1		PBDR_MARK.#0
		LDA		PBDR_MARK
		LRA		PBDR
		RET
FLASH_F_1:
		CMNE		FLASH_M,#0000B		;超过输入电压16V就开始闪烁
		BR		!FLASH_F_2
		CLR1		PBDR_MARK.#0
		LDA		PBDR_MARK
		LRA		PBDR
		BR		!FLASH_F_3
FLASH_F_2:
		SET1		PBDR_MARK.#0
		LDA		PBDR_MARK
		LRA		PBDR
FLASH_F_3:
		CLRC
		SUBC		FLASH_C1,#1
		SUBC		FLASH_C2,#1
		SUBC		FLASH_C3,#1
		TSTC
		BR		!FLASH_F_4
		LDM		FLASH_C1,#0
		LDM		FLASH_C2,#0
		LDM		FLASH_C3,#0
		LDA		#1111B
		XOR		FLASH_M
		LDM		FLASH_M,A
		RET
FLASH_F_4:
		CLRC
		ADDC		FLASH_C1,#1
		LDM		FLASH_C1,A
		ADDC		FLASH_C2,#0
		LDM		FLASH_C2,A
		ADDC		FLASH_C3,#0
		LDM		FLASH_C3,A
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOAD_PWM:
		LAR	DBR1
		LRA	T0D0H
		LAR	DBR0
		LRA	T0D0L
		LAR	DBR3
		LRA	T0D1H
		LAR	DBR2
		LRA	T0D1L
		LRI	T0MR,#1100B		;开启TIME0计数器
		CMNE		PWM_LOCK,#0001B
		BR		!LOAD_PWM_1
		CLR1		PBDR_MARK.#2
		LDA		PBDR_MARK
		LRA		PBDR
		LRI		TOPSR,#0010B	;把time0送到PB2输出PWM信号
		RET
LOAD_PWM_1:
		CMNE		PWM_LOCK,#0000B
		BR		!LOAD_PWM_2
		CLR1		PBDR_MARK.#2
		LDA		PBDR_MARK
		LRA		PBDR
		LRI		TOPSR,#0000B
		RET
LOAD_PWM_2:
		SET1		PBDR_MARK.#2
		LDA		PBDR_MARK
		LRA		PBDR
		LRI		TOPSR,#0000B
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;THIRD LAYER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I_ANALYSE:
		CLRC
		LDA		ADCR1_S1
		SUBC		ADCR1_S2,A
		LDA		ADCR2_S1
		SUBC		ADCR2_S2,A
		LDA		ADCR3_S1
		SUBC		ADCR3_S2,A
		TSTC
		BR		!I_ANALYSE_1
		CLRC
		LDA		ADCR1_S1
		SUBC		ADCR1_S3,A
		LDA		ADCR2_S1
		SUBC		ADCR2_S3,A
		LDA		ADCR3_S1
		SUBC		ADCR3_S3,A
		TSTC
		BR		!I_ANALYSE_2
		CLRC
		LDA		ADCR1_S1
		SUBC		ADCR1_S4,A
		LDA		ADCR2_S1
		SUBC		ADCR2_S4,A
		LDA		ADCR3_S1
		SUBC		ADCR3_S4,A
		TSTC
		BR		!I_ANALYSE_3
		CLRC
		LDA		ADCR1_S1
		SUBC		ADCR1_S5,A
		LDA		ADCR2_S1
		SUBC		ADCR2_S5,A
		LDA		ADCR3_S1
		SUBC		ADCR3_S5,A
		TSTC
		BR		!I_ANALYSE_4
		CLRC
		LDA		ADCR1_S1
		SUBC		ADCR1_S6,A
		LDA		ADCR2_S1
		SUBC		ADCR2_S6,A
		LDA		ADCR3_S1
		SUBC		ADCR3_S6,A
		TSTC
		BR		!I_ANALYSE_5
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_A
		LDM		ADCR1_S1,#15
		LDM		ADCR2_S1,#15
		LDM		ADCR3_S1,#15
		RET
I_ANALYSE_A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S1
		LDM		I1_DATA2,A
		LDA		ADCR2_S1
		LDM		I2_DATA2,A
		LDA		ADCR3_S1
		LDM		I3_DATA2,A
		LDM		ADCR1_S1,#15
		LDM		ADCR2_S1,#15
		LDM		ADCR3_S1,#15
		RET
I_ANALYSE_1:
		CLRC
		LDA		ADCR1_S2
		SUBC		ADCR1_S3,A
		LDA		ADCR2_S2
		SUBC		ADCR2_S3,A
		LDA		ADCR3_S2
		SUBC		ADCR3_S3,A
		TSTC
		BR		!I_ANALYSE_2
		CLRC
		LDA		ADCR1_S2
		SUBC		ADCR1_S4,A
		LDA		ADCR2_S2
		SUBC		ADCR2_S4,A
		LDA		ADCR3_S2
		SUBC		ADCR3_S4,A
		TSTC
		BR		!I_ANALYSE_3
		CLRC
		LDA		ADCR1_S2
		SUBC		ADCR1_S5,A
		LDA		ADCR2_S2
		SUBC		ADCR2_S5,A
		LDA		ADCR3_S2
		SUBC		ADCR3_S5,A
		TSTC
		BR		!I_ANALYSE_4
		CLRC
		LDA		ADCR1_S2
		SUBC		ADCR1_S6,A
		LDA		ADCR2_S2
		SUBC		ADCR2_S6,A
		LDA		ADCR3_S2
		SUBC		ADCR3_S6,A
		TSTC
		BR		!I_ANALYSE_5
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_1A
		LDM		ADCR1_S2,#15
		LDM		ADCR2_S2,#15
		LDM		ADCR3_S2,#15
		RET
I_ANALYSE_1A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S2
		LDM		I1_DATA2,A
		LDA		ADCR2_S2
		LDM		I2_DATA2,A
		LDA		ADCR3_S2
		LDM		I3_DATA2,A
		LDM		ADCR1_S2,#15
		LDM		ADCR2_S2,#15
		LDM		ADCR3_S2,#15
		RET
I_ANALYSE_2:
		CLRC
		LDA		ADCR1_S3
		SUBC		ADCR1_S4,A
		LDA		ADCR2_S3
		SUBC		ADCR2_S4,A
		LDA		ADCR3_S3
		SUBC		ADCR3_S4,A
		TSTC
		BR		!I_ANALYSE_3
		CLRC
		LDA		ADCR1_S3
		SUBC		ADCR1_S5,A
		LDA		ADCR2_S3
		SUBC		ADCR2_S5,A
		LDA		ADCR3_S3
		SUBC		ADCR3_S5,A
		TSTC
		BR		!I_ANALYSE_4
		CLRC
		LDA		ADCR1_S3
		SUBC		ADCR1_S6,A
		LDA		ADCR2_S3
		SUBC		ADCR2_S6,A
		LDA		ADCR3_S3
		SUBC		ADCR3_S6,A
		TSTC
		BR		!I_ANALYSE_5
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_2A
		LDM		ADCR1_S3,#15
		LDM		ADCR2_S3,#15
		LDM		ADCR3_S3,#15
		RET
I_ANALYSE_2A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S3
		LDM		I1_DATA2,A
		LDA		ADCR2_S3
		LDM		I2_DATA2,A
		LDA		ADCR3_S3
		LDM		I3_DATA2,A
		LDM		ADCR1_S3,#15
		LDM		ADCR2_S3,#15
		LDM		ADCR3_S3,#15
		RET
I_ANALYSE_3:
		CLRC
		LDA		ADCR1_S4
		SUBC		ADCR1_S5,A
		LDA		ADCR2_S4
		SUBC		ADCR2_S5,A
		LDA		ADCR3_S4
		SUBC		ADCR3_S5,A
		TSTC
		BR		!I_ANALYSE_4
		CLRC
		LDA		ADCR1_S4
		SUBC		ADCR1_S6,A
		LDA		ADCR2_S4
		SUBC		ADCR2_S6,A
		LDA		ADCR3_S4
		SUBC		ADCR3_S6,A
		TSTC
		BR		!I_ANALYSE_5
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_3A
		LDM		ADCR1_S4,#15
		LDM		ADCR2_S4,#15
		LDM		ADCR3_S4,#15
		RET
I_ANALYSE_3A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S4
		LDM		I1_DATA2,A
		LDA		ADCR2_S4
		LDM		I2_DATA2,A
		LDA		ADCR3_S4
		LDM		I3_DATA2,A
		LDM		ADCR1_S4,#15
		LDM		ADCR2_S4,#15
		LDM		ADCR3_S4,#15
		RET
I_ANALYSE_4:
		CLRC
		LDA		ADCR1_S5
		SUBC		ADCR1_S6,A
		LDA		ADCR2_S5
		SUBC		ADCR2_S6,A
		LDA		ADCR3_S5
		SUBC		ADCR3_S6,A
		TSTC
		BR		!I_ANALYSE_5
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_4A
		LDM		ADCR1_S5,#15
		LDM		ADCR2_S5,#15
		LDM		ADCR3_S5,#15
		RET
I_ANALYSE_4A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S5
		LDM		I1_DATA2,A
		LDA		ADCR2_S5
		LDM		I2_DATA2,A
		LDA		ADCR3_S5
		LDM		I3_DATA2,A
		LDM		ADCR1_S5,#15
		LDM		ADCR2_S5,#15
		LDM		ADCR3_S5,#15
		RET
I_ANALYSE_5:
		CMNE		I_MARK,#0
		BR		!I_ANALYSE_5A
		LDM		ADCR1_S6,#15
		LDM		ADCR2_S6,#15
		LDM		ADCR3_S6,#15
		RET
I_ANALYSE_5A:
		CMNE		I_MARK,#1
		BR		!RESET
		LDA		ADCR1_S6
		LDM		I1_DATA2,A
		LDA		ADCR2_S6
		LDM		I2_DATA2,A
		LDA		ADCR3_S6
		LDM		I3_DATA2,A
		LDM		ADCR1_S6,#15
		LDM		ADCR2_S6,#15
		LDM		ADCR3_S6,#15
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I_AD_F:
		LRI	ADCIS,#1001B		;选择通道
		NOP
		NOP
		LRI	WACR,#1010B			;决定AD转换时钟
		LRI	ADCM,#1101B			;开启AD转换许可
		NOP
		NOP
		LRI	APSR1,#0011B		;把对应的AD的IO设置为AD输入功能
		BR	!AD_CONVERTOR
PV_AD_F:
		LRI	ADCIS,#1010B		;选择通道
		NOP
		NOP
		LRI	WACR,#1010B		;决定AD转换时钟
		LRI	ADCM,#1101B		;开启AD转换许可
		NOP
		NOP
		LRI	APSR1,#0101B		;把对应的AD的IO设置为AD输入功能
		BR	!AD_CONVERTOR
BV_AD_F:
		LRI	ADCIS,#1011B		;选择通道
		NOP
		NOP
		LRI	WACR,#1010B		;决定AD转换时钟
		LRI	ADCM,#1101B		;开启AD转换许可
		NOP
		NOP
		LRI	APSR1,#1001B		;把对应的AD的IO设置为AD输入功能
		BR	!AD_CONVERTOR
AD_CONVERTOR:
		NOP
		NOP
		SETR1	ADCM.#1		;开始转化
		NOP
		NOP
AD_CONVERTOR_1:
		TSTR	ADCM.#0		;等待转化结束
		BR	!AD_CONVERTOR_2
		NOP
		NOP
		BR	!AD_CONVERTOR_1
AD_CONVERTOR_2:
		NOP
		NOP
		LRI	ADCM,#1001B		;关闭AD
		NOP
		LRI	ADCIS,#1000B		;把通道选回0
		NOP
		LRI	APSR1,#0001B		;把IO状态改回IO状态
		NOP
		LAR	ADCR1			;把AD值拿出来
		LDM	ADCR1_M,A
		LAR	ADCR2
		LDM	ADCR2_M,A
		LAR	ADCR3
		LDM	ADCR3_M,A
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESD:
		CMNE			ESD1,#0101B
		BR				!RESET
		CMNE			ESD2,#0101B
		BR				!RESET
		CMNE			ESD3,#0101B
		BR				!RESET
		CMNE			ESD4,#0101B
		BR				!RESET
		CMNE			ESD5,#0101B
		BR				!RESET
		CMNE			ESD6,#0101B
		BR				!RESET
		CMNE			ESD7,#0101B
		BR				!RESET
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CL_RAM:		LDX		#0
		LDY		#0
CL_R_L:		EIX		;开启间接寻址
		LDM		00H,#0
		DIX
		ADDC		Y,#1
		CYNE		#0
		BR		!CL_R_L
		WDTC
		ADDC		X,#0
		CXNE		#0
		BR		!CL_R_L
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PWM_TAB:
	DW	0145H	  ; 0  
	DW	0144H	  ; 1  
	DW	0143H       ; 2  
	DW	0142H       ; 3  
	DW	0141H       ; 4  
	DW	0140H       ; 5  
	DW	013FH       ; 6  

⌨️ 快捷键说明

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