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

📄 chksub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: ADERRSAV - SAVE THE A/D INPORT ERROR  
; FUNCTION: 
; PARMENTERS: C  - IS ERROR FLAG
;             R6 - THE NUMBER OF PORT NUMBER(0 - 31)
;             A  - THE FLAG FOR DETECTOR ERROR (= 1) OR DATA OUT RANGE ERROR(=0)
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R7
; RETURN: NONE        
;------------------------------------------------------------
	  PROC  ADERRSAV
ADERRSAV: JNC   EndADSav
	  MOV   R0, #dAD_1STA         ; SAVE ERROR DATA
	  MOV   R1, #hAD_1ERA
	  MOV   R7, A
	  MOV   A, R6
	  CLR   C
 NtGroup: SUBB  A, #8
	  JC    ErrSetDo
	  INC   R0
	  INC   R1
	  INC   R1
	  JMP   NtGroup
ErrSetDo: MOV   A,  @R0
	  CALL  TOC_R6BIT
	  JC    EndADSav
	  CALL  SET_R6BIT       ; SET THE ERROR IN STATUS BYTE
	  MOV   @R0, A
	  CJNE  R7, #0, ADChkB
	  MOVX  A, @R1     ; FOR GRADE A ERROR PROCESS
	  CALL  TOC_R6BIT
	  JNC   ADChkB
	  MOV   A, #cAD1_ERR1CODE
	  CLR   C
	  SUBB  A, R6           ; Get the error code   
	  MOV   B, #eERR1PROC
	  CALL  SAVEMSG
	  CALL  MSGUPDATE 
	  RET
ADChkB:   INC   R1
	  MOVX  A, @R1
	  CALL  TOC_R6BIT
	  JNC   ADChkC
	  MOV   A, #cAD1_ERR2CODE
	  CLR   C
	  SUBB  A, R6 
	  MOV   B, #eERR2PROC
	  CALL  SAVEMSG
	  CALL  MSGUPDATE
	  RET
ADChkC:   MOV   A, R0
	  CALL  FLDUPDATE
	  MOV   A, #cAD1_ERR2CODE   ; Use ERROR CODE For sub EVENT
	  CLR   C
	  SUBB  A, R6
	  MOV   B, A
	  MOV   A, #eSTACHG
	  CALL  PUTEVENT
EndADSav: RET
	  END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: OUTERRSAV - SAVE THE OUTPUT OPERATION ERROR  
; FUNCTION: 
; PARMENTERS: C  - IS ERROR FLAG
;             R6 - THE NUMBER OF PORT NUMBER
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R6
; RETURN: NONE
;------------------------------------------------------------
	  PROC  OUTERRSAV
OUTERRSAV:JNC   EndOutSav
          MOV   A,  R6
	  MOV   R0, #dOUT1STA         ; SAVE ERROR DATA
	  MOV   R1, #hOUT1ERA
	  CLR   C
 NtGroup: SUBB  A, #8
	  JC    ErrSetDo
	  INC   R0
	  INC   R1
	  INC   R1
	  JMP   NtGroup
ErrSetDo: MOV   A,  @R0
	  CALL  TOC_R6BIT
	  JC    EndOutSav
	  CALL  SET_R6BIT
	  MOV   @R0, A
	  MOVX  A, @R1     ; FOR GRADE A ERROR PROCESS
	  CALL  TOC_R6BIT
	  JNC   ChkOUTB
	  MOV   A, #cOUT1_ERR1CODE
	  CLR   C
	  SUBB  A, R6
	  MOV   B, #eERR1PROC
	  CALL  SAVEMSG
	  CALL  MSGUPDATE 
	  RET
ChkOUTB:  INC   R1
	  MOVX  A, @R1
	  CALL  TOC_R6BIT
	  JNC   EndOutSav
	  MOV   A, #cOUT1_ERR2CODE
	  CLR   C
	  SUBB  A, R6 
	  MOV   B, #eERR2PROC
	  CALL  SAVEMSG
	  CALL  MSGUPDATE
EndOUTSav:RET
	  END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: CHKSYS - CHECK TIME AND ANY A/D PORT FOR ERROR DETECTION 
; FUNCTION: 
; PARMENTERS: NONE
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R7
; RETURN: NONE
;------------------------------------------------------------
	 PROC  CHKSYS, LOOKerr,DELAYChk
CHKSYS:  CALL  TIMECHK           ; DO TIME CHECK FRIST
	 MOV   A, tCHKDELAY 
	 JZ    IN1Chk
	 JMP   OUT1Chk                   ; Is FOR OUT CHECK?
IN1Chk:  MOV   tCHKDELAY, #cCHKDELAYt    ; DTIME_ERR = 2
         CLR   A
         CALL  INPORTREAD
	 MOV   B, A
	 MOV   R0, #xIN_1SOC
	 MOVX  A, @R0 
	 XRL   A, B
	 MOV   DPTR, #uDELTIME    ; the delay time defined by user
	 MOV   R0, #iTIMESA
	 MOV   B, dIN_1STA 
	 CALL  DELAYchk         
	 XCH   A, dIN_1STA   ; SAVE THE NEW ERROR FLAG
	 XRL   A, dIN_1STA   ; FOR NEW ERROR PROC
	 JZ    IN2Chk
	 MOV   B, A
         MOV   A, dIN_1STA
         JZ    IN2Chk
         MOV   R0, #xSYSMK_1
	 MOVX  A, @R0
         ANL   A, B
	 PUSH  ACC
	 MOV   R0, #hIN_1ERA
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    IN1ChkB
	 CALL  LOOKerr
	 POP   B             ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cIN1_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR1PROC
	 CALL  ERRSAVES
IN1ChkB: POP   ACC
	 PUSH  ACC
	 MOV   R0, #hIN_1ERB
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    IN1ChkC
	 CALL  LOOKerr
	 POP   B              ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cIN1_ERR2CODE  ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR2PROC
	 CALL  ERRSAVES
IN1ChkC: POP   ACC
	 JZ    IN2Chk
         MOV   B, A
	 MOV   A, #eINP1CHG
	 CALL  PUTEVENT
IN2Chk:  MOV   A, #1
         CALL  INPORTREAD
	 MOV   B, A
	 MOV   R0, #xIN_2SOC
	 MOVX  A, @R0 
	 XRL   A, B
	 XCH   A, dIN_2STA   ; SAVE THE NEW ERROR FLAG
	 XRL   A, dIN_2STA   ; FOR NEW ERROR PROC
	 JZ    EndChkI
	 MOV   B, A
         MOV   A, dIN_2STA
         JZ    EndChkI
         MOV   R0, #xSYSMK_2
	 MOVX  A, @R0
         ANL   A, B
	 PUSH  ACC
	 MOV   R0, #hIN_2ERA
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    IN2ChkB
	 CALL  LOOKerr
	 POP   B             ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cIN2_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR1PROC
	 CALL  ERRSAVES
IN2ChkB: POP   ACC
	 PUSH  ACC
	 MOV   R0, #hIN_2ERB
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    IN2ChkC
	 CALL  LOOKerr
	 POP   B             ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cIN2_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR2PROC
	 CALL  ERRSAVES
IN2ChkC: POP   ACC
	 JZ    EndChkI
         MOV   B, A
	 MOV   A, #eINP2CHG
	 CALL  PUTEVENT
EndChkI: SETB  B_OUT_IN
EndChk:  RET   
OUT1Chk: CJNE  A, #cCHKDELAYt/2, EndChk
	 DEC   tCHKDELAY
	 NOP
	 MOV   DPTR, #aPSD1  ; FOR OUT1 - 8 PORT RETURN IN 
	 JNB   bOUTRET, NoRetO1
	 SETB  B_OUT_IN
	 INC   DPTR          ; GET THE INPUT PORT DATA else OUTPUT DATA 
NoRetO1: NOP
	 MOVX  A, @DPTR
	 XRL   A, dOUT1SET
	 XCH   A, dOUT1STA   ; SAVE THE NEW ERROR FLAG
	 XRL   A, dOUT1STA   ; FOR NEW ERROR PROC
	 JZ    OUT2Chk
	 PUSH  ACC
	 MOV   R0, #hOUT1ERA
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    OUT1ChkB
	 CALL  LOOKerr
	 POP   B             ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cOUT1_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR1PROC
	 CALL  ERRSAVES
OUT1ChkB:POP   ACC
	 MOV   R0, #hOUT1ERB
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    OUT2Chk
	 CALL  LOOKerr
	 MOV   A, #cOUT1_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR2PROC
	 CALL  ERRSAVES
OUT2Chk: MOV   DPTR, #aPSD2  ;  FOR OUT 9 - 16 PORT RETURN IN
	 JNB   bOUTRET, NoRetO2
	 INC   DPTR          ; GET THE INPUT PORT DATA else OUTPUT DATA 
NoRetO2: NOP 
	 MOVX  A, @DPTR
	 XRL   A, dOUT2SET
	 XCH   A, dOUT2STA   ; SAVE THE NEW ERROR FLAG
	 XRL   A, dOUT2STA   ; FOR NEW ERROR PROC
	 JZ    EndChkO
	 PUSH  ACC
	 MOV   R0, #hOUT2ERA
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    OUT2ChkB
	 CALL  LOOKerr
	 POP   B             ; MARK THE GRADE A ERROR FOR LATE
	 XRL   A, B
	 PUSH  ACC
	 MOV   A, #cOUT2_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR1PROC
	 CALL  ERRSAVES
OUT2ChkB:POP   ACC
	 MOV   R0, #hOUT2ERB
	 MOV   B, A
	 MOVX  A, @R0
	 ANL   A, B
	 JZ    EndChkO
	 CALL  LOOKerr
	 MOV   A, #cOUT2_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	 MOV   B, #eERR2PROC

⌨️ 快捷键说明

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