diff options
Diffstat (limited to 'include/80c50x.inc')
-rw-r--r-- | include/80c50x.inc | 257 |
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 + |