📄 lcdcharge.asm
字号:
;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 + -