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

📄 pagsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	   JMP   ForDisp
IsRAMStr:  MOV   DPTR, #uACTRAM
           MOV   B,  A            ; SAVE THE ACTIVE DATA POINTER
 DoActRAM: CLR   A
           MOVC  A, @A+DPTR
           JZ    ChkNextF         ; OVER RAM-STRING CHECK! 
           CJNE  A, dFLD_R2, NtActChk
           MOV   A, #1
           MOVC  A, @A+DPTR
           CJNE  A, dFLD_R1, NtActChk
           PUSH  DPL              ; SAVE THE ACT RAM TABLE POINTER
           PUSH  DPH
           MOV   A, #2
           MOVC  A, @A+DPTR
           MOV   R1, A
           MOV   A, #3
           MOVC  A, @A+DPTR
           MOV   DPL, A
           MOV   DPH, R1
           CLR   A
  NtTrig:  PUSH  ACC
           MOVC  A, @A+DPTR
           JZ    ForActChk     ; NO TRIGER FIND
           XRL   A,  B
           JZ    RAMUpdate     ; IS TRIGER ON
           POP   ACC
           INC   A
           JMP   NtTrig
ForActChk: POP   ACC
           POP   DPH
           POP   DPL
           JMP   NtActChk
RAMUpdate: POP   ACC
           POP   DPH
           POP   DPL
           MOV   A,  #4        ; GET THE FIELD DATA PROCESS SUBROUTE
           MOVC  A, @A+DPTR
           MOV   R1,  A
           MOV   A,  #5
           MOVC  A, @A+DPTR
           CALL  GoToSub
           JMP   ForDisp
NtActChk:  INC   DPTR
           INC   DPTR
           INC   DPTR
           INC   DPTR
           INC   DPTR
           INC   DPTR
           INC   DPTR
           INC   DPTR
           JMP   DoActRAM
GoToSub:   PUSH  ACC
           XCH   A, R1
           PUSH  ACC
           RET
TimeAddr:  MOV   A, dFLD_R1        ; FOR TIME FIELD!       
	   CJNE  A, #cTIM_START_ADDR, IsInTime
IsInTime:  JC    ChkNtFT
	   SUBB  A, #cTIM_START_ADDR+cTIM_TICK_NUM+cTIM_SECOND_NUM+cTIM_MINUTE_NUM
	   JNC   ChkNtFT
	   JMP   ForDisp
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDTWINKLE - CLEAR THE TWINKLE FIELD
; CALL FUNCTION: LCD_STR
; USING PARMENTERS:  A - ADDRESS OF DATA FOR UPDATE DISPLAY
; COMMON DATA USED:  GROUP 3 REGISTERS
; CHANGE REGISTER: A, B, (R6, R7)
; RETURN: NONE
;------------------------------------------------------------
FLDTWINKLE: PUSH  dPAG_RCD_PNT   
            PUSH  dTAB_RCD_BYTES
            CLR   A
            MOV   dPAG_RCD_PNT, A
            MOV   dTAB_RCD_BYTES, A
TwkNextF:   CALL  GETRCDPNT
;@@@@@@@@@@@@@@@@@
	    MOVC  A, @A+DPTR
	    JNZ   LookFld
            POP   dTAB_RCD_BYTES
	    POP   dPAG_RCD_PNT
	    CALL  GETRCDPNT     ; -- RESTORE COUSOR  
;@@@@@@@@@@@@@@@@@@@
	    CALL  GET_RECORD    
	    DEC   dPAG_RCD_PNT
	    MOV   A, dFLD_R7    ; GET ACTIVE FIELD FLAG
	    RRC   A
	    JC    EndTwink      ; GET DISPLAY ONLY 
            RLC   A
            ORL   C, bFLD_ACTIVE    ; PASSWORD ON FIELD
            JNC   EndTwink
;*            MOV   A,   dFLD_R5
;*            JNB   BA_REVERSE, CursorSet      
;*            CLR   BA_REVERSE
;*            MOV   dFLD_R5, A
;*            CALL  DIS_FIELD
;*            RET
  CursorSet:MOV   A,  dFLD_INP_PNT
            MOV   R5,  A
	    CALL  LCD_SET_CURSOR    ; RESTORE THE CURSOR
EndTwink:   RET
LookFld:    ;@@@@@@@@@@@@@@@@
	    CALL  GET_RECORD
	    MOV   A, dFLD_R5    ; GET DISPLAY STATUS DEFINE BYTE
	    RRC   A             ; GET TWINKLE DISPLAY FLAG
	    JC    TwkClr        ; TO TWINKLE CLEAR FIELD
	    JMP   TwkNextF
TwkClr:     MOV   A,  dFLD_R7
            ANL   A,  #03FH
	    MOV   R1, #xDISPBUF           
	    MOV   dEXTPART, #cSCDRAM
	    MOV   pPORT2, #cSCDRAM  ; INIT EXT. RAM SEGMENT
	    MOV   R7, A
	    MOV   R6, A             ; FOR CLEAR OUTPUT
	    MOV   A,  #cSPACE
ClrNext:    MOVX  @R1, A
	    INC   R1
	    DJNZ  R6, ClrNext
	    MOV   R1, #xDISPBUF
	    LCALL LCD_WTR_STR
	    MOV   dEXTPART, #0  ; FOR RESTORE AFTER PORT2 CHANGED
	    MOV   pPORT2, #0    ; RESTORE EXT. RAM SEGMENT  
	    JMP   TwkNextF
	    END

;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_LEFT - MOVE THE FIELD POINTER TO UP ONE
; CALL FUNCTION: FLD_LEFT
; USING PARMENTERS:  dSYSPAGE      - THE NUMBER OF CURRENT PAGE
;                    dPAG_RCD_PNT  - THE NUMBER OF OFFSET BYTES FOR CURRENT RECORD
; COMMON DATA USED: 
; CHANGE REGISTER: R2, C, dPAG_RCD_PNT AS THE FIELD OFFSET
; RETURN: dPAG_RCD_PNT  - THE POINT TO NEXT FIELD 
;------------------------------------------------------------
           PROC  FLD_LEFT, FLD_RIGHT
FLD_LEFT:  PUSH  dPAG_RCD_PNT
           CALL  GETRCDPNT
           CALL  GET_RECORD
           DEC   dPAG_RCD_PNT
           MOV   A, dFLD_R5
           JNB   BA_REVERSE, DecNextF
           CALL  DIS_FIELD
DecNextF:  MOV   A,  dPAG_RCD_PNT
	   JZ    ToButton
           DEC   dPAG_RCD_PNT
	   CALL  GETRCDPNT
;@@@@@@@@@@@@
	   MOV   R0, A           ; --- CHECK TABLE IN OR OUT
           MOVC  A,  @A+DPTR
           XRL   A,  #080H        ; IS TABLE START FLAG
           JNZ   ForTabEnd
           MOV   dTAB_RCD_BYTES, A
           JMP   DecNextF
ForTabEnd: XRL   A,  #0C0H       ; IS TABLE END FLAG
           JNZ   IsThisFld
           MOV   A,  R0
           INC   A
           MOVC  A,  @A+DPTR
           MOV   dTAB_RCD_BYTES, A
           JMP   DecNextF 
IsThisFld: POP   ACC            ; get current record pointer
	   CJNE  A, dPAG_RCD_PNT, ForDecNt
	   RET
ForDecNt:  PUSH  ACC            ; RE-SAVE CURRENT RECORD POINTER 
	   CALL  GETRCDPNT
;@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
           RLC   A
           JC    DecNextF
	   RLC   A              ; IT'S PASSWORD R/W FIELD?
           ORL   C, bFLD_ACTIVE ; IT'S R/W FIELD?
	   JNC   DecNextF
Is_This:   POP   ACC
           MOV   dFLD_INP_PNT, #0
;@@@@@@@@@@@@@@
	   CALL  FLDCURSOR
	   RET
ToButton:  INC   A
	   PUSH  ACC 
	   MOV   B, #8
	   MUL   AB
	   XCH   A, B
	   ADD   A, DPH
	   MOV   DPH, A
	   MOV   A, B
;@@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
	   JZ    ChkUpOne
	   MOV   DPH,  dPAG_DPH         ; RESET THE DPTR
	   MOV   DPL,  dPAG_DPL         ; FOR NEXT FIELD
	   POP   ACC
	   JMP   ToButton
ChkUpOne:  POP   ACC
	   MOV   dPAG_RCD_PNT, A
	   JMP   DecNextF
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_RIGHT - THE DATA IN CURRENT FIELD INC ONE 
; CALL FUNCTION: GET_RECORD, LCDCURP
; USING PARMENTERS:  NONE
;
; COMMON DATA USED: 
; CHANGE REGISTER: 
; RETURN: NONE
;------------------------------------------------------------
FLD_RIGHT: PUSH  dPAG_RCD_PNT
           CALL  GETRCDPNT
           CALL  GET_RECORD
           DEC   dPAG_RCD_PNT
           MOV   A, dFLD_R5
           JNB   BA_REVERSE, IncNextF
           CALL  DIS_FIELD
IncNextF:  INC   dPAG_RCD_PNT
	   CALL  GETRCDPNT
;@@@@@@@@@@@@
	   MOV   R0, A           ; --- CHECK TABLE IN OR OUT
           MOVC  A,  @A+DPTR
           XRL   A,  #080H        ; IS TABLE START FLAG
           JNZ   RtTabEnd
           MOV   A,  R0
           INC   A
           MOVC  A,  @A+DPTR
           MOV   dTAB_RCD_BYTES, A
           JMP   IncNextF 
RtTabEnd:  XRL   A,  #0C0H       ; IS TABLE END FLAG
           JNZ   IsThatFld
           MOV   dTAB_RCD_BYTES, A
           JMP   IncNextF
IsThatFld: POP   ACC
	   CJNE  A, dPAG_RCD_PNT, ForIncNt
	   RET
ForIncNt:  PUSH  ACC
	   CALL  GETRCDPNT
;@@@@@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
	   JNZ   ChkThisF
	   MOV   dPAG_RCD_PNT, #0FFH
	   JMP   IncNextF
ChkThisF:  RLC   A
           JC    IncNextF
	   RLC   A              ; IT'S PASSWORD R/W FIELD?
           ORL   C, bFLD_ACTIVE ; IT'S R/W FIELD?
	   JNC   IncNextF
Is_That:   POP   ACC
           MOV   dFLD_INP_PNT, #0 ; RESET THE OFFSET IN FIELD
;@@@@@@@@@@@@@@
	   CALL  FLDCURSOR
	   RET
	   END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_INC - THE DATA IN CURRENT FIELD INC ONE 
; CALL FUNCTION: DELAY
; USING PARMENTERS:  NONE
;
; COMMON DATA USED: 
; CHANGE REGISTER: 
; RETURN: NONE
;------------------------------------------------------------
	   PROC  FLD_INC, FLD_INCH
FLD_INC:   CALL  GETRCDPNT
	   CALL  GET_RECORD
	   DEC   dPAG_RCD_PNT  
	   MOV   A, dFLD_R7
           RLC   A
           JC    IncErrT
           RLC   A
           ORL   C, bFLD_ACTIVE
           JNC   IncErrT
	   MOV   A, dFLD_R6
	   RLC   A
	   RLC   A
	   JC    IntegerInc
	   RLC   A
	   JC    FloatI01
	   RLC   A
	   JC    IncErrT             ; ASCII IN RAM
	   RLC   A
	   JC    IncErrT             ; ASCII IN ROM
	   MOV   A, dFLD_R6
	   ANL   A, #07H
	   MOV   R6, A              ; USE R6 FOR BIT INDEX
           MOV   R1, dFLD_R1 
	   MOV   A,  dFLD_R2
	   INC   A
	   JNZ   IncExtB
	   MOV   A,  @R1            ; IN INNER RAM
	   LCALL TOC_R6BIT
	   CPL   C 
	   LCALL CTO_R6BIT
	   MOV   @R1, A
	   JMP   IncEnd
IncExtB:   DEC   A
           MOV   dEXTPART, A
	   MOV   pPORT2, A
	   MOVX  A,  @R1
	   LCALL TOC_R6BIT
	   CPL   C
	   CALL  CTO_R6BIT
	   MOVX  @R1, A
	   JMP   IncEnd
IncErrT:   RET
FloatI01:  RLC   A
           JC    IncErrT
           MOV   A,  dFLD_R2
           MOV   dEXTPART, A
	   MOV   pPORT2, A
	   MOV   A, dFLD_R1   ;  R0 - THE POINTER TO THE 3BYTE FLOAT
           MOV   DPTR, #uF3SETUP
           CALL  FLD_F3LMT
           JNC   EndNo_I
           MOV   R0, dFLD_R1
	   MOV   R7, #7DH      ;   + (0.1)
	   MOV   R4, #0CCH
	   MOV   R5, #0CCH
	   CALL  F3_ADD
	   CALL  MOVRS_PR0
           JMP   IncEnd   
  EndNo_I: RET
IntegerInc:RLC   A
	   RLC   A
	   MOV   bUSE1, C
	   RLC   A
           MOV   bUSE2, C
           MOV   R1, dFLD_R1
           MOV   A,  dFLD_R2
	   INC   A
	   JNZ   ExtRAMInc
	   INC   @R1
	   JNB   bUSE1, DoubleI
	   MOV   A, @R1             ; FOR BCD CODE PROCESS
           ANL   A, #0FH
           CJNE  A, #0AH, IncEnd
           MOV   A, @R1
           ADD   A, #6
           MOV   @R1, A
           ANL   A, #0F0H
           CJNE  A, #0A0H, IncEnd
           CLR   A
	   MOV   @R1, A
	   JMP   IncEnd
  DoubleI: JNB   bUSE2, IncEnd
           MOV   A, @R1
           JNZ   IncEnd
           INC   R1
           INC   @R1
           JMP   IncEnd   
ExtRAMInc: DEC   A
           MOV   dEXTPART, A
	   MOV   pPORT2, A   ; INIT. EXT. RAM SEGMENT ADDR
	   MOV   A, R1       ; R0 - THE POINTER TO THE INTEGER
           MOV   DPTR, #uINTSETUP
           CALL  FLD_INTLMT
           JNC   EndNo_I
	   MOVX  A,  @R1     ; PARMETER  R0 - THE INTEGER WILL BE CONVERTED
	   INC   A
	   MOVX  @R1, A
	   JNB   bUSE1, DbIntIe
           ANL   A, #0FH
           CJNE  A, #0AH, IncEnd
           MOVX  A, @R1
           ADD   A, #6
           MOVX  @R1, A
           ANL   A, #0F0H
           CJNE  A, #0A0H, IncEnd
           CLR   A
           MOVX  @R1, A
	   JMP   IncEnd
  DbIntIe: JNB   bUSE2, IncEnd
           JNZ   IncEnd
           INC   R1
           MOVX  A,  @R1
           INC   A
           MOVX  @R1, A
IncEnd:    MOV   A,   dFLD_R5
           CLR   BA_REVERSE
           MOV   dFLD_R5, A
           CALL  DIS_FIELD
	   CLR   C
	   RET
;#############################################################

⌨️ 快捷键说明

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