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

📄 hw_do_with.asm

📁 基于PL3000芯片的单相复费率多功能电表的应用程序。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -