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

📄 svrsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
SENDBYTE:  SETB   B_RS_RW           ; FOR SEND THE DATA
	   CLR    B_ADDSEND         ; DISABLE SEND ADDRESS
           CJNE   R0, #cCOMMODE11, IsDataS
	   SETB   B_ADDSEND         ; 若为RS485, 则为地址发送
  IsDataS: JNB    B_RS232, DoSend
           MOV    C,   P            ; 数据的奇/偶位
           MOV    B_ADDSEND, C
  DoSend:  JB     B_ITRAN, NoSend
           CLR    B_ERSINT
           MOV    SBUF, A            ; SEND THE STATION NUMBER Fst
           CLR    C
  ForOver: JBC    B_ITRAN, ForRdyS
           JMP    ForOver
  NoSend:  CLR    B_ITRAN           ; 复位发送中断标志
           SETB   C
  ForRdyS: SETB   B_ERSINT
           RET
           END
;#############################################################
; FILE NAME INTSUB.ASM
; INTERRUPT: DATAPROC - FOR SEND DATA TO MAIN FOR SYSTEM COMMUNICATION 
; FUNCTION:  DEFUALT
; PARMENTERS: 
;             R1 - FUNCTION CODE
;        R4 ~ R7 - THE DATA 
;------------------------------------------------------------
           PROC   DATAPROC
DATAPROC:  CJNE   R1, #cCOM_RETDATA, IsReturn
           MOV    A,  R7
	   MOV    R2, A             ; SET THE COUNT
	   MOV    A,  R4            ; THE FUNCTION CODE THAT WILL BE RETURN BACK
	   MOV    R1, A
  RetOut:  CLR    A
	   MOV    dEXTPART,A
	   MOV    pPORT2, A  ; RESTORE THE EXT RAM SEGMENT TO '0'
           MOV    A, #cCOMMODE13    ; TO SEND OUT MODE
           RET
; DO RECEIVE DATA PROCESS...
IsReturn:  CJNE  R1, #cCOM_RETURN, IsReset    ; 进入上位机运行'1'/从上位机运行返回'0'
           MOV   A, R7
	   CLR   bUP_RUN
           JZ    EndOut
	   SETB  bUP_RUN
  EndOut:  CLR   A
	   MOV   dEXTPART, A
	   MOV   pPORT2, A  ; RESTORE THE EXT RAM SEGMENT TO '0'
           RET
IsReset:   CJNE  R1, #cCOM_RESET, IsTurnSys
;--	   CLR   bSIMULATE           
	   CLR   bUP_RUN
	   CLR   A
	   MOV   dCOMMODE, A
	   MOV   DPTR, #START         ; RESTART THE SYSTEM
	   MOV   R1, SP
	   MOV   A, DPH
	   MOV   @R1, A
	   DEC   R1
	   MOV   A, DPL
	   MOV   @R1, A
	   RET
IsTurnSys: CJNE  R1, #cCOM_TURNSYS, IsMunAut
	   MOV   A, R7
	   MOV   C, ACC.0
	   MOV   A, #eSYS_ON
	   JC    TurnEvent
	   MOV   A, #eSYS_OFF
TurnEvent: LCALL PUTEVENT
	   JMP   EndOut
IsMunAut:  CJNE  R1, #cCOM_AUT_LOC, IsPutEvt
	   MOV   A, R7
	   MOV   C, ACC.0
	   MOV   bAUT_LOC, C
	   JMP   EndOut
IsPutEvt:  CJNE  R1, #cCOM_SETEVT, IsBitSet
	   MOV   A, R7
	   MOV   B, R6
	   CALL  PUTEVENT
	   JMP   EndOut
IsBitSet:  CJNE  R1, #cCOM_BITSET, IsByteSt
	   MOV   A, R7               ;     R7   - THE BIT INDEX
           SUBB  A, #24              ;     R6.0 - THE BIT STATUS
           JC    ForBitSet
           RET
 ForBitSet:MOV   A, R7
           MOV   R0, #dSYSBITS1
           CLR   C
  ToNtByte:SUBB  A, #8
           JC    DoBitSet
           INC   R0
           JMP   ToNtByte
  DoBitSet:ADD   A, #8
           XCH   A, R6
	   MOV   C, ACC.0
           MOV   A, @R0
           CALL  CTO_R6BIT
           MOV   @R0, A
           JMP EndOut
IsByteSt: CJNE   R1, #cCOM_BYTESET, IsFloatSt   ; SAVE THE RECEIVED DATA
	   MOV   A, R7               ;     R7   - THE BYTE INDEX
           SUBB  A, #60H             ;     R6   - THE BYTE DATA
           JC    DoByteSet
           RET
 DoByteSet:MOV   A, R7
           ADD   A, #LOW(xINT_SET)
           MOV   R0, A
	   MOV   dEXTPART, #HIGH(xINT_SET)
	   MOV   pPORT2, #HIGH(xINT_SET)  ; SET THE EXT RAM SEGMENT TO INTEGER BLOCK
           MOV   A, R6
	   MOVX  @R0, A
           JMP   EndOut
IsFloatSt: CJNE  R1, #cCOM_FLOATSET, IsStatus1   ; SAVE THE RECEIVED DATA
	   MOV   A, R7
	   MOV   B, #3
           MUL   AB
           ADD   A, #xAD_SET
           MOV   R0, A
	   MOV   dEXTPART, #cADSEG
	   MOV   pPORT2, #cADSEG    ; SET THE EXT RAM SEGMENT TO A/D BLOCK
	   MOV   A,   R6            ; USE:
	   MOVX  @R0, A             ;    R7 - THE ADDRESS (LOW)
	   INC   R0                 ;    R6,R5,R4 - THE FLOAT DATA
	   MOV   A,   R5
	   MOVX  @R0, A                       
	   INC   R0
	   MOV   A,   R4
	   MOVX  @R0, A
	   JMP   EndOut
IsStatus1: CJNE  R1, #cCOM_STAT1RST,IsStatus2
           MOV   R2, #0EH			
           MOV   R1, #cCOM_STAT1SND
           MOV   R4, dIN_2STA
           MOV   DPTR, #xCOMMBUF
           MOV   R5, DPH
           MOV   R6, DPL
           MOV   A,  dOUT1SET
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, dIN_1STA
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, dERRCODE
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, sSYSDELAY
           MOVX  @DPTR, A
           INC   DPTR
           MOV   dEXTPART, #HIGH(xAD_BUF)
           MOV   pPORT2, dEXTPART
           MOV   R0, #LOW(xAD_BUF)  ; GET A/D 0
           MOVX  A, @R0
           MOVX  @DPTR, A
           INC   DPTR
           INC   R0
           MOVX  A, @R0
           MOVX  @DPTR, A
           INC   DPTR
           INC   R0
           MOVX  A, @R0
           MOVX  @DPTR, A
           MOV   A, #19             ; GET A/D 8
           ADD   A, R0
           MOV   R0, A
           INC   DPTR
           MOVX  A, @R0
           MOVX  @DPTR, A
           INC   DPTR
           INC   R0
           MOVX  A, @R0
           MOVX  @DPTR, A
           INC   DPTR
           INC   R0
           MOVX  A, @R0
           MOVX  @DPTR, A
           INC   DPTR
           MOV   dEXTPART, #HIGH(xINT_SET)  ; GET FST BYTE IN INTEGER BROCK
           MOV   pPORT2, dEXTPART
           MOV   R0, #LOW(xINT_SET)
           ;MOV   R0, #0
           MOVX  A, @R0
           MOVX  @DPTR, A
           JMP   RetOut
IsStatus2: CJNE  R1, #cCOM_STAT2RST,IsRstBit
           MOV   DPTR, #xCOMMBUF
           MOV   R5, DPH
           MOV   R6, DPL
           MOV   A, dOUT1SET
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, dOUT2SET
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, dOUT3SET
           MOVX  @DPTR, A
           INC   DPTR
           MOV   A, dOUT4SET
           MOVX  @DPTR, A
           INC   DPTR
           MOV   dEXTPART, #HIGH(xAD_BUF)
           MOV   pPORT2, dEXTPART
           MOV   R1, #LOW(xAD_BUF)
           MOV   A, #48H
           CALL  MOV_RAMTOEXT
           MOV   dEXTPART, #HIGH(xINT_SET)
           MOV   pPORT2, dEXTPART
           MOV   R1, #LOW(xINT_SET)
           MOV   A, #50H
           CALL  MOV_RAMTOEXT
           MOV   R2, #9FH
           MOV   R1, #cCOM_STAT2SND
           MOV   R4, #0
           JMP   RetOut
IsRstBit:  CJNE  R1, #cCOM_BITRST, IsRstByte
           MOV   R2, #4            ; 回发字节数
           MOV   R1, #cCOM_BITSET  ; 功能码
           MOV   A,  R7
           MOV   R4, A             ; 位序号
           MOV   R5, #0            ; 位状态
           MOV   R0, #dSYSBITS1
 ForNtByte:SUBB  A, #8
           JC    GetBit
           INC   R0
           JMP   ForNtByte
 GetBit:   ADD   A, 8
           MOV   R6, A
           CALL  dTOC_R6BIT
           JNC   RetOutT
           INC   R5
  RetOutT: JMP   RetOut
IsRstByte: CJNE  R1, #cCOM_BYTERST, IsRstWord
           MOV   R2, #4             ; 回发字节数
           MOV   R1, #cCOM_BYTESET  ; 功能码
           MOV   A,  R7
           MOV   R4, A              ; 字节序号
           ADD   A, #LOW(xINT_SET)
           MOV   R0, A
	   MOV   dEXTPART, #HIGH(xINT_SET)
	   MOV   pPORT2, #HIGH(xINT_SET)  ; SET THE EXT RAM SEGMENT TO INTEGER BLOCK
           MOVX  A, @R0
           MOV   R5, A
           JMP   RetOut
IsRstWord: CJNE  R1, #cCOM_WORDRST, IsRstFloat
           MOV   R2, #5             ; 回发字节数
           MOV   R1, #cCOM_WORDSET  ; 功能码
           MOV   A,  R7
           MOV   R4, A              ; 字节序号
           ADD   A, #LOW(xINT_SET)
           MOV   R0, A
	   MOV   dEXTPART, #HIGH(xINT_SET)
	   MOV   pPORT2, #HIGH(xINT_SET)  ; SET THE EXT RAM SEGMENT TO INTEGER BLOCK
           MOVX  A, @R0
           MOV   R5, A
           INC   R0
           MOVX  A, @R0
           MOV   R6, A
           JMP   RetOut
IsRstFloat:CJNE  R1, #cCOM_FLOATRST,NoCase
           MOV   R2, #6
           MOV   R1, #cCOM_FLOATSET
           MOV   A,  R7
           MOV   R4, A
	   MOV   B,  #3
           MUL   AB
           ADD   A,  #LOW(xAD_SET)
           MOV   DPTR, #xAD_SET
           ADD   A,   DPL
           MOV   DPL, A
           MOVX  A,  @DPTR
           MOV   R5, A
           INC   DPTR
           MOVX  A,  @DPTR
           MOV   R6, A
           INC   DPTR
           MOVX  A,  @DPTR
           MOV   R7, A
           JMP   RetOut  
NoCase:    CLR   A
           RET
           END              

;#############################################################################################
; FILE NAME INTSUB.ASM
; INTERRUPT: SIMFUNC - SEND SIMULATE FUNCTION TO CENTER STATION 
; FUNCTION:  DEFUALT
; PARMENTERS: R2, R3, R4, R5, R6, R7 IN GROUP 2
; RETURN:    A = cOKECHO or ERRECHO - ERROR REQUEST 
;------------------------------------------------------------
	  PROC   SIMFUNC
SIMFUNC:  RET
	  END

;#############################################################
; FILE NAME INTSUB.ASM
; INTERRUPT: SEND - SEND REQUEST DATA FUNCTION TO POINTED STATION 
; FUNCTION:  DEFUALT
; PARMENTERS: R2, R3, R4, R5, R6, R7 IN GROUP 2
; RETURN:    A = cOKECHO or ERRECHO - ERROR REQUEST 
;------------------------------------------------------------
SEND:     PUSH   PSW
	  MOV    PSW, #cSELRG2
	  CLR    B_RS232
	  SETB   B_RS_RW           ; ????? FOR SEND THE ERROR ECHO
	  CJNE   R0, #cMAINSTA, ForStatS           
	  SETB   B_RS232        ; FOR UP STATION COMMUNICTION
ForStatS: MOV    iCTRYNUM, #cMAXTRY          
	  MOV    dCOMMODE, #cCOMMODE11
	  POP    PSW
	  RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: SYSINIT - DO INITIALIZTION FOR APPLICATION 
; CALL FUNCTION: uSYSINIT 
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
SYSINIT:  ;--JB    bSIMULATE, SimInit
          CALL  uSYSINIT     ; ???? LCALL TURNSYS
          RET
SimInit:  PUSH  PSW          ; READY FOR PROC CALL SEND
          MOV   PSW, #cSELRG2
          MOV   R2, #4
          MOV   R1, #fSYSINIT
          MOV   R4, A
          MOV   R5, B
          CALL  SIMFUNC
          RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: EVTPROC - EVENT PROCESS 
; CALL FUNCTION: uEVTPROC, SEND, HOLDUP 
; PARMENTERS:  A - THE EVENT CODE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
EVTPROC:  CALL  GETEVENT     ; GET EVENT FOR PROCESS
          JZ    PassProc
          JB    bSIMULATE, SimEvtP
          CALL  uEVTPROC     ; ???? LCALL TURNSYS
PassProc: RET
SimEvtP:  PUSH  PSW          ; READY FOR PROC CALL SEND
          MOV   PSW, #cSELRG2
          MOV   R2, #4
          MOV   R1, #fEVTPROC
          MOV   R4, A
          MOV   R5, B
          CALL  SIMFUNC
          RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: ADLMTCHK - FOR A/D DATA LIMIT CHECK PROCESS 
; CALL FUNCTION:  uADLMTCHK, SENK, HOLDUP
; PARMENTERS:  A - THE EVENT CODE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
ADLMTCHK: MOV   A, nAD_CHNL
	  MOV   B, #3
	  MUL   AB
	  ADD   A, #xAD_BUF
	  MOV   R0, A
          MOV   dEXTPART, #cADSEG
	  MOV   pPORT2, #cADSEG  ; SET HIGH ADDRESS BITS 
          MOVX  A, @R0
          CLR   C
          SUBB  A, #cF3_ERR
          JZ    OverADChk
	  MOV   R7, nAD_CHNL
;--          JB    bSIMULATE, SimLmtP
          CALL  uADLMTCHK     ; ???? LCALL TURNSYS
OverADChk:CLR   A
	  MOV   dEXTPART, A
	  MOV   pPORT2, A     ; CLEAR HIGH ADDRESS BITS 
          RET
SimLmtP:  MOV   A, R7
          MOV   B, R0 
          PUSH  PSW       ; READY FOR PROC CALL SEND
          MOV   PSW, #cSELRG2
          MOV   R2, #4
          MOV   R1, #fADLMTCHK
          MOV   R4, A
          MOV   R5, B
          POP   PSW
          CALL  SIMFUNC 
          RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: CVTR_AD - CONVERT THE READ OUT A/D DATA TO THE EFFCIENT AD DATA
; CALL FUNCTION:  uCVTR_AD, SENK, HOLDUP
; PARMENTERS:  NONE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
CVTR_AD: ;-- JB    bSIMULATE, SimCvtP
          CALL  uCVTR_AD  
          RET
SimCvtP:  MOV   B, R7
          MOV   dTMP_R4, R4
          MOV   dTMP_R5, R5
          PUSH  PSW       ; READY FOR PROC CALL SEND
          MOV   PSW, #cSELRG2
          MOV   R2, #6
          MOV   R1, #fCVTR_AD
          MOV   R4, A
          MOV   R5, B
          MOV   R6, dTMP_R4
          MOV   R7, dTMP_R5
          POP   PSW
          CALL  SIMFUNC
          RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: READYDOT - FOR DOT DISPLAY READY
; CALL FUNCTION:  SENK, HOLDUP
; PARMENTERS:  NONE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
READYDOT: ;-- JB  bSIMULATE, SimReady
          CALL  uREADYDOT  
          RET
SimReady: PUSH  PSW       ; READY FOR PROC CALL SEND     
          MOV   PSW, #cSELRG2
          MOV   R2, #2
          MOV   R1, #fREADYDOT
          POP   PSW
          CALL  SIMFUNC
          RET
;#############################################################
; FILE NAME USELNK.ASM
; SUBROUTE: STATCHK - CHECK THE USER PROCESS STATUS
; CALL FUNCTION:  uSTATCHK, SENK, HOLDUP
; PARMENTERS:  NONE
; COMMON DATA USED: NONE
; CHANGE REGISTER: A, 
; RETURN: NONE
;------------------------------------------------------------
STATCHK: ;-- JB    bSIMULATE, SimChkP
          CALL  uSTATCHK  
          RET
SimChkP:  PUSH  PSW       ; READY FOR PROC CALL SEND     
          MOV   PSW, #cSELRG2
          MOV   R2, #2
          MOV   R1, #fSTATCHK
          POP   PSW
          CALL  SIMFUNC
          RET
;SimFunc:  POP   PSW
;          CALL  SEND
;          SETB  B_UP_RUN
;          CLR   ET0         ; ACTIVE TIMER 0 INTERRUPT
;	  CLR   TR0         ; ENABLE THE TIMER 0 COUNTER
;HoldUp:   JB    B_UP_RUN, HoldUp
;          SETB  ET0
;          SETB  TR0
;          RET

⌨️ 快捷键说明

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