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

📄 syssubo.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;--	       JNB   BA_ENINT0, IsEnExtINT1 
;--	       CLR   B_EXINT0    ;
;--	       SETB  B_EX0INT     ; INITIALIZE THE INTERRUPT 0 FLAG 
;--IsEnExtINT1:   SETB  B_INT1
;--	       JNB   BA_ENINT1, InitCont 
;--	       CLR   B_EXINT1     ; INITIALIZE THE INTERRUPT 1 FLAG
;--	       SETB  B_EX1INT
InitCont:      MOV   pPORT4, #0CBH   ; INITIALIZE PORT 4
;               SETB  B_RS232     ; 0
;               SETB  B_RS_RW     ; 1
;               CLR   B_DEPSD     ; 2
;               SETB  B_OUT_IN    ; 3
;               CLR   B_DACLK     ; 4 NO D/A CLOCK
;               CLR   B_DADIN     ; 5 CLEAR D/A DATA IN
;               SETB  B_DALDD     ; 6 DISABLE D/A LOAD 
;               SETB  B_DALDA     ; 7 DISABLE D/A OUTPUT    
	       MOV   DPTR, #aPSD1  
	       INC   DPTR
	       INC   DPTR
	       MOV   R0, #xSETPSD1A
	       MOVX  A,  @R0            ; SET PSD 1 PORT A
	       MOVX  @DPTR, A
	       MOV   B, A
	       INC   DPTR               ; SET PSD 1 PORT B
	       INC   R0
	       MOVX  A,   @R0          
	       MOVX  @DPTR, A
	       INC   DPTR               ; INITIALIZE THE OUTPUT A
	       XCH   A, B 
	       JZ    InitPSD1B
	       CLR   A                  ; IN LOW LEVEL
	       MOVX  @DPTR, A 
InitPSD1B:     INC   DPTR
	       XCH   A, B
	       JZ    InitPSD2 
	       CLR   A                  ; IN LOW LEVEL
	       MOVX  @DPTR, A 
 InitPSD2:     INC   R0
	       MOV   DPTR, #aPSD2
	       INC   DPTR
	       INC   DPTR
	       MOVX  A,  @R0            ; SET PSD 2 PORT A
	       MOVX  @DPTR, A
	       MOV   B, A
	       INC   DPTR
	       INC   R0
	       MOVX  A, @R0             ; SET PSD 2 PORT B
	       MOVX  @DPTR, A
	       INC   DPTR               ; INITIALIZE THE OUTPUT A
	       XCH   A, B
	       JZ    InitPSD2B 
	       CLR   A                  ; IN LOW LEVEL
	       MOVX  @DPTR, A 
InitPSD2B:     INC   DPTR               ; INITIALIZE THE OUTPUT A
	       XCH   A, B
	       JZ    InitDAPort 
	       CLR   A                  ; IN LOW LEVEL
	       MOVX  @DPTR, A 
InitDAPort:    SETB  B_EN_INT        ; INABLE ALL INTERRUPT 
	       MOV   R0, #xHD_SET
	       MOVX  A, @R0 
	       JNB   BA_EN_DAP, DoI2CInit 
	       PUSH  ACC
	       MOV   B, #04H      ; SET THE D/A OUT TO '0V' ALL 
	       MOV   R0, #xDADATA
    NtChnlDA:  DEC   B            ; ....
	       MOV   R7, B
	       CLR   A            ; ...
	       MOVX  @R0, A
	       CALL  DA_OUT
	       INC   R0
	       MOV   A, B
	       JNZ   NtChnlDA
	       POP   ACC
DoI2Cinit:     PUSH  ACC
	       JNB   BA_EN_I2C, GetTime  
	       CALL  I2CINIT      ; INITIALIZE I2C BUS         ;---           mov   a, #1
;---           CALL  I2CWRUN
               CALL  UP_TIME
GetTime:       POP   ACC
               PUSH  ACC
	       JNB   BA_EN_LCD, EndInit 
               MOV   DPTR, #uACTRAM ; GET THE ACTIVE RAM TABLE
    UpActRAM:  CLR   A
               MOVC  A,  @A+DPTR
               JNZ   IsActRAM
               CALL  LCD_INIT       ; INITIALIZE DOT LCD 
	       SETB  bLCD_DOTOUT
EndInit:       POP   ACC
               RET
    IsActRAM:  MOV   A,   #4
               MOVC  A, @A+DPTR
               MOV   B,   A
               MOV   A,   #5
               MOVC  A, @A+DPTR
               PUSH  DPL            ; SAVE THE ACTIVE RAM TABLE POINTER
               PUSH  DPH
               CALL  GoToSub        ; CALL ACTIVE RAM UPDATE SUBROUTE
               POP   DPH
               POP   DPL
NtActChk:      INC   DPTR
               INC   DPTR
               INC   DPTR
               INC   DPTR 
               INC   DPTR
               INC   DPTR
               INC   DPTR
               INC   DPTR 
               JMP   UpActRAM
     GoToSub:  PUSH  ACC             ; GO TO RAM UPDATE SUBROUTE POINT BY (B, A)
               PUSH  B
               RET                 

;#############################################################
; FILE NAME SYSINI.ASM
; SUBROUTE: DEVS_CHK - LOOP 3-MUNITES OR KEY PRESSED FOR ALL DEVICE 
;                 PORT AND MEASURER TO FIND HARD WARE ERROR,
;                 CHECK READY FOR SYSTEM TURN ON
; CALL FUNCTION:  DEV_INIT, GET_KEY, ....
; PARMENTERS: NONE
; CHANGE REGISTERS: A
; RETURN: THE SYSTEM WORK MODE BITS ARE MODIFIED
;------------------------------------------------------------
	   PROC  DEVS_CHK, DEV_INIT
DEVS_CHK:  MOV   sSYSDELAY, #cSYSTESTs
	   CLR   B_HALFAD            ; FOR FRIST 8 A/D CHANEL
	   MOV   mMINUTE, #50H
	   MOV   nAD_CHNL, #0
NextTime:  MOV   sWATCHDOG, #cWATCHDOGs ; RESET THE WATCH DOG COUNTER
	   CALL  TIMECHK             ; DO TIME OVER CHECK
	   CALL  DEV_INIT
; ## GET ANY KEY FOR BREAK INIT. TEST
	   CALL  GETEVENT 
	   JZ    NoEventP
	   CALL  SYSEVENTP              ; FOR SYSTEM EVENT PROC
NoEventP:  MOV   A, mMINUTE  
	   JNZ   ChkTime
	   INC   mMINUTE
	   INC   mMINUTE
	   CALL  GET_KEY                ;
	   JNC   ChkTime
	   ANL   A, #1FH
	   ORL   A, #40H
	   CJNE  A, #ePAG_DOWN, ChkChg
	   MOV   sSYSDELAY, #01
ChkChg:    CJNE  A, #eFLD_INC, IsDecTim
	   SETB  bDATECHG          ; time being changed
IsDecTim:  CJNE  A, #eFLD_DEC, NoChgTim
           SETB  bDATECHG
NoChgTim:  CALL  PUTEVENT          ; SOME NO PROCESS IN THERE
ChkTime:   DEC   mMINUTE
	   MOV   A, sSYSDELAY
	   JNZ   NextTime
	   JNB   bDATECHG, ResetFlag
ReWrite:   CALL  GETEVENT
	   JZ    NoErrEvt
	   CALL  SYSEVENTP              ; FOR SYSTEM EVENT PROC
NoErrEvt:  CALL  WR_TIME                ; WRITE THE CHANGE DATE&TIME TO 8583
	   JC    ReWrite
	   CALL  UP_TIME
ResetFlag: CLR   bFLD_ACTIVE
	   CLR   bDATECHG
	   RET
;#############################################################
; FILE NAME SYS_INI.ASM
; SUBROUTE: DEV_INIT - CHECK ALL IO PORTS IN SYSTEM AND FIND THE 
;                 HARD WARE ERROR, CHECK READY FOR SYSTEM TURN ON
;                 AND WITH CHECK KEY BREAK.
; CALL FUNCTION:  GET_KEY, ME_ONE
; PARMENTERS:
; CHANGE REGISTERS: A
; RETURN: THE SYSTEM WORK MODE BITS ARE MODIFIED
;------------------------------------------------------------
DEV_INIT:  MOV   A, tCHKDELAY
	   CJNE  A, #5, OUT2Init
	   DEC   tCHKDELAY
;1. --OUTPUT THE PORT1 AND PORT2
	   SETB  B_CTLLCK            ; turn 12v power off
	   SETB  B_OUT_IN            ; SWITCH OF INPORT TO OUT_IN 
	   MOV   R0, #dTMPBUF
	   MOV   R5, #08 
	   CALL  CLR_MEMORY  
	   MOV   R3, #cTESTNUM
NextOut1:  MOV   R0, #dTMPBUF
; CHECK THE STATUS IS OK?? COUNT ERROR NUMBER
	   MOV   DPTR, #aPSD1
	   MOV   R6, #08H
	   CALL  OUT8port
	   DJNZ  R3, NextOut1
	   CALL  ERRcheck
	   XCH   A, dOUT1STA   ; SAVE THE NEW ERROR FLAG
	   XRL   A, dOUT1STA   ; FOR NEW ERROR PROC
	   JZ    OUT2Init
	   PUSH  ACC
	   MOV   R0, #hOUT1ERA
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    OUT1InitB
	   CALL  LOOKerr
	   POP   B             ; MARK THE GRADE A ERROR FOR LATE
	   XRL   A, B
	   PUSH  ACC
	   MOV   A, #cOUT1_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR1PROC
	   CALL  ERRSAVES
OUT1InitB: POP   ACC
	   MOV   R0, #hOUT1ERB
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    OUT2Init
	   CALL  LOOKerr
	   MOV   A, #cOUT1_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR2PROC
	   CALL  ERRSAVES
OUT2Init:  MOV   A, tCHKDELAY   ;## OUTPUT TESTING FOR PORT 2           
	   JNZ   IN_1Init
	   MOV   tCHKDELAY, #cCHKDELAYm
	   SETB  B_OUT_IN            ; SWITCH OF INPORT TO OUT_IN
	   MOV   R0, #dTMPBUF
	   MOV   R5, #8 
	   CALL  CLR_MEMORY  
	   MOV   R3, #cTESTNUM
NextOut2:  MOV   R0, #dTMPBUF
; CHECK THE STATUS IS OK?? COUNT ERROR NUMBER
	   MOV   DPTR, #aPSD2
	   MOV   R6, #08H
	   CALL  OUT8port
	   DJNZ  R3, NextOut2
	   CALL  ERRcheck
	   XCH   A, dOUT2STA   ; SAVE THE NEW ERROR FLAG
	   XRL   A, dOUT2STA   ; FOR NEW ERROR PROC
	   JZ    EndOutChk
	   PUSH  ACC
	   MOV   R0, #hOUT2ERA
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    OUT2InitB
	   CALL  LOOKerr
	   POP   B             ; MARK THE GRADE A ERROR FOR LATE
	   XRL   A, B
	   PUSH  ACC
	   MOV   A, #cOUT2_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR1PROC
	   CALL  ERRSAVES
OUT2InitB: POP   ACC
	   MOV   R0, #hOUT2ERB
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    EndOUTChk
	   CALL  LOOKerr
	   MOV   A, #cOUT2_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR2PROC
	   CALL  ERRSAVES
EndOutChk: CLR   B_OUT_IN
IN_1Init:  MOV   A, tCHKDELAY   ;2. --READ INPUT PORT1 AND INPUT PORT2
	   CJNE  A, #15, IN_2Init
	   DEC   tCHKDELAY
           CLR   A
           CALL  INPORTREAD
	   MOV   B, A
	   MOV   R0, #xIN_1SOC
	   MOVX  A, @R0 
	   XRL   A, B
	   MOV   DPTR, #uDELTIME    ; the delay time defined by user
	   MOV   R0, #iTIMESA
	   MOV   B, dIN_1STA 
	   CALL  DELAYchk         
	   XCH   A, dIN_1STA   ; SAVE THE NEW ERROR FLAG
	   XRL   A, dIN_1STA   ; FOR NEW ERROR PROC
	   JZ    IN_2Init
	   PUSH  ACC
	   MOV   R0, #hIN_1ERA
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    IN_1ChkB
	   CALL  LOOKerr
	   POP   B             ; MARK THE GRADE A ERROR FOR LATE
	   XRL   A, B
	   PUSH  ACC
	   MOV   A, #cIN1_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR1PROC
	   CALL  ERRSAVES
IN_1ChkB:  POP   ACC
	   MOV   R0, #hIN_1ERB
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    IN_2Init
	   CALL  LOOKerr
	   MOV   A, #cIN1_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR2PROC
	   CALL  ERRSAVES
IN_2Init:  MOV   A, tCHKDELAY
	   CJNE  A, #10, AD_Test
	   DEC   tCHKDELAY
           MOV   A, #1
           CALL  INPORTREAD
	   MOV   B, A
	   MOV   R0, #xIN_2SOC
	   MOVX  A, @R0 
	   XRL   A, B
	   XCH   A, dIN_2STA   ; SAVE THE NEW ERROR FLAG
	   XRL   A, dIN_2STA   ; FOR NEW ERROR PROC
	   JZ    EndInChk
	   PUSH  ACC
	   MOV   R0, #hIN_2ERA
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    IN_2ChkB
	   CALL  LOOKerr
	   POP   B             ; MARK THE GRADE A ERROR FOR LATE
	   XRL   A, B
	   PUSH  ACC
	   MOV   A, #cIN2_ERR1CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR1PROC
	   CALL  ERRSAVES
IN_2ChkB:  POP   ACC
	   MOV   R0, #hIN_2ERB
	   MOV   B, A
	   MOVX  A, @R0
	   ANL   A, B
	   JZ    EndInChk
	   CALL  LOOKerr
	   MOV   A, #cIN2_ERR2CODE ; SAVE THE ERROR CODE AND UPDATE ERROR DISP.
	   MOV   B, #eERR2PROC
	   CALL  ERRSAVES
EndInChk:  SETB  B_OUT_IN
;3. --READ ONE A/D PORT IF EQU COUNT ERROR NUMBER
; --A/D CONVERTION PORT1 ~ PORTn
; READ A/D CONVERTION PORTn
AD_Test:  CALL  ADMEASURE
	  MOV   A, iMEASNUM
	  JNZ   PassChk            ; NO OVER A/D MEASURE
	  MOV   R6, nAD_CHNL
	  MOV   A, #1
	  CALL  ADERRSAV
	  MOV   tMEASURE, #cDLYMEASt  ; THE TIME DELAY FOR NEXT MEASURE
	  MOV   iMEASNUM, #cME_MAXNUM ; RESET THE MAX MEAS. TIMER FOR ONE CHANNEL  
	  INC   nAD_CHNL              ; INC TO NEXT CHANNEL ...
	  MOV   A, nAD_CHNL
	  CJNE  A, #cADMAXNUM, ForNtAD 
	  CLR   A
	  MOV   nAD_CHNL, A
ForNtAD:  MOV   C, ACC.0
	  CPL   C
	  MOV   B_HALFAD, C
PassChk:  RET
;---------------------------------------- 
OUT8port:  MOV   R4, DPL            ; SAVE THE OUT PORT POINTER (DPTR) 
	   JNB   bOUTRET, OutNext  ; %%USE THIS VER ONLY  
	   SETB  B_OUT_IN           ; %%SET THE IN PORT TO OUTPUT STATUS
  OutNext: DEC   R6
	   JNB   bOUTRET, ReadSta  
	   INC   DPTR
ReadSta:   MOVX  A, @DPTR
	   MOV   DPL, R4 
	   PUSH  ACC          ; ..
	   MOV   A, #4        ; ..  
	   ADD   A, DPL       ; ..
	   MOV   DPL, A       ; .. 
	   POP   ACC          ; ..//
	   CALL  SET_R6BIT
	   MOVX  @DPTR, A
	   MOV   DPL, R4
	   JNB   bOUTRET, ReadStaOn  
	   INC   DPTR
ReadStaOn: MOVX  A, @DPTR
	   CALL  TOC_R6BIT
	   CPL   C
	   MOV   b_TMPUSE, C
	   MOV   DPL, R4      ; FOR 'PSD' CHIP ONLY 
	   PUSH  ACC          ; ..
	   MOV   A, #4        ; ..  
	   ADD   A, DPL       ; ..
	   MOV   DPL, A       ; .. 
	   POP   ACC          ; ..//
	   CALL  CLR_R6BIT
	   MOVX  @DPTR, A
	   MOV   DPL,  R4 
	   JNB   bOUTRET, ReadStaOff  
	   INC   DPTR
ReadStaOff:MOVX  A, @DPTR
	   CALL  TOC_R6BIT        
	   ORL   C, B_TMPUSE
	   JNC   ForNextOut
	   CLR   B_TMPUSE
	   INC   @R0
ForNextOut:INC   R0
	   MOV   A, R6
	   MOV   DPL, R4
	   JNZ   OutNext
	   RET
;--------------------------------------------
ERRcheck: MOV   R5, #08
	  MOV   A, #cTESTNUM
	  CLR   C
	  RRC   A
	  MOV   R6, A
	  MOV   R0, #dTMPBUF
	  CLR   A 
NextCheck:PUSH  ACC
	  MOV   A, R6
	  CLR   C
	  SUBB  A, @R0
	  POP   ACC
	  RLC   A
	  INC   R0
	  DJNZ  R5, NextCheck
	  RET
	  END

⌨️ 快捷键说明

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