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

📄 snt-c485.asm

📁 抄录符合DL/T645-1997的电表
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		MOV	DPH,#1
		LCALL	WRITE_1
		INC	TEMP1
		INC	TEMP2
		DJNZ	R2,DEL_A5	;以上为跨页的表地址转移
		MOV	R0,#00		;以下为页2的表地址转移
		MOV	R1,#01
DEL_A5A:	MOV	DPH,#2
DEL_A6:		MOV	B,#07H
		MOV	A,R0
		MUL	AB
		MOV	DPL,A
		MOV	TEMP1,A		;
		LCALL	READ_1
		CJNE	A,#0AAH,DEL_A8
		MOV	A,R1
		MOV	B,#07H
		MUL	AB
		MOV	DPL,A
		MOV	TEMP2,A
		MOV	R2,#07H
DEL_A7:		MOV	DPL,TEMP2
		LCALL	READ_1
		MOV	DPL,TEMP1
		LCALL	WRITE_1
		INC	TEMP1
		INC	TEMP2
		DJNZ	R2,DEL_A7
		INC	R0
		INC	R1
		LJMP	DEL_A6
DEL_A8:		LJMP	DEL_A3

		;*******************************************************
		;判断表地址中是否有所给表号子程序,即从EEPROM中找到要所给
		;的表号,将表号序号存于寄存器R2中.YOUBIAO为是否有表标志
		;寄存器: R2:地址序号	R3:表号字节数
		;R0:所给表号的高字节地址   TEMP:临时寄存器
		;*******************************************
PAN_HAO:	MOV	R2,#00H
		MOV	R0,#BADD5
PAN_LOOP:	MOV	A,R2
		CJNE	A,#36,PAN_1
PAN_1:		JNC	PAN_4
		MOV	A,R2
		MOV	B,#07
		MUL	AB
		MOV	DPL,A
		MOV	DPH,#01H
		LCALL	READ_1
		INC	DPL
		CJNE	A,#0AAH,PAN_2B
		MOV	R3,#6
PAN_2:		LCALL	READ_1
		MOV	TEMP,A
		MOV	A,@R0
		CJNE	A,TEMP,PAN_3
		INC	DPTR
		INC	R0
		DJNZ	R3,PAN_2
		SETB	YOUBIAO
PAN_2A:		RET
PAN_2B:		CLR	YOUBIAO
		RET
PAN_3:		INC	R2
		MOV	R0,#BADD5
		LJMP	PAN_LOOP
PAN_4:		MOV	A,R2
		CLR	C
		SUBB	A,#36
		MOV	R2,A
PAN_4A:		MOV	A,R2
		MOV	B,#07H
		MUL	AB
		MOV	DPL,A
		MOV	DPH,#2
		LCALL	READ_1
		INC	DPL
		CJNE	A,#0AAH,PAN_5B
		MOV	R3,#6
PAN_5:		LCALL	READ_1
		MOV	TEMP,A
		MOV	A,@R0
		CJNE	A,TEMP,PAN_6
		INC	DPTR
		INC	R0
		DJNZ	R3,PAN_5
		SETB	YOUBIAO
		MOV	A,R2
		ADD	A,#36
		MOV	R2,A
PAN_5A:		RET
PAN_5B:		CLR	YOUBIAO
		RET
PAN_6:		INC	R2
		MOV	R0,#BADD5
		LJMP	PAN_4A

;*********************************************
;向上位机回应增/删表地址子程序
;*********************************************
ADDEL:		JNB	ZS_OK,ADDEL_5
		MOV	41H,#97H	;41H:97	起始符
		MOV	R3,#97H
		MOV	42H,#40H	;42H:40	电表代号
		MOV	A,R3
		ADD	A,42H
		MOV	R3,A
		MOV	A,TEMP
		MOV	43H,A
		ADD	A,R3
		MOV	R3,A
		MOV	R2,#6		;43H-49H:A6-A0 采集器地址
		MOV	R0,#BADD5
		MOV	R1,#44H
ADDEL_1:	MOV	A,@R0
		MOV	@R1,A
		ADD	A,R3
		MOV	R3,A
		INC	R1
		INC	R0
		DJNZ	R2,ADDEL_1
		MOV	A,R3
		MOV	@R1,A		;4AH:R3	校验和
		INC	R1
		MOV	@R1,#16H	;4BH:16	结束符
		MOV	R1,#41H
		MOV	R2,#11
ADDEL_2:	MOV	SBUF,@R1
ADDEL_3:	JBC	TI,ADDEL_4
		LJMP	ADDEL_3
ADDEL_4:	INC	R1
		DJNZ	R2,ADDEL_2
ADDEL_5:	RET



;************************************
;定时器T0中断服务子程序,0.05S中断一次
;************************************
TINT0:		MOV	TH0,#4CH	;T=11059200*0.05/12=B400H 10000-B400=4C00H
		SETB	TINT_F
					;*** 以下用于10S延时并判断是否到 ***
		JNB	ST_YAN,TINT2	;是否允许10秒定时
		PUSH	ACC
		PUSH	PSW
		CLR	C
		MOV	A,MINLAY_L
		ADD	A,#01H
		MOV	MINLAY_L,A
		CLR	C
		SUBB	A,#0C8H
		JC	TINT1
		MOV	MINLAY_L,#0
		SETB	MIN_FLAG
TINT1:		POP	PSW
		POP	ACC
TINT2:		RETI


;***********************串行中断服务子程序************************
;本程序用于接收上位机下达的命令,发送数据时不进中断
;*****************************************************************
ESINT:		CLR	ES
		PUSH	ACC
		PUSH	B
		PUSH	DPH
		PUSH	DPL
		PUSH	PSW
		PUSH	TEMP
		CLR	RS1		  ;工作寄存器用1区
		SETB	RS0

		MOV	A,SBUF
		CLR	RI
		MOV	R5,A
		MOV	A,COMMTYPE		;命令字类型
		CJNE	A,#00H,ACOMM1A
		MOV	A,RECCNT
		RL	A
		MOV	DPTR,#ACOMM1		;COMMTYPE=0时,判断如下
		JMP	@A+DPTR

ACOMM1:		AJMP	ACOMM2			;帧头
		AJMP	ACOMM3			;表类型
		AJMP	ACOMM4			;控制码

ACOMM1A:	LJMP	BCOMM
ACOMM2:		MOV	A,R5			;判断帧头
		CJNE	A,#97H,ACOMM2A
		INC	RECCNT
		MOV	R3,#97H
		LJMP	RETURN
ACOMM2A:	MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

ACOMM3:		MOV	A,R5			;判断表类型
		CJNE	A,#40H,ACOMM3A
		INC	RECCNT
		MOV	A,R3
		ADD	A,R5
		MOV	R3,A
		LJMP	RETURN
ACOMM3A:	MOV	COMMTYPE,#0
		MOV	RECCNT,#0
;		LJMP	RETURN
		LJMP	ACOMM2

ACOMM4:		MOV	A,R5			;判断控制码
		MOV	B,A
		CJNE	A,#0A1H,ACOMM4A
		MOV	COMMTYPE,#01H		;设置采集器地址
		LJMP	ACOMM4H
ACOMM4A:	CJNE	A,#0A2H,ACOMM4B
		MOV	COMMTYPE,#02H		;增表地址
		LJMP	ACOMM4H
ACOMM4B:	CJNE	A,#0A3H,ACOMM4C
		MOV	COMMTYPE,#03H		;删表地址
		LJMP	ACOMM4H
ACOMM4C:	CJNE	A,#00H,ACOMM4D
		MOV	COMMTYPE,#04H		;读单表数据
		LJMP	ACOMM4H
ACOMM4D:	CJNE	A,#0A5H,ACOMM4E
		MOV	COMMTYPE,#05H		;读表地址
		LJMP	ACOMM4H
ACOMM4E:	CJNE	A,#0A6H,ACOMM4F
		MOV	COMMTYPE,#06H		;写表地址
		LJMP	ACOMM4H
ACOMM4F:	CJNE	A,#0A7H,ACOMM4G
		MOV	COMMTYPE,#07H		;抄表数据
		LJMP	ACOMM4H
ACOMM4G:	MOV	COMMTYPE,#0
		MOV	RECCNT,#0
;		LJMP	RETURN
		LJMP	ACOMM2

ACOMM4H:	INC	RECCNT
		MOV	A,B
		ADD	A,R3
		MOV	R3,A
		LJMP	RETURN
		;*****************;设置采集器地址部分*****************
ACOMM4I:	LJMP	CCOMM
BCOMM:		CJNE	A,#01H,ACOMM4I
		MOV	A,RECCNT		;设置采集器地址
		CLR	C
		SUBB	A,#03H
		RL	A
		MOV	DPTR,#BCOMM1
		JMP	@A+DPTR

BCOMM1:		AJMP	BCOMM2			;数据长度
		AJMP	BCOMM3			;地址A6
		AJMP	BCOMM4			;地址A5
		AJMP	BCOMM5			;地址A4
		AJMP	BCOMM6			;地址A3
		AJMP	BCOMM7			;地址A2
		AJMP	BCOMM8			;地址A1
		AJMP	BCOMM9			;地址A0
		AJMP	BCOMMA			;序列号
		AJMP	BCOMMB			;校验和
		AJMP	BCOMMC			;结束符16H

BCOMM2:		MOV	A,R5			;判数据长度
		CJNE	A,#08H,BCOMM2A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN
BCOMM2A:	MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

BCOMM3:		MOV	A,R5			;暂存采集器地址A6
		MOV	ADDR6,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM4:		MOV	A,R5			;暂存采集器地址A5
		MOV	ADDR5,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM5:		MOV	A,R5			;暂存采集器地址A4
		MOV	ADDR4,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM6:		MOV	A,R5			;暂存采集器地址A3
		MOV	ADDR3,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM7:		MOV	A,R5			;暂存采集器地址A2
		MOV	ADDR2,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM8:		MOV	A,R5			;暂存采集器地址A1
		MOV	ADDR1,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMM9:		MOV	A,R5			;暂存采集器地址A0
		MOV	ADDR0,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMMA:		MOV	A,R5			;暂存采集器序列号
		MOV	SERNO,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

BCOMMB:		MOV	A,R5			;判校验和
		MOV	B,A
		MOV	A,R3
		CJNE	A,B,BCOMMD
		INC	RECCNT
		LJMP	RETURN

BCOMMC:		MOV	A,R5			;判结束符
		CJNE	A,#16H,BCOMMD
		LCALL	STOR_ADDR		;存采集器地址及序列号
		LCALL	RET_DI
BCOMMD:		MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

		;***************增表地址部分********************
BCOMMDA:	LJMP	DCOMM

CCOMM:		CJNE	A,#02H,BCOMMDA
		MOV	A,RECCNT		;增加表地址
		CLR	C
		SUBB	A,#03H
		RL	A
		MOV	DPTR,#CCOMM1
		JMP	@A+DPTR

CCOMM1:		AJMP	CCOMM2			;数据长度
		AJMP	CCOMM3			;地址A6
		AJMP	CCOMM4			;地址A5
		AJMP	CCOMM5			;地址A4
		AJMP	CCOMM6			;地址A3
		AJMP	CCOMM7			;地址A2
		AJMP	CCOMM8			;地址A1
		AJMP	CCOMM9			;地址A0
		AJMP	CCOMMA			;表地址A5
		AJMP	CCOMMB			;表地址A4
		AJMP	CCOMMC			;表地址A3
		AJMP	CCOMMD			;表地址A2
		AJMP	CCOMME			;表地址A1
		AJMP	CCOMMF			;表地址A0
		AJMP	CCOMMG			;校验和
		AJMP	CCOMMH			;结束符16H

CCOMM1A:	LJMP	CCOMMI
CCOMM2:		MOV	A,R5			;判数据长度
		CJNE	A,#0DH,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM3:		MOV	A,R5			;判采集器地址A6
		CJNE	A,CK_ADDR6,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM4:		MOV	A,R5			;判采集器地址A5
		CJNE	A,CK_ADDR5,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM5:		MOV	A,R5			;判采集器地址A4
		CJNE	A,CK_ADDR4,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM6:		MOV	A,R5			;判采集器地址A3
		CJNE	A,CK_ADDR3,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN
		LJMP	RETURN

CCOMM7:		MOV	A,R5			;判采集器地址A2
		CJNE	A,CK_ADDR2,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM8:		MOV	A,R5			;判采集器地址A1
		CJNE	A,CK_ADDR1,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMM9:		MOV	A,R5			;判采集器地址A0
		CJNE	A,CK_ADDR0,CCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMMA:		MOV	A,R5			;暂存表地址A5
		MOV	DBADR5,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMMB:		MOV	A,R5			;暂存表地址A4
		MOV	DBADR4,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

CCOMMC:		MOV	A,R5			;暂存表地址A3
		MOV	DBADR3,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


CCOMMD:		MOV	A,R5			;暂存表地址A2
		MOV	DBADR2,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


CCOMME:		MOV	A,R5			;暂存表地址A1
		MOV	DBADR1,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


CCOMMF:		MOV	A,R5			;暂存表地址A0
		MOV	DBADR0,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


CCOMMG:		MOV	A,R5			;判校验和
		MOV	B,A
		MOV	A,R3
		CJNE	A,B,CCOMMI
		INC	RECCNT
		LJMP	RETURN

CCOMMH:		MOV	A,R5			;判结束符
		CJNE	A,#16H,CCOMMI
		MOV	R0,#BADD5
		MOV	R1,#DBADR5
		MOV	R2,#6
CCOMMHA:	MOV	A,@R1
		MOV	@R0,A
		INC	R0
		INC	R1
		DJNZ	R2,CCOMMHA
		LCALL	ADDR_ADD		;增加表地址
		LCALL	ADDEL
		MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

CCOMMI:		MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

		;***************删表地址部分***************
CCOMMJ:		LJMP	ECOMM

DCOMM:		CJNE	A,#03H,CCOMMJ
		MOV	A,RECCNT		;删除表地址
		CLR	C
		SUBB	A,#03H
		RL	A
		MOV	DPTR,#DCOMM1
		JMP	@A+DPTR

DCOMM1:		AJMP	DCOMM2			;数据长度
		AJMP	DCOMM3			;地址A6
		AJMP	DCOMM4			;地址A5
		AJMP	DCOMM5			;地址A4
		AJMP	DCOMM6			;地址A3
		AJMP	DCOMM7			;地址A2
		AJMP	DCOMM8			;地址A1
		AJMP	DCOMM9			;地址A0
		AJMP	DCOMMA			;表地址A5
		AJMP	DCOMMB			;表地址A4
		AJMP	DCOMMC			;表地址A3
		AJMP	DCOMMD			;表地址A2
		AJMP	DCOMME			;表地址A1
		AJMP	DCOMMF			;表地址A0
		AJMP	DCOMMG			;校验和
		AJMP	DCOMMH			;结束符16H

DCOMM1A:	LJMP	DCOMMI
DCOMM2:		MOV	A,R5			;判数据长度
		CJNE	A,#0DH,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM3:		MOV	A,R5			;判采集器地址A6
		CJNE	A,CK_ADDR6,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM4:		MOV	A,R5			;判采集器地址A5
		CJNE	A,CK_ADDR5,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM5:		MOV	A,R5			;判采集器地址A4
		CJNE	A,CK_ADDR4,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM6:		MOV	A,R5			;判采集器地址A3
		CJNE	A,CK_ADDR3,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN
		LJMP	RETURN

DCOMM7:		MOV	A,R5			;判采集器地址A2
		CJNE	A,CK_ADDR2,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM8:		MOV	A,R5			;判采集器地址A1
		CJNE	A,CK_ADDR1,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMM9:		MOV	A,R5			;判采集器地址A0
		CJNE	A,CK_ADDR0,DCOMM1A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMMA:		MOV	A,R5			;暂存表地址A5
		MOV	DBADR5,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

DCOMMB:		MOV	A,R5			;暂存表地址A4
		MOV	DBADR4,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


DCOMMC:		MOV	A,R5			;暂存表地址A3
		MOV	DBADR3,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


DCOMMD:		MOV	A,R5			;暂存表地址A2
		MOV	DBADR2,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


DCOMME:		MOV	A,R5			;暂存表地址A1
		MOV	DBADR1,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


DCOMMF:		MOV	A,R5			;暂存表地址A0
		MOV	DBADR0,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN


DCOMMG:		MOV	A,R5			;判校验和
		MOV	B,A
		MOV	A,R3
		CJNE	A,B,DCOMMI
		INC	RECCNT
		LJMP	RETURN

DCOMMH:		MOV	A,R5			;判结束符
		CJNE	A,#16H,DCOMMI
		MOV	R0,#BADD5
		MOV	R1,#DBADR5
		MOV	R2,#6
DCOMMHA:	MOV	A,@R1
		MOV	@R0,A
		INC	R0
		INC	R1
		DJNZ	R2,DCOMMHA
		LCALL	DEL_ADDR		;删除表地址
		LCALL	ADDEL
		MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

DCOMMI:		MOV	COMMTYPE,#0
		MOV	RECCNT,#0
		LJMP	RETURN

		;*********************读单表数据命令部分***********
DCOMMJ:		LJMP	FCOMM
ECOMM:		CJNE	A,#04H,DCOMMJ
		MOV	A,RECCNT		;读单表数据
		CLR	C
		SUBB	A,#03H
		RL	A
		MOV	DPTR,#ECOMM1
		JMP	@A+DPTR

ECOMM1:		AJMP	ECOMM2			;表地址A5
		AJMP	ECOMM3			;表地址A4
		AJMP	ECOMM4			;表地址A3
		AJMP	ECOMM5			;表地址A2
		AJMP	ECOMM6			;表地址A1
		AJMP	ECOMM7			;表地址A0
		AJMP	ECOMM8			;控制码
		AJMP	ECOMM9			;数据域长度
		AJMP	ECOMMA			;数据标识A0H
		AJMP	ECOMMB			;数据标识17H
		AJMP	ECOMMC			;序列号
		AJMP	ECOMMD			;数据
		AJMP	ECOMME			;校验和
		AJMP	ECOMMF			;结束符16H

ECOMM2:		MOV	A,R5			;暂存表地址A5
		MOV	DBADR5,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

ECOMM3:		MOV	A,R5			;暂存表地址A4
		MOV	DBADR4,A
		ADD	A,R3
		MOV	R3,A
		INC	RECCNT
		LJMP	RETURN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -