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

📄 chksub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	 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 + -