dect
/
asl
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asl/include/stddef51.inc

375 lines
12 KiB
PHP

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