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