📄 hw_set_data.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 + -