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

📄 evtsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
字号:
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: PUTEVENT - PUT ONE EVENT TO EVENT BUFFER 
; CALL FUNCTION:  
; PARMENTERS:  A - THE EVENT CODE, B - THE SUB CODE
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: C - OK! or BUFFER OVER ERROR 
;------------------------------------------------------------
PUTEVENT:    MOV   R0, pEVENTBUFe
             CLR   B_EN_INT      ; PROVENT THE TIMER INT RE_ENTER
	     MOV   pPORT2, #cSCDRAM  ; INIT. EXT. RAM SEGMENT FOR EVENT BUFFER
	     MOVX  @R0, A
	     MOV   A, #10H
	     ADD   A, R0
	     XCH   A, R0
	     XCH   A, B
	     MOVX  @R0, A
	     XCH   A, B
	     INC   A
	     MOV   pPORT2, dEXTPART   ; RESTORE THE SEGMENT FOR EXT. RAM
	     SETB  B_EN_INT      ; PROVENT THE TIMER INT RE_ENTER
	     CJNE  A, pEVENTBUFf, GetPutPnt
	     SETB  C
	     RET
GetPutPnt:   INC   pEVENTBUFe
	     CJNE  A, #cEVENTBUFe, OverPutEvent
	     MOV   pEVENTBUFe, #cEVENTBUFf
OverPutEvent:CLR   C
	     RET             
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: GETEVENT - GET EVENT FROM EVENT BUFFER 
; CALL FUNCTION:  
; PARMENTERS:  NONE
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: A - THE EVENT CODE, B - THE SUB CODE
;------------------------------------------------------------
GETEVENT:    MOV   R0, pEVENTBUFf
	     MOV   A, R0
	     CJNE  A, pEVENTBUFe, GetIncPnt
	     CLR   A
	     RET
GetIncPnt:   MOV   dEXTPART, #cSCDRAM
             MOV   pPORT2, #cSCDRAM   ; INIT. EXT. RAM SEGMENT FOR EVENT BUFFER
	     MOV   B,  A
	     ADD   A, #10H
	     MOV   R0, A
	     MOVX  A, @R0
	     XCH   A,  B
	     MOV   R0, A
	     MOVX  A, @R0   
	     INC   pEVENTBUFf
	     INC   R0
             MOV   dEXTPART, #0
	     MOV   pPORT2, #0   ; RESTORE THE SEGMENT FOR EXT. RAM 
	     CJNE  R0, #cEVENTBUFe, OverGetEvent
	     MOV   pEVENTBUFf, #cEVENTBUFf
OverGetEvent:RET             

;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: SYSEVENTP - SYSTEM NORMAL EVENT PROCESS TO LCD 
; CALL FUNCTION: DELAY
; USING PARMENTERS:  DPTR    - THE POINT TO THE PAGE BUFFER
; COMMON DATA USED: 
; CHANGE REGISTER: ALL REGISTER C AND TMPEBUF
; RETURN: NONE 
;------------------------------------------------------------
	   PROC  SYSEVENTP 
SYSEVENTP: JB    ACC.6, FunckeyP
	   JB    ACC.7, FuncKeyP
	   PUSH  ACC                ; else LESS 40h code process
           CALL  GETRCDPNT
           CALL  GET_RECORD         ; GET FIELD DEFINE DATA
           DEC   dPAG_RCD_PNT
           POP   B                  ; SAVE THE EVENT CODE TO B
           MOV   A, dFLD_R7
           RLC   A
           JC    InputEnd
           RLC   A
           ORL   C, bFLD_ACTIVE     ; IS ACTIVE FOR INPUT FIELD?
           JNC   InputEnd
           MOV   A, dFLD_R7
           ANL   A, #3FH
           MOV   R2,  A
           CLR   C             
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           MOV   A, dFLD_INP_PNT
           XCH   A, R2             ; GET THE EFFICENT LENGTH
           SUBB  A, R2
           MOV   R2, A
           JZ    InputEnd
           MOV   A, dFLD_INP_PNT
           ADD   A, #xINPUTBUF
           MOV   R0, A
MoveNext:  MOVX  A, @R0            ; MOVE THE BACK CHARS TO NEXT 
	   XCH   A,  B
	   MOVX  @R0, A
           INC   R0
	   MOV   A, B
           JZ    IsPWD
	   DJNZ  R2, MoveNext
  IsPWD:   MOVX  @R0, A
           MOV   R1, #xINPUTBUF
           MOV   A, dFLD_R6
           RRC   A
           JNC   ForFldD
           MOV   A, dFLD_INP_PNT
           ADD   A, dFLD_R1
           MOV   R1,  A            ; GET THE POINTER TO DISPLAY RAM
           MOV   dEXTPART, dFLD_R2  ; IT'S PASSWORD!
           MOV   pPORT2, dFLD_R2
           MOV   A, #2Ah           ; INPUT '*' 
           MOVX  @R1, A
           INC   R1
           CLR   A
           MOVX  @R1, A
           MOV   R1, dFLD_R1
  ForFldD: MOV   A, dFLD_R7
	   ANL   A, #03FH
           MOV   R7, A
           CALL  LCD_WTR_STR       ; DISPLAY THE LEST CHARS AFTER CURSOR
           INC   dFLD_INP_PNT      ; INC TO NEXT CHAR
           MOV   A, dFLD_INP_PNT
           MOV   R5,  A
	   CALL  LCD_SET_CURSOR    ; RESTORE THE CURSOR
InputEnd:  MOV   dEXTPART, #0
	   MOV   pPORT2, #0        ; RESTORE EXT. RAM SEGMENT
           RET
FuncKeyP:  CJNE  A, #eTWINKLCD0, NextEvt0
	   CLR   A
	   CALL  FLDUPDATE
           CLR   A
	   RET                         ; JMP   ProEvtEnd
NextEvt0:  CJNE  A, #eTWINKLCD1, NextEvt1
	   CALL  FLDTWINKLE
QuitEvtP:  CLR   A
           RET                         ; JMP   ProEvtEnd
NextEvt1:  CJNE  A, #eBACKSPACE, NextEvt2           
	   MOV   A, #eDELETE
	   CALL  PUTEVENT
	   MOV   A, #eARROW_LEFT
NextEvt2:  CJNE  A, #eDELETE, NextEvt3           
;-----------delete character process ------------
	   CALL  FLD_GETLNG         ; GET CURRENT FIELD LENGTH TO R2
           MOV   R2, A
           CLR   C              
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           MOV   A, dFLD_INP_PNT
           XCH   A, R2             ; GET THE EFFICENT LENGTH
           SUBB  A, R2
           MOV   R2, A
           MOV   A, dFLD_INP_PNT
           ADD   A, #xINPUTBUF
           INC   dFLD_INP_PNT  
           MOV   R0, A
 DelNext:  MOVX  A, @R0            ; MOVE THE BACK CHARS TO NEXT 
	   DEC   R0
           MOVX  @R0, A
	   INC   R0
           INC   R0  
	   DJNZ  R2, DelNext
           MOV   dEXTPART, #0
	   MOV   pPORT2, #0        ; RESTORE EXT. RAM SEGMENT
	   CALL  DIS_FIELD         ; DISPLAY THE LEST CHARS AFTER CURSOR
           JMP   RstCur
EvtErrET:  JMP   EvtErrEnd                ; NO CHARACTER WILL BE DELETE
NextEvt3:  CJNE  A, #eARROW_RIGHT, NextEvt4
	   CALL  FLD_GETLNG         ; GET CURRENT FIELD LENGTH TO R2
           MOV   B, A              
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           MOV   A, dFLD_INP_PNT
           ADD   A, #xINPUTBUF
           MOV   R1, A
           MOVX  A, @R1
           JNZ   IsToEnd            
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           RET
;           MOV   A, #eFLDRIGHT           ; FOR NEXT FIELD
;           JMP   NextEvt4
IsToEnd:   MOV   A, dFLD_INP_PNT
           INC   A
           CJNE  A, B, SavePntR
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           RET
SavePntR:  INC   dFLD_INP_PNT 
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           JMP   RstCur
NextEvt4:  CJNE  A, #eARROW_LEFT, NextEvt5          
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           MOV   A, dFLD_INP_PNT
           JNZ   SavePntL
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           RET
;           MOV   A, #eFLD_LEFT           ; FOR PROVIOUS FIELD
;           JMP   NextEvt5
SavePntL:  DEC   dFLD_INP_PNT
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           JMP   RstCur
NextEvt5:  CJNE  A, #eARROW_END, NextEvt6
	   CALL  FLD_GETLNG         ; GET CURRENT FIELD LENGTH TO R2
           MOV   B, A              
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           MOV   R0, #xINPUTBUF
           DEC   R0
  ForNtC:  INC   R0
           MOVX  A, @R0
           JNZ   ForNtC
           MOV   A, R0
           CLR   C
           SUBB  A, #xINPUTBUF
           CJNE  A, B, FindEnd 
           DEC   A   
FindEnd:   MOV   dFLD_INP_PNT, A
           MOV   dEXTPART, #0
           MOV   pPORT2, #0
           JMP   RstCur
NextEvt6:  CJNE  A, #eARROW_HOME, NextEvt7
           MOV   dEXTPART, #cSCDRAM
	   MOV   pPORT2, #cSCDRAM
           CLR   A
           MOV   dFLD_INP_PNT, A
           MOV   dEXTPART, A
           MOV   pPORT2, A
  RstCur:  CALL  FLDCURSOR
           RET
NextEvt7:  CJNE  A, #eLOC_ON, NextEvt8  ; ----
           MOV   R0, dSYSPAGE
	   CJNE  R0, #cPAGE0, NextEvt8  ; 不在初始页
           CALL  TURN_UP                ; TURN LCD RIGHT UP
           RET
NextEvt8:  CJNE  A, #eLOC_OFF, NextEvtA
           MOV   R0, dSYSPAGE
	   CJNE  R0, #cPAGE0, NextEvtA  ; 不在初始页
           CALL  TURN_DOWN              ; TURN LCD RIGHT UP
           RET
NextEvtA:  CJNE  A, #ePAGMENU1, NextEvtB
	   MOV   dSYSPAGE, #cSYSMENU1
	   MOV   A, #ePAG_DISP
NextEvtB:  CJNE  A, #ePAGMENU2, NextEvtC
           MOV   dSYSPAGE, #cSYSMENU2
	   MOV   A, #ePAG_DISP
NextEvtC:  CJNE  A, #ePAGMENU3, NextEvtD
	   MOV   dSYSPAGE, #cSYSMENU3
	   MOV   A, #ePAG_DISP
NextEvtD:  CJNE  A, #ePAGMENU4, NextEvtE
           MOV   dSYSPAGE, #cSYSMENU4
           MOV   A, #ePAG_DISP
NextEvtE:  CJNE  A, #ePAGMENU5, NextEvtF
	   MOV   dSYSPAGE, #cSYSMENU5
	   MOV   A, #ePAG_DISP
NextEvtF:  CJNE  A, #ePAGMENU6, NextEvtG
	   MOV   dSYSPAGE, #cSYSMENU6
	   MOV   A, #ePAG_DISP
NextEvtG:  CJNE  A, #eSYS_ON, NextEvtH
	   MOV   A, #6              ; TURN RUN LAMP ON
	   CALL  I2CWRUN
	   JB    bSYSON, ProEvtE2
	   SETB  bSYSON
	   MOV   A, #cSYSSTART           ; START TO TURN ON THE SYSTEM
	   MOV   B, #eSTACHG
	   CALL  SAVEMSG
	   MOV   dSYSMODE, #cSYSSTART    ;   = 1
	   CALL  POWERON            ; TURN THE 12V POWER ON
	   CLR   A
	   MOV   R0, #dIN_1STA
	   MOV   R5, #8
	   CALL  CLR_MEMORY
	   MOV   R0, #dOUT1SET
	   MOV   R5, #8
	   CALL  CLR_MEMORY
	   MOV   dERRCODE, A
	   MOV   A, #dERRCODE
	   CALL  FLDUPDATE
           CLR   A                 ; /...
UpKeyFld:  MOV   A, #dSYSBITS1
	   CALL  FLDUPDATE
	   CLR   A
ProEvtE2:  RET                      ; JMP   ProEvtEnd
NextEvtH:  CJNE  A, #eSYS_OFF, NextEvt10
           MOV   A, #7              ; TURN RUN LAMP OFF
	   CALL  I2CWRUN
	   JNB   bSYSON, ProEvtE2
	   CLR   bSYSON
	   MOV   A, #cSYSDOWN       ; START TURN OFF THE SYSTEM
	   MOV   B, #eSTACHG
	   CALL  SAVEMSG
	   JMP   ProEvtE2
NextEvt10: CJNE  A, #ePAG_DOWN, NextEvt11
           INC   dSYSPAGE  
	   MOV   A, dSYSPAGE
	   SWAP  A
	   ANL   A, #0FH
	   MOV   DPTR, #uPAGSNUM
;@@@@@@@@@@@ ADD SIMULATE RUN 
	   MOVC  A, @A+DPTR
	   CJNE  A, dSYSPAGE, ForUpPage
	   ANL   dSYSPAGE, #0F0H
ForUpPage: MOV   A, #ePAG_DISP
NextEvt11: CJNE  A, #ePAG_UP, NextEvt12
	   MOV   A, dSYSPAGE
           ANL   A, #0FH
	   JNZ   DecOneIs
	   MOV   A, dSYSPAGE
	   SWAP  A
	   ANL   A, #0FH
	   MOV   DPTR, #uPAGSNUM
;@@@@@@@@@@@@@@@@@@@@
	   MOVC  A, @A+DPTR
	   MOV   dSYSPAGE, A
DecOneIs:  DEC   dSYSPAGE
	   MOV   A, #ePAG_DISP
NextEvt12: CJNE  A, #ePAG_DISP, FldChgEvt
	   MOV   A, dSYSMODE
	   JNZ   DispPage
	   SETB  B_CTLLCK
	   MOV   A, B
	   JNZ   DispPage
	   CLR   B_CTLLCK 
DispPage:  CALL  LCD_CLR               ; CLEAR THE SCREEN
           CALL  LCD_DRAW_FRAME
	   CALL  DISP_PAGE
      ; MOV FIELD PNT. TO FRIST
	   JC    EvtErrEnd             ; ERROR KEY PRESS
	   CALL  FIX_FLD
           CLR   A
           RET
FldChgEvt: PUSH  ACC                   ; SAVE THE EVENT CODE
           CJNE  A, #eFLDRIGHT, NextEvt18
           CALL  FLD_RIGHT
	   JNC   ProEvtEnd
EvtErrE:   POP   ACC
EvtErrEnd: MOV   A, #cKEYSOUND
	   CALL  ERRBELL
           CLR   ACC
	   RET
NextEvt18: CJNE  A, #eFLD_LEFT, NextEvt19           
           CALL  FLD_LEFT
           JC    EvtErrE
ProEvtEnd: POP   ACC
	   RET                  ;  JMP   ProEvtEnd
NextEvt19: CJNE  A, #eFLD_INC, NextEvt1A
	   CALL  FLD_INC
           JMP   ProEvtEnd
NextEvt1A: CJNE  A, #eFLD_DEC, NextEvt1B           
	   CALL  FLD_DEC
           JMP   ProEvtEnd
NextEvt1B: CJNE  A, #eFLD_INCH, NextEvt1C
	   CALL  FLD_INCH
           JMP   ProEvtEnd
NextEvt1C: CJNE  A, #eFLD_DECH, ProEvtEnd
	   CALL  FLD_DECH
           JMP   ProEvtEnd
	   END
	   

⌨️ 快捷键说明

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