📄 svrsub.asm
字号:
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 + -