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

📄 hw_set_data.asm

📁 基于PL3000芯片的单相复费率多功能电表的应用程序。
💻 ASM
字号:
;************************************************************
;文档类型: 原代码 
;项目编号: 
;文档编号: 
;修订版本: v1.0
;生成日期: 2005.6.6
;文档作者: LIHENG
;审    核: 
;************************************************************
;相关文档: RS485协议处理,处理有关信息设置
;文档编号      说明 
;************************************************************
;修订版本: 
;修订版本: 
;************************************************************
$INCLUDE	(RAML128.INC)
$INCLUDE	(RAMH128.INC)
$INCLUDE	(24ADDR.INC)
$INCLUDE	(CONST.INC)
$INCLUDE	(IO.INC)
$INCLUDE	(RAM.INC)
$INCLUDE	(PL3200.INC)

CODE_REG	SEGMENT	CODE
RSEG		CODE_REG
;PUBLIC          SET_AUTO_DATE
PUBLIC          SET_DATE_TIME12
PUBLIC          SET_FL_TAB
;PUBLIC          SET_KEY
PUBLIC          SET_MTR_RELY
;PUBLIC          SET_MTR_SNO
PUBLIC          GB_SET_MTR_SNO
PUBLIC          WR_PARA_TO_24

PUBLIC          SET_V_A
PUBLIC          SET_I_A
;PUBLIC          SET_AUTO_DAY    
;PUBLIC          SET_YG_JLFS  
PUBLIC          SAVE_JLMX    
;*******************************;调用子程序情况:
EXTRN   CODE(WR_CMP)   
EXTRN   CODE(RESET_SYS)
EXTRN   CODE(WR24_DO_CHK)
EXTRN   CODE(WR_MTR_RELY)

;***************************************************
;设置A相电压修整系数
;***************************************************
SET_V_A:	MOV	A,HW_RS          
		CJNE	A,#'h',ERR_38       	
	        MOV     DPL,#HW_BUF6
	        MOVX    A,@DPTR
	        MOV     WR_BUF0,A
	        INC     DPTR
	        MOVX    A,@DPTR
	        MOV     WR_BUF1,A
	        INC     DPTR
	        MOVX    A,@DPTR
	        MOV     WR_BUF2,A
	        
	        MOV     DPH,#2
	        MOV     DPL,#KUA_3
	        MOVX    A,@DPTR
	        CPL     A
	        MOVX    @DPTR,A 
	        MOV     DPH,#2
	        		
		CLR     WP
		MOV	ADDR_24,#V_A_24
		MOV	WR_ID,#WR_2414
		MOV	WR_N,#4 
		MOV     A,#4
		ADD     A,#'X'
		MOV     WR_N_X,A
		JMP     WR_PARA_TO_24
;***************************************************
;设置A相电流修整系数
;***************************************************
ERR_38:		LJMP	RESET_SYS
SET_I_A:	MOV	A,HW_RS          
		CJNE	A,#'h',ERR_38        	
	        MOV     DPL,#HW_BUF6
	        MOVX    A,@DPTR
	        MOV     WR_BUF0,A
	        INC     DPTR
	        MOVX    A,@DPTR
	        MOV     WR_BUF1,A
	        INC     DPTR
	        MOVX    A,@DPTR
	        MOV     WR_BUF2,A
	        
	        MOV     DPH,#2
	        MOV     DPL,#KIA_3
	        MOVX    A,@DPTR
	        CPL     A
	        MOVX    @DPTR,A 
	        MOV     DPH,#2
	        		
		CLR     WP
		MOV	ADDR_24,#I_A_24
		MOV	WR_ID,#WR_2414
		MOV	WR_N,#4 
		MOV     A,#4
		ADD     A,#'X'
		MOV     WR_N_X,A
		JMP     WR_PARA_TO_24
;***************************************************
;设置有功计量方式10 有功总=有功正,11 有功总=正+反
;***************************************************
SAVE_JLMX:      MOV	A,HW_RS           ;2004.6.13
		CJNE	A,#'h',ERR_3
		
		MOV     DPL,#HW_BUF6
	        MOVX    A,@DPTR
	        MOV     WR_BUF0,A
	        INC     DPTR
	        MOVX    A,@DPTR
	        MOV     WR_BUF1,A
	        CLR     WP
		MOV	ADDR_24,#JLMX_24
		MOV	WR_ID,#WR_2414
		MOV	WR_N,#3
		MOV     A,#3
		ADD     A,#'X'
		MOV     WR_N_X,A
		JMP     WR_PARA_TO_24
;		
;***************************************************
;设置无功计量方式10 无功总=无功正,11 无功总=正+反
;***************************************************
;SET_WG_JLFS:    MOV	A,HW_RS           ;2004.6.13
;		CJNE	A,#'h',ERR_3
		
;		MOV     DPL,#HW_BUF6
;	        MOVX    A,@DPTR
;	        ANL     A,#11H
;	        MOV     WR_BUF0,A
;	        CLR     WP
;		MOV	ADDR_24,#WG_JLFS_24
;		MOV	WR_ID,#WR_2414
;		MOV	WR_N,#2
;		MOV     A,#2
;		ADD     A,#'X'
;		MOV     WR_N_X,A
;		JMP     WR_PARA_TO_24		    	
;***************************************************
; 设置自动抄表时   
;***************************************************
;SET_AUTO_DAY:	;设自动抄表时
;		MOV	A,HW_RS           ;2004.6.13
;		CJNE	A,#'h',ERR_3
        	
;	        MOV     DPL,#HW_BUF6
;	        MOVX    A,@DPTR
;	        MOV     WR_BUF0,A
;	        		
;		SETB    TIM_ERR       ;验证时间合法性
;		MOV     A,WR_BUF0;HH
;		CLR     C
;		SUBB    A,#24H
;		JNC     SET_RET;>=24H 
;		CLR     TIM_ERR        	
;写24XX
;		CLR     WP
;		MOV	ADDR_24,#AUTO_H_24
;		MOV	WR_ID,#WR_2414
;		MOV	WR_N,#2
;		MOV     A,#2
;		ADD     A,#'X'
;		MOV     WR_N_X,A
;		JMP     WR_PARA_TO_24
		
ERR_3:		LJMP	RESET_SYS			
;***************************************************
;2004.6.19 设置自动抄表日期   WR_2402
;***************************************************
;SET_AUTO_DATE:	;设自动抄表日期
;		MOV	A,HW_RS           ;2004.6.13
;		CJNE	A,#'h',ERR_3
        	
;	        MOV     DPL,#HW_BUF6
;	        MOVX    A,@DPTR
;	        MOV     WR_BUF0,A
;	        INC     DPTR
;	        MOVX    A,@DPTR
;	        MOV     WR_BUF1,A
		
;		SETB    TIM_ERR       ;2004.6.19 验证时间合法性
;		MOV     A,WR_BUF0;HH
;		CLR     C
;		SUBB    A,#24H
;		JNC     SET_RET;>=24H 
;		MOV     A,WR_BUF1;DD
;		JZ      SET_RET
;		CLR     C
;		SUBB    A,#29H
;;		JNC     SET_RET;>=29H 
;		CLR     TIM_ERR        	
;写24XX
;		CLR     WP
;		MOV	ADDR_24,#AUTO_24
;		MOV	WR_ID,#WR_2414
;		MOV	WR_N,#3 
;		MOV     A,#3
;		ADD     A,#'X'
;		MOV     WR_N_X,A
;		JMP     WR_PARA_TO_24

;**************************************************************
;		;*SET年,月,日,周,时,分,秒
;**************************************************************

SET_DATE_TIME12:	
		MOV	A,HW_RS
		CJNE	A,#'h',ERR_3
		MOV	A,WP_CTR
		CJNE	A,#'W',ERR_3
		MOV	DPL,#HW_BUF9
		CALL    SET_DATE
		CALL    SET_TIME
SET_RET:	RET

;**************************************************************
;设置时间由时到秒 2004.12.4
;************************************************************
SET_TIME:
                MOV     EXT_ADR,#0FFH
	        MOV     EXT_DAT,#0FFH 
	        MOV     DPL,#HW_BUF8	
		MOVX	A,@DPTR
		MOV	EXT_ADR,#83H	;时,时钟
		MOV	EXT_DAT,A
		
		MOV     DPL,#HW_BUF7	
		MOVX	A,@DPTR
		MOV	EXT_ADR,#82H	;分,时钟
		MOV	EXT_DAT,A
		
		MOV     DPL,#HW_BUF6	
		MOVX	A,@DPTR
		MOV	EXT_ADR,#81H	;秒,时钟
		MOV	EXT_DAT,A
        	MOV     EXT_ADR,#0FFH
        	MOV     EXT_DAT,#0 
		RET
;**************************************************************
SET_DATE:	
	        MOV     EXT_ADR,#0FFH
	        MOV     EXT_DAT,#0FFH 	
		MOVX	A,@DPTR
		MOV     EXT_ADR,#84H
		MOV     EXT_DAT,A
	        INC     DPTR
	        MOVX	A,@DPTR
		MOV     EXT_ADR,#85H
		MOV     EXT_DAT,A
	        INC     DPTR
	        MOVX	A,@DPTR
		MOV     EXT_ADR,#86H
		MOV     EXT_DAT,A
	        INC     DPTR
	        MOVX	A,@DPTR
		MOV     EXT_ADR,#87H
		MOV     EXT_DAT,A
		MOV     EXT_ADR,#0FFH
        	MOV     EXT_DAT,#0
        	RET 
;*****************************************************
;设置 8组 费率时段,检查数据合法性:必须为18H字节长
;******************************************************
SET_FL_TAB:
                CALL    CHK_FL 
                JB      DATA_ERR,SET_FL_RET
                NOP
                NOP
                JB      FL_ERR,SET_FL_RET              
                MOV     R6,#8
                MOV     DPL,#HW_BUF6                
SET_FL_X:
        	MOV     R7,#3
		MOV	R1,#WR_BUF0
LOOP_FL1234:
		MOVX	A,@DPTR
		MOV	@R1,A
		INC     DPL
		INC     R1
		DJNZ    R7,LOOP_FL1234
		CLR     C
                MOV     A,#8
                SUBB    A,R6
                MOV     B,#4
                MUL     AB 
		MOV	ADDR_24,#FIRST_FL_T1_24 
		ADD     A,ADDR_24
		MOV     ADDR_24,A
		MOV	WR_ID,#WR_2414   
		MOV	WR_N,#4
		MOV     A,#4
		ADD     A,#'X'
		MOV     WR_N_X,A
		CLR     WP
		MOV	WP_CTR,#'W'
		CALL    WR_PARA_TO_24
		DJNZ    R6,SET_FL_X
SET_FL_RET:	NOP
		NOP
		NOP
		RET
;*****************************************************
ERR_19:		LJMP	RESET_SYS
;*****************************************************
CHK_FL:
		MOV	A,HW_RS           ;2004.6.13
		CJNE	A,#'h',ERR_19
        
		SETB    DATA_ERR       ;2004.6.12 长度不正确时,定义为数据格式错
                      ;首先检验数据长度是否正确,24字节必须全发   ;长度=1EH
	        MOV     DPL,#HW_L
	        MOVX    A,@DPTR
		CJNE    A,#1EH,SET_NFL_RET
		CLR     DATA_ERR

		SETB	FL_ERR
                MOV     R7,#8  
		MOV     DPL,#HW_BUF6
NEXT_FLNUM:
		MOVX    A,@DPTR
		MOV     B,A          
		XRL     A,#1           ;2004.6.12 费率=1 返回错误
		JZ      SET_NFL_RET
		MOV     A,B
		CLR     C
		SUBB    A,#5          ;2004.6.12 费率>=5 返回错误
		JNC     SET_NFL_RET
		INC     DPTR
		INC     DPTR
		INC     DPTR
		DJNZ    R7,NEXT_FLNUM			
		CLR	FL_ERR 	
SET_NFL_RET:	RET
;**************************************************************
;设置密码4位
;**************************************************************
;ERR_15:		JMP	RESET_SYS
;SET_KEY:	NOP			;设KEY
;		NOP
;		NOP
;		MOV	A,HW_RS           ;2004.6.13
;		CJNE	A,#'h',ERR_15
	
;		CLR     WP
;		MOV     DPL,#HW_BUF4
;		MOVX    A,@DPTR
;		MOV	WR_BUF0,A
;		INC     DPTR
;		MOVX    A,@DPTR
;		MOV	WR_BUF1,A
;		INC     DPTR
;		MOVX    A,@DPTR
;		MOV	WR_BUF2,A
;		INC     DPTR
;		MOVX    A,@DPTR
;		MOV	WR_BUF3,A

;                MOV	WR_N,#5       
;                MOV     A,#5
;		ADD     A,#'X'
;		MOV     WR_N_X,A     
;		MOV	ADDR_24,#KEY_24
;		MOV	WR_ID,#WR_2414
;		CALL    WR_PARA_TO_24
;               NOP
;		NOP
;		NOP
;		RET

;*****************************************************
;操作继电器
;*********************************************************		
ERR_244:	JMP	RESET_SYS

SET_MTR_RELY:	NOP
		NOP
		MOV	A,HW_RS           ;2004.6.13
		CJNE	A,#'h',ERR_244
		
		CLR	WP
	        MOV     DPL,#HW_BUF6
	        MOVX    A,@DPTR
	        MOV     WR_BUF0,A
		MOV     WR_BUF1,#00H
LL1:		CALL	WR_MTR_RELY
 
		MOV     R0,#TMR_RLY ;2004.6.16 200ms后操作继电器
		MOV     @R0,#40
		NOP
		NOP
		NOP
		RET
;**************************************************************
;设电表号(替换表号)
;**************************************************************
;SET_MTR_SNO:	NOP
;		NOP
;		MOV	A,HW_RS          ;2004.6.13
;		CJNE	A,#'h',ERR_10
;比较表号,低6位不能为999999H		
;		MOV	R7,#3
;	        MOV     DPL,#HW_BUF6
;CMP_9BH:
;                MOVX    A,@DPTR
;		CJNE	A,#99H,GB_SET_MTR_OK
;		INC	DPTR
;		DJNZ	R7,CMP_9BH
;		NOP
;		NOP
;		NOP
;		RET
				
;**************************************************************
;2004.6.30 强制设置电表号
;**************************************************************
ERR_10:		JMP	RESET_SYS
GB_SET_MTR_SNO:	NOP
		NOP
		MOV	A,HW_RS           ;2004.6.30
		CJNE	A,#'h',ERR_10
;比较表号,低6位不能为999999H		
		MOV	R7,#3
		MOV     DPL,#HW_BUF9
CMP_NOT_99H:
                MOVX    A,@DPTR
		CJNE	A,#99H,GB_SET_MTR_OK
		INC	DPTR
		DJNZ	R7,CMP_NOT_99H
		NOP
		NOP
		NOP
		RET
		
GB_SET_MTR_OK:	
                MOV     DPL,#HW_BUF6
                MOVX    A,@DPTR
		MOV	WR_BUF0,A
		INC     DPTR
		MOVX    A,@DPTR
		MOV	WR_BUF1,A
		INC     DPTR
		MOVX    A,@DPTR
		MOV	WR_BUF2,A
		INC     DPTR
		MOVX    A,@DPTR
		MOV	WR_BUF3,A
		INC     DPTR
		MOVX    A,@DPTR
		MOV	WR_BUF4,A
		INC     DPTR
		MOVX    A,@DPTR
		MOV	WR_BUF5,A

		CLR     WP
		MOV	ADDR_24,#SNO_24
		MOV	WR_ID,#WR_2414
		MOV	WR_N,#7
		MOV     A,#7
		ADD     A,#'X'
		MOV     WR_N_X,A
		CALL    WR_PARA_TO_24

		NOP
		NOP
		NOP
		RET
		
;**********************************************************
WR_PARA_TO_24:
                CALL    WR24_DO_CHK
                MOV	A,ADDR_24
		CPL	A
		MOV	ADDR_24_BAK,A
		MOV	A,WP_CTR
		CJNE	A,#'W',ERR_SET1
		MOV	WP_CTR,WR_N  ;2004.6.18,需要与WR_N相等
		LCALL	WR_CMP
		
		MOV     WR_ID,#0
        	RET

ERR_SET1:	LJMP	RESET_SYS              
;**************************************************************
		END

⌨️ 快捷键说明

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