258 lines
9.9 KiB
PHP
258 lines
9.9 KiB
PHP
save
|
|
listing off ; kein Listing über diesen File
|
|
|
|
;****************************************************************************
|
|
;* *
|
|
;* AS 1.41 - Datei 80C50x.INC *
|
|
;* *
|
|
;* Sinn : enthält SFR- und Bitdefinitionen für die SAB C50x-Prozessoren *
|
|
; (Ableitung aus STDDEF51.INC) *
|
|
;* *
|
|
;* letzte Änderungen : 26. 3.1997 Grundsteinlegung *
|
|
;* 8. 6.1997 Korrekturen von Herrn Schmid *
|
|
;* *
|
|
;****************************************************************************
|
|
|
|
ifndef reg50xinc ; verhindert Mehrfacheinbindung
|
|
|
|
reg50xinc equ 1
|
|
|
|
if (MOMCPUNAME<>"80C501")&&(MOMCPUNAME<>"80C502")&&(MOMCPUNAME<>"80C504")
|
|
fatal "Falscher Prozessortyp eingestellt: nur 80C501, 80C502 oder 80C504 erlaubt!"
|
|
endif
|
|
|
|
|
|
if MOMPASS=1
|
|
message "SAB C50x-SFR-Definitionen (C) 1993 Alfred Arnold, Steffen Schmid"
|
|
message "binde \{MOMCPUNAME}-SFRs ein"
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Prozessorkern
|
|
|
|
ACC SFRB 0e0h ; Akkumulator
|
|
B SFRB 0f0h ; Hilfsakku für MUL/DIV
|
|
SP SFR 81h ; Stapelzeiger
|
|
DPL SFR 82h ; Datenzeiger Bit 0..7
|
|
DPH SFR 83h ; " Bit 8..15
|
|
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
|
|
SYSCON SFR 0b1h ; Systemkonfiguration
|
|
PCON SFR 87h ; "Power-Management"
|
|
PCON1 SFRB 88h
|
|
EWPD BIT PCON1.7 ; Freigabe Wake-Up durch INT0
|
|
|
|
if MOMCPUNAME="80C502"
|
|
XPAGE SFR 91h ; XRAM-Ansteuerung 80C502
|
|
XCON SFR 94h
|
|
DPSEL SFR 92h
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Ports
|
|
|
|
P0 SFRB 80h ; I/O-Ports
|
|
P1 SFRB 90h
|
|
P2 SFRB 0a0h
|
|
P3 SFRB 0b0h
|
|
T2EX BIT P1.1
|
|
T2 BIT P1.0
|
|
if MOMCPUNAME="80C504"
|
|
P1ANA SFRB 90h ; Selektion Port 1/3 als analoge Eingabe
|
|
P3ANA SFRB 0b0h
|
|
EAN0 BIT P1ANA.0
|
|
EAN1 BIT P1ANA.1
|
|
EAN2 BIT P1ANA.2
|
|
EAN3 BIT P1ANA.3
|
|
EAN4 BIT P1ANA.2
|
|
EAN5 BIT P1ANA.3
|
|
EAN6 BIT P1ANA.4
|
|
EAN7 BIT P1ANA.5
|
|
endif
|
|
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
|
|
|
|
;----------------------------------------------------------------------------
|
|
; serielles
|
|
|
|
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 MOMCPUNAME="80C502"
|
|
SRELL SFR 0aah ; Wert für Baudratengenerator
|
|
SRELH SFR 0bah
|
|
BAUD SFRB 0d8h
|
|
BD BIT BAUD.7 ; Baudratengenerator aktivieren
|
|
ENDIF
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Timer
|
|
|
|
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
|
|
T2CON SFRB 0c8h ; Steuerregister Timer 2
|
|
TL2 SFR 0cch ; Daten Timer 2
|
|
TH2 SFR 0cdh
|
|
RC2L SFR 0cah ; Capture-Register
|
|
RC2H 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
|
|
|
|
;---------------------------------------------------------------------------
|
|
; Watchdog
|
|
|
|
if MOMCPU>=80C504h
|
|
WDCON SFRB 0c0h ; Watchdog Steuerung
|
|
SWDT BIT WDCON.0 ; Watchdog starten
|
|
WDT BIT WDCON.1 ; Watchdog zurücksetzen
|
|
WDTS BIT WDCON.2 ; Watchdog-Reset-Flagge
|
|
OWDS BIT WDCON.3 ; dito Oszillator-Watchdog
|
|
WDTREL SFR 86h
|
|
endif
|
|
|
|
;---------------------------------------------------------------------------
|
|
; Capture/Compare-Einheit
|
|
|
|
if MOMCPUNAME="80C504"
|
|
CT1CON SFR 0e1h ; Steuerung Vergleicher 1
|
|
CCPL SFR 0deh ; Periode Vergleicher 1
|
|
CCPH SFR 0dfh
|
|
CT1OFL SFR 0e6h ; Offset Vergleicher 1
|
|
CT1OFH SFR 0e7h
|
|
CMSEL0 SFR 0e3h ; Modus
|
|
CMSEL1 SFR 0e4h
|
|
COINI SFR 0e2h ; Initialisierung Vergleicherausgang
|
|
TRCON SFR 0cfh ; Trap-Freigabe
|
|
CCL0 SFR 0c2h ; Vergleichs-/Fangwert 0
|
|
CCH0 SFR 0c3h
|
|
CCL1 SFR 0c4h ; Vergleichs-/Fangwert 1
|
|
CCH1 SFR 0c5h
|
|
CCL2 SFR 0c6h ; Vergleichs-/Fangwert 2
|
|
CCH2 SFR 0c7h
|
|
CCIR SFR 0e5h ; Interruptflags
|
|
CCIE SFR 0d6h ; Interruptmasken
|
|
CT2CON SFR 0c1h ; Steuerung Vergleicher 2
|
|
CP2L SFR 0d2h ; Periode Vergleicher 2
|
|
CP2H SFR 0d3h
|
|
CMP2L SFR 0d4h ; Vergleichs-/Fangwert Timer 2
|
|
CMP2H SFR 0d5h
|
|
BCON SFR 0d7h ; Steuerung Blockkommunikation
|
|
endif
|
|
|
|
;---------------------------------------------------------------------------
|
|
; A/D-Wandler
|
|
|
|
if MOMCPUNAME="80C504"
|
|
ADCON0 SFRB 0d8h ; Konfiguration
|
|
IADC BIT ADCON0.5 ; Interruptflagge (Ende Konversion)
|
|
BSY BIT ADCON0.4 ; Busy-Flag
|
|
ADM BIT ADCON0.3 ; einfache/kontinuierliche Wandlung
|
|
MX2 BIT ADCON0.2 ; Kanalwahl
|
|
MX1 BIT ADCON0.1
|
|
MX0 BIT ADCON0.0
|
|
ADCON1 SFR 0dch
|
|
ADDATH SFR 0d9h ; Daten
|
|
ADDATL SFR 0dah
|
|
endif
|
|
|
|
;-------------------------------------------------------------------------
|
|
; Interruptsteuerregister:
|
|
|
|
IEN0 SFRB 0a8h ; Freigaben
|
|
IE SFRB IEN0
|
|
EA BIT IEN0.7 ; generelle Sperre
|
|
ET2 BIT IEN0.5 ; Timer 2
|
|
ES BIT IEN0.4 ; ser. Schnittstelle
|
|
ET1 BIT IEN0.3 ; Überlauf Timer 1
|
|
EX1 BIT IEN0.2 ; ext. Interrupt 1
|
|
ET0 BIT IEN0.1 ; Timer 0 Überlauf
|
|
EX0 BIT IEN0.0 ; ext. Interrupt 0
|
|
IP0 SFRB 0b8h ; Prioritäten
|
|
IP SFRB IP0
|
|
PT2 BIT IP0.5 ; siehe Freigabebits
|
|
PS BIT IP0.4
|
|
PT1 BIT IP0.3
|
|
PX1 BIT IP0.2
|
|
PT0 BIT IP0.1
|
|
PX0 BIT IP0.0
|
|
if MOMCPUNAME="80C504"
|
|
IEN1 SFR 0a9h
|
|
IP1 SFR 0b9h
|
|
ITCON SFR 09ah ; Triggerbedingungen
|
|
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
|
|
|