📄 chksub.asm
字号:
;#############################################################
; 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 + -