📄 hw_do_with.asm
字号:
2;************************************************************
;文档类型: 原代码
;项目编号:
;文档编号:
;修订版本: v1.0
;生成日期: 2003.9.25
;文档作者: LI
;审 核:
;************************************************************
;相关文档: RS485接收
;文档编号 说明
;************************************************************
;修订版本: v3.0
;修订日期: 2005.5.20
;************************************************************
$INCLUDE (RAML128.INC)
$INCLUDE (RAMH128.INC)
$INCLUDE (IO.INC)
$INCLUDE (PL3200.INC)
$INCLUDE (CONST.INC)
$INCLUDE (RAM.INC)
NAME HW_DO_WITH
CODE_REG SEGMENT CODE
RSEG CODE_REG
PUBLIC HW_DO_WITH
;*******************************;调用子程序情况:
EXTRN CODE(RD_SNO) ;读电表号
EXTRN CODE(ASK_MTR_REV) ;抄电表常数
EXTRN CODE(ASK_MTR_RELY) ;抄电表继电器状态
EXTRN CODE(ASK_DATE_TIME) ;READ DATE_TIME
EXTRN CODE(ASK_FL_TABLE) ;READ 1FL TIME
EXTRN CODE(SET_MTR_RELY)
EXTRN CODE(SET_FL_TAB)
EXTRN CODE(SET_DATE_TIME12)
EXTRN CODE(RESET_SYS)
EXTRN CODE(GB_SET_MTR_SNO)
EXTRN CODE(ASK_SZ)
EXTRN CODE(SAVE_SZ)
EXTRN CODE(ASK_DIS_CRLB)
EXTRN CODE(SAVE_DIS_CRLB)
EXTRN CODE(ASK_V_A)
EXTRN CODE(ASK_I_A)
EXTRN CODE(ASK_VA)
EXTRN CODE(ASK_IA)
EXTRN CODE(LOOP_R1_TO_DPTR)
EXTRN CODE(SET_V_A)
EXTRN CODE(SET_I_A)
EXTRN CODE(CLR_DL0)
EXTRN CODE(ASK_NOW_DL_ALL) ;抄当前所有电量
EXTRN CODE(ASK_JLMX)
EXTRN CODE(SAVE_JLMX)
;*******************************************
; RS485接收处理
;*******************************************
HW_ERR1: JMP RESET_SYS
HW_DO_WITH: NOP
NOP
NOP
MOV A,HW_RS ;2004.6.13
CJNE A,#'H',HW_ERR1
MOV DPH,#02H
MOV DPL,#HW_DI0 ;DI0;低端备份数据部分,2005.06.04
MOVX A,@DPTR
MOV HW_DI0L,A
MOV DPL,#HW_DI1
MOVX A,@DPTR
MOV HW_DI1L,A
SETB TX_BIT
MOV R0,#TMR_DISP0
MOV @R0,#10
;********************************************************
;HW检查表号,OR 是广播地址(置广播标志)
;2004.6.17:先检查是否为广播表号,不是则直接读取电表地址
;********************************************************
HW6_ADDR: MOV R7,#6
CALL RD_SNO
MOV DPL,#MTR_ADDR0
MOV R0,#RD_BUF0
CMP6_ADDR: MOVX A,@DPTR
CJNE A,#0AAH,CMP_SET_ADDR;2004.6.17是否为缩位读地址
JMP CMP_NEXT
CMP_SET_ADDR:
MOV B,@R0
CJNE A,B,CMP6_GB
CMP_NEXT:
INC DPTR
INC R0
DJNZ R7,CMP6_ADDR
JMP ADDR_NOT_GB
CMP6_GB: MOV DPL,#MTR_ADDR0 ;是否广播地址
MOV R7,#6
CMP6_GB0: MOVX A,@DPTR
CJNE A,#99H,CMP_RET6
INC DPTR
DJNZ R7,CMP6_GB0
JMP HW_DO_WITH_GB
CMP_RET6: MOV RS485_CN,#0 ;;地址接收不正确,重新接收
RET
ADDR_NOT_GB: ;2004.6.17非广播地址,处理缩位情况,填写实际地址
MOV R7,#6
CALL RD_SNO
MOV DPL,#MTR_ADDR0
MOV R0,#RD_BUF0
MOVE_SN: MOV A,@R0
MOVX @DPTR,A
INC DPTR
INC R0
DJNZ R7,MOVE_SN
;*******************************************
HW_DO_1: MOV DPL,#HW_CTR
MOVX A,@DPTR
CJNE A,#01,HW_DO_2
JMP HW_DO_WITH_ASK ;读数据
HW_DO_2: CJNE A,#04,HW_ASK_NO_TMP;HW_DO_3
JMP HW_DO_WITH_SET ;验证密码及权限后写数据
;*****************************************
;读数据处理部分,修改了HW_DI1L、HW_DI0L,
;*****************************************
HW_DO_WITH_ASK:
MOV A,HW_DI1L ;DI1
CJNE A,#90H,HW_RD_C012;9110
MOV A,HW_DI0L ;DI0
CJNE A,#1FH,HW_ASK_NO_TMP;HW_RD_902F
MOV FL_NUM_BAK,#2
CALL ASK_NOW_DL_ALL
HW_ASK_18: MOV A,#18
JMP HW_ASK_N
HW_ASK_NO_TMP: JMP HW_ASK_ANS_NO
;**********************************************
HW_ASK_NO_TMP1: JMP HW_ASK_ANS_NO
;*****************************************************
;2004.6.18:C010类数据
;*****************************************************
HW_RD_C012:
MOV A,HW_DI1L ;DI1
CJNE A,#0C0H,HW_RD_C117
MOV A,HW_DI0L ;DI0
CJNE A,#12H,HW_RD_C030
CALL ASK_DATE_TIME ;**抄年,月,日,周,时,分,秒
MOV A,#9
JMP HW_ASK_N
HW_RD_C030: CJNE A,#30H,HW_RD_C035
CALL ASK_MTR_REV ;**抄电表常数
JMP HW_ASK_5
HW_RD_C035: CJNE A,#35H,HW_RD_C0A0
CALL ASK_MTR_RELY ;**抄电表继电器状态
JMP HW_ASK_3
HW_RD_C0A0: CJNE A,#0A0H,HW_RD_C0A2 ;抄时钟系数
CALL ASK_SZ
HW_ASK_3: MOV A,#3
JMP HW_ASK_N
HW_RD_C0A2: CJNE A,#0A2H,HW_ASK_NO_TMP3 ;抄
CALL ASK_JLMX
MOV A,#4
JMP HW_ASK_N
HW_ASK_NO_TMP3: JMP HW_ASK_ANS_NO
;*****************************************************
;2004.6.17:C1类数据
;*****************************************************
HW_RD_C117: MOV A,HW_DI1L ;DI1
CJNE A,#0C1H,HW_RD_C33F
MOV A,HW_DI0L ;DI0
HW_RD_C154: CJNE A,#54H,HW_RD_C155
CALL ASK_V_A ;**抄A电压修整系数
JMP HW_ASK_5
HW_RD_C155: CJNE A,#55H,HW_ASK_NO_TMP3
CALL ASK_I_A ;**抄A电流修整系数
;JMP HW_ASK_5
HW_ASK_5: MOV A,#5
JMP HW_ASK_N
;*****************************************************
;2004.6.17:费率时段有关数据
;*****************************************************
HW_RD_C33F: CJNE A,#0C3H,HW_RD_D430
MOV A,HW_DI0L ;DI0
CJNE A,#3FH,HW_ASK_NO_TMP3 ;读时段费率数据包
CALL ASK_FL_TABLE ;费率时段及费率号
MOV A,#1AH
JMP HW_ASK_N
;******************************************
;读显示数据项2005.5.13LI
;******************************************
HW_RD_D430: CJNE A,#0D4H,HW_RD_B611
MOV A,HW_DI0L ;DI0
CJNE A,#30H,HW_ASK_NO_TMP3 ;读显示数据项
CALL ASK_DIS_CRLB
JMP HW_ASK_6
;******************************************
;读实时电压、电流
;******************************************
HW_RD_B611: CJNE A,#0B6H,HW_ASK_NO_TMP4;HW_RD_EA00
MOV A,HW_DI0L ;DI0
CJNE A,#11H,HW_RD_B621
CALL ASK_VA ;A相实时电压
JMP HW_ASK_4
;********************************************
HW_RD_B621: MOV A,HW_DI0L ;DI0
CJNE A,#21H,HW_ASK_NO_TMP3;HW_RD_B630
CALL ASK_IA ;A相实时电流
HW_ASK_4: MOV A,#4
JMP HW_ASK_N
HW_ASK_NO_TMP4: JMP HW_ASK_ANS_NO
;******************************************
;2004.6.17:组织否定帧
;*****************************************
HW_ASK_6: MOV A,#6
HW_ASK_N: MOV DPL,#HW_L
MOVX @DPTR,A
MOV DPL,#HW_CTR
MOV A,#81H;红外读数据应答控制符
MOVX @DPTR,A
JMP HW_ANSWER
HW_ASK_ANS_NO: ;**读数据否定帧
MOV DPL,#HW_CTR ;红外接收控制符
MOV A,#0C1H
MOVX @DPTR,A
MOV DPL,#HW_L
MOV A,#1
MOVX @DPTR,A
SETB ID_ERR
MOV DPL,#HW_BUF0
MOV A,ERR_inf ;错误信息字
MOVX @DPTR,A
JMP HW_ANSWER
;88888888888888888888888888888888888888888888888888888888888888
;2004.6.9 组织应答数据体
;********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -