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

📄 syssubo.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;######################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: EXTTEST - MEMORY TEST 
; CALL FUNCTION:  
; PARMENTERS:
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: C - OK! or BUFFER OVER ERROR 
;------------------------------------------------------
EXTTEST:   MOV   pPORT2, #08H
	   CALL  PARTTEST
	   ; MOVE LOW PART TO HIGH
	   MOV   DPTR, #00H
	   MOV   R2, #8        ; BLOCK NUMBER WILL MOVED
	   MOV   pPORT2, #08H
	   MOV   dEXTPART, #08H
	   ACALL BLOCKmove
           MOV   pPORT2, #00H
	   CALL  PARTTEST
	   ; MOVE LOW PART TO HIGH
	   MOV   DPTR, #800H
	   MOV   R2, #8
	   MOV   pPORT2, #00H
	   MOV   dEXTPART, #00H
	   ACALL BLOCKmove
	   RET
BLOCKmove: CLR   B_EN_INT 
MoveNtBk:  MOV   R0, #0
	   MOV   R1, #0
MoveNtB:   MOVX  A, @DPTR
	   MOVX  @R0, A
	   INC   DPTR
	   INC   R0 
	   DJNZ  R1, MoveNtB             
	   INC   pPORT2
	   DJNZ  R2, MoveNtBk
           MOV   pPORT2, dEXTPART    ; RESTORE THE EXTERN RAM PNT
           SETB  B_EN_INT
	   RET
;#############################################################
; FILE NAME EVTSUB.ASM
; SUBROUTE: PARTEST - TEST ONE BLOCK(256 BYTES) MEMORY
; CALL FUNCTION:  
; PARMENTERS:
; COMMON DATA USED: EVENT BUFFER
; CHANGE REGISTER: A, R0
; RETURN: C - OK! or BUFFER OVER ERROR 
;------------------------------------------------------------
PARTTEST:  CLR   B_EN_INT
NextPage:  MOV   R0, #0
	   MOV   R1, #0
	   MOV   dTMPBUF, R1
TestNextB: MOV   A, #55H
	   MOVX  @R0, A
	   NOP
	   MOVX  A, @R0
	   CJNE  A, #55H, ToNextB
	   CPL   A
	   MOVX  @R0, A
	   NOP
	   MOVX  A, @R0
	   CJNE  A, #0AAH, ToNextB
	   INC   dTMPBUF
	   MOV   B, R0
ToNextB:   INC   R0
	   DJNZ  R1, TestNextB
	   MOV   A, dTMPBUF
	   JZ    ForNtBlk 
	   MOV   B, pPORT2
	   MOV   A, #cMEMERRBASE
	   ORL   A, #0C0H
	   ADD   A, B
	   MOV   B, #eEXTERR
	   CALL  SAVEMSG
ForNtBlk:  INC   pPORT2           ; FOR NEXT EXT MEMORY PART TEST
	   JNZ   NextPage
           MOV   pPORT2, dEXTPART
	   SETB  B_EN_INT
	   RET 
;#############################################################
; FILE NAME SYSINI.ASM
; SUBROUTE: START - THE MAIN PROGRAM TO START THE LC2000 CONTROLLER
;                       FOR FU LU GAN COOLED WATER MACHINE GROUP 
; FUNCTION:   DEFUALT
; PARMENTERS: NONE
; RETURN: None
;------------------------------------------------------------
	   PROC  START, ReInter, ReStart
MemErrIs:  MOV   A, #cER1SOUND
	   CALL  ERRBELL
	   JMP   MemInit
START:  
	   SETB  B_DEPSD
	   SETB  B_CTLLCK     ; SYSTEM DRIVE LOCK BIT (12V POWER ON/OFF ...)
	   MOV   IE, #00      ; DISABLE ALL TIMER
	   MOV   PSW, #0
	   MOV   SP, #STACKSTART
	   CLR   B_DEPSD      ; ENABLE PSD211 W2ORKING
	   MOV   R0, #2
	   MOV   R1, #7EH
MemTest:   MOV   A, #55H
	   MOV   @R0, A
	   NOP
	   MOV   A, @R0
	   CJNE  A, #55H,  MemErrIs
	   CPL   A
	   MOV   @R0, A
	   NOP
	   MOV   A, @R0
	   CJNE  A, #0AAH, MemErrIs
	   INC   R0
	   DJNZ  R1, MemTest
MemInit:   CLR   B_DEPSD      ; ENABLE PSD211 W2ORKING
	   MOV   dEXTPART, #0
	   MOV   pPORT2, dEXTPART
	   CALL  SOFT_INIT
	   MOV   R1, #xDATEBUF+4
	   MOVX  A, @R1
	   CLR   C
	   SUBB  A, #07H
	   JZ    ReInter
           DEC   A
           JZ    ReInter
UserIni:   MOV   R1, #xDATEBUF+4
	   MOV   A, #07
	   MOVX  @R1, A
	   DEC   R1
	   MOV   A, #0D3H
	   MOVX  @R1, A
           MOV   A, #1
	   MOV   R1, #pMSGBUF         ; INITIALIZE MSG POINTER
	   MOVX  @R1, A               ; FROM '1'
           DEC   A
	   MOV   R1, A
	   MOV   dEXTPART, #cMSGBUFS  ; INIT. MSG BUFFER
	   MOV   pPORT2, dEXTPART     ; IT'S EMPTY
	   MOVX  @R1, A 
ReInter:   CALL  USERDEF
           MOV   pEVENTBUFe, #cEVENTBUFf
;ReInter:   MOV   pEVENTBUFe, #cEVENTBUFf
	   MOV   pEVENTBUFf, #cEVENTBUFf
	   CLR   A
	   MOV   R0, #dIN_1STA
	   MOV   R5, #20H
	   CALL  CLR_MEMORY
           SETB  bAUT_LOC         ; INITIALIZE SYSTEM IN AUTO MODE
	   MOV   dERRCODE, A
	   MOV   dSYSMODE, A
	   MOV   dEXTPART, #cSCDRAM
 	   CALL  HARD_INIT
	   JNB   BA_EN_LCD, SendStEvt 
	   MOV   dSYSPAGE, #cPAGE0
	   CALL  DISP_PAGE
	   CALL  FIX_FLD
SendStEvt: MOV   A, #eSYSINIT        ; SET THE SYSTEM IN TEXT EVENT FLAG
	   CALL  sPUTEVENT
           CALL  DEVS_CHK            ; MSEAURE ALL DEVICE PORT and MEASURER
ReStart:   MOV   SP, #STACKSTART     ; INITIALIZE THE STACK POINTER
	   MOV   sWATCHDOG, #cWATCHDOGs  ; RESERT THE WATCH DOG CALL  HARD_INIT
	   MOV   tCLOCK_01, #cMAXC21 ; CLEAR 0.1 SECOND TIME
	   MOV   sCLOCK_1, #cMAXC60  ; CLEAR 1 SECOND TIME
	   MOV   A, #eSTARTUP
	   CALL  PUTEVENT 
           CALL  HARD_INIT
	   JNB   BA_EN_LCD, SYSLOOP 
           CALL  LCD_DRAW_FRAME
	   MOV   dSYSPAGE, #cSYSSTA  ; FOR SYSTEM WORK ON MODE
	   CALL  DISP_PAGE
	   CALL  FIX_FLD
SYSLOOP:  MOV   sWATCHDOG, #cWATCHDOGs  ; RESERT THE WATCH DOG
	  MOV   SP, #STACKSTART         ; INITIALIZE THE STACK POINTER 
	  SETB  B_EN_INT                ; ENABLE THE ALL INSTALLED INTERRUPT
	  CALL  GET_KEY
	  JNC   NoKeyP
	  MOV   mBKMAINMU, #cBACKMAINMUm  ; RESET BACK MAIN MENU DELAY
	  CALL  PUTEVENT
NoKeyP:   CALL  PROQUEST            ; PROCESS COM QUEST 
	  CALL  STATCHK
	  CALL  CHKSYS              ; CHECK TIME AND ANY A/D PORT ERROR 
	  CALL  EVTPROC             ; ???? LCALL TURNSYS
          MOV   A, dSYSBITS2        ; IS SECOND PROCESS LOCK ??
          ANL   A, #cUNDOMK         ; 04H   
          JNZ   SYSLOOP             ; \\
	  CALL  ADMEASURE
	  MOV   A, iMEASNUM
	  JNZ   SYSLOOP            ; NO OVER A/D MEASURE
	  MOV   R6, nAD_CHNL
	  MOV   A, #1
	  CALL  ADERRSAV
	  CALL  ADLMTCHK           ; FOR ADMEASE ERROR AND LIMIT PROCESS
	  MOV   A, nAD_CHNL        ;\\\\
	  MOV   B, #3              ; ..
	  MUL   AB                 ; ..
	  ADD   A, #xAD_BUF        ; ..
	  CALL  FLDUPDATE          ; UPDATE THE A/D DISPLAY FOR THIS CHANNEL
	  MOV   tMEASURE, #cDLYMEASt  ; THE TIME DELAY FOR NEXT MEASURE
	  MOV   iMEASNUM, #cME_MAXNUM ; RESET THE MAX MEAS. TIMER FOR ONE CHANNEL  
ForNtAD:  INC   nAD_CHNL              ; INC TO NEXT CHANNEL ...
	  MOV   A, nAD_CHNL
	  CJNE  A, #cADMAXNUM, IsHalfEnd 
	  CLR   A
	  MOV   nAD_CHNL, A
	  JMP   GoOnNtAD
IsHalfEnd:PUSH  ACC
	  MOV   R0, #hAD_1ERB    ; MARK_B 屏蔽  跳过
	  CLR   C
NextPart: SUBB  A, #8            ; Check no mark A/D 跳过已屏蔽口  
	  JC    ChkMark
	  INC   R0
	  INC   R0
	  JMP   NextPart
ChkMark:  ADD   A, #8
	  MOV   R6, A
	  MOVX  A, @R0
	  CALL  TOC_R6BIT
	  POP   ACC
	  JNC   ForNtAD
GoOnNtAD: MOV   C, ACC.0
	  CPL   C
	  MOV   B_HALFAD, C
	  CALL  EVTPROC           ; ???? LCALL TURNSYS
	  JMP   SYSLOOP
	  END
;#############################################################
; FILE NAME SYSINI.ASM
; SUBROUTE: SOFT_INIT - Initialize the RAM memory
; CALL FUNCTION:  CLR_MEMORY, MOV_ROMTORAM
; PARMENTERS:  NONE
; CHANGE REGISTERS: R7, R0, A, DPTR
; RETURN: None
;------------------------------------------------------------
	   PROC  SOFT_INIT, USERDEF
SOFT_INIT: CLR   A
	   MOV   dCOMMODE, A
	   MOV   R0, #dIN_1STA
	   MOV   R5, #20H 
	   CALL  CLR_MEMORY  
; TIME COUNTERS INITIALIZE
	   MOV   A, #14H           
	   MOV   R0, #tCHKDELAY    
	   MOV   DPTR, #INI_DAT   
	   PUSH  ACC
	   ADD   A, R0
	   MOV   R0, A
	   POP   ACC
MoveNextD: DEC   A                ; COPY THE INITIALIZE BLOCK DATA TO RAM
	   PUSH  ACC
	   DEC   R0
	   MOVC  A, @A+DPTR
	   MOV   @R0, A
	   POP   ACC
	   JNZ   MoveNextD
	   MOV   R0, #iTIMESA      ; CLEAR DELAY CHECK COUNTERS
	   CLR   A
	   MOV   R5, #8
 ClrNtCnt: MOVX  @R0, A
	   INC   R0
	   DJNZ  R5, ClrNtCnt    
	   MOV   DPTR, #uHARD_SET  ; SYSTEM HARDWARE PARAMS INITIALIZE
	   MOV   R0, #xHD_SET
	   MOV   A, #10H
;@@@@@@@@@@@@@@
	   JB    bSIMULATE, ForInitBK
	   PUSH  ACC
	   ADD   A, R0
	   MOV   R0, A
	   POP   ACC
MoveNext3: DEC   A                ; COPY THE INITIALIZE DATA 
	   PUSH  ACC              ; FOR HARDWARE SET
	   DEC   R0
	   MOVC  A, @A+DPTR
	   MOVX  @R0, A
	   POP   ACC
	   JNZ   MoveNext3
           MOV   DPTR, #xLCDRIGHT ; RESET TO MIDDLE OF RIGHT
           CLR   A
           MOVX  @DPTR,  A
	   RET
INI_DAT:   DB 10H, 50H, 14H, 04H, 04H, 10H  ; 0.1 SEC
	   DB 0AH, 04H, 0AH, 10H, 3AH, 05H  ; 0.1 SEC
	   DB 05H, 3CH, 03H                 ; 1 SEC 1 MIN
	   DB 00H, 00H, 00H, 00H, 00H, 00H  ; SYSTEM STATUS DATA 
ForInitBK: PUSH  PSW
	   MOV   PSW, #cSELRG2
	   MOV   R2, #6  
	   MOV   R1, #cCOM_RETBLOCK
	   MOV   R4, #cCOM_BLOCK
	   MOV   R5, A
	   MOV   R6, DPL
	   MOV   R7, DPH
	   POP   PSW
	   CALL  SIMFUNC
	   MOV   DPTR, #xCOMMBUF
	   MOV   pPORT4, #0
	   CALL  MOV_EXTTORAM
	   RET
;#############################################################
; FILE NAME SYSINI.ASM
; SUBROUTE: USERDEF - Initialize the USER DEFINE DATA FOR A/D SET AND ERROR MARK stack, register group 
; FUNCTION:    NONE
; PARMENTERS:  NONE
; RETURN: None
;------------------------------------------------------------
USERDEF:   MOV   dEXTPART, #0
	   MOV   pPORT2, dEXTPART
           MOV   DPTR, #uPORT_SET  ; SET PARAM FOR SYSTEM MARK
	   MOV   R0, #xIN_1SOC     ; ... \DEFULT SET INITIALIZE
	   MOV   A, #28H
;@@@@@@@@@@@@@@
	   JB    bSIMULATE, ForInitBK
	   PUSH  ACC
	   ADD   A, R0
	   MOV   R0, A
	   POP   ACC
MoveNextM: DEC   A                ; COPY THE INITIALIZE BLOCK DATA 
	   PUSH  ACC              ; FOR ERROR MARK'B'
	   DEC   R0
	   MOVC  A, @A+DPTR
	   MOVX  @R0, A
	   POP   ACC
	   JNZ   MoveNextM
           MOV   DPTR, #uF3_SET   ; SET FLOAT-3S PARAM FOR INITIALIZE
	   MOV   dEXTPART, #cADSEG
	   MOV   pPORT2, dEXTPART
	   MOV   R0, #xAD_SET
	   MOV   A,  #48H
;@@@@@@@@@@@@@@@@@@
	   JB    bSIMULATE, ForInitBK
	   PUSH  ACC
	   ADD   A, R0
	   MOV   R0, A
	   POP   ACC
MoveNextX: DEC   A                ; COPY THE INITIALIZE BLOCK DATA
	   PUSH  ACC              ; FOR FLOAT-3 DATA SET
	   DEC   R0
	   MOVC  A, @A+DPTR
	   MOVX  @R0, A
	   POP   ACC
	   JNZ   MoveNextX
           MOV   DPTR, #uINT_SET  ; SET INTEGERS PARAM FOR INITIALIZE
           MOV   A, #8
           ADD   A, DPL
           MOV   DPL, A
	   MOV   dEXTPART, #0
	   MOV   pPORT2, dEXTPART
	   MOV   R0, #xINT_SET+8
	   MOV   A,  #48H
;@@@@@@@@@@@@@@@@@@
	   JB    bSIMULATE, ForInitBT
	   PUSH  ACC
	   ADD   A, R0
	   MOV   R0, A
	   POP   ACC
MoveNextI: DEC   A                ; COPY THE INITIALIZE BLOCK DATA
	   PUSH  ACC              ; FOR A/D SET DATA
	   DEC   R0
	   MOVC  A, @A+DPTR
	   MOVX  @R0, A
	   POP   ACC
	   JNZ   MoveNextI
	   MOV   dEXTPART, #0
	   MOV   pPORT2, dEXTPART
	   CALL  SYSINIT
           RET
 ForInitBT:JMP   ForInitBK
	   END 
;#############################################################
; FILE NAME SYSINI.ASM
; SUBROUTE: HARD_INIT - Initialize the timers, stack, register group 
;                       and interrupt
; FUNCTION:    NONE
; PARMENTERS:  NONE
; RETURN: None
;------------------------------------------------------------
HARD_INIT:  ; INITIALIZE THE CPU PORTS AND ALL CONTROLLERS
	       MOV   PSW, #cSELRG0   ; SET THE WORK REGISTERS - GROUP 0
	       MOV   rINTEN0, #0     ; DISABLE ALL INTERRUPTS
	       MOV   rT0_H, #04CH    ; TIMER 0 COUNTER SET              
	       MOV   rT0_L,  #08H    ;  \   FOR 0.05 SEC  (0ECH,078H 0.01s)
	       MOV   rT1_H, #0FDH    ; TIMER 1 COUNTER SET
               MOV   rT1_L, #0FDH    ;  \ FOR RS COMM... 2.4K
	       MOV   rTMODE, #21H    ; DECIDED THE TIMER WORK MODE
; TIMER 0 - 16BIT COUNTER, TIMER 1 - 8BIT AUTO LOAD COUNTER
               MOV   rPWCON, #00H    ; SET SMOD FLAG BIT FOR COMM PORT
               MOV   rRSCON, #0D0H   ; INITIALIZE THE COMM PORT TO MODE 3
               MOV   rGETCON, #0     ; NO GET REGISTER ACTIVE / BIT9 AS EAXEAM
	       MOV   dEXTPART, #0    ; INITIALIZE PORT 2
	       MOV   pPORT2, #0
	       MOV   R0, #xT2STASET
	       MOVX  A, @R0
	       MOV   rT2_CON, A      ;  81H   ; ENABLE 16BITS OVER and FOSC/12 ACTIVE
	       INC   R0
	       MOVX  A, @R0 
	       MOV   rINTPRI1, A     ;  #8FH  ; SET ALL T2 INTERRUPT AS HIGH
	       MOV   rT2INTF, #0     ; CLEAR ALL T2 INTERRUPT MARK 
	       MOV   rBITSETE, #0    ; DISABLE ALL SET PINS
	       MOV   rBITRSTE, #0    ; DISABLE ALL RESET/TIAG REGISTER
	       MOV   rINTEN1,  #0    ; NOACTIVE 16BITS OVER & 4 T2_GET INT FRIST
	       MOV   R0, #xPWMSET
	       MOVX  A, @R0
	       MOV   rFPWM, A
	       INC   R0
	       MOVX  A, @R0
	       MOV   rPWM0, A
	       SETB  B_ERSINT        ; ACTIVE COM INTERRUPT
	       CLR   B_ET1INT        ; NO TIMER 1 INTERRUPT
	       SETB  B_ET0INT        ; ACTIVE TIMER 0 INTERRUPT
	       SETB  B_ETIMR0        ; ENABLE THE TIMER 0 COUNTER
	       SETB  B_ETIMR1        ; ENABLE THE TIMER 1 COUNTER
	       SETB  B_HALFAD        ; INITIALIZE PORT 1
	       SETB  B_CTLLCK        
	       MOV   R0, #xHD_SET
	       MOVX  A, @R0
	       MOV   C, BA_OUTRET    ; SAVE OUT RETURN SET BIT
	       MOV   bOUTRET, C
               SETB  B_TURNON        ; RESET TURN ON LAMP
;--	       SETB  B_INT0          ; INITIALIZE PORT 3

⌨️ 快捷键说明

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