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