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

📄 wxcs_31.asm

📁 校准多功能电能表的基本误差和规约规定的其他多功能试验项目。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        MOV	    TL1,#0FDH           ;9600 BAUD RATE
        MOV	    TH1,#0FDH
        MOV	    TMOD,#00100101B
        MOV	    SCON,#01010000B
	    MOV	    TCON,#01010101B
        MOV     IE,#11110111B
        MOV     IP,#11010000B       ;T2 highest priority
        clr     brswe
        mov     SNDpnt,#sndbuf
        mov     RCVpnt,#rcvbuf
        SETB    Receive_End_Flag           ;收到命令结束符

;;;;;;;;;;;;;;;;;;;;;
job0000:                      ;主工作程序
        JNB	    BTMG,JOB1	    ;光电头对光延时标志是否为1?
	    DJNZ	TMG,JOB1          ;标志为1,延时是否结束?
	    DJNZ	TMGH,JOB1
	    CLR	    GRES		       ;对光延时时间到,复位光电采样器
	    CLR	    BTMG           ;清光电头对光延时标志

JOB1:	
        JNB	    BTIK1,JOB21   ;IK1控制信号延时标志是否为1?
	    djnz	TMB,job21         ;标志为1,延时是否结束?
	    DJNZ	TMBH,JOB21
        MOV     TMBH,#40H       ;延时600MS
	    SETB	IOFF            ;IK2
        SETB    BTMB
        CLR     BTIK1          ;IK1吸合或断开延时

JOB21:  
        JNB     BTMB,JOB22     ;BEEP响延时标志
        DJNZ    TMB,JOB22
        DJNZ    TMBH,JOB22
        MOV     TMBH,#10H      ;延时100MS
        CLR     BTMB
        JNB     IOFF,BEPON
        CLR     IOFF            ;IK2
        SETB    BTIK2

BEPON:  
        SETB    BEEP

JOB22:  
        JNB     BTIK2,JOB2
        DJNZ    TMB,JOB2
        DJNZ    TMBH,JOB2
        MOV     TMBH,#10H      ;延时100MS
        CLR     BTIK2
        CLR     IK1             ;IOFF=0,BTIK1=0  BEST JDQ 保持原状态
        
JOB2:	
        JNB		BKTIM,JOB3	;有键按下
		JB		DKEY,JOB4
		DJNZ	TMKL,JOB5
		DJNZ	TMKH,JOB5
		JNB	    GBBZ,JOB12
		MOV	    A,MODE
		JNZ	    JOBY3
		MOV	    MODE,#02	;对黑斑
		SETB	BSGB
JOB12:	
		CLR	    BKTIM
		CLR		BKYS
		CLR		BKEYM
		CLR		BKTIM
        ljmp	JOB5
JOBY3:	
    	MOV		MODE,#0		;对黑斑返回
		SETB	BSGB
		ljmp	JOB12
JOB4:	
		CLR		BKTIM		
	SETB	BKYS        ;按键松开延时
	SETB	BKEYM
	MOV	TMKL,#0
	MOV	TMKH,#28H

JOB3:	
    JNB	BKYS,JOB5
	DJNZ	TMKL,JOB5
	DJNZ	TMKH,JOBY5
	CLR	BKYS
	JNB	GBBZ,JOB11
	MOV	A,MODE
	JNZ	JOBY1
	lcall	GDCLS		;误差清零
JOB11:	ljmp	JOB5
JOBY1:	CJNE    A,#2,JOBY2
        SETB	BSGB
	MOV	MODE,#3
	ljmp	JOB5
JOBY2:  MOV     MODE,#5
        SETB    BSGB
        ljmp    JOB5
JOBY5:	JNB	BKEYM,JOB5
	MOV	A,TMKH
	CJNE	A,#24H,JOB5
	CLR	BKEYM
JOB5:   
		JB		BGET,JOB7              ;接收到串口指令
JOB8:	
		ljmp	JOB6
JOB7:	
		CLR		BGET	               ;处理接收到的指令和数据
        mov     r0,#rcvbuf
		MOV		A,@r0
		CJNE	A,#'C',JOB13
JOB70:  
		mov     r0,#rcvbuf+2           ;查询 CXX(0dh)
        mov     a,@r0
		cjne	a,#3AH,ERR1
ERR1:	
		jnc	ERR3
	ANL	A,#0FH
	MOV	B,A
        mov     r0,#rcvbuf+1
	MOV	A,@r0
	cjne	a,#3AH,ERR2
ERR2:	jnc	ERR3
	SWAP	A
	ANL	A,#0F0H
	ORL	A,B
	XRL	A,ADBH
	JZ	JOB14
ERR3:	ljmp	JOB6
JOB14:	ljmp	SENDWC
JOB13:  
		CJNE    A,#'N',JOB130
        LJMP    JOB70           ;查询耐压结果
JOB130: 
		CJNE	A,#'G',JOB8
	lcall   Active_DAta
	jb      f0,job8		;f0=1 表示接收到非法数据
        mov     r0,#rcvbuf+1    ;f0=0 如果接收数据有效则继续往下处理
	MOV	A,@r0
        cjne    a,#'D',$+3
        jc      job8
        cjne    a,#'Z'+1,$+3    ;Z+1  D---Z
        jc      JOB15
        CJNE    A,#'d',$+3
        JC      JOB8
        CJNE    A,#'z'+1,$+3
        JNC     JOB8
        CLR     C
        SUBB    A,#'d'
        ADD     A,#('['-'D')
        ljmp    JOB16
JOB15:  CLR     C
        SUBB	A,#'D'
JOB16:	PUSH	ACC
        mov     r0,#rcvbuf+4
	MOV	A,@r0
	ANL	A,#0FH
	MOV	B,A
        mov     r0,#rcvbuf+3
	MOV	A,@r0       ;表号
	SWAP	A
	ANL	A,#0F0H
	ORL	A,B
	JnZ     job102
job103:
        ljmp    JOB10
job102:
	XRL	A,ADBH
	JZ	JOB103
	POP	ACC
	ljmp	JOB6
JOB101:	MOV	B,#03H
	MUL	AB
	MOV	DPTR,#JOB9
	JMP	@A+DPTR
JOB9:	Ljmp	GETBZZ		;D 接收标准值
	Ljmp	GETN		;E 接收校验圈数
	Ljmp	GETRES		;F 接收误差清零
	Ljmp	GETDG		;G 接收光电头对光
	Ljmp	GETXB		;H 选表位
	Ljmp	GETHB		;I 对黑斑         ;0 退去其他试验,回到校验状态
	Ljmp	GETJS		;J 监视光电头脉冲 ;起动/潜动时记数
	Ljmp    wrmod           ;K 接线方式  有功无功切换
        Ljmp    bpen            ;L 喇叭开关
	Ljmp    GETTC           ;M 接收校核常数设定圈数,准备开始走字试验
	Ljmp    TESTC           ;N 开始进行走字试验
        Ljmp    GETCST          ;O 接收被校表常数
        Ljmp    pusch           ;P 脉冲选择  电子脉冲还是光电头脉冲
        Ljmp    Cntpw           ;Q 计电能试验      1:开始  0:终止
        Ljmp    clear           ;R 清除电能计数
        Ljmp    puscmp          ;S 脉冲比较  电子脉冲和光电头脉冲比较    ;进入比较状态
        Ljmp    GETBZ           ;T 接收脉冲和盘转比值
        Ljmp    GETBN           ;U 接收脉冲和盘转设定比较圈数
        Ljmp	zzsy            ;V 进入失压状态,接收失压方案
	Ljmp    systr		;W 失压试验开始
        Ljmp    GT2000          ;X 时钟脉冲控制        ;X 功耗试验 SOME EQUIPMENT USED
        LJMP    GETDIVR         ;Y 分频系数
        LJMP    CSSY            ;Z 常数测试实验
        ljmp    POWTST          ;d 功耗测试
        LJMP    JOB6            ;e 功耗测量单元用
        LJMP    JOB6            ;f 功耗测量单元用
        LJMP    JOB6            ;g 功耗测量单元用
        LJMP    JOB6            ;h 设置功耗测量单元单元号
        ljmp    mcbxcs          ;i 被校表脉冲测试
        ljmp    pptype          ;j 接线方式
        ljmp    ppdpxz          ;k add 4059被校表脉冲输出类型选择
        ljmp    setZZpls        ;l 设置走字脉冲数
        ljmp    Puls_ZZ_Tst     ;m 脉冲走字试验
        ljmp    Puls_Yz         ;n 预置脉冲数  断电恢复
        ljmp    Ny_Start_Tst    ;o开始耐压试验
        ljmp    Ny_Tm_End       ;p耐压时间到
        ljmp    Change_Udz      ;q切换表尾电压端子
        ljmp    Err_Test_Light  ;r误差校验指示灯控制命令
JOB10:  POP     ACC
        MOV     B,#(JOB10-JOB9)/3
        CJNE    A,B,$+3
        JnC     job104
        ljmp    JOB101
job104:
        LJMP    JOB8
;-----------------
GT2000: MOV     R0,#RCVBUF+5
        MOV     A,@R0
        ANL     A,#0FH
        JNZ     GT21
        CLR     EX0         ; 关闭INT0中断
        CLR     BTK2
        CLR     BTK3
        SJMP    GT3E        ;选择LED脉冲输入
GT21:   CJNE    A,#01H,GT22
        SETB    EX0         ;开INT0中断
        SETB    BTK2
        CLR     BTK3
        SJMP    GT3E       ;选择需量周期脉冲
GT22:   SETB    EX0         ;开INT0中断
        CLR     BTK2
        SETB    BTK3        ;选择时钟脉冲
GT3E:   LJMP    JOB6
;-----   add 4059被校表脉冲输出类型选择
ppdpxz:
        mov     r0,#rcvbuf+5
        mov     a,@r0
        anl     a,#0fh
        jnz     ppdpxz1
        setb    btygwg        ;p0.0
        ljmp    job6
ppdpxz1:clr     btygwg   ;p0.0
        ljmp    job6
;----------------------------
Change_Udz:
        mov     r0,#rcvbuf+5
        mov     a,@r0
        anl     a,#0fh
        jnz     chgudz1
        setb    p0.4          ;Gq:000
        ljmp    job6
chgudz1:
        clr     p0.4          ;Gq:001
        ljmp    job6
;----------------------
Err_Test_Light:
        mov     r0,#rcvbuf+5
        mov     a,@r0
        anl     a,#0fh
        jnz     Err_Test1
        clr     p3.6          ;Gr:000
        ljmp    job6
Err_Test1:setb  p3.6          ;Gr:001
        ljmp    job6
;----------------------
;设置走字脉冲数
setZZpls:
        MOV     IMBUF0,#00H
        MOV     IMBUF1,#00H
        MOV     IMBUF2,#00H
        mov     imbuf3,#00h
        LCALL   MBTH
        mov     a,imbuf0
        orl     a,imbuf1
        orl     a,imbuf2
        orl     a,imbuf3
        jnz     stzzps1
        mov     zzplsn,#1
        mov     zzplsn+1,#0
        mov     zzplsn+2,#0
        mov     zzplsn+3,#0
        ljmp    job6
stzzps1:
        mov     ZZPlsN,IMBUF0
        mov     ZZPlsN+1,IMBUF1
        mov     ZZPlsN+2,IMBUF2
        mov     ZZPlsN+3,imbuf3
        ljmp    job6
;-------预置脉冲数
Puls_Yz:
        MOV     IMBUF0,#00H
        MOV     IMBUF1,#00H
        MOV     IMBUF2,#00H
        mov     imbuf3,#00h
        LCALL   MBTH
        mov     pwcnt1,IMBUF0
        mov     pwcnt2,IMBUF1
        mov     pwcnt3,IMBUF2
        mov     pwcnt4,imbuf3
plus_yz2:
        setb    btMcYz
        ljmp    job6
;----------------------------
;o开始耐压试验
Ny_Start_Tst:
        JNB     GBBZ,Ny_Str1
        mov     mode,#0dh
        clr     BREF                ;清除有耐压结果标志
Ny_Str1:ljmp    job6
;----------------------------
;p耐压时间到
Ny_Tm_End:
        ljmp    job6
;----------------------------
CSSY:   JNB     GBBZ,CSSY2
        SETB    BSGB
        MOV     R0,#RCVBUF+5
        MOV     A,@R0
        ANL     A,#0FH
        JZ      CSSY2
;        SETB    BTCSSY         ;置常数测试标志
        MOV	TMOD,#00100101B        ;t0 counter
        MOV     MODE,#9
        MOV     IMCSCNT,#0
        MOV     IMCSCNT1,#0
;        mov     r1,#imbuf0
 ;       mov     r0,#imbzc1
  ;      mov     r6,bzcsN
;cssy1:  mov     a,@r0
 ;       mov     @r1,a
  ;      inc     r0
   ;     inc     r1
    ;    djnz    r6,cssy1       ;fh*n/c
;        mov     r0,#imbufd
 ;       mov     r1,#const1
  ;      mov     r6,#04h
;cssy3:  mov     a,@r1
 ;       mov     @r0,a
  ;      inc     r0
   ;     inc     r1
    ;    djnz    r6,cssy3       ;c
     ;   mov     r0,#imbuf0
      ;  mov     r2,bzcsN
;        mov     r1,#imbufd
 ;       mov     r3,#04h
  ;      lcall   mmul           ;(fh*n/c)*c
   ;     mov     bzcsN,r2
    ;    mov     r1,#imbzc1
;cssy4:  mov     a,@r0
 ;       mov     @r1,a
  ;      inc     r0
  ;      inc     r1
   ;     djnz    r2,cssy4
CSSY2:  LJMP    JOB6
;--------接线方式
pptype:  mov     r0,#rcvbuf+5
         mov     a,@r0
         anl     a,#0fh
         mov     imtype,a
         ljmp    job6
;----------------------------
;功耗测试
POWTST:  mov     r0,#rcvbuf+5
         mov     a,@r0
         anl     a,#0fh
         jz      powtst2
         mov     a,mode
         cjne    a,#10,powtst1
         ljmp    job6
powtst1: MOV     MODE,#10
         LCALL   GDCLS           ;
         LCALL   AllDK
         LJMP    JOB6
powtst2: LJMP    DHB1
;----------检测被校表脉冲波形
mcbxcs:  JNB     GBBZ,MCCS2
         mov     r0,#rcvbuf+5
         mov     a,@r0
         anl     a,#0fh
         jz      powtst2          ;Gi:000  返回到mod0
         mov     a,mode           ;Gi:001  进入mod11
         cjne    a,#11,mccs1
         ljmp    job6
mccs1:   MOV     MODE,#11
         LCALL   GDCLS           ;
;-------将t0改为内部定时器用
         clr     tr0
         mov     tmod,#00100001b  ;timer 16 bits
         mov     th0,#0fch        ;1ms timer
         mov     tl0,#67h
         setb    tr0
	 SETB	 BFIRST
MCCS2:
         LJMP    JOB6
;----------------------------
GETTC:  JNB	GBBZ,GTC2
	SETB	BSGB
	MOV	MODE,#4
        mov     imbuf0,#00h
        mov     imbuf1,#00h
        mov     imbuf2,#00h
        Lcall   MBTH
        MOV     ZZcs,imbuf0
        MOV     ZZcs+1,imbuf1
        mov     ZZcs+2,imbuf2
        MOV     ZZcsTp,imbuf0
        MOV     ZZcsTp+1,imbuf1
        mov     ZZcsTp+2,imbuf2
        LCALL   JDQXH            ;AS108断开,JDQ吸合
GTC2:	ljmp	JOB6
;----------------------------
ZZsy:   
        JNB     GBBZ,ZZsy4
        mov     mode,#06
        mov     r0,#rcvbuf+5
        mov     a,@r0
        anl     a,#0fh
        jz      zzsy0
        cjne    a,#04,$+3
        jc      ZZSY1
zzsy0:  
        mov     a,#01h
zzsy1:  
        mov     sy,a
        xrl     a,#03
        jz      zzsy2             ;失压3 JDQ吸合
        lcall   JDQDK             ;AS108吸合 ,JDQ 断开
        sjmp    zzsy3
zzsy2:  
        lcall   jdqxh
zzsy3:  
        clr     BTSTRSY
        clr     tr0
        mov     tmod,#00100001b  ;timer 16 bits
        mov     th0,#0eeh        ;5ms timer
        mov     tl0,#00h
        setb    tr0
zzsy4:  
        ljmp    job6
;------------------------------
SYSTR:  
        JNB     GBBZ,begrt
        mov     a,mode
        xrl     a,#06h
        jnz     begrt
        SETB    BTSTRSY
        SETB    BSGB
        mov     imsyctm,im5ms
begrt:  LJMP    job6
;-------------------------------
TESTC:  JNB     GBBZ,GTC2
        LCALL   JDQXH
        MOV     ZZPW,#01H
        MOV     ZZPW+1,#80H
        MOV     ZZPW+2,#0FH
        mov     r0,#rcvbuf+5
	    MOV     A,@r0
        ANL     A,#0FH

⌨️ 快捷键说明

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