?? 充電器.asm
字號:
INCLUDE"EM78P458.H"
RED == 4
GREEN == 2
CTRL == 1
I_AD == 0X10
U_AD == 0X11
T_AD == 0X12
P_AD == 0X13
FLAG == 0X14
_60MFLAG== 1
_180MFLAG== 2
FNOBATT == 3
FTIME == 4 ;時間超出異常
FABNORMALT== 5 ;溫度異常
FABNORMALP== 6 ;電源異常
FABNORMALB== 7 ;電池異常
A_R == 0X15
R3_R == 0X16
B == 0X17
S == 0X18
U_AD1 == 0X19
U_AD2 == 0X1A
U_AD3 == 0X1B
U_AD4 == 0X1C
T_AD1 == 0X1D
T_AD2 == 0X1E
T_AD3 == 0X1F
T_AD4 == 0X20
P_AD1 == 0X21
P_AD2 == 0X22
P_AD3 == 0X23
P_AD4 == 0X24
R_ADL == 0X25
R_ADH == 0X26
C250 == 0X27
C240 == 0X28
PRE_TC == 0X29
RAP_TC == 0X2A
CNT == 0X2B
C1 == 0X2C
D_CNT == 0X2D
I_AD1 == 0X2E
I_AD2 == 0X2F
I_AD3 == 0X30
I_AD4 == 0X31
S_NOBATT ==0 ; 狀態定義
S_PRE ==1
S_RAP ==2
S_FULL ==3
S_ERRORE ==4
;4.7405v為參考電壓;以4.5V為參考電壓,計算下面對應的數值
;_0V3 ==15
_3V0 ==161 ;153
_4V2 ==215; 調試214;225 ;214
_4V4 ==236 ;249
_3V9 ==209 ;221
_0V2 ==10
_0V44 ==23
_0V14 ==7
_0V26 ==13
_2V4 ==129
_2V8 ==150
;========================================================
_43C ==87
_0C ==186
_5V4 ==242
_4V8 ==215
_2V0 ==107
;=========================================================
ORG 0X00
JMP START
ORG 0x08
JMP TINT
;--------------------------
PRE_TABLE: MOV R8,A
SUB A,@4
JBC R3,C
JMP PT_4 ;小于4
MOV A,R8
SUB A,@27
JBS R3,C
JMP PT_27 ;大于27
JMP PT
PT_4: MOV A,@4
MOV R8,A
JMP PT
PT_27: MOV A,@27
MOV R8,A
JMP PT
PT: MOV A,@4
SUB A,R8
ADD PC,A
RETL @2
RETL @3
RETL @4
RETL @6
RETL @7
RETL @8
RETL @9
RETL @10
RETL @11
RETL @12
RETL @15
RETL @17
RETL @15
RETL @16
RETL @17
RETL @18
RETL @20
RETL @23
RETL @24
RETL @25
RETL @26
RETL @27
RETL @28
RETL @29
RETL @23
RETL @24
RETL @25
RETL @26
RETL @27
RAP_TABLE: MOV A,@21
SUB A,R8
JBC R3,C
JMP RT_21 ;小于21
MOV A,R8
SUB A,@69
JBS R3,C
JMP RT_69 ;大于69
JMP RT
RT_21: MOV A,@21
MOV R8,A
JMP RT
RT_69: MOV A,@69
MOV R8,A
JMP RT
RT: MOV A,R8
SUB A,@21
MOV A,@1
ADD PC,A
RETL @1
RETL @1
RETL @1
RETL @1; 2
RETL @1;2
RETL @2
RETL @2;3
RETL @2;3
RETL @2;3
RETL @2;4
RETL @3;4
RETL @3;4
RETL @3;5
RETL @3;5
RETL @4;5
RETL @4;6
RETL @4;6
RETL @4;6
RETL @5;7
RETL @5;7
RETL @5;7
RETL @5;8
RETL @5;8
RETL @6;8
RETL @6;9
RETL @6;9
RETL @6;9
RETL @9
RETL @9
RETL @9
RETL @9
FULL_TABLE: MOV R8,A
SUB A,@3
JBC R3,C
JMP FT_3 ;小于3
MOV A,R8
SUB A,@14
JBS R3,C
JMP FT_14 ;大于14
JMP FT
FT_3: MOV A,@3
MOV R8,A
JMP FT
FT_14: MOV A,@14
MOV R8,A
JMP FT
FT: MOV A,@3
SUB A,R8
ADD PC,A
;RETL @3
;RETL @5
;RETL @7
;RETL @9
;RETL @11
RETL @13
RETL @15
RETL @17
RETL @19
RETL @21
RETL @23
RETL @25
RETL @27
RETL @29
RETL @31
RETL @33
RETL @35
RETL @37
RETL @23
RETL @25
RETL @27
;=======================================================================
;時間中斷服務程序
TINT: MOV A_R,A
SWAP A_R
SWAPA R3
MOV R3_R,A
JBS RF,0 ;
JMP INT_RETURN
BC RF,0 ;CLR TCC INT
MOV A,@217 ;重置TCC
MOV TCC,A
DJZ C250
JMP INT_1S
MOV A,@50
MOV C250,A
BC R3,C
JBC FLAG,FTIME
BS R3,C
JBC FLAG,FABNORMALT
BS R3,C
JBC FLAG,FABNORMALP
BS R3,C
JBC FLAG,FABNORMALB
BS R3,C
JBS R3,C ;Z
JMP INT_1S
MOV A,@0B00010000
XOR P5,A ;;燈閃爍
INT_1S: DJZ C240
JMP INT_C
MOV A,@240
MOV C240,A
INT_C: JBC R3,C
JMP INT_RETURN ;異常的時候不做記時處理
MOV A,S
XOR A,@S_PRE
JBS R3,Z
JMP INT_RAP
INT_PRE: INC PRE_TC
MOV A,PRE_TC
SUB A,@60
JBS R3,C
BS FLAG,_60MFLAG
JMP INT_RETURN
INT_RAP: MOV A,S
XOR A,@S_RAP
JBS R3,Z
JMP INT_RETURN
INC RAP_TC
MOV A,PRE_TC
SUB A,@180
JBS R3,C
BS FLAG,_180MFLAG
INT_RETURN: SWAPA R3_R
MOV R3,A
SWAPA A_R
RETI
;--------------------------
START: CALL INIT
CALL AD_PT ;連續采樣4次,電源電壓,和溫度
MAIN: CALL AD_B ;連續4次采樣電池電壓
MOV A,U_AD
SUB A,@_3V0
JBS R3,C
JMP M_RAP ;大于3V則快充
M_PRE: CALL PRE_CHARGE ;小于3V則慢充
M_RAP: CALL RAP_CHARGE
M_FULL: CALL FULL_CHARGE
JMP MAIN
;==============================================================================================================
;電池電壓采樣,連續檢查4次,并計算平均值,大于2V認為有電池有電池則退出采樣
AD_B: MOV A,@4
MOV R7,A
AB: MOV A,@0B00001110
IOW IOCA0
MOV A,@1
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,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
DJZ R7
JMP AB
MOV A,@U_AD1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV U_AD,A
MOV A,U_AD
SUB A,@_2V0 ;小于2V ,認為沒有電池
JBC R3,C
JMP AD_B ;沒有電池則返回,繼續檢查
BC FLAG,FNOBATT;清楚無電池標志
RET
;===============================================================================================
;連續檢查4次電源電壓,溫度電壓,并求其平均值
AD_PT: MOV A,@4
MOV R7,A
AP: MOV A,@0B00001110
IOW IOCA0
MOV A,@3
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,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
DJZ R7
JMP AP
MOV A,@P_AD1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV P_AD,A
MOV A,@4
MOV R7,A
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -