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

📄 pagsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	   CJNE  A,  dLCD_BYTES_ROW, ForDotOut
	   JMP   EndDisFld  
IsFloat:   CALL  FORARRYADJ         ; **** ADJUST THE POINTER TO DATA
           MOV   R2, dFLD_R2  
	   MOV   dEXTPART, R2
	   MOV   pPORT2,   R2       ; INIT. EXTERN SEGMENT ADDRESS
	   RLC   A
	   JC    ForDotOut          ; R6 = 01(?)XXXX FOR DGM DISPLAY 
	   MOV   A, dFLD_R7
	   ANL   A, #03FH
           PUSH  ACC
           MOV   R1, dFLD_R1              
	   CALL  MOVPR1_RS         ; R1 - THE POINTER TO THE 3BYTE FLOAT
	   MOV   R1, #xDISPBUF     ; PARMETER  R1 - THE POINTER TO THE BUFFER FOR STRING
	   MOV   dEXTPART, #cSCDRAM  ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #cSCDRAM    ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
           POP   ACC
	   PUSH  ACC
	   LCALL F3_TOSTR          ; A - THE NUMBER OF CHARACTER IN STRING
;---------------- string output -----------
DoDataOut: MOV   R1, #xDISPBUF     ; RESET THE STRING BUF POINTER
	   POP   ACC
	   MOV   R7, A           ; SET THE MAX LINGTH THAT WILL BE OUTPUT 
DoRAMOut:  LCALL LCD_WTR_STR         ; (dFLD_R4, dFLD_R3) - POSITION, dFLD_R5 - ATTRIBUTE
EndDisFld: MOV   dEXTPART, #0    ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #0      ; RESTORE THE EXT. RAM SETMENT ADDRESS
	   RET
	   END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: DIS_CURFLD - DISPLAY ONE DATA CHANGED FIELD ON LCD 
; CALL FUNCTION: DELAY
; USING PARMENTERS: dPAG_DPTR - THE POINT TO THE PAGE BUFFER
;                dFLD_R1 - R7 - THE FIELD DEFINE RECORD
; COMMON DATA USED: 
; CHANGE REGISTER: C, A, B, R1, R2, R3, R4, R5, R6, R7
; RETURN: NONE
;------------------------------------------------------------
	   PROC  DIS_CURFLD
DIS_CURFLD:MOV   A, dFLD_R6           ; FOR DATA TYPE?
	   RLC   A
	   ORL   C, bFLD_ACTIVE       ; FIELD DISPLAY ACTIVE 
	   JC    ChkFldTyp
DisEnd:    RET
IsFloatT:  JMP   IsFloat
IsIntT:    JMP   IsInteger
ChkFldTyp: RLC   A
	   JC    IsIntT
	   RLC   A
	   JC    IsFloatT
	   RLC   A
	   JC    ForRAMOut
	   RLC   A
	   JC    ForROMOut 
; FOR SWITCH FIELD PROCESS
	   CALL  FORARRYADJ         ; ADJUST THE POINTER TO DATA
	   MOV   A,  dFLD_R6
	   ANL   A,  #07H
	   MOV   R6, A
	   MOV   A,  dFLD_R2
	   INC   A
	   JNZ   ExtRAMBit
           MOV   R1, dFLD_R1
	   MOV   A,  @R1
	   JMP   GetBit
ExtRAMBit: DEC   A
           MOV   dEXTPART, A
	   MOV   pPORT2,  A       ; INITIALIZE EXTERN SEGMENT ADDRESS
           MOV   R1, dFLD_R1
	   MOVX  A,  @R1          ;PARMETER  R1 - THE INTEGER WILL BE CONVERTED
GetBit:    LCALL TOC_R6BIT
	   MOV   A, dFLD_R7          
	   ANL   A, #3FH  
	   SWAP  A
	   JNC   ForPoint           ; GET [A]
	   CLR   C
	   SUBB  A, #8              ; GET [B]-NEXT 8 BYTE
ForPoint:  MOV   DPL, A
	   MOV   A, dPAG_DPL
	   SUBB  A, DPL     
	   MOV   DPL, A             ; MOVE THE POINTER TO SWITCH DISPLAY CODE
	   CLR   A
	   MOV   DPH, A
	   MOV   A, dPAG_DPH
	   SUBB  A, DPH
	   MOV   DPH, A
	   MOV   A, #8              ; THE MAX NUMBER WILL BE DISPLAY
           JMP   DoROMOut
ForROMOut: MOV   DPL, dFLD_R1       ; GET THE POINTER TO STRING 
	   MOV   DPH, dFLD_R2       ; ....
	   MOV   A, dFLD_R7
	   ANL   A, #03FH
DoROMOut:  MOV   R7, A              ; SAVE THIS NUMBER FOR DISPLAY
	   MOV   R1, #xDISPBUF           
	   MOV   dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2,   #cSCDRAM ; INIT. EXT. RAM SEGMENT FOR DISPBUF
	   LCALL MOV_ROMTORAM
	   MOV   R1, #xDISPBUF           
           JMP   DoRAMOut
ForRAMOut: RLC   A
           MOV   bUSE2, C           ; IS POINTER TO STRING? 
           CALL  FORARRYADJ         ; AJDUST THE DATA POINTER(R2,R1), IF THE RECORD IN TABLE
           MOV   A, dFLD_R2
           INC   A
           JZ    DisEnd
           DEC   A
           MOV   dEXTPART, A   ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, A     ; INIT. EXT. RAM SEGMENT FOR DISPLAY STRING
           MOV   R1, dFLD_R1
	   JB    bUSE2, EndDisFldT ; NO PROCESS FOR ROM POINTER
           MOV   A,  dFLD_R7   ;   R7 - THE NUMBER OF CHARACTER IN STRING
	   ANL   A,  #3FH
	   MOV   R7, A
           MOV   DPH, #cSCDRAM    ; READY FOR INPUT OPERATOR   
           MOV   DPL, #xINPUTBUF
           CLR   A
           MOVX  @DPTR, A         ; FOR PASSWORD FIELD
           MOV   A, dFLD_R6
           RRC   A
           JC    DoRAMOutT        ; IS PASSWIRD FIELD?
           MOV   A,  R7
           CALL  MOV_RAMTOEXT     ; IT'S NORMAL FIELD GET DATA BACK
           MOV   R1, dFLD_R1
 DoRAMOutT:JMP   DoRAMOut
EndDisFldT:JMP   EndDisFld
IsInteger: CALL  FORARRYADJ       ; ADJUST THE POINTER TO DATA
	   RLC   A
	   MOV   bUSE3, C      ; IS HEX NEED?
	   RLC   A
	   MOV   bUSE2, C      ; IS BCD CODE?
           RLC   A
           MOV   bUSE1, C      ; IS DOUBLE BYTES INTEGER?
	   MOV   A,  dFLD_R2
	   INC   A
	   JNZ   ForExtRAM
           MOV   R1, dFLD_R1
	   MOV   A,  @R1
           MOV   B,  A
           INC   R1
           MOV   A,  @R1  
	   JMP   ForIntOut
ForExtRAM: DEC   A
           MOV   dEXTPART, A
	   MOV   pPORT2,   A      ; INITIALIZE EXTERN SEGMENT ADDRESS
           MOV   R1, dFLD_R1
	   MOVX  A,  @R1          ;PARMETER  R1 - THE INTEGER WILL BE CONVERTED
           MOV   B,  A
           INC   R1
           MOVX  A, @R1
ForIntOut: MOV   R2, A
	   MOV   dEXTPART, #cSCDRAM  ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #cSCDRAM    ; INIT. EXT. RAM SEGMENT ADDR FOR DISPBUF
	   MOV   R1, #xDISPBUF       ; R1 - THE POINTER TO THE BUFFER FOR STRING
	   MOV   A,  dFLD_R7
	   ANL   A,  #3FH
	   PUSH  ACC
	   XCH   A,  R2              ;   A, B - THE INTEGER, R2 - THE LENGTH
           JB    bUSE3, HexInt
	   JB    bUSE2, BcdInt 
	   JB    bUSE1, TwoInt
           MOV   A,  B
           LCALL INT_TOSTR  ; A - THE NUMBER OF CHARACTER IN STRING
	   JMP   DoDataOut
  BcdInt:  MOV   A,  B
           CALL  BCD_TOSTR
	   CLR   bUSE2      ; RESET THE BCD CODE CONVERT
	   JMP   DoDataOut
  HexInt:  MOV   A,  B
           CALL  HEX_TOSTR
	   CLR   bUSE3      ; RESET THE INTEGER CONVERT
	   JMP   DoDataOut
  TwoInt:  CALL  INT2_TOSTR
	   CLR   bUSE1      ; RESET THE TWO BYTES INTEGER CONVERT
           JMP   DoDataOut 
;---------------------------------- float data process
IsFloat:   CALL  FORARRYADJ         ; **** ADJUST THE POINTER TO DATA
           MOV   R2, dFLD_R2  
	   MOV   dEXTPART, R2
	   MOV   pPORT2,   R2       ; INIT. EXTERN SEGMENT ADDRESS
	   RLC   A
	   JC    EndDisFld             ; R6 = 01(1)XXXX, nothing to do FOR DGM DISPLAY 
	   MOV   A, dFLD_R7
	   ANL   A, #03FH
           PUSH  ACC
           MOV   R1, dFLD_R1              
	   CALL  MOVPR1_RS         ; R1 - THE POINTER TO THE 3BYTE FLOAT
	   MOV   R1, #xDISPBUF     ; PARMETER  R1 - THE POINTER TO THE BUFFER FOR STRING
	   MOV   dEXTPART, #cSCDRAM  ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #cSCDRAM    ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
           POP   ACC
	   PUSH  ACC
	   LCALL F3_TOSTR          ; A - THE NUMBER OF CHARACTER IN STRING
;---------------- string output -----------
DoDataOut: MOV   R1, #xDISPBUF     ; RESET THE STRING BUF POINTER
	   POP   ACC
	   MOV   R7, A           ; SET THE MAX LINGTH THAT WILL BE OUTPUT
           MOV   DPH, #cSCDRAM    ; READY FOR INPUT OPERATOR   
           MOV   DPL, #xINPUTBUF
           CALL  MOV_RAMTOEXT     ; IT'S NORMAL FIELD GET DATA BACK
           MOV   R1, #xDISPBUF
DoRAMOut:  LCALL LCD_WTR_STR         ; (dFLD_R4, dFLD_R3) - POSITION, dFLD_R5 - ATTRIBUTE
EndDisFld: MOV   dEXTPART, #0    ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #0      ; RESTORE THE EXT. RAM SETMENT ADDRESS
	   RET
	   END

;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDCURSOR - DISPLAY THE CURSOR ON CURRENT POSITION
; CALL FUNCTION: LCDCURP
; USING PARMENTERS:  pDISPBUFc, PAGE REGISTER GROUP
; COMMON DATA USED:  GROUP 3 REGISTERS
; CHANGE REGISTER: R6, R7
; RETURN: NONE
;------------------------------------------------------------
           PROC  FLDCURSOR, FIX_FLD 
FLDCURSOR: CALL  GETRCDPNT      ; LET DPTR POINTER TO CURRNT FIELD IN PAGE 
	   CALL  GET_RECORD    
	   DEC   dPAG_RCD_PNT
           MOV   A,  dFLD_R6
           RLC   A
           RLC   A
           JC    IntProc
           RLC   A
           JC    F3_Proc
           RLC   A
           JC    RAMAsc
 PutCursor:MOV   A, dFLD_R5
           JNB   BA_REVERSE, SetCursor      
           CLR   BA_REVERSE
           MOV   dFLD_R5, A
           CALL  DIS_CURFLD
           RET
 SetCursor:MOV   A, dFLD_INP_PNT
           MOV   R5,  A
	   CALL  LCD_SET_CURSOR    ; RESTORE THE CURSOR
	   RET
  IntProc: AJMP  PutCursor         ; %%%%%No active NOW

  F3_Proc: RLC   A
           JC    PutCursor
           CALL  FORARRYADJ         ; **** ADJUST THE POINTER TO DATA
           MOV   R2, dFLD_R2  
	   MOV   dEXTPART, R2
	   MOV   pPORT2,   R2       ; INIT. EXTERN SEGMENT ADDRESS
           MOV   R1, dFLD_R1              
	   CALL  MOVPR1_RS         ; R1 - THE POINTER TO THE 3BYTE FLOAT
	   MOV   R1, #xDISPBUF     ; PARMETER  R1 - THE POINTER TO THE BUFFER FOR STRING
	   MOV   dEXTPART, #cSCDRAM  ; FOR RESTORE AFTER PORT2 CHANGED
	   MOV   pPORT2, #cSCDRAM    ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
	   MOV   A, dFLD_R7
	   ANL   A, #03FH
	   LCALL F3_TOSTR          ; A - THE NUMBER OF CHARACTER IN STRING
	   MOV   R1, #xDISPBUF     ; PARMETER  R1 - THE POINTER TO THE BUFFER FOR STRING
           JMP   CopyTo           
  RAMAsc:  RLC   A
           JC    PutCursor
           RLC   A
           RLC   A
           RLC   A
           MOV   dEXTPART, dFLD_R2
           MOV   pPORT2, dEXTPART
           MOV   R1, dFLD_R1
           JNC   CopyTo
           CLR   A
           MOVX  @R1, A
   CopyTo: MOV   DPH, #cSCDRAM
           MOV   DPL, #xINPUTBUF
           MOV   A,  #3FH
           ANL   A,  dFLD_R7
           CALL  MOV_RAMTOEXT
           JMP   PutCursor

;#######################################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FIX_FLD - MOVE THE FIELD POINTER TO THE FRIST D/W FIELD 
; CALL FUNCTION: GET_DPTR, GET_RECORD
; USING PARMENTERS:  dSYSPAGE - THE NUMBER OF DISPLAY PAGE POINTER
; COMMON DATA USED: 
; CHANGE REGISTER: ALL REGISTER C , dPAG_RCD_PNT AS THE FIELD OFFSET
; RETURN: NONE 
;------------------------------------------------------------
FIX_FLD:   CLR   A
           MOV   dFLD_INP_PNT, A
           MOV   dPAG_RCD_PNT, A      ; RESET THE FIELD RECORD POINTER
           MOV   dTAB_RCD_BYTES, A    ; RESET TO NO TABLE ON
FixNextF:  CALL  GETRCDPNT            ; GET THE RCECORD POINT
;--	   JB    bSIMULATE, SIMFstByt ;@@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
ForFixTo:  JZ    EndFixFld
	   RLC   A
	   JC    ForNextF
           RLC   A
	   ORL   C, bFLD_ACTIVE   ; IS PASSWORD R/W FIELD?
	   JC    FixToFld
ForNextF:  INC   dPAG_RCD_PNT
	   JMP   FixNextF
SIMFstByt: ;@@@@@@@@@@@@  GET (dFLD_R4, dFLD_R3)
           MOV   A, dFLD_R7
           JMP   ForFixTo
EndFixFld: DEC   dPAG_RCD_PNT
	   RET
FixToFld:  CALL  FLDCURSOR
	   RET
	   END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDUPDATE - REDISPLAY THE DATA CHANGED OR 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
;------------------------------------------------------------
	   PROC  FLDUPDATE, FLDTWINKLE
FLDUPDATE: PUSH  dPAG_RCD_PNT   
           PUSH  dTAB_RCD_BYTES
	   PUSH  ACC
           CLR   A
           MOV   dPAG_RCD_PNT, A
           MOV   dTAB_RCD_BYTES, A
ChkNextF:  CALL  GETRCDPNT
;@@@@@@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
	   JNZ   FldChk
	   POP   ACC           ; ALL FIELD CHECK OVER 
           POP   dTAB_RCD_BYTES
	   POP   dPAG_RCD_PNT
	   CALL  GETRCDPNT     ; ---- RESTORE CUTSOR
;@@@@@@@@@@@@@@@@@@@
	   CALL  GET_RECORD    
	   DEC   dPAG_RCD_PNT
	   MOV   A, dFLD_R7    ; GET ACTIVE FIELD FLAG
	   RLC   A
	   JC    EndUpdate     ; GET DISPLAY ONLY 
           RLC   A
           ORL   C, bFLD_ACTIVE
           JNC   EndUpdate
;*           MOV   A,   dFLD_R5
;*           JNB   BA_REVERSE, SetCursor      
;*           CLR   BA_REVERSE
;*           MOV   dFLD_R5, A
;*           CALL  DIS_FIELD
;*           RET
 SetCursor:MOV   A, dFLD_INP_PNT
           MOV   R5,  A
	   CALL  LCD_SET_CURSOR    ; RESTORE THE CURSOR
EndUpdate: RET
FldChk:    ;@@@@@@@@@@@@@@@@
	   CALL  GET_RECORD
	   MOV   A, dFLD_R5    ; GET DISPLAY STATUS DEFINE BYTE
	   RRC   A             ; GET TWINKLE DISPLAY FLAG
	   JC    ForDisp
UpdateFld: MOV   A, dFLD_R6
	   RLC   A
	   ORL   C, bFLD_ACTIVE ;  IS IT PASSWORD R/W FIELD?
	   JNC   ChkNextF
  DoUpChk: RLC   A
	   JC    UpDateChk
	   RLC   A
	   JC    UpDateChk
	   RLC   A
	   JC    IsRAMData
	   RLC   A
	   JC    ChkNextF     ; ROM STRING - NO UPDATE 
UpDateChk: POP   ACC          ; GET THE ADDRESS OR DATA
	   PUSH  ACC          ; RE-SAVE IT
           MOV   R2, dFLD_R2
	   CJNE  R2, #0FFH, ForAddChk  
	   JZ    TimeAddr     ; DO TIME DATA CHECK
ForAddChk: CLR   C
	   SUBB  A, dFLD_R1
	   JNZ   ChkNextF
ForDisp:   CALL  DIS_FIELD
ChkNtFT:   JMP   ChkNextF
IsRAMData: RLC   A           
           POP   ACC          ; GET THE ADDRESS OR DATA
           PUSH  ACC          ; RE-SAVE IT
           JNC   IsRAMStr
           CLR   C
	   SUBB  A, dFLD_R1
	   JNZ   ChkNextF

⌨️ 快捷键说明

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