📄 install.a51
字号:
$TITLE ('Configuration for MONITOR-51 (C) 1987-1995 KEIL')
;***********************************************************************
;* *
;* MONITOR 8051 Configuration *
;* COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 1995 *
;* *
;* written by: RK 11.06.87 *
;* updated by: RK 23.10.89 *
;* updated by: HS 02.09.91 *
;* updated by: HS 11.04.95 *
;* updated by: HS 07.09.97 *
;* *
;***********************************************************************
NAME CONFIG
PUBLIC INCHAR ; CHARACTER INPUT-ROUTINE
PUBLIC OUTCHAR ; CHARACTER OUTPUT-ROUTINE
PUBLIC INSTAT ; INPUT STATUS OF SERIAL INTERFACE
PUBLIC OUTSTAT ; OUTPUT STATUS OF SERIAL INTERFACE
PUBLIC CLR_TI ; CLEAR SERIAL TRANSMIT INTERRUPT FLAG
PUBLIC SET_TI ; SET SERIAL TRANSMIT INTERRUPT FLAG
PUBLIC CLR_RI ; CLEAR SERIAL RECEIVE INTERRUPT FLAG
PUBLIC CLR_SER_IE ; CLEAR SERIAL INTERRUPT ENABLE FLAG
PUBLIC SET_SER_IE ; SET SERIAL INTERRUPT ENABLE FLAG
PUBLIC SER_INT_ADR ; ADDRESS OF SERIAL INTERRUPT VECTOR
PUBLIC SER_INT_ADR_OFF ; ADDRESS OF SERIAL INTERRUPT VECTOR + INT_ADR_OFF
PUBLIC BEFORE_GO ; DO SOME THINGS BEFORE STARTING USER PROGRAM
PUBLIC AFTER_GO ; DO SOME THINGS AFTER TERMINATION OF USER PROGRAM
PUBLIC DEF_PC_VAL ; DEFAULT PC VALUE AFTER START UP
PUBLIC WR_CODE ; WRITE CODE BYTE
EXTRN CODE (MON51) ; START OF MONITOR-51
EXTRN CODE (SER_ISR) ; SERIAL INTERRUPT SERVICE ROUTINE
INT_ADR_OFF EQU 8000H ; INTERRUPT VECTOR OFFSET IF MONITOR
; IS INSTALLED AT ADDRESS 0000H
DEF_PC_VAL EQU 8000H ; DEFAULT PC VALUE AFTER START UP
INITSEG SEGMENT CODE
RSEG INITSEG
LJMP InitSerial
LJMP INT_ADR_OFF + 03H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 13H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 1BH
NOP
NOP
NOP
NOP
NOP
$IF ((SERIAL = 3) OR (SERIAL = 5) OR (SERIAL = 10) OR (SERIAL = 12))
LJMP INT_ADR_OFF + 23H
$ELSE
LJMP SER_ISR
$ENDIF
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 2BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 33H
NOP
NOP
NOP
NOP
NOP
$IF ((SERIAL = 5) OR (SERIAL = 12))
LJMP SER_ISR
$ELSE
LJMP INT_ADR_OFF + 3BH
$ENDIF
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 43H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 4BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 53H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 5BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 63H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 6BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 73H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 7BH
NOP
NOP
NOP
NOP
NOP
$IF ((SERIAL = 3) OR (SERIAL = 10))
LJMP SER_ISR
$ELSE
LJMP INT_ADR_OFF + 83H
$ENDIF
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 8BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 93H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 9BH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0A3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0ABH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0B3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0BBH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0C3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0CBH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0D3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0DBH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0E3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0EBH
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0F3H
NOP
NOP
NOP
NOP
NOP
LJMP INT_ADR_OFF + 0FBH
;********************************************************************
;* This Macro checks whether a PROM or a RAM is at Address 0. *
;* If a PROM is detected -> Jump to Program in PROM (Address 0) *
;* If a RAM is detected -> Jump to Monitor *
;********************************************************************
PROMCHECK MACRO
$IF (PROMCHECK)
USING 0
MOV DPTR,#0 ; IF EPROM THEN JMP 0
CLR A
MOVC A,@A+DPTR
MOV R1,A
CPL A
MOVX @DPTR,A
CLR A
MOVC A,@A+DPTR
CPL A
CJNE A,AR1,JMP0
MOVX @DPTR,A
$ENDIF
ENDM
INSTALLCODE SEGMENT CODE
RSEG INSTALLCODE
$IF (PROMCHECK)
JMP0: LJMP 0
$ENDIF
$IF (SERIAL = 0)
;********************************************************************
;* Using TIMER 1 to Generate Baud Rates *
;* Oscillator frequency = 11.059 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
InitSerial: PROMCHECK ; Check if PROM in System
MOV TMOD,#00100000B ;C/T = 0, Mode = 2
MOV TH1,#0FDH
SETB TR1
MOV SCON,#01011010B ; Init Serial Interface
JMP Mon51
$ENDIF
$IF (SERIAL = 1)
;********************************************************************
;* Using internal Baud Rate Generator (only for 80515 and 80C517) *
;* Oscillator frequency = 12.000 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
BD BIT 0DFH
InitSerial: PROMCHECK ; Check if PROM in System
SETB BD
ORL PCON,#10000000B
MOV SCON,#01011010B ; Init Serial Interface
JMP Mon51
$ENDIF
$IF (SERIAL = 2)
;********************************************************************
;* Using TIMER 2 to Generate Baud Rates (only for 8052) *
;* Oscillator frequency = 12.000 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
RCAP2L DATA 0CAH
RCAP2H DATA 0CBH
T2CON DATA 0C8H
InitSerial: PROMCHECK ; Check if PROM in System
MOV T2CON,#34H
MOV RCAP2H,#0FFH
MOV RCAP2L,#0D9H
MOV SCON,#01011010B ; Init Serial Interface
JMP Mon51
$ENDIF
$IF (SERIAL = 3)
;********************************************************************
;* Using Serial Interface 1 Baudrate Generator (only for 80C517) *
;* Oscillator frequency = 12.000 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
S1REL DATA 09DH
S1CON DATA 09BH
S1BUF DATA 09CH
IEN2 DATA 09AH
InitSerial: PROMCHECK ; Check if PROM in System
MOV S1REL,#0D9H ; Reload Value
MOV S1CON,#10111010B ; Init Serial Interface
JMP Mon51
$ENDIF
$IF (SERIAL = 4)
;********************************************************************
;* Using TIMER 2 to Generate Baud Rates (only for 80C320/520/530) *
;* with dual data pointer support *
;* Oscillator frequency = 12.000 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
RCAP2L DATA 0CAH
RCAP2H DATA 0CBH
T2CON DATA 0C8H
DPS DATA 086H
InitSerial: PROMCHECK ; Check if PROM in System
MOV DPS,#00H
MOV T2CON,#34H
MOV RCAP2H,#0FFH
MOV RCAP2L,#0D9H ; 9600 baud @ 12 MHz
; MOV RCAP2L,#0BFH ; 9600 baud @ 20 MHz
; MOV RCAP2L,#095H ; 9600 baud @ 33 MHz
; MOV RCAP2L,#0DCH ; 9600 baud @ 11.0592 MHz
; MOV RCAP2L,#0EEH ; 19200 baud @ 11.0592 MHz
; MOV RCAP2L,#0F7H ; 38400 baud @ 11.0592 MHz
; MOV RCAP2L,#0FAH ; 57600 baud @ 11.0592 MHz
MOV SCON,#01011010B ; Init Serial Interface
JMP Mon51
$ENDIF
$IF (SERIAL = 5)
;********************************************************************
;* Using second serial interface of 80C320/520/530 with TIMER 1 *
;* and dual data pointer support *
;* Oscillator frequency = 12.000 MHz *
;* Set Baudrate to 9600 Baud *
;********************************************************************
DPS DATA 086H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -