📄 err3.asm
字号:
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 + -