📄 p08003-1.asm
字号:
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 + -