aboutsummaryrefslogtreecommitdiffstats
path: root/include/80c50x.inc
diff options
context:
space:
mode:
Diffstat (limited to 'include/80c50x.inc')
-rw-r--r--include/80c50x.inc257
1 files changed, 257 insertions, 0 deletions
diff --git a/include/80c50x.inc b/include/80c50x.inc
new file mode 100644
index 0000000..e4a934b
--- /dev/null
+++ b/include/80c50x.inc
@@ -0,0 +1,257 @@
+ 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
+