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

📄 err3.asm

📁 电力仪器仪表智能独立误差计算设备系统程序!
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	CJNE	A,#00H,UART_COMMAND_01		; 判断是否标准常数设置命令
	JNB	FLAG_UART,COMMAND_00_END
	JB	FLAG_CT_CHECK,COMMAND_00_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_00_END	; 判断表位是否自动短接
	MOV	R7,#6
	MOV	R1,#FH_CONST+5
READ_FH_CONST:	
	LCALL	UART_RECV_BYTE			; 数据传送先低后高
	MOV	@R1,A			
	DEC	R1
	DJNZ	R7,READ_FH_CONST
COMMAND_00_END:	
	LJMP	UART_COMMAND_VOID
;------------------------电能表常数设置-------------------------------	
UART_COMMAND_01:	
	CJNE	A,#01H,UART_COMMAND_02		; 判断是否电能表常数设置命令
	JNB	FLAG_UART,COMMAND_01_END
	JB	FLAG_CT_CHECK,COMMAND_01_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_01_END	; 判断表位是否自动短接
	MOV	R7,#3
	MOV	R1,#EC_CONST+2
READ_EC_CONST:	
	LCALL	UART_RECV_BYTE			; 数据传送先低后高
	MOV	@R1,A
	DEC	R1
	DJNZ	R7,READ_EC_CONST
COMMAND_01_END:	
	LJMP	UART_COMMAND_VOID
;------------------------分频系数设置-------------------------------	
UART_COMMAND_02:
	CJNE	A,#02H,UART_COMMAND_03		; 判断是否分频系数设置命令
	JNB	FLAG_UART,COMMAND_02_END
	JB	FLAG_CT_CHECK,COMMAND_02_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_02_END	; 判断表位是否自动短接
	MOV	R7,#3
	MOV	R1,#TEMP_B0
READ_F_CONST:	
	LCALL	UART_RECV_BYTE		     	; 数据传送先低后高
	MOV	@R1,A
	INC	R1
	DJNZ	R7,READ_F_CONST
	LCALL	UART_F_SET		         	; 
COMMAND_02_END:	
	LJMP	UART_COMMAND_VOID
;---------------------校验圈数设置----------------------------------	
UART_COMMAND_03:	
	CJNE	A,#03H,UART_COMMAND_04		; 判断是否校验圈数设置命令
	JNB	FLAG_UART,COMMAND_03_END
	JB	FLAG_CT_CHECK,COMMAND_03_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_03_END	; 判断表位是否自动短接
	LCALL	UART_RECV_BYTE			; 
	MOV	EC_NUMLOOP,A
COMMAND_03_END:	
	LJMP	UART_COMMAND_VOID	
;---------------------误差上下限设置----------------------------------
UART_COMMAND_04:	
	CJNE	A,#04H,UART_COMMAND_05		; 判断是否误差上下限设置命令
	JNB	FLAG_UART,COMMAND_04_END
	JB	FLAG_CT_CHECK,COMMAND_04_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_04_END	; 判断表位是否自动短接
	MOV	R1,#EC_TOP+3
READ_X_CONST:	
	LCALL	UART_RECV_BYTE			; 数据传送先低后高
;---误差上限
	MOV	B,A
	ANL	A,#39H				
	MOV	@R1,A				; 保存数据
	MOV	A,B
	ANL	A,#40H
	CJNE	A,#40H,READ_F_S
	SETB	EC_TOPSIGN			; 误差上限+  
	SJMP	READ_S	
READ_F_S:	
	CLR	EC_TOPSIGN			; 误差上限-  
READ_S:
	DEC	R1
	LCALL	UART_RECV_BYTE			; 数据传送先低后高
	MOV	@R1,A				; 保存数据
;---误差下限
	DEC	R1
	LCALL	UART_RECV_BYTE			; 数据传送先低后高
	MOV	B,A
	ANL	A,#39H
	MOV	@R1,A			
	MOV	A,B
	ANL	A,#40H
	CJNE	A,#40H,READ_F_X
	SETB	EC_BOTSIGN			; 误差下限+  
	SJMP	READ_X
READ_F_X:	
	CLR	EC_BOTSIGN			; 误差下限-  
READ_X:	
	DEC	R1
	LCALL	UART_RECV_BYTE			; 数据传送先高后低
	MOV	@R1,A
COMMAND_04_END:	
	LJMP	UART_COMMAND_VOID
;--------------------校验脉冲设置命令--------------------------	
UART_COMMAND_05:	
	CJNE	A,#05H,UART_COMMAND_06		; 判断是否校验脉冲设置命令
	JNB	FLAG_UART,COMMAND_05_END
	JB	FLAG_CT_CHECK,COMMAND_05_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_05_END	; 判断表位是否自动短接
	LCALL	UART_RECV_BYTE			; 读取数据
SET_PULSE_P1:					; 正向有功,第5个通道CBA=101
	CJNE	A,#00H,SET_PULSE_P2			
	SETB	PULSE_A	
	CLR     PULSE_B
	SETB	PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(
    MOV     R0, #CHANNEL_BUFFER	
    MOV     @R0,#01H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   )
	AJMP	SET_PULSE_END					
SET_PULSE_P2:					; 反向有功,第4个通道CBA=100
	CJNE	A,#02H,SET_PULSE_V1
	CLR	    PULSE_A	
	CLR	    PULSE_B
	SETB	PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#02H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )
	AJMP	SET_PULSE_END
SET_PULSE_V1:					; 正向无功,第0个通道CBA=000	
	CJNE	A,#03H,SET_PULSE_V2	
	CLR	PULSE_A	
	CLR	PULSE_B
	CLR	PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#03H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )

	AJMP	SET_PULSE_END
SET_PULSE_V2:					; 反向无功,第3个通道CBA=011
	CJNE	A,#01H,SET_PULSE_CLOCK
	SETB	PULSE_A	
	SETB	PULSE_B
	CLR 	PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#04H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )

	AJMP	SET_PULSE_END
SET_PULSE_CLOCK:				; 时钟,第1个通道CBA=001	
	CJNE	A,#04H,SET_PULSE_NEED
	SETB	PULSE_A	
	CLR	    PULSE_B
	CLR	    PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#06H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )

	AJMP	SET_PULSE_END
SET_PULSE_NEED:					; 需量,第2个通道CBA=010
	CJNE	A,#05H,SET_PULSE_HIGT
	CLR	    PULSE_A	
	SETB    PULSE_B
	CLR     PULSE_C
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#05H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )

	AJMP	SET_PULSE_END
SET_PULSE_HIGT:					; 高频脉冲通道
	CJNE	A,#06H,COMMAND_05_END
	CLR	    PULSE_SELECT
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
    MOV     R0,#CHANNEL_BUFFER
	MOV     @R0,#07H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  )

	LJMP	UART_COMMAND_VOID
SET_PULSE_END:
	SETB	PULSE_SELECT			; 选择低频脉冲
	MOV	    A,PULSE_SL
	MOV	    P0,A
COMMAND_05_END:	
	LJMP	UART_COMMAND_VOID 

;-------------------电表脉冲沿设置命令-----------------------	
UART_COMMAND_06:	
	CJNE	A,#06H,UART_COMMAND_07		; 判断是否电表脉冲沿设置命令
	JNB	FLAG_UART,COMMAND_06_END
	JB	FLAG_CT_CHECK,COMMAND_06_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_06_END	; 判断表位是否自动短接
	LCALL	UART_RECV_BYTE			; 读取数据
SET_PULSE_UP:					; 上升沿采样脉冲
	CJNE	A,#00H,SET_PULSE_DOWN
	CLR	PULSE_EDGE_SET			
	LJMP	UART_COMMAND_VOID
SET_PULSE_DOWN:					; 下降沿采样脉冲
	CJNE	A,#01H,COMMAND_06_END		
	SETB	PULSE_EDGE_SET			
COMMAND_06_END:	
	LJMP	UART_COMMAND_VOID
;--------------------电能误差试验命令-----------------------
UART_COMMAND_07:	
	CJNE	A,#07H,UART_COMMAND_08		; 判断是否电能误差试验命令
	JNB	FLAG_UART,COMMAND_07_END
	JB	FLAG_CT_CHECK,COMMAND_07_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_07_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_DL				; 置"电能误差试验"标志
	MOV	WC_T_C,#0H
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
COMMAND_07_END:	
	LJMP	UART_COMMAND_VOID
;-------------------日计时误差试验命令----------------------	
UART_COMMAND_08:	
	CJNE	A,#08H,UART_COMMAND_09		; 判断是否日计时误差试验命令
	JNB	FLAG_UART,COMMAND_08_END
	JB	FLAG_CT_CHECK,COMMAND_08_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_08_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_RJ				; 置"日计时误差试验"标志
	MOV	WC_T_C,#0H
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR
COMMAND_08_END:	
	LJMP	UART_COMMAND_VOID
;-----------------需量周期误差试验命令----------------------	
UART_COMMAND_09:	
	CJNE	A,#09H,UART_COMMAND_10		; 判断是否需量周期误差试验命令
	JNB	FLAG_UART,COMMAND_09_END
	JB	FLAG_CT_CHECK,COMMAND_09_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_09_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_XL				; 置"需量周期误差试验"标志
	MOV	WC_T_C,#0H
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR
COMMAND_09_END:	
	LJMP	UART_COMMAND_VOID
;------------------电能走字试验命令----------------------	
UART_COMMAND_10:	
	CJNE	A,#10H,UART_COMMAND_11		; 判断是否电能走字试验命令
	JNB	FLAG_UART,COMMAND_10_END
	JB	FLAG_CT_CHECK,COMMAND_10_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_10_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_ZZ				; 置" 电能走字试验"标志
	MOV	EC_FLAGS,#0			; 停止误差计算器工作
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR
COMMAND_10_END:	
	LJMP	UART_COMMAND_VOID
;------------------电表潜动试验命令----------------------	
UART_COMMAND_11:	
	CJNE	A,#11H,UART_COMMAND_12		; 判断是否电表潜动试验命令
	JNB	FLAG_UART,COMMAND_11_END
	JB	FLAG_CT_CHECK,COMMAND_11_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_11_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_QD				; 置"电表潜动试验"标志
	MOV	EC_FLAGS,#0			; 停止误差计算器工作
	CLR	ZZ_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR	
COMMAND_11_END:	
	LJMP	UART_COMMAND_VOID
;-----------------电表启动试验命令------------------------	
UART_COMMAND_12:	
	CJNE	A,#12H,UART_COMMAND_13		; 判断是否电表启动试验命令
	JNB	FLAG_UART,COMMAND_12_END
	JB	FLAG_CT_CHECK,COMMAND_12_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_12_END	; 判断表位是否自动短接
	MOV	STATE_FLAG,#0			; 
	SETB	FLAG_QID			; 置"电表启动试验"标志	
	MOV	EC_FLAGS,#0			; 停止误差计算器工作
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR
COMMAND_12_END:	
	LJMP	UART_COMMAND_VOID
;------------------电表捕黑试验命令------------------------	
UART_COMMAND_13:
	CJNE	A,#13H,UART_COMMAND_14		; 判断是否电表捕黑试验命令
	JNB	FLAG_UART,COMMAND_13_END
	JB	FLAG_CT_CHECK,COMMAND_13_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_13_END	; 判断表位是否自动短接	
	MOV	STATE_FLAG,#0H			; 
	SETB	FLAG_BH				; 
	MOV	EC_FLAGS,#0H			; 停止误差计算器工作
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	FLAG_ERR
COMMAND_13_END:	
	LJMP	UART_COMMAND_VOID
;-----------------常数校核试验命令-------------------------	
UART_COMMAND_14:	
	CJNE	A,#14,UART_COMMAND_15		; 判断是否常数校核试验命令
	JNB	FLAG_UART,COMMAND_14_END
	JB	FLAG_CT_CHECK,COMMAND_14_END	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,COMMAND_14_END	; 判断表位是否自动短接	
	MOV	EC_FLAGS,#0H			; 停止误差计算器工作
	CLR	ZZ_FLAG
	CLR	QD_FLAG
	CLR	QID_FLAG
	CLR	PULSE_WIDTH_FLAG
	CLR	PULSE_CATCH_FLAG
	CLR	FLAG_ERR
COMMAND_14_END:	
	LJMP	UART_COMMAND_VOID
;-------------------校验开始命令-----------------------------
COMMAND_16:
	LJMP	UART_COMMAND_16
BEGIN_END1:
	LJMP	BEGIN_END	
UART_COMMAND_15:	
	CJNE	A,#15H,COMMAND_16		; 判断是否校验开始命令
CHECKOUT_BEGIN:					; 校验开始	
	JNB	FLAG_UART,BEGIN_END1
KEY_BEGIN:
    JB	FLAG_CT_CHECK,BEGIN_END1	; 判断表位CT是否出错
	JB	FLAG_AUTO_SHORT,BEGIN_END1	; 判断表位是否自动短接
	MOV	EC_FLAGS,#0H
	LCALL	CLR_WC_BUFFER

DL_BEGIN:					; 电能试验开始
	JNB	FLAG_DL,RJ_BEGIN
	SJMP	WC_BEGIN
RJ_BEGIN:					; 日计时试验开始
	JNB	FLAG_RJ,XL_BEGIN
	SJMP	WC_BEGIN
XL_BEGIN:					; 需量周期试验开始
    JNB 	FLAG_XL,ZZ_BEG	;>>>>>>>>>>>>>>>>>>>>>>>> {
	AJMP    WC_BEGIN
ZZ_BEG:						 ;
	LJMP   ZZ_BEGIN			;>>>>>>>>>>>>>>>>>>>>>>>>> }
WC_BEGIN:	
	 MOV	DPTR,#TABLE_BEGIN		; 
	 LCALL	DISP_STRING			; 校验开始,显示“BE”
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (
	 JNB     KEY_CHANNEL,CHANNEL_SEAVE  
	 CLR     KEY_CHANNEL
	 MOV     R0,#CHANNEL_BUFFER
	 MOV     A,@R0
	 ADD     A,#01H                       ;010
	 DA	 A
	 CJNE    A,#09H,SET_CHANNEL
	 AJMP    CHANNEL_CANCEL
SET_CHANNEL:
     MOV    @R0,A
	 CJNE   A,#01H,SET_2
     AJMP   CHANNEL_SEAVE
SET_2:	 
	 CJNE   A,#02H,SET_3 
	 CLR	PULSE_A	
 	 CLR	PULSE_B                       ;100
	 SETB	PULSE_C
	 AJMP	CHANNEL_SEAVE
SET_3:	 
	 CJNE   A,#03H,SET_4
	 CLR	PULSE_A	
	 CLR	PULSE_B                       ;000  
	 CLR	PULSE_C
	 AJMP	CHANNEL_SEAVE
SET_4:
     CJNE   A,#04H,SET_5
	 SETB	PULSE_A	
	 SETB	PULSE_B                       ;011
	 CLR	PULSE_C
	 AJMP   CHANNEL_SEAVE
SET_5:
	 CJNE   A,#05H,SET_6
	 CLR	PULSE_A	
	 SETB	PULSE_B                        ;010
	 CLR	PULSE_C
	 AJMP   CHANNEL_SEAVE
SET_6:
	 CJNE   A,#06H,SET_7
	 SETB	PULSE_A	
	 CLR	PULSE_B                        ;001
	 CLR	PULSE_C

⌨️ 快捷键说明

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