                save
		listing off   ; kein Listing über diesen File

;****************************************************************************
;*                                                                          *
;*   AS 1.41 - Datei STDDEF51.INC                                           *
;*   								            *
;*   Sinn : enthält SFR- und Bitdefinitionen für die MCS-51-Prozessoren     *
;* 									    *
;*   letzte Änderungen :  7. 1.1993                                         *
;*                       14. 1.1993 USING-Makro hinzugefügt   		    *
;*                       26. 1.1993 REGUSAGE-Variable ergänzt               *
;*			 21. 1.1993 Erzeugerhinweis			    *
;*                        5. 6.1993 IPC & IEC hinzugefügt                   *
;*                                  SAVE & RESTORE                          *
;*                                  Prozessorsperre (Idee von Matthias)     *
;*                       11. 9.1993 Meldung nur im 1.Pass                   *
;*                       12. 5.1994 DS80C320-Register hinzugefügt           *
;*                       25. 6.1995 87C750 hinzugefügt                      *
;*                       22. 3.1996 SFR's fur 80517 eingefügt               *
;*                                  (von Gabriel Jager)                     *
;*                       14. 6.1996 80517-Korrekturen wg. Klammerung        *
;*                       26. 3.1997 Abfrage auf MOMCPU                      *
;*                                                                          *
;****************************************************************************

		ifndef  stddef51inc     ; verhindert Mehrfacheinbindung

stddef51inc     equ     1

                if      (MOMCPUNAME<>"87C750")&&(MOMCPUNAME<>"8051")&&(MOMCPUNAME<>"8052")&&(MOMCPUNAME<>"80C320")&&(MOMCPUNAME<>"80515")&&(MOMCPUNAME<>"80517")
                 fatal  "Falscher Prozessortyp eingestellt: nur 87C750, 8051, 8052, 80C320, 80515 oder 80517 erlaubt!"
		endif


                if      MOMPASS=1
                 message "MCS-51-SFR-Definitionen (C) 1993 Alfred Arnold/Gabriel Jager"
		 message "binde \{MOMCPU}-SFRs ein"
		endif

;----------------------------------------------------------------------------
; erstmal die Sachen, die es (fast) überall gibt :

P0              SFRB    80h             ; I/O-Ports
P1		SFRB	90h
P2              SFRB    0a0h
P3		SFRB	0b0h
RD		BIT	P3.7		; Port 3: Schreibleitung
WR		BIT	P3.6		;         Leseleitung
T1              BIT     P3.5            ;   Testleitung 1
T0		BIT	P3.4		;	  Testleitung 0
INT1		BIT	P3.3		;         ext. Interrupt 1
INT0		BIT	P3.2		;	  ext. Interrupt 0
TXD		BIT	P3.1		;	  ser. Ausgang
RXD		BIT	P3.0		;	  ser. Eingang
                if      MOMCPU=80C320H
TXD1		 BIT	P1.3		; zweiter ser. Ausgang
RXD1		 BIT	P1.2		; zweiter ser. Eingang
		endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SP		SFR	81h		; Stapelzeiger
DPL		SFR	82h		; Datenzeiger Bit 0..7
DPH		SFR	83h		;      "      Bit 8..15
                if      MOMCPU=80C320H
DPL0		 SFR	DPL
DPH0		 SFR	DPH
DPL1		 SFR	84h		; zweiter Datenzeiger 80C320
DPH1		 SFR	DPL1+1
DPS		 SFR	86h		; Bit 0=Umschaltung DPTR0<-->DPTR1
		endif
PSW		SFRB	0d0h		; Statuswort
CY		BIT	PSW.7
AC		BIT	PSW.6
F0		BIT	PSW.5
RS1		BIT	PSW.4
RS0		BIT	PSW.3
OV		BIT	PSW.2
P		BIT	PSW.0
ACC		SFRB	0e0h		; Akkumulator
B		SFRB	0f0h		; Hilfsakku für MUL/DIV

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SCON		SFRB	98h		; ser. Schnittstelle: Steuerregister
SM0		BIT     SCON.7          ; Betriebsarten
SM1		BIT     SCON.6
SM2		BIT     SCON.5
REN		BIT	SCON.4		; Empfangssperre
TB8		BIT	SCON.3		; 9. zu sendendes Bit
RB8		BIT	SCON.2		; 9. empfangenes Bit
TI		BIT	SCON.1		; Senderinterruptflag
RI		BIT	SCON.0		; Empfängerinterruptflag
SBUF		SFR	99h		;  "         "        Datenregister

                if      MOMCPU=80C320H  ; Register zweite serielle Schnittstelle
SCON0		 SFR	SCON
SBUF0		 SFR    SBUF
SCON1		 SFR	0c0h		; Steuerregister
SBUF1            SFR    0c1h            ; Datenregister
		endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PCON		SFR	87h		; "Power-Management"

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

TCON		SFRB	88h		; Timer 0/1 Steuerregister
TF1		BIT	TCON.7		; Überlauf Timer 1
TR1		BIT	TCON.6		; Timer 1 laufenlassen
TF0		BIT	TCON.5		; Überlauf Timer 0
TR0		BIT	TCON.4		; Timer 0 laufenlassen
IE1		BIT	TCON.3		; Externer Interrupt 1 aufgetreten
IT1		BIT	TCON.2		; Einstellung Triggerflanke externer Interrupt 1
IE0		BIT	TCON.1		; Externer Interrupt 0 aufgetreten
IT0		BIT	TCON.0		; Einstellung Triggerflanke externer Interrupt 0
TMOD		SFR 	89h		; Timer 0/1 Betriebsartenregister
TL0		SFR	8ah		; Daten Timer 0
TL1		SFR	8bh
TH0		SFR	8ch		; Daten Timer 1
TH1		SFR	8dh

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; kein Timer 2 beim 8051

		if	MOMCPU<>8051h
T2CON	 	 SFRB	0c8h		; Steuerregister Timer 2
TL2	 	 SFR	0cch		; Daten Timer 2
TH2	 	 SFR	0cdh
		 if	MOMCPU=8052h
RCAP2L	 	  SFR	0cah		; Capture-Register
RCAP2H	 	  SFR	0cbh
TF2		  BIT	T2CON.7		; Overflow Timer 2
EXF2		  BIT	T2CON.6		; Reload aufgetreten
RCLK		  BIT	T2CON.5		; Timer 2 liefert RxD-Takt
TCLK		  BIT	T2CON.4		; Timer 2 liefert TxD-Takt
EXEN2		  BIT	T2CON.3		; externer Enable Timer 2
TR2		  BIT	T2CON.2		; Timer 2 starten
CT2		  BIT	T2CON.1		; Timer 2 als Zähler
CPRL2		  BIT	T2CON.0		; Capture erlauben
		 elseif
CRCL		  SFR   0cah		; andere Namen beim 80515 !!
CRCH		  SFR	0cbh
T2PS		  BIT	T2CON.7
I3FR		  BIT	T2CON.6
I2FR		  BIT	T2CON.5
T2R1		  BIT	T2CON.4
T2R0		  BIT	T2CON.3
T2CM		  BIT	T2CON.2
T2I1		  BIT	T2CON.1
T2I0		  BIT	T2CON.0
		 endif
		endif

                if      MOMCPU=80C320H  ; Taktauswahl beim 80C320
CKCON		 SFR	8eh		; Bit 3,4,5 <--> Timer 0,1,2
		endif			; Bit 6,7 <--> Watchdog-Timeout

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 80C320-Watchdog

                if      MOMCPU=80C320h
WDCON            SFRB   0d8h
RWT		 BIT 	WDCON.0		; Watchdog zurücksetzen
EWT		 BIT	WDCON.1		; Watchdog freigeben
WTRF		 BIT	WDCON.2		; Watchdog-Reset aufgetreten
WDIF		 BIT	WDCON.3		; Interrupt 512 Takte bis Reset aufgetreten
PFI		 BIT	WDCON.4		; Power-Fail-Interrupt aufgetreten ?
EPFI		 BIT	WDCON.5		; Power-Fail-Interrupt freigeben
POR		 BIT	WDCON.6
WD_SMOD		 BIT	WDCON.7
TA		 SFR	0c7h		; nacheinander AA 55 schreiben, um Zugriff auf
		endif			; Spezialregister zu bekommen

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
                          
                if      MOMCPU=80C320H
SADDR0           SFR    0a9h            ; Slave-Adresse für seriellen Port 0
SADDR1           SFR    0aah            ; Slave-Adresse für seriellen Port 1
SADEN0           SFR    0b9h            ; Bits in SADDR0 freigeben
SADEN1           SFR    0bah            ; Bits in SADDR1 freigeben
		endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; zusätzliche 80515/80517-Register

                if      (MOMCPU=80515h)||(MOMCPU=80517h)
P4		 SFRB	0e8h
P5		 SFRB   0f8h

CCEN		 SFR	0c1h
CCH3		 SFR	0c7h
CCL3		 SFR	0c6h
CCH2		 SFR	0c5h
CCL2		 SFR	0c4h
CCH1		 SFR	0c3h
CCL1		 SFR	0c2h

ADCON            SFRB   0d8h            ; andere Namen beim 80515/80517
BD		 BIT	ADCON.7
CLK		 BIT    ADCON.6
BSY		 BIT	ADCON.4
ADM		 BIT	ADCON.3
MX2		 BIT	ADCON.2
MX1		 BIT	ADCON.1
MX0		 BIT	ADCON.0
ADDAT		 SFR	0d9h
DAPR             SFR    0dah
		endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; zusätzliche 80517-Register

               if      MOMCPU=80517h

DPSEL            SFR    92h             ;Datenpointer Select
ADCON1           SFR    0dch            ;Kontrolle 1 über A/D-Wandler
CTCON            SFR    0e1h            ;Kontrolle über Compare-Timer
IEN2             SFR    9ah
ARCON            SFR    0efh
MD0              SFR    0e9h            ;]      Multiplikations-
MD1              SFR    0eah            ;]      und
MD2              SFR    0ebh            ;]      Divisionsregister
MD3              SFR    0ech            ;]
MD4              SFR    0edh            ;]      1 - 5
MD5              SFR    0eeh            ;]
CC4EN            SFR    0c9h
CCH4             SFR    0cfh
CCL4             SFR    0ceh
CMEN             SFR    0f6h
CMH0             SFR    0d3h
CMH1             SFR    0d5h
CMH2             SFR    0d7h
CMH3             SFR    0e3h
CMH4             SFR    0e5h
CMH5             SFR    0e7h
CMH6             SFR    0f3h
CMH7             SFR    0f5h
CML0             SFR    0d2h
CML1             SFR    0d4h
CML2             SFR    0d6h
CML3             SFR    0e2h
CML4             SFR    0e4h
CML5             SFR    0e6h
CML6             SFR    0f8h
CML7             SFR    0f4h
CMSEL            SFR    0f7h
CTRELH           SFR    0dfh
CTRELL           SFR    0deh
P6               SFR    0fah            ; ??? bitadressierbar
P7               SFR    0dbh            ; ??? bitadressierbar
P8               SFR    0ddH            ; ??? bitadressierbar
ADCON0           SFR    0d8h            ;Kontrolle 1 über A/D-Wandler
S0BUF            SFR    99h             ;]      Kontrolle
S0CON            SFR    98h             ;]      für
S1BUF            SFR    9ch             ;]      die
S1CON            SFR    9bh             ;]      serielle
S1REL            SFR    9dh             ;]      Schnittstelle
WDTREL           SFR    86h             ;]      0 und 1

                endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Interruptsteuerregister: nicht kompatibel zwischen 8051/52 und 80515/80517 !!!

                if      (MOMCPU=80515h)||(MOMCPU=80517h)
IEN0		 SFRB	0a8h
EAL              BIT    IEN0.7
WDT		 BIT	IEN0.6
ET2		 BIT	IEN0.5
ES		 BIT	IEN0.4
ET1		 BIT	IEN0.3
EX1		 BIT	IEN0.2
ET0		 BIT	IEN0.1
EX0		 BIT	IEN0.0
IEN1		 SFRB	0b8h
EXEN2		 BIT    IEN1.7
SWDT		 BIT	IEN1.6
EX6		 BIT	IEN1.5
EX5		 BIT	IEN1.4
EX4		 BIT	IEN1.3
EX3		 BIT	IEN1.2
EX2		 BIT	IEN1.1
EADC		 BIT	IEN1.0
IP0              SFR    0a9h
IP1              SFR    0b9h
IRCON		 SFRB	0c0h
EXF2             BIT    IRCON.7
TF2              BIT    IRCON.6
IEX6             BIT    IRCON.5
IEX5             BIT    IRCON.4
IEX4             BIT    IRCON.3
IEX3             BIT    IRCON.2
IEX2             BIT    IRCON.1
IADC             BIT    IRCON.0
		elseif
IE		 SFRB	0a8h		; Interruptfreigaben
IEC              SFRB   IE
EA		 BIT	IE.7		; generelle Interruptsperre
ES		 BIT    IE.4		; Interrupts ser. Schnittstelle freigeben
ET1		 BIT	IE.3		; Interrupt Timer 1 freigeben
EX1		 BIT	IE.2		; externen Interrupt 1 freigeben
ET0		 BIT	IE.1		; Interrupt Timer 0 freigeben
EX0		 BIT	IE.0		; externen Interrupt 0 freigeben
IP		 SFRB	0b8h		; Interruptprioritäten
IPC              SFRB   IP
PS		 BIT	IP.4		; Priorität serieller Interrupt
PT1		 BIT	IP.3		; Priorität Interrupt Timer 1
PX1		 BIT	IP.2		; Priorität externer Interrupt 1
PT0		 BIT	IP.1		; Priorität Interrupt Timer 0
PX0		 BIT	IP.0		; Priorität externer Interrupt 0
                 if     MOMCPU=8052h
ET2		  BIT	IE.5		; Interrupt Timer 2 freigeben
PT2		  BIT	IP.5		; Priorität Interrupt Timer 2
		 endif
		endif

                if      MOMCPU=80C320H  ; erweiterte Interrupts 80C320
EIE              SFRB   0e8h
EWDI		 BIT 	EIE.4		; Watchdog-Interrupt freigeben
EX5		 BIT	EIE.3		; externe Interrupts 2..5 freigeben
EX4		 BIT	EIE.2
EX3		 BIT	EIE.1
EX2		 BIT	EIE.0
EIP              SFRB   0f8h
PWDI		 BIT 	EIP.4		; Priorität Watchdog-Interrupt
PX5		 BIT	EIP.3		; Priorität externer Interrupts 2..5
PX4		 BIT	EIP.2
PX3		 BIT	EIP.1
PX2		 BIT	EIP.0
EXIF		 SFR	91h		; erweitertes Interrupt-Flag-Register
		endif


;---------------------------------------------------------------------------
; Da man die Register beim 8051 nicht direkt pushen und poppen kann, muß man
; dies über direkte Adressen tun. Da dazu die Kenntnis der gewählten Regis-
; terbank erforderlich ist, steht hier das Makro USING zur Verfügung, wel-
; ches in den Symbolen AR0..AR7 die momentanen Registeradressen ablegt.
; USING erwartet als Parameter die gewählte Banknummer.

Bank0		equ	0		; nur der Schönheit halber...
Bank1		equ	1
Bank2		equ	2
Bank3		equ	3

using		macro	bank
		if	(bank<0)||(bank>3)          ; nur 0..3 erlaubt
                 error  "Falsche Banknummer: \{BANK}"
                endif

                ifdef	RegUsage	; Buchführung über benutzte Bänke
RegUsage	 set	RegUsage|(2^bank)
		elseif
RegUsage	 set	2^bank
		endif

ar0		set	bank*8		; Symbole besetzen
ar1		set	ar0+1
ar2		set	ar0+2
ar3		set	ar0+3
ar4		set	ar0+4
ar5		set	ar0+5
ar6		set	ar0+6
ar7		set	ar0+7
		endm

                endif

                restore                 ; wieder erlauben

