📄 dtsy.asm
字号:
P2JC EQU 17H
TLED EQU 18H
DISPTIME EQU 19H
LED_BUFF1 EQU 1AH;R
LED_BUFF2 EQU 1BH
LED_BUFF3 EQU 1CH
LED_BUFF4 EQU 1DH ;L
BJTIMES EQU 1EH
LENGTH EQU 1FH
FLAG1 EQU 20H
FLAG2 EQU 21H
FLAG3 EQU 22H
FLAG4 EQU 23H
FLAG5 EQU 24H
MBUY1 EQU 25H ;4
MBUY2 EQU 26H ;5
MBUY3 EQU 27H ;6
MFIELD1 EQU 28H ;7
MFIELD2 EQU 29H ;8
MUSE1 EQU 2AH ;9
MUSE2 EQU 2BH ;0A
MUSE3 EQU 2CH ;0B
MUSE4 EQU 2DH ;0C
MNO1 EQU 2EH ;0D
MNOW1 EQU 2FH ;0F
MNOW2 EQU 30H ;10H
MLOAD1 EQU 31H ;11H
MLOAD2 EQU 32H ;12H
MALP1 EQU 33H ;13H
MALP2 EQU 34H ;14H
HLOAD1 EQU 35H ;15H
HLOAD2 EQU 36H ;16H
;MINFO1 EQU 37H ;17H
;MINFO2 EQU 38H ;18H
MLEF1 EQU 39H
MLEF2 EQU 3AH
MALL1 EQU 3BH
MALL2 EQU 3CH
LOAD1 EQU 3DH
LOAD2 EQU 3EH
MLEF0 EQU 3FH
RESG1 EQU 40H
RESG2 EQU 41H
LOADL EQU 42H
LOADH EQU 43H
DTIME EQU 44H
LIMT1 EQU 45H
LIMT2 EQU 46H
INFOREG EQU 47H
BUFFER_A EQU 48H
BUFFER_B EQU 49H
BUFFER_C EQU 4AH
BUFFER_D EQU 4BH
BUFFER_E EQU 4CH
BUFFER_G EQU 4DH
BUFFER_H EQU 4EH
MIMA1 EQU 4FH
MIMA2 EQU 50H
S30 EQU 51H
FHBUFF1 EQU 52H
FHBUFF2 EQU 53H
DSPLOOP EQU 54H
INFOTIME EQU 55H
chaka_time EQU 56H
BUFF7 EQU 57H
BUFF8 EQU 58H
BUFF9 EQU 59H
BUFFA EQU 5AH
POWST1 EQU 5BH
powst2 equ 5ch
ADDR EQU 5DH
RADD1 EQU 5EH
rdtimes equ 5fh
;wrtimes equ 60h
;DE4MS EQU 61H
;TTFLAG EQU 62H
;watbuf equ 0a6h
;*******************************
CARD_BIT BIT 00H
DISPBLK BIT 01H
DISPBLK1 BIT 02H
SAL_BIT BIT 03H
CARDISP BIT 04H
TLEDBIT BIT 05H
TLEDBIT1 BIT 06H
POWER_BIT BIT 07H
DSP30 BIT 08H
DISPFH BIT 09H
DISPH BIT 0AH
DISPH1 BIT 0BH
DISPALL BIT 0CH
MIMAFLAG BIT 0DH
POIBIT BIT 0EH
;STOPBIT BIT 0FH
PLUBIT BIT 10H
FHBIT1 BIT 11H
FHBIT2 BIT 12H
;INFOBIT1 BIT 13H
LESBIT BIT 14H
LESTA BIT 15H
RAMERR BIT 16H
JDQERR BIT 17H
XBIT18 BIT 18H
MODIFY1 BIT 19H
BCDERR BIT 1AH
XBIT1B BIT 1BH
fo bit 1ch
DISP_BIT BIT 1DH ;插用户卡只显示剩余电量
CHAKA_BIT BIT 1EH ;合闸后延时20秒后才能回写数据
;===============
OUT1 BIT P3.7
OUT2 BIT P3.6
CS BIT P1.0
DI BIT P1.2
DO BIT P1.3
CLK BIT P1.1
CARD_CLK BIT P1.6
CARD_CHECK BIT P3.4
CARD_SDA BIT P1.5
PLUS BIT P3.2
; *******************************
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP PLUSE
ORG 000BH
LJMP T0INT
ORG 001BH
LJMP T1INT
;===========================================
org 0030h
MAIN: MOV SP,#60H
MOV P0,#0FFH
MOV P2,#0FFH
MOV P1,#08H
MOV P3,#03FH
MOV R5,#03H
DELAY1: MOV R3,#0FFH
ACALL DELAY
DJNZ R5,DELAY1
LCALL WATDOG
CLR A
MOV PSW,A
MOV SCON,A
MOV TMOD,#11H
MOV TH1,#0BH
MOV TL1,#0E7H
MOV TH0,#0FAH
MOV TL0,#02BH
MOV TCON,#51H
MOV IP,#01H
MOV IE,#8BH
MOV TLED,#04H
MOV A,POWST1
CJNE A,#12H,PRGTEST
MOV A,POWST2
CJNE A,#34H,PRGTEST
AJMP STATT
PRGTEST:
MOV R0,#7FH
CLR A
CLRR: MOV @R0,A
DJNZ R0,CLRR
MOV POWST1,#012H
MOV POWST2,#034H
setb dispblk
;LCALL LEDTESS
STATT:
MOV FLAG3,#00H
MOV ADDR,#00H
MOV length,#1AH
MOV RADD1,#MBUY1
LCALL CERTIFY ;读取所有存储数据
LCALL PDBCD ;判断剩余电量和总电量正确性
LCALL POW5
CLR A
MOV FHBUFF1,A
MOV FHBUFF2,A
MOV LIMT1,A
;MOV FLAG3,A
;clr infobit
MOV LIMT2,#90
MOV S30,#240
setb cardisp
mov dsploop,#01
mov tled,#04h
SETB DISPBLK
SETB TLEDBIT
CLR TLEDBIT1
MOV INFOREG,#01AH
MOV INFOTIME,#0C1H
SETB POWER_BIT
;LCALL DL150MS
RETS: LCALL WATDOG
ACALL DATAPRO
LCALL WATDOG
ACALL CARD
LCALL WATDOG
ACALL LOADPRO
;ACALL INFOPRO
LCALL WATDOG
LCALL DISPPRO
LCALL WATDOG
ACALL TEST0
AJMP RETS
;-------------------------------------------------------
TEST0: ;MOV A,IE
;XRL A,#08BH
;JNZ TERR
;MOV A,TMOD
;XRL A,#011H
;JNZ TERR
MOV A,INFOTIME
JNZ TESRET1
MOV INFOTIME,#0C1H
MOV A,INFOREG
XRL A,#01AH
JNZ TERR
MOV INFOREG,#00H
TESRET1: DEC INFOTIME
RET
TERR: AJMP terr
RET
;======================================
LOADPRO: JB FHBIT2,END2
JB FHBIT1,END1
RET
END1: MOV A,FHBUFF1
CLR C
SUBB A,LOAD1
MOV A,FHBUFF2
SUBB A,LOAD2
JC END100
MOV LOAD1,FHBUFF1
MOV LOAD2,FHBUFF2
MOV RADD1,#LOAD1
MOV LENGTH,#02H
MOV ADDR, #18H
LCALL WRRAM
END100: MOV A,FHBUFF1
CLR C
SUBB A,MLOAD1
MOV A,FHBUFF2
SUBB A,MLOAD2
JC LOEND
MOV A,MLOAD1
ADD A,MLOAD2
JNZ END101
RET
END101: MOV ADDR,#010H
MOV LENGTH,#02H
MOV RADD1,#HLOAD1
LCALL CERTIFY
MOV A,HLOAD1
ADD A,#01H
DA A
MOV HLOAD1,A
MOV A,HLOAD2
ADDC A,#0H
DA A
MOV HLOAD2,A
MOV ADDR,#10H
MOV LENGTH,#02
MOV RADD1,#HLOAD1
LCALL WRRAM
LCALL POW5
CLR A
MOV LOADH,A
MOV LOADL,A
SETB FHBIT2
LOEND: CLR FHBIT1
CLR A
MOV FHBUFF1,A
MOV FHBUFF2,A
MOV LIMT1,A
MOV LIMT2,#90
RET
END2: MOV A,LOADH
CJNE A,#10,END4
END20: CLR FHBIT2
CLR JDQERR
ACALL POWSTA
AJMP LOEND
END4: JNC END20
END3: RET
;=================
DATAPRO:
JB PLUBIT,DAT0
DARET: RET
DTT1: JNC DTT5
RET
DAT0: CLR PLUBIT
DTT4: INC MLEF0
MOV A,MLEF0
ANL A,#0FH
CJNE A,#0AH,DTT1
DTT5: ANL MLEF0,#0F0H
ACALL COUNT
; MOV A,MLEF2
; CJNE A,MALP2,ALA5
; MOV A,MLEF1
; CJNE A,MALP1,ALA5
; ACALL PZERO
; MOV A,R7
; JNZ ALA7
; JB LESTA,IDLE1
; ACALL POW5
; SETB LESBIT
; RET
;ALA5: JC ALA7 ;IDLE1
;ALA7: CLR LESTA
; CLR LESBIT
IDLE1: ACALL POWEND
IDLL0: RET
; *******************************
COUNT: MOV BUFFA,#14H
MOV resg1,#04H
MOV R1,#MLEF1
CERT4: ACALL BJONE
JB RAMERR,IDLE1
MOV A,BUFF7
MOV @R1,A
INC R1
INC BUFFA
DJNZ RESG1,CERT4
LCALL PDBCD
JB RAMERR,IDLE1
SETB MODIFY1
MOV R0,#MLEF1
MOV R7,#02H
COUNT2: MOV A,@R0
JNZ COUNT1
INC R0
DJNZ R7,COUNT2
ACALL PZERO
MOV A,R7
JNZ COUNT1
SETB JDQERR
CLR MODIFY1
RET
COUNT1: CLR JDQERR
ACALL PZERO
MOV A,R7
JZ SUB1
CJNE A,#01,SUB01
MOV A,MALL1
ADD A,#01H
DA A
MOV MALL1,A
MOV A,MALL2
ADDC A,#00H
DA A
MOV MALL2,A
JNB MODIFY1,COURET
MOV radd1,#MALL1
MOV LENGTH,#02H
MOV addr,#16H
LCALL WRRAM
SUB01: CLR C
ACALL PZERO
MOV A,#0AH
SUBB A,R7
ADD A,#60H
MOV R2,A
MOV R7,#01H
MOV BUFFA,#00H
JB MODIFY1,WRDIAN
RET
SUB1: ACALL SUBBCD
JNB MODIFY1,COURET
MOV RADD1,#MLEF1
MOV LENGTH,#02H
MOV ADDR,#14H
LCALL WRRAM
MOV R7,#09H
MOV R2,#61H
MOV BUFFA,#0AAH
WRDIAN: MOV R5,#01H
MOV R0,#BUFFA
ACALL WRITE
DJNZ R7,WRDIAN
COURET: CLR MODIFY1
RET
SUBBCD: MOV R0,#MLEF1
CLR C
MOV A,#9AH
SUBB A,#01H
ADD A,@R0
DA A
MOV @R0,A
INC R0
CPL C
MOV A,#9AH
SUBB A,#00H
ADD A,@R0
DA A
MOV @R0,A
NEGR: RET
;======================
POWEND: JB RAMERR,POW5
JB FHBIT2,NEGR
MOV R0,#MLEF1
ACALL PBCD1
JB BCDERR,POW5
MOV A,MLEF2
JNZ POWSTA
MOV A,MLEF1
JNZ POWSTA
ACALL PZERO
MOV A,R7
JNZ POWSTA
POW5: CLR OUT2
SETB OUT1
ACALL DL150MS
CLR OUT2
CLR OUT1
acall dl150ms
RET
POWSTA:
CLR OUT1
SETB OUT2
ACALL DL150MS
CLR OUT2
CLR OUT1
ACALL DL150MS
RET
;*******************************
DL150MS: MOV R3,#03CH
DELAY: LCALL WATDOG
DL1M1: MOV R4,#0FAH
DL1M2: NOP
NOP
DJNZ R4,DL1M2
DJNZ R3,delay
RET
;*********************************
PDBCD: MOV R0,#MLEF1
ACALL PBCD1
JB BCDERR,JDQ1
MOV R0,#MALL1
ACALL PBCD1
JB BCDERR,JDQ1
RET
ERRT: MOV R7,#00H
JDQ1: SETB RAMERR
ACALL POW5
RET
;**********************************
PZERO: JB RAMERR,ERRT
MOV R7,#0AH
MOV R2,#60H
PROND: MOV R0,#BUFF7
MOV R5,#01H
ACALL RDRAM
MOV A,BUFF7
JNZ PEND
DJNZ R7,PROND
PEND: RET
;**********************************
BJONE: MOV A,BUFFA
MOV R2,A
MOV R3,A
ADD A,#20H
MOV R4,A
ADD A,#20H
MOV R7,A
MOV R0,#BUFF7
MOV R5,#01H
LCALL RDRAM
MOV A,R4
MOV R2,A
MOV R0,#BUFF8
MOV R5,#01H
LCALL RDRAM
MOV A,R7
MOV R2,A
MOV R0,#BUFF9
MOV R5,#01H
LCALL RDRAM
MOV A,BUFF7
XRL A,BUFF8
JNZ BJ79
MOV A,R7
MOV R2,A
MOV A,BUFF7
XRL A,BUFF9
JNZ WROK
RET
BJ79: MOV A,BUFF7
XRL A,BUFF9
JNZ BJ89
MOV A,R4
MOV R2,A
WROK: MOV R0,#BUFF7
MOV R5,#01H
LCALL WRITE
RET
BJ89: MOV A,BUFF8
XRL A,BUFF9
JNZ BJERR
MOV BUFF7,BUFF8
MOV A,R3
MOV R2,A
AJMP WROK
BJERR: SETB RAMERR
RET
;**********************************
CERTIFY: MOV BJTIMES,#03H
CESTA: MOV RESG1,LENGTH
MOV BUFFA,ADDR
MOV R1,RADD1
CLR RAMERR
CERT1: ACALL BJONE ;读一个字节数据并判断正确性
JB RAMERR,CEEND1
MOV A,BUFF7
MOV @R1,A
INC R1
INC BUFFA
DJNZ RESG1,CERT1
MOV A,MLOAD1
ORL A,MLOAD2
ORL A,MALP1
ORL A,MALP2
JZ CEEND
RET
CEEND1: DJNZ BJTIMES,CESTA
CEEND: LJMP JDQ1
;************************************
WRRAM: JB RAMERR,CEEND
MOV BJTIMES,#03H
WRSTA: MOV R3,LENGTH
MOV R4,ADDR
MOV R1,RADD1
CLR RAMERR
WRCIR: MOV A,R4
MOV R2,A
MOV R7,#02H
WRCIR1: MOV R5,#01H
MOV A,R1
MOV R0,A
LCALL WRITE
JB RAMERR,WREND1
MOV A,R4
ADD A,#20H
MOV R2,A
DJNZ R7,WRCIR1
MOV A,R4
ADD A,#40H
MOV R2,A
MOV R5,#01H
MOV A,R1
MOV R0,A
LCALL WRITE
JB RAMERR,WREND1
INC R4
INC R1
DJNZ R3,WRCIR
RET
WREND1: DJNZ BJTIMES,WRSTA
LJMP JDQ1
;**************************************
RDRAM: CLR EA
rdram1: lcall watdog
CLR CLK
CLR CS
CLR DI
ACALL MCLOCK
SETB CS
SETB DI
ACALL MCLOCK
ACALL MCLOCK
CLR DI
ACALL MCLOCK
MOV A,R2
RLC A
MOV R6,#07H
acall send
CLR A
MOV R6,#08H
READ2: ACALL MCLOCK
SETB DO
MOV C,DO
RLC A
DJNZ R6,READ2
CLR CS
MOV @R0,A
INC R0
INC R2
DJNZ R5,RDRAM1
SETB EA
RET
;*********************************
MCLOCK: NOP
SETB CLK
NOP
NOP
NOP
CLR CLK
NOP
NOP
RET
send: RLC A
MOV DI,C
ACALL MCLOCK
DJNZ R6,SEnd
ret
;*********************************
WRITE: CLR EA
;mov wrtimes,#05h
write1: LCALL WATDOG
CLR CLK
CLR CS
CLR DI
ACALL MCLOCK
SETB CS
SETB DI
ACALL MCLOCK ;1
CLR DI
ACALL MCLOCK ;0
ACALL MCLOCK ;0
MOV A,#0C0H ;11000000
MOV R6,#07H
acall send
CLR DI
CLR CS
WRITE2: NOP
SETB CS
SETB DI
ACALL MCLOCK ;1
CLR DI
ACALL MCLOCK ;0
SETB DI
ACALL MCLOCK ;1
MOV A,R2
RLC A
MOV R6,#07H
acall send
MOV A,@R0
MOV R6,#08H
acall send
CLR DI
CLR CS
NOP
SETB DO
SETB CS
INC R0
INC R2
MOV R6,#0faH
WAIT: NOP
LCALL WATDOG
JB DO,WR3
DJNZ R6,WAIT
;djnz wrtimes,write1
SETB RAMERR
AJMP WR4
WR3: CLR CS
;inc r0
;inc r2
DJNZ R5,WRITE2
WR4: SETB CS
SETB DI
ACALL MCLOCK
CLR DI
ACALL MCLOCK
ACALL MCLOCK
MOV A,#00H
MOV R6,#07H
acall send
CLR CS
SETB EA
RET
;*************************************
CARDIE: CLR CARD_BIT
CARDIE1: RET
CARD: setb card_check
nop
nop
JB CARD_CHECK,CARDIE
nop
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -