⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtsy.asm

📁 89C51做的单相预付费电表源程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:

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 + -