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

📄 useevt.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: EVENTPROC - EVENT PROCESS 
; CALL FUNCTION:  
; PARMENTERS:  A - THE EVENT CODE
; COMMON DATA USED: NONE
; PARAMTERS:   R0 - THE PASSWORD INPUT PAGE CODE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
             PROC  PWDCHECK
PWDCHECK:    MOV   R1, #xSUMTIME+1     ; CHECK IS 240 HOURS AFTER
             MOVX  A, @R1              ;
             CLR   C
             SUBB  A, #0F0H            
             JC    FstYear
             INC   R0                  ; IT IS 240 HOURS AFTER 
  FstYear:   MOV   A,  R0
             ANL   A,  #0FH
             MOV   B,  #8
             MUL   AB
             MOV   B,  A
             ADD   A,  #xPWDDATAS
             MOV   R1, A
             MOV   DPH, #cSCDRAM
             MOV   DPL, #xINPUTBUF
             MOVX  A, @R1
             CJNE  A, #eDATA_IN, IsUpKeyD
  IsUpKeyD:  Jmp   ForRomD             ;%%JNC 大于键值
             CJNE  A, #eKEY_DOWN, IsDnKeyD
  IsDnKeyD:  JC    ForRomD                  ; 小于键值
             MOV   A,  #6
             CALL  CMP_RAMTOEXT
             RET
  ForRomD:   MOV   dEXTPART, #cSCDRAM
             MOV   pPORT2, dEXTPART
             MOV   R1, #xPASSWORD
             MOV   DPTR, #PWDSET
             MOV   A,  B
             ADD   A, DPL
             MOV   DPL, A
             JNC   MovROMRAM
             INC   DPH
  MovROMRAM: MOV   A, #8
             CALL  MOV_ROMTORAM
             MOV   DPH, #cSCDRAM
             MOV   DPL, #xINPUTBUF
             MOV   R1, #xPASSWORD
             MOV   A,  #6
             CALL  CMP_RAMTOEXT
             MOV   dEXTPART, #0           ; RESTORE THE EXT POINTER TO BLOCK #0
             MOV   pPORT2, dEXTPART
             RET
  PWDSET:    DB    eKEY_INC, eKEY_INC, eKEY_INC, eKEY_INC, 0, 0, 0, 0
             DB    eKEY_INC, eKEY_DEC, eKEY_INC, eKEY_DEC, 0, 0, 0, 0
             DB    eKEY_DEC, eKEY_INC, eKEY_DEC, eKEY_INC, 0, 0, 0, 0
             DB    eKEY_DEC, eKEY_DEC, eKEY_OFF, eKEY_DEC, 0, 0, 0, 0
             DB    0, 0, 0, 0, 0, 0, 0, 0
             END
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: EVENTPROC - EVENT PROCESS 
; CALL FUNCTION:  
; PARMENTERS:  A - THE EVENT CODE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
	     PROC  iEVTPROC
iEVTPROC:    CJNE  A, #eKEY_OFF, ForStaMenu
	     JB    bREMOTE, EndEvtP      ; 由上位机控制
	     MOV   R0, dSYSPAGE
	     CJNE  R0, #cSYSSTA, EndEvtP  ; 不在主页
	     MOV   A, #eSYS_OFF
             MOV   sSYSDELAY, #0
ForStaMenu:  CJNE  A, #eKEYMENU1, ForKeyEvt
	     MOV   A, #ePAGMENU1          ; 回主状态
ForKeyEvt:   CJNE  A, #eDATA_IN, IsKeyEvent
IsKeyEvent:  JNC   SysEventIs
	     MOV   R0, dSYSPAGE
             CJNE  R0, #cPWDPAGES, IsInPwd 
IsInPwd:     JNC   IsInputE
             JNB   bKEYLOCK, ForKeyProc   ;
             JB    BA_KEYUPBIT, EndEvtP  ; 弹起键无效!              ; KEY UP CODE NOTHING TO DO!
             CALL  sCLR_PWD               ; 清空口令
             MOV   dSYSPAGE, #cPWD70      ; 任意键弹出开锁口令输入页
	     MOV   A, #ePAG_DISP
             AJMP  SysEventIs
  IsInputE:  CJNE  A, #eKEYRIGHT, KeyInput
             CALL  PWDCHECK
             JNZ   EndPwdChk
             MOV   A, dSYSPAGE
             CJNE  A, #cPWD70, Pwd71
             CLR   bKEYLOCK
             MOV   dSYSPAGE, #cSYSMENU1
  EndPwdChk: CALL  sCLR_PWD               ; 清空口令
             MOV   A, #ePAG_DISP
             JMP   SysEventIs
  KeyInput:  JB    BA_KEYUPBIT, EndEvtP  ; NO ACTIVE FOR KEY UP CODE
             JMP   SysEventIs             
  Pwd71:     CJNE  A, #cPWD71, Pwd72
             MOV   dSYSPAGE, #cSYSMENU3
             MOV   B, #0
             AJMP  EndPwdChk 
  EndEvtP:   RET
  Pwd72:     CJNE  A, #cPWD72, PwdElse
             MOV   dSYSPAGE, #cSYSMENU1    ; 回主状态
             MOV   A, #ePAG_DISP
             CALL  sPUTEVENT
	     MOV   DPTR, #aPSD2
             MOV   R6, #DO_ERROR               ; FOR 沧州 停机报警
	     CALL  sOFF_R6BIT
             MOV   A, #eSYS_ON             
             AJMP  SysEventIs
  PwdElse:
 ForKeyProc: ORL   A, #eDATA_IN
SysEventIs:  CJNE  A, #eSTARTUP, NtEvt3
	     MOV   A, #0FFH
             MOV   R0, #xSYSMK_1
	     MOVX  @R0, A     ; RESET THE SYSTEM MARK1, 2 FLAG
	     INC   R0
	     MOVX  @R0, A
  OverEvtP:  RET
NtEvt3:	     CJNE  A, #ePAGMENU1, NtEvt4
             MOV   R0, dSYSPAGE
             CJNE  R0, #cSYSMENU1, NtEvt4
             CALL  LCD_INIT
	     MOV   A, #ePAG_DISP
             MOV   B, A
NtEvt4:      CJNE  A, #ePAGMENU5, NtEvt5
	     MOV   A, #ePAGMENU2
NtEvt5:      CJNE  A, #ePAGMENU2, NtEvt9    ; FOR MENU PROC
	     MOV   R0, #pMSGBUF             ; INITIALIZE FOR MEESAGE DISPLAY PAGE   
	     MOVX  A, @R0
	     MOV   dTAB_RCD_START, A
	     MOV   A, #ePAGMENU2
NtEvt9:      CJNE  A, #ePAGMENU6, NtEvtA     ; FOR MENU6 PROC

NtEvtA:      CJNE  A, #ePAGMENU3, NtEvtB     ; FOR MENU3 PROC
             CALL  sCLR_PWD               ; 清空口令
             MOV   dSYSPAGE, #cPWD71         ; 弹出设置口令输入页
	     MOV   A, #ePAG_DISP
NtEvtB:      CJNE  A, #eLOC_ON, NtEvtC
	     JB    bREMOTE, OverEvtP
	     MOV   A, dSYSPAGE
	     CJNE  A, #cSYSSTA, OverEvtP
             CALL  sCLR_PWD               ; 清空口令
             MOV   dSYSPAGE, #cPWD72         ; 弹出开机口令输入页
	     MOV   A, #ePAG_DISP
NtEvtC:      CJNE  A, #ePAG_DOWN, NtEvtD
	     MOV   B,  A                      ; FOR TURN OFF 12V POWER  
	     MOV   R7, dSYSPAGE
	     CJNE  R7, #cSYSMENU2, DnPageDo
             MOV   A, dTAB_RCD_INDEX
             JZ    EvtEndT
             MOV   dTAB_RCD_START, A             
	     MOV   A, #ePAGMENU2
DnPageDo:    CJNE  R7, #cSYSSET2, NtEvtD    ; FOR MANUAL OPERATE PAGE
	     MOV   B, #0                    ; FOR TURN 12V POWER ON
	     MOV   A, #ePAG_DOWN
NtEvtD:      CJNE  A, #ePAG_UP, NtEvtE
NtEvtE:      CJNE  A, #eFLDRIGHT, NtEvtF
             MOV   R0, dSYSPAGE
             CJNE  R0, #cSYSSTA, NtEvtF
             SETB  bKEYLOCK                 ; SET INTER BIT
             MOV   A, #dSYSBITS1
             CALL  sFLDUPDATE
             RET
NtEvtF:      CJNE  A, #eFLD_LEFT, NtEvtG
NtEvtG:      CJNE  A, #eFLD_INC, NtEvtH
	     MOV   A, dSYSPAGE
             CJNE  A, #cSYSSTA, IncForSet
             CALL  TURN_UP                  ; TURN LCD RIGHT UP
             RET
  IncForSet: CJNE  A, #cSYSSET, ForOutON
	     MOV   A, dPAG_RCD_PNT
	     CJNE  A, #cSET_RESET_FLD, ForIncEn
	     CALL  sUSERDEF
	     MOV   A, #ePAG_DISP
             JMP   NtEvtH 
  ForIncEn:  CJNE  A, #cSET_INCEN_F, TurnLV
             JB    bAUT_LOC, EvtEndT
             CALL  FORENINC
             AJMP  EvtEndT
  TurnLV:    CJNE  A, #cSET_TURNLV_FLD, ForSysInc
	     JB    bAUT_LOC, EvtEndT
	     MOV   R6, #DO_LVCHNL
	     MOV   DPTR, #aPSD1     
	     CALL  sON_R6BIT
  EvtEndT:   JMP   EvtEnd
  ForOutON:  CJNE  A, #cSYSSET4A, ForSysInc
	     MOV   A, dPAG_RCD_PNT
	     CLR   C
	     SUBB  A, #cSET4_OUTOP_FLD
	     MOV   R6, A
	     SUBB  A, #8
	     MOV   DPTR, #aPSD1          ;?????????     
	     JC    DoTurnSw
	     MOV   DPTR, #aPSD2
  DoTurnSw:  CALL  sON_R6BIT
	     JMP   EvtEnd
  ForSysInc: MOV   A, #eFLD_INC
NtEvtH:      CJNE  A, #eFLD_DEC, NtEvt10
	     MOV   A, dSYSPAGE
             CJNE  A, #cSYSSTA, DecForSet
             CALL  TURN_DOWN              ; TURN LCD RIGHT DOWN
             RET
  DecForSet: CJNE  A, #cSYSSET, ForOutOFF
	     MOV   A, dPAG_RCD_PNT
	     CJNE  A, #cSET_DECEN_FLD, TurnOffLV
             JB    bAUT_LOC, ForSysDec
             CALL  FORENDEC
             AJMP  EvtEndT
  TurnOffLV: CJNE  A, #cSET_TURNLV_FLD, ForSysDec
	     MOV   R6, #DO_LVCHNL
	     MOV   DPTR, #aPSD1     
	     CALL  sOFF_R6BIT
	     JMP   EvtEnd
  ForOutOFF: CJNE  A, #cSYSSET4A, ForSysDec
	     MOV   A, dPAG_RCD_PNT
	     CLR   C         
	     SUBB  A, #cSET4_OUTOP_FLD   
	     MOV   R6, A
	     MOV   DPTR, #aPSD1     ;???????????
	     SUBB  A, #8
	     JC    DoTurnOFF
	     MOV   DPTR, #aPSD2
DoTurnOFF:   CALL  sOFF_R6BIT
	     JMP   EvtEnd
  ForSysDec: MOV   A, #eFLD_DEC
NtEvt10:     CJNE  A, #eICAPACITY, NtEvt11
  DoEnInc:   
             MOV   dEXTPART, #0
             MOV   pPORT2, dEXTPART
  TurnEn:    
             JMP   EvtEnd
NtEvt11:     CJNE  A, #eDCAPACITY, NtEvt12
  DoEnDec:   
             MOV   dEXTPART, #0
             MOV   pPORT2, dEXTPART
	     AJMP  TurnEn
;%%NtEvt12:     CJNE  A, #eINP2CHG, NtEvt13
;%%             MOV   A, B         ; 'B' - current INPORT 2 status. 
NtEvt12:     CJNE  A, #eMUPDATE, NtEvt20
             MOV   R0, dSYSMODE
             CJNE  R0, #cSTARTMODE, IsRunTime
  IsRunTime: JC    NtEvt20    
             MOV   R0, #xSUMTIME
             MOVX  A, @R0
             INC   A
             MOVX  @R0, A
             SUBB  A, #60
             JC    MinUpdate
             MOVX  @R0, A
             INC   R0
             MOVX  A, @R0
             INC   A
             MOVX  @R0, A
             JZ    HouUpdate
             INC   R0
             MOVX  A, @R0
             INC   A
             MOVX  @R0, A
HouUpdate:   MOV   A, #xSUMTIME        ; UPDATE MINUTE
             INC   A
	     CALL  FLDUPDATE
MinUpdate:   MOV   A, #xSUMTIME        ; UPDATE MINUTE
	     CALL  FLDUPDATE
             MOV   A, #eMUPDATE
NtEvt20:     ;????JB   B_INMEAS, SysEvtp
	     CJNE  A, #eERR1PROC, NtEvt21      ; ERROR 1 MUST TURN OFF 
	     MOV   A, #eSYS_OFF
	     CALL  sPUTEVENT
	     MOV   A, dSYSMODE
             JZ    IsElseErr
             CJNE  A, #cSTARTMODE+1, IsInRun
  IsInRun:   JC    ForAlarm
             MOV   dSYSMODE, #cSTARTMODE+2
             MOV   R0, #xENERGY
             MOV   A, #50
             MOVX  @R0, A 
  ForAlarm:  MOV   DPTR, #aPSD2
             MOV   R6, #DO_ERROR               ; FOR  停机报警
	     CALL  sON_R6BIT
  IsElseErr: MOV   sSYSDELAY, #1
	     RET
;             MOV   A, #eMOTOROFF
;             CALL  sPUTEVENT
;             MOV   sLOADDELAY, #cUNLOADALLs
;             MOV   A, #eDCAPACITY
;Err1_2Proc:  CALL  sPUTEVENT
;             MOV   A, dSYSPAGE
;             JZ    PassUpPage
;             MOV   dSYSPAGE, #cSYSSTA
;             MOV   A, #eDISPAGE
;             CALL  sPUTEVENT
;PassUpPage:  MOV   A, #eALARMON
NtEvt21:     CJNE  A, #eERR2PROC, NtEvt22      ; ERROR 2 TURN IN LOCIGIC
	     MOV   A, dSYSMODE         
             JZ    IsElseErr
  EvtEnd:    RET
;NtEvt22:     CJNE  A, #eERR3PROC, NtEvt23      ; ERROR 3 RECORD THE ERROR
;
NtEvt22:     CJNE  A, #eERR_CHG, SysEvtP
	     
             RET

SysEvtP:     CALL  sSYSEVTP
;  DO PROCESS AFTER SYSTEM PROCESS
	     CJNE  A, #eFLD_DEC, IsLessDec
IsLessDec:   JC    EvtEnd
	     CJNE  A, #eFLD_DISP, IsGreatOut
IsGreatOut:  JNC   EvtEnd                      ; DO D/A OUTPUT MENUALLY
	     MOV   A, dSYSPAGE
	     CJNE  A, #cSYSSET, EvtEnd
	     MOV   A, dPAG_RCD_PNT
	     CLR   C
	     SUBB  A, #cSET_DAOUT1_FLD
	     JC    EvtEnd
	     CJNE  A, #4, OutFldDA
OutFldDA:    JNC   EvtEnd
	     SETB  ACC.7
	     MOV   R7, A
	     CLR   ACC.7
	     ADD   A, #xDADATA
	     MOV   R0, A
	     MOVX  A, @R0         ; GET D/A OUT DATA
	     CALL  DA_OUT         ; DO D/A OUT
	     RET
	     END

;#############################################################
; FILE NAME USEEVT.ASM
; INTERRUPT: iCOMPROC - FOR SEND DATA TO MAIN FOR USER COMMUNICATION 
; FUNCTION:  DEFUALT
; PARMENTERS: 
;             R1 - FUNCTION CODE
;        R4 ~ R7 - THE DATA 
;------------------------------------------------------------
           PROC  iCOMPROC
  RetOut:  MOV   A, #cCOMMODE13    ; TO SEND OUT MODE
           RET
  EndOut:  CLR   A
           RET
iCOMPROC:  CJNE  R1, #cCOM_SETFLOATS, IsMarkSt
	   MOV   A,  R6
           MOV   R4, A
           MOV   A,  R7
           ;DEC   A                    ;  cFLTSETNUM
	   MOV   DPTR, #xAD_SET
	   ADD   A, DPL
	   MOV   DPL,A
  BlkMovTO:MOV   R0,   #xCOMMBUF
	   MOV   dEXTPART, #cSCDRAM + 1
           MOV   pPORT2,   #cSCDRAM + 1
  SetNext: MOVX  A, @R0
           MOVX  @DPTR, A
           INC   R0
           INC   DPTR
           DJNZ  R4, SetNext
           CLR   A
	   MOV   dEXTPART, A
           MOV   pPORT2, A
           JMP   EndOut
IsMarkSt:  CJNE  R1, #cCOM_SETMARKS,IsFloats
	   MOV   A, R6
	   MOV   R4, A                    ;  cFLTSETNUM 
           MOV   A, R7
           MOV   DPTR, #hIN_1ERA

⌨️ 快捷键说明

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