📄 hw_do_with.asm
字号:
HW_ANSWER:
MOV TMR_485,#255 ;2004.6.23防止系统复位
MOV SCON1,#0C0h ;485 禁止接收
MOV SCON,#0C0h ;HW
MOV A,#0FEH
CALL COM_SEND
MOV A,#0FEH
CALL COM_SEND
MOV A,#0FEH
CALL COM_SEND
MOV DPH,#02H
MOV DPL,#HW_681 ;2004.6.9,送第一个68H
MOV A,#68H
MOVX @DPTR,A
MOV DPL,#HW_682
MOVX @DPTR,A
MOV DPL,#HW_L ;数据长度
MOVX A,@DPTR
MOV R4,A ;LENGHT存R4
MOV R6,#0 ;校验和初值
MOV R5,#10 ;2004.6.9,从68H至HW_L的10字节
MOV DPL,#HW_681
SEND_HEAD: MOVX A,@DPTR
CALL COM_SEND
ADD A,R6
MOV R6,A ;校验和计算
CLR A
MOVX @DPTR,A ;清零红外RAM数据区
INC DPTR
DJNZ R5,SEND_HEAD
MOV A,R4 ;LENGHT存R4
JZ SEND_CHK
MOV DPL,#HW_BUF0 ;SEND 数据体
SEND_DATA: MOVX A,@DPTR
ADD A,#33H
CALL COM_SEND
ADD A,R6
MOV R6,A
CLR A
MOVX @DPTR,A ;清零红外RAM数据区
INC DPTR
DJNZ R4,SEND_DATA
SEND_CHK: MOV A,R6 ;SEND 校验和
CALL COM_SEND
MOV A,#16H ;SEND 结束符
CALL COM_SEND
MOV ERR_inf,#0 ;CLR 错误信息
MOV SCON,#0D0h ;HW
RET
;**************************************************************
;MOV要发送的数据TO A
;**************************************************************
COM_SEND:
MOV R2,HW_RS
CJNE R2,#'R',COM0_SEND
MOV C,P ;PSW.0=P;经测试,与下一个不可合并
MOV ETB8,C
MOV SBUF1,A
JNB ETI,$ ;2004.6.23 可能导致系统复位
CLR ETI
RET
COM0_SEND:
MOV C,P ;PSW.0=P
MOV TB8,C
MOV SBUF,A
JNB TI,$ ;2004.6.23 可能导致系统复位
CLR TI
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;2004.6.17:以下为:表底码设置、密码处理
;*****************************************
HW_ERR2: JMP RESET_SYS
HW_DO_WITH_SET:
MOV A,HW_RS ;2004.6.13
CJNE A,#'H',HW_ERR2
MOV HW_RS,#'h' ;2004.6.13
; CALL CHK_KEY ;2004.6.18:设置时首先验证密码 ;2004.12.5LI
; JB KEY_ERR,HW_SET_NO_TMP1
MOV A,HW_DI1L
CJNE A,#0C0H,HW_SET_C117
MOV A,HW_DI0L
CJNE A,#35H,HW_SET_C012 ;2004.6.17
MOV WP_CTR,#'W'
CALL SET_MTR_RELY ;设置继电器
JMP HW_SET_ANSWER
HW_SET_NO_TMP1: JMP HW_SET_ANS_NO
;***********************************************************
HW_SET_C012: ;2004.6.19 设置时分秒、再设置年月日周
CJNE A,#12H,HW_SET_C0A0;C032
MOV WP_CTR,#'W'
CALL SET_DATE_TIME12 ;*设年,月,日,周,时,分,秒,并校验数据格式是否RIGHT
MOV R0,#MINUTE
MOV @R0,#0FFH
JMP HW_SET_ANSWER
HW_SET_C0A0: ;;2005.5.18
CJNE A,#0A0H,HW_SET_C0A2
JNB PROG_BIT,HW_SET_NO_TMP1
MOV WP_CTR,#'W'
CALL SAVE_SZ ;设置时钟系数
MOV R0,#MINUTE
MOV @R0,#0FFH
JMP HW_SET_ANSWER
HW_SET_C0A2: ;;2005.5.18
CJNE A,#0A2H,HW_SET_NO_ID
JNB PROG_BIT,HW_SET_NO_TMP1
MOV WP_CTR,#'W'
CALL SAVE_JLMX ;设置
MOV R0,#MINUTE
MOV @R0,#0FFH
JMP HW_SET_ANSWER
HW_SET_NO_ID: JMP HW_SET_ANS_ID_ERR
;*****************************************************
;2004.6.27
;*****************************************************
HW_SET_C117: MOV A,HW_DI1L ;DI1
CJNE A,#0C1H,HW_SET_C3
MOV A,HW_DI0L ;DI0
HW_SET_C154: CJNE A,#54H,HW_SET_C155 ;设A电压修整系数
JNB PROG_BIT,HW_SET_NO_TMP
MOV WP_CTR,#'W'
CALL SET_V_A
JMP HW_SET_ANSWER
;********************************************
HW_SET_C155: CJNE A,#55H,HW_SET_NO_TMP;HW_SET_C15A ;设A电流修整系数
JNB PROG_BIT,HW_SET_NO_TMP
MOV WP_CTR,#'W'
CALL SET_I_A
JMP HW_SET_ANSWER
;*****************************************
;2004.6.19
;*****************************************
HW_SET_C3: CJNE A,#0C3H,HW_SET_D430 ;DI1
MOV A,HW_DI0L
CJNE A, #3FH,HW_SET_NO_TMP; ;DI0,
MOV WP_CTR,#'W'
CALL SET_FL_TAB ;*设费率号及时段
MOV R0,#MINUTE ;启动时段检查
MOV @R0,#0FFH
JMP HW_SET_ANSWER
HW_SET_NO_TMP: JMP HW_SET_ANS_NO
;******************************************
;设置显示配置项
;******************************************
HW_SET_D430: CJNE A,#0D4H,HW_SET_NO_TMP
MOV A,HW_DI0L ;DI0
CJNE A,#30H,HW_SET_D410 ;设显示配置项
MOV WP_CTR,#'W'
CALL SAVE_DIS_CRLB
JMP HW_SET_ANSWER
;********************************************
HW_SET_D410: CJNE A,#10H,HW_SET_NO_TMP ;HW_SET_D411 ;设当前、上月电能清0
JNB PROG_BIT,HW_SET_ANS_NO
CALL CLR_DL0
JMP HW_SET_ANSWER
;********************************************
;HW_SET_D411: CJNE A,#11H,HW_SET_D412 ;设需量清0
; JNB PROG_BIT,HW_SET_ANS_NO
; CALL CLR_XL0
; JMP HW_SET_ANSWER
;********************************************
;HW_SET_D412: CJNE A,#12H,HW_SET_NO_TMP ;设事件清0
; JNB PROG_BIT,HW_SET_ANS_NO
; CALL CLR_SJ0
; JMP HW_SET_ANSWER
;*****************************************
HW_SET_ANSWER: MOV A,ERR_inf
JNZ HW_SET_ANS_NO
JB E2P_ERR,HW_SET_ANS_NO
MOV DPL,#HW_L
CLR A
MOVX @DPTR,A
MOV DPL,#HW_CTR
MOV A,#84H
MOVX @DPTR,A
MOV DPL,#HW_BUF0
CLR A
MOVX @DPTR,A
JMP HW_ANSWER
HW_SET_ANS_ID_ERR:
SETB ID_ERR
HW_SET_ANS_NO: ;应答 数据否定帧
MOV DPL,#HW_L
MOV A,#1
MOVX @DPTR,A
MOV DPL,#HW_CTR
MOV A,#0C4H
MOVX @DPTR,A
MOV DPL,#HW_BUF0
MOV A,ERR_inf ;错误信息字
MOVX @DPTR,A
JMP HW_ANSWER
;********************************************************
SET_ANS_NO_TMP: JMP HW_SET_ANS_NO
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;2004.6.30 广播帧设置表号,使用C0 32方式,不验证密码
;*****************************************************
HW_ERR3: JMP RESET_SYS
HW_DO_WITH_GB: NOP
NOP
MOV A,HW_RS ;2004.6.13
CJNE A,#'H',HW_ERR3
MOV HW_RS,#'h' ;2004.6.15
MOV A,HW_DI1L
CJNE A,#0C0H,SET_ANS_NO_TMP
MOV A,HW_DI0L
CJNE A,#32H,SET_ANS_NO_TMP ;2004.6.30
JNB PROG_BIT,SET_ANS_NO_TMP
MOV WP_CTR,#'W'
CALL GB_SET_MTR_SNO ;*强制设电表号,并校验数据格式是否RIGHT
CALL RD_SNO
MOV DPH,#2
MOV DPL,#MTR_ADDR0
MOV R1,#RD_BUF0
MOV R7,#6
CALL LOOP_R1_TO_DPTR
MOV DPL,#HW_L
MOV A,#0
MOVX @DPTR,A
MOV DPL,#HW_CTR
MOV A,#84H
MOVX @DPTR,A
MOV DPL,#HW_BUF0
MOV A,#0
MOVX @DPTR,A
JMP HW_ANSWER
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -