📄 install.a51
字号:
$ELSEIF (SERIAL = 11)
;********************************************************************
;* Using Timer 2 to generate Baud Rates *
;* for Dallas 80C320/520/530 with multiple data pointer support *
;* Oscillator frequency = don't care *
;* Automatic Baudrate Adjustment *
;********************************************************************
T2CON DATA 0C8H
T2MOD DATA 0C9H
RC2L DATA 0CAH
RC2H DATA 0CBH
TL2 DATA 0CCH
TH2 DATA 0CDH
TR2 BIT 0C8H.2
TF2 BIT 0C8H.7
InitSerial: PROMCHECK ; Check if PROM in System
CLR A
MOV RC2H,A
MOV RC2L,A
MOV TL2,A
MOV TH2,A
MOV T2MOD,A
MOV T2CON,A
L4: JB RXD,L4
L6: JNB RXD,L6
L7: SETB TR2
L8: JNB RXD,L10
JNB TF2,L8
L10: JNB RXD,L10
L12: JNB RXD,L14
JNB TF2,L12
L14: JNB RXD,L14
L15: CLR TR2
JB TF2,InitSerial
MOV R7,TL2
MOV R6,TH2
MOV A,R6
CLR C
RRC A
MOV R4,A
MOV A,R7
RRC A
ADD A,R7
MOV R7,A
MOV A,R4
ADDC A,R6
MOV R6,A
MOV A,R7
ADD A,#010H
MOV R7,A
CLR A
ADDC A,R6
MOV R6,A
MOV A,R7
MOV R0,#05H
L22: XCH A,R6
CLR C
RRC A
XCH A,R6
RRC A
DJNZ R0,L22
MOV R7,A
CLR C
CLR A
SUBB A,R7
MOV RC2L,A
MOV TL2,A
CLR A
SUBB A,R6
MOV RC2H,A
MOV TH2,A
MOV T2CON,#034H
MOV SCON,#05AH
L16: CLR RI
JNB RI,$
MOV A,SBUF
CJNE A,#011H,L16
JMP Mon51
$ELSEIF (SERIAL = 12)
;********************************************************************
;* Using second serial interface of Dallas 80C320/520/530 with *
;* Timer 1 and multiple data pointer support *
;* Oscillator frequency = don't care *
;* Automatic Baudrate Adjustment *
;********************************************************************
DPS DATA 086H
CKCON DATA 08EH
SCON1 DATA 0C0H
SBUF1 DATA 0C1H
WDCON DATA 0D8H
RI1 BIT 0C0H.0
RXD1 BIT P1.2
InitSerial: PROMCHECK ; Check if PROM in System
MOV DPS,#00H
ORL CKCON,#010H ; Timer 1 uses a divide by 4 clock
CLR TR1
CLR TF1
CLR A
MOV TL1,A
MOV TH1,A
MOV TMOD,#010H
L4: JB RXD1,L4
L6: JNB RXD1,L6
L7: SETB TR1
L8: JNB RXD1,L10
JNB TF1,L8
L10: JNB RXD1,L10
L12: JNB RXD1,L14
JNB TF1,L12
L14: JNB RXD1,L14
L15: CLR TR1
JB TF1,InitSerial
MOV R7,TL1
MOV R6,TH1
MOV A,R7
ADD A,#040H
MOV R7,A
CLR A
ADDC A,R6
MOV R6,A
MOV A,R7
RLC A
MOV A,R6
RLC A
MOV R7,A
CLR C
CLR A
SUBB A,R7
MOV TH1,A
CLR A
MOV TL1,A
MOV TMOD,#00100000B ;C/T = 0, Mode = 2
SETB TR1
ORL WDCON,#080H
MOV SCON1,#05AH
L16: CLR RI1
JNB RI1,$
MOV A,SBUF1
CJNE A,#011H,L16
JMP Mon51
$ENDIF
$IF ((SERIAL = 3) OR (SERIAL = 10))
;********************************************************************
;* Interface via additional 80517 UART *
;********************************************************************
SER_INT_ADR EQU 83H ; ADDRESS OF SERIAL INTERRUPT VECTOR
SER_INT_ADR_OFF EQU (INT_ADR_OFF + SER_INT_ADR)
INSTAT: PUSH B ; INPUT STATUS OF SERIAL INTERFACE
MOV B,S1CON
MOV C,B.0
POP B
RET
OUTSTAT: PUSH B ; OUTPUT STATUS OF SERIAL INTERFACE
MOV B,S1CON
MOV C,B.1
POP B
RET
INCHAR: MOV A,S1BUF ; CHARACTER INPUT-ROUTINE
RET
OUTCHAR: MOV S1BUF,A ; CHARACTER OUTPUT-ROUTINE
RET
CLR_TI: ANL S1CON,#11111101B ; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
RET
SET_TI: ORL S1CON,#00000010B ; SET SERIAL TRANSMIT INTERRUPT FLAG
RET
CLR_RI: ANL S1CON,#11111110B ; CLEAR SERIAL RECEIVE INTERRUPT FLAG
RET
CLR_SER_IE: ANL IEN2,#11111110B ; CLEAR SERIAL INTERRUPT ENABLE FLAG
RET
SET_SER_IE: ORL IEN2,#00000001B ; SET SERIAL INTERRUPT ENABLE FLAG
RET
BEFORE_GO: ; this code is executed before a
RET ; a go or proc step is executed
AFTER_GO: ; this code is executed after a go
RET ; command (when a breakpoint was set)
WR_CODE: MOVX @DPTR,A ; insert different code here, but
RET ; do not change any other register
; without saving it
$ELSEIF ((SERIAL = 5) OR (SERIAL = 12))
;********************************************************************
;* Interface via additional 80C320 UART *
;********************************************************************
SER_INT_ADR EQU 03BH ; ADDRESS OF SERIAL INTERRUPT VECTOR
SER_INT_ADR_OFF EQU (INT_ADR_OFF + SER_INT_ADR)
TI1 BIT 0C1H
ES1 BIT 0AEH
INSTAT: MOV C,RI1 ; INPUT STATUS OF SERIAL INTERFACE
RET
OUTSTAT: MOV C,TI1 ; OUTPUT STATUS OF SERIAL INTERFACE
RET
INCHAR: MOV A,SBUF1 ; CHARACTER INPUT-ROUTINE
RET
OUTCHAR: MOV SBUF1,A ; CHARACTER OUTPUT-ROUTINE
RET
CLR_TI: CLR TI1 ; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
RET
SET_TI: SETB TI1 ; SET SERIAL TRANSMIT INTERRUPT FLAG
RET
CLR_RI: CLR RI1 ; CLEAR SERIAL RECEIVE INTERRUPT FLAG
RET
CLR_SER_IE: CLR ES1 ; CLEAR SERIAL INTERRUPT ENABLE FLAG
RET
SET_SER_IE: SETB ES1 ; SET SERIAL INTERRUPT ENABLE FLAG
RET
BEFORE_GO: ; this code is executed before a
RET ; a go or proc step is executed
AFTER_GO: ; this code is executed after a go
RET ; command (when a breakpoint was set)
WR_CODE: MOVX @DPTR,A ; insert different code here, but
RET ; do not change any other register
; without saving it
$ELSEIF (SERIAL = 6)
;********************************************************************
;* Interface via external UART 16450/16550 *
;********************************************************************
SER_INT_ADR EQU 023H ; ADDRESS OF SERIAL INTERRUPT VECTOR
SER_INT_ADR_OFF EQU (INT_ADR_OFF + SER_INT_ADR)
INSTAT: PUSH DPL ; INPUT STATUS OF SERIAL INTERFACE
PUSH DPH
PUSH ACC
MOV DPTR,#SIOADDR+5 ; LSR
MOVX A,@DPTR ; Check if Ready
MOV C,ACC.0
POP ACC
POP DPH
POP DPL
RET
OUTSTAT: PUSH DPL ; OUTPUT STATUS OF SERIAL INTERFACE
PUSH DPH
PUSH ACC
MOV DPTR,#SIOADDR+5 ; LSR
MOVX A,@DPTR ; Check if Ready
MOV C,ACC.5
POP ACC
POP DPH
POP DPL
RET
INCHAR: PUSH DPL ; CHARACTER INPUT-ROUTINE
PUSH DPH
MOV DPTR,#SIOADDR
MOVX A,@DPTR
POP DPH
POP DPL
RET
OUTCHAR: PUSH DPL ; CHARACTER OUTPUT-ROUTINE
PUSH DPH
MOV DPTR,#SIOADDR
MOVX @DPTR,A
POP DPH
POP DPL
RET
CLR_TI: ; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
RET
SET_TI: ; SET SERIAL TRANSMIT INTERRUPT FLAG
RET
CLR_RI: ; CLEAR SERIAL RECEIVE INTERRUPT FLAG
RET
CLR_SER_IE: ; CLEAR SERIAL INTERRUPT ENABLE FLAG
RET
SET_SER_IE: ; SET SERIAL INTERRUPT ENABLE FLAG
RET
BEFORE_GO: ; this code is executed before a
RET ; a go or proc step is executed
AFTER_GO: ; this code is executed after a go
RET ; command (when a breakpoint was set)
WR_CODE: MOVX @DPTR,A ; insert different code here, but
RET ; do not change any other register
; without saving it
$ELSE
;********************************************************************
;* Interface via standard 8051 UART *
;********************************************************************
SER_INT_ADR EQU 23H ; ADDRESS OF SERIAL INTERRUPT VECTOR
SER_INT_ADR_OFF EQU (INT_ADR_OFF + SER_INT_ADR)
INSTAT: MOV C,RI ; INPUT STATUS OF SERIAL INTERFACE
RET
OUTSTAT: MOV C,TI ; OUTPUT STATUS OF SERIAL INTERFACE
RET
INCHAR: MOV A,SBUF ; CHARACTER INPUT-ROUTINE
RET
OUTCHAR: MOV SBUF,A ; CHARACTER OUTPUT-ROUTINE
RET
CLR_TI: CLR TI ; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
RET
SET_TI: SETB TI ; SET SERIAL TRANSMIT INTERRUPT FLAG
RET
CLR_RI: CLR RI ; CLEAR SERIAL RECEIVE INTERRUPT FLAG
RET
CLR_SER_IE: CLR ES ; CLEAR SERIAL INTERRUPT ENABLE FLAG
RET
SET_SER_IE: SETB ES ; SET SERIAL INTERRUPT ENABLE FLAG
RET
BEFORE_GO: ; this code is executed before a
RET ; a go or proc step is executed
AFTER_GO: ; this code is executed after a go
RET ; command (when a breakpoint was set)
WR_CODE: MOVX @DPTR,A ; insert different code here, but
RET ; do not change any other register
; without saving it
$ENDIF
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -