📄 syssubo.asm
字号:
;######################################################
; 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 + -