📄 chksub.asm
字号:
CALL ERRSAVES
EndChkO: CLR B_OUT_IN
RET
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: LOOKerr - CONVERT THE ERROR BIT_SET TO INDEX CODE
; FUNCTION:
; PARMENTERS: A - THE ERROR CODE FOR 8 CHNAL
; CHANGING REGISTER: R6, R0, THE TEMPORARY MEMORY
; RETURN: R0 - POINTER THE TEMPORARY FOR SAVE ERROR INDEX CODE
;------------------------------------------------------------
LOOKerr: MOV R0, #dTMPBUF
MOV R6, #8
GetN_Err:RLC A
PUSH ACC
CLR A
JNC SaveIdx
MOV A, R6
SaveIdx: MOV @R0, A
INC R0
POP ACC
DJNZ R6, GetN_Err
RLC A
RET
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: DELAYchk - FOR DELAY CHECK COUNT AND RESET
; FUNCTION:
; PARMENTERS: A - THE NUMBER OF ERROR CODE BASE
; DPTR - POINTER TO MAX DELAY TIME DEFINE
; R0 - THE POINTER TO DELAY COUNTERS
; B - THE OLD ERROR STATUS
; USEING REGISTER: A, R0 - POINT THE DELAY CHECK COUNTER, R6
; RETURN: A - THE ERROR CODE IS, UPDATE THE ERROR TIMES COUNTERS
;------------------------------------------------------------
DELAYchk:MOV dEXTPART, #0
MOV pPORT2, #0
MOV R6, #8 ; SET THE DELAY CHECK NUMBER
ChkNext: RLC A
PUSH ACC
MOVX A, @R0
INC A ; CHECK TIME INC '1'
JNC ChkIsOk ; NO ERROR IS?
ADD A, #10H ; ERROR TIME INC '1'
ChkIsOk: MOVX @R0, A ; IS MAX CHECK TIME?
XCH A, B
RLC A
XCH A, B
MOV R5, A
ANL A, #0FH
JNZ ForNtChk
MOV A, R6
DEC A
RL A ; * 2
PUSH ACC
MOVC A, @A+DPTR
CLR C
SUBB A, R5 ; SET C IF LESS ACTIVE COUNT
POP ACC ; RESET THE COUNTER
INC A
MOVC A, @A+DPTR
MOVX @R0, A ; RESET THE TIMES COUNTER
ForNtChk:POP ACC
INC R0 ; FOR NEXT BIT CHECK
DJNZ R6, ChkNext
RLC A
RET
END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: TIMECHK - DO TIME OVER, TWINKLE AND MAIN MENU BACK CHECK
; FUNCTION:
; PARMENTERS: NONE
; USEING REGISTER: A, B, R0 (and IN PUTEVENT CALL)
; RETURN: NONE
;------------------------------------------------------------
PROC TIMECHK
TIMECHK: MOV A, tFMQTIME ; 2. FMQ ALARM DELAY AFTER KEY PROCESS
CJNE A, #1, ForTwink
MOV rPWM1, #0 ; \\ TURNOFF THE FMQ ALARM
ForTwink: MOV A, tCLOCK_01
CJNE A, #11, SecClock ; TIME CHECK CLOCKING
DEC tCLOCK_01
MOV A, #eTWINKLCD1
CALL PUTEVENT
SecClock: JNZ EndTimChk ; 1 SECOND CLOCKING
MOV tCLOCK_01, #cMAXC21 ; 4. RESET 1 SEC CLOCK
MOV A, #eTWINKLCD0
CALL PUTEVENT
MOV A, sCLOCK_1
MinuteChk: JNZ EndTimChk
MOV sCLOCK_1, #cMAXC60
MOV R0, #(xTIMEBUF+1)
MOVX A, @R0
INC A
DA A
MOVX @R0, A
CJNE A, #60H, UpdateMin ;
CLR A
MOVX @R0, A
MOV mMINUTE, A ; SYNCHRONOUS THE TIME COUNT
INC R0
MOVX A, @R0 ; ADJUST THE HOUR
JZ ReadDate
INC A
DA A
MOVX @R0, A
CJNE A, #24H, UpdateMin ;--- WriteTime
CLR A
MOVX @R0, A
JMP UpdateMin
ReadDate: CALL UP_TIME
MOV R0, #(xTIMEBUF+1)
CLR A
MOVX @R0, A
INC A
MOVX @R0, A
WriteTime: CALL WR_TIME
UpdateMin: MOV A, #(xTIMEBUF+1) ; UPDATE MINUTE
CALL FLDUPDATE
MOV A, #eMUPDATE
CALL PUTEVENT
MOV A, mBKMAINMU ; BACK MAIN MENU CHECK
JNZ HourChk
MOV mBKMAINMU, #cBACKMAINMUm
CLR C
MOV A, dSYSPAGE
SUBB A, #cSYSMENU1
JZ HourChk
MOV A, #ePAGMENU1
MOV B, A
CALL PUTEVENT
HourChk: MOV A, mMINUTE ; ONE HOUR IS OVER?
JNZ EndTimChk
MOV mMINUTE, #cMAXC60
MOV A, #(xTIMEBUF+2) ; HOUR
CALL FLDUPDATE
MOV A, #xDATEBUF ; DATE
CALL FLDUPDATE
EndTimChk: RET
END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: ERRSAVES - SAVE THE ERROR CODES AND UPDATE ERROR DISPLAY
; FUNCTION:
; PARMENTERS: A - THE NUMBER OF PORT CODE BASE
; B - ERROR GRADE (IT'S ERROR EVENT) CODE
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R7
; RETURN: C - '1' IT'S SAVED, ELSE NO SAVE
;------------------------------------------------------------
PROC ERRSAVES
ERRSAVES: MOV R1, #dTMPBUF
MOV R7, #8
MOV R6, #0
NextErr: PUSH ACC
PUSH B
XCH A, @R1
JZ ForNtErr
DEC A ; FOR 0 - nn
XCH A, @R1
CLR C
SUBB A, @R1
CALL SAVEMSG
MOV A, B
PUSH ACC
CLR C
SUBB A, R6
POP ACC
JC ForNtErr
MOV R6, A
ForNtErr: INC R1
POP B
POP ACC
DJNZ R7, NextErr
MOV A, R6
XCH A, B
CALL MSGUPDATE
RET
END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: SAVEMSG - SAVE ONE MASSAGE or ERROR CODE AND UPDATE ERROR DISPLAY
; FUNCTION:
; PARMENTERS: A - THE NUMBER OF ERROR CODE BASE
; B - ERROR GRADE (IT'S ERROR EVENT) CODE
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R7
; RETURN: C - '1' IT'S SAVED, ELSE NO SAVE
;------------------------------------------------------------
PROC SAVEMSG
SAVEMSG: XCH A, B
PUSH ACC
JZ IsMsg
CALL PUTEVENT
IsMsg: MOV R0, #pMSGBUF
MOVX A, @R0 ; GET THE ARRAY POINTER
PUSH ACC ; FOX POINTER ADD '1'
INC A
CJNE A, #cMSGMAX_NUM, GetDPTR
CLR A
GetDPTR: MOVX @R0, A
POP ACC
MOV R0, B ; SAVE ARGMENT B
MOV B, #cMSGBUFBYTE
MUL AB
MOV DPL, A
XCH A, B
ADD A, #cMSGBUFS
MOV DPH, A
SavCode: MOV A, R0 ; 1. PUT THE ERROR CODE
MOV B, A ; RESTORE TO B
MOVX @DPTR, A
INC DPTR
MOV R0, #xTIMEBUF
INC R0
MOV R2, #cRCDTIMEB
NtByteM: MOVX A, @R0 ; 3 - 6 MOV THE TIME TO ERROR BUFFER
MOVX @DPTR, A
INC DPTR
INC R0
DJNZ R2, NtByteM
INC DPTR
MOV A, dOUT1SET ; 7
MOVX @DPTR, A
INC DPTR
MOV A, dOUT2SET ; 8
MOVX @DPTR, A
INC DPTR
CLR A
MOVX @DPTR, A
POP ACC ; RESTORE THE ERROR EVENT
RET
END
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: MSGUPDATE - SAVE ONE ERROR CODE AND UPDATE ERROR DISPLAY
; FUNCTION:
; PARMENTERS: A - THE NUMBER OF ERROR CODE BASE
; USEING REGISTER: A, B, R0(IN SDISPLAY CALL), R7
; RETURN: C - '1' IT'S SAVED, ELSE NO SAVE
;------------------------------------------------------------
MSGUPDATE:CJNE A, #eERR2PROC, ForErr1
JB bERRGRD, IsGreadL
JMP E_ErrSave
IsGreadL: MOV A, B ; IS GREAD 'B'
CLR C
SUBB A, dERRCODE
JNC IsUpdate
JMP E_ErrSave
ForErr1: JNB bERRGRD, IsUpdate ; IS GREAD 'A'
MOV A, B
CLR C
SUBB A, dERRCODE
CPL C
JNC E_ErrSave
IsUpdate: SETB C
MOV bERRGRD, C
MOV A, B
MOV dERRCODE, A ; RECORD THE LOWER LEVEL ERROR
MOV A, #dERRCODE ; Do update
CALL FLDUPDATE
E_ErrSave:RET
;#############################################################
; FILE NAME CHKSUB.ASM
; SUBROUTE: GETMSGP - GET THE ERROR MSSAGE POINTER
; FUNCTION:
; PARMENTERS: A - THE NUMBER OF ERROR CODE
; USEING REGISTER: A
; RETURN: DPTR - POINT TO THE ERROR MESSAGE
;------------------------------------------------------------
GETMSGP: CLR C
RLC A
MOV DPTR, #uMSGTAB
JNC ShiftTo
INC DPH
ShiftTo: CLR C
ADD A, DPL
MOV DPL, A
CLR A
ADDC A, DPH
MOV DPH, A
CLR A
MOVC A, @A+DPTR
MOV B, A
MOV A, #1
MOVC A, @A+DPTR
MOV DPL, A
MOV DPH, B
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -