📄 充电器.asm
字号:
AT: MOV A,@0B00001110
IOW IOCA0
MOV A,@2
MOV ADCON,A ;选择AD转换通道,采集温度电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY1MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,T_AD3
MOV T_AD4,A
MOV A,T_AD2
MOV T_AD3,A
MOV A,T_AD1
MOV T_AD2,A
MOV A,ADDATA
MOV T_AD1,A
DJZ R7
JMP AT
MOV A,@T_AD1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV T_AD,A
RET
;-------------------------------
INIT: MOV A,@217;255;217
MOV TCC,A
CLRA
MOV R3,A ;第0页程式
BC R4,6 ;bank0:20~2F
MOV R9,A ;SENGMENT0,通道0
MOV A,@0B00000111;允许中断,预分频给TCC,1:256
CONTW
MOV A,@0B00001001
IOW IOC50 ;P50,只输入,P53为Vref输入,其他设为输出
MOV A,@0x0F ;P60,1,2,3为输入,其他输出
IOW IOC60
MOV A,@0XFF
IOW IOCB0 ;禁止内部下拉
IOW IOCC0
IOW IOCD0
MOV A,@0B10000000 ;使能看门狗,P50作输入
IOW IOCE0
MOV A,@0b00000001;TCC
IOW IOCF0
MOV A,@0B00000000;禁止放大~~
IOW IOC90
MOV A,@0B00001110;1:16 10 ;P53/Vref为参考电压,P60,1,2,3,4为AD输入,倍频1:64
IOW IOCA0
BS R9,5 ; 选择SEGMENT1
MOV A,@0B00000000 ;选择 PWM1,2分频,PWM1在防入电池的时候再使能
IOW IOC51
CLRA
IOW IOC71 ;禁止矫正
BC R9,5
mov a,@48 ;清RAM
mov r8,a
mov a,@0x10
mov r4,a
clr r0
inc r4
djz r8
jmp $-3
clr r4 ;清BIT5
CLR P5
CLR FLAG
MOV A,@50
MOV C250,A
MOV A,@240
MOV C240,A
ENI ; 使能中断
RET
;================================================================
;娟流子程序,
;程序结束表示快充好,或电池拿走,置标志无电池标志F_NOBATT
FULL_CHARGE:
JBC FLAG,FNOBATT
RET
REPEAD_FULL:BS P5,CTRL ;控制高电平,电池恒流调整
RE_FC: MOV A,CNT ;3个轮流采样
XOR A,@0
JBS R3,Z
JMP FC_1
MOV A,@0B00001110
IOW IOCA0
MOV A,@0 ;采集0.5上的电压
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,I_AD3 ;保存4个FIFO
MOV I_AD4,A
MOV A,I_AD2
MOV I_AD3,A
MOV A,I_AD1
MOV I_AD2,A
MOV A,ADDATA
MOV I_AD1,A
MOV A,ADDATA
MOV I_AD,A
MOV A,@1
MOV CNT,A
JMP FC_ISLOW
FC_1: MOV A,CNT ;3个轮流采样
XOR A,@1
JBS R3,Z
JMP FC_2
MOV A,@0B00001110
IOW IOCA0
MOV A,@2 ;采集温度
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,T_AD3
MOV T_AD4,A
MOV A,T_AD2
MOV T_AD3,A
MOV A,T_AD1
MOV T_AD2,A
MOV A,ADDATA
MOV T_AD1,A
MOV A,@2
MOV CNT,A
JMP FC_ISLOW
FC_2: MOV A,@0B00001110
IOW IOCA0
MOV A,@3 ;第3个通道,采集电源电压
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,P_AD3
MOV P_AD4,A
MOV A,P_AD2
MOV P_AD3,A
MOV A,P_AD1
MOV P_AD2,A
MOV A,ADDATA
MOV P_AD1,A
MOV A,@0
MOV CNT,A
FC_ISLOW: BC P5,CTRL ;给底电平
MOV A,I_AD ;送数,查表
CALL FULL_TABLE
MOV D_CNT,A
FCI: CALL DELAY1MS ;底电平时间
DJZ D_CNT
JMP FCI
MOV A,@0B00001110 ;取电池电压
IOW IOCA0
MOV A,@1
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
;CALL DELAY1MS
BS ADCON,ADPD ;取样充电
;CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,U_AD3
MOV U_AD4,A
MOV A,U_AD2
MOV U_AD3,A
MOV A,U_AD1
MOV U_AD2,A
MOV A,ADDATA
MOV U_AD1,A
MOV A,@P_AD1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV P_AD,A
SUB A,@_5V4
JBC R3,C
JMP FULL_NORMAL
F_ABNORMALT:
BS FLAG,FABNORMALT
JMP RE_FC ;
F_ABNORMALP:
BS FLAG,FABNORMALP
JMP RE_FC ;
F_ABNORMALB:
BS FLAG,FABNORMALB
JMP RE_FC ;
FULL_NORMAL:BC FLAG,FABNORMALP
MOV A,@T_AD1 ;电压正常
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV T_AD,A
SUB A,@_43C ; 87(_43c)<t<186(_0c)
JBC R3,C
JMP F_ABNORMALT ;温度高于43度
MOV A,T_AD
SUB A,@_0C
JBS R3,C
JMP F_ABNORMALT ;小于186,即大于0度则返回
BC FLAG,FABNORMALT
MOV A,@U_AD1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV U_AD,A
SUB A,@_4V4
JBS R3,C
JMP F_ABNORMALB ;大于4.4则异常
FULL_SHOW:BC FLAG,FABNORMALB ;清标志
BS P5,GREEN ;指示
BC P5,RED
MOV A,U_AD
SUB A,@_2V0
JBS R3,C
JMP REPEAD_FULL
BS FLAG,FNOBATT ;无电池
BC P5,RED ;清除指示
BC P5,GREEN
RET
;=======================================================================================
;================================================================
;预充电子程序,
;程序结束表示快充好,或电池拿走,置标志无电池标志F_NOBATT
PRE_CHARGE:
JBC FLAG,FNOBATT
RET
REPEAD_PRE:BS P5,CTRL ;控制高电平,电池恒流调整
RE_PC: MOV A,CNT ;3个轮流采样
XOR A,@0
JBS R3,Z
JMP PC_1
MOV A,@0B00001110
IOW IOCA0
MOV A,@0 ;采集0.5上的电压
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,I_AD3 ;保存4个FIFO
MOV I_AD4,A
MOV A,I_AD2
MOV I_AD3,A
MOV A,I_AD1
MOV I_AD2,A
MOV A,ADDATA
MOV I_AD1,A
MOV A,ADDATA
MOV I_AD,A
MOV A,@1
MOV CNT,A
JMP PC_ISLOW
PC_1: MOV A,CNT ;3个轮流采样
XOR A,@1
JBS R3,Z
JMP PC_2
MOV A,@0B00001110
IOW IOCA0
MOV A,@2 ;采集温度
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,T_AD3
MOV T_AD4,A
MOV A,T_AD2
MOV T_AD3,A
MOV A,T_AD1
MOV T_AD2,A
MOV A,ADDATA
MOV T_AD1,A
MOV A,@2
MOV CNT,A
JMP PC_ISLOW
PC_2: MOV A,@0B00001110
IOW IOCA0
MOV A,@3 ;第3个通道,采集电源电压
MOV ADCON,A ;选择AD转换通道,采集电源电压
CLRA
IOW IOC90 ;不增益
CALL DELAY1MS
BS ADCON,ADPD ;取样充电
CALL DELAY2MS
BS ADCON,ADRUN
JBC ADCON,ADRUN
JMP $-1
BC RF,ADIF
BC ADCON,ADPD ;停止采样
MOV A,P_AD3
MOV P_AD4,A
MOV A,P_AD2
MOV P_AD3,A
MOV A,P_AD1
MOV P_AD2,A
MOV A,ADDATA
MOV P_AD1,A
MOV A,@0
MOV CNT,A
PC_ISLOW: BC P5,CTRL ;给底电平
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -