intern (auf CPU) PROGRAMMSPEICHER extern 2K bis 64K ROM 051: 4K max 64K 051:64K 051Speicherorganistaion 13.04.2000 - v3 extern interner XRAM DATENSPEICHER intern (auf CPU) SPECIAL FUNCTION REGISTER SFR u. oberer Datenspeicherbereich teilen sich den gleichen Adreßbereich 051speicherorganisation.mmp - 13.04.2000 EA=1 EA=0 Externer Programmspeicher Externer Programmspeicher 2000H 1fffH 0000H Interner Programmspeicher ROM- Grenze 0000H feffh Interner XRAM ff00h Externer Datenspeicher 0000H XRAM liegt im oberen Bereich des externen Datenspeicherbereiches RAM Bereich unterer Bereich indirekt und direkt adressierbar 16 Bytes mit 12 bitadressierbaren Bits 4 Registerbänke oberer Bereich indirekt adressierbar
Speicherorganisation Art des Speicher Extern o. Intern Größe Programm Speicher Extern max. 64 KByte Intern (ROM, EEPROM) Abhängig von der C500 Version 2K bis zu 64KByte Daten Speicher Extern max. 64 KByte Interner XRAM Abhängig von der C500 Version 256 Byte bis zu 3 KByte Intern 12 oder 256 Byte Special Function Register Intern 12/256 Bytes Programmspeicher Kann nur aus externem nur aus internem und einem Mix aus internem und externem Speicher bestehen. /EA-Bit (Externe Adresse) /EA=0 Mikrocontroller greift nur auf Programm im externem Programmspeicher zu, ROM-lose Mikrocontroller-Derivate verwenden diese Art des Programmspeichers C501-Derivate mit On-Chip Programmspeicher, verwenden internen Speicher. /EA=1 Wenn der Internspeicher verwendet werden soll Mikrocontroller greift nur auf Programm im internem Programmspeicher zu Wenn /EA = 1 erfolgt Zugriff auf den Internspeicher, solange nicht auf Adresse zugegriffen wird, die außerhalb des internen Speicherbereichs liegt. Dann wird auf Externspeicher zugegriffen Abbildung 1 zeigt typische Programmspeicherkonfigurationen für die beiden Fälle /EA=0 und /EA=1 ROM-Grenze entspricht kbyte internem ROM (C501). Andere Derivate haben andere ROM-Grenzen 1
EA=1 EA=0 Externer Propgrammspeicher Externer Propgrammspeicher 2000H 1fffH 0000H Interner Propgrammspeicher ROM- Grenze 0000H Die Lage der ROM-Grenze ist vom C500-Derivat abhängig Abbildung 1: Programmspeicherkonfiguration (C501) Datenspeicher Interner und externer Datenspeicher Interner Datenspeicher wird adressiert durch Verwendung von -Bit-Adressen Externer Datenspeicher und interner XRAM wird adressiert durch -Bit- oder 16-Bit- AdressenInhalt des internen Datenspeichers wird nicht beeinflußt durch Reset Nach Einschalten ist der Inhalt des Speichers undefiniert XRAM bleibt erhalten, wenn C500 im Power-saving-Mode Interner Datenspeicher Unterteilt in drei Basis-Blöcke (physikalisch separat) 12 Byte oberer interner Daten-RAM 12 Byte unterer interner Daten-RAM 12-Byte SFR-Bereich (Special Function Register) lower: 0-7fH direkt und indirekt adressierbar MOV A, direkt MOV A, @R0 Adresse in R0 Bitadressierbare Bereich (12 Bits) 20-2fH Bit 0 auf der internen Datenadresse 20h hat Adresse 00H Bit 7 auf der internen Datenadresse 2Fh hat Adresse 7fH Niederwertige 32 Bytes 4 Bänke mit jeweils GPR (General Purpose Register Blocks) nur eine dieser Bänke kann aktiv sein, um als GPR verwendet zu werden 2
SFR-Bereich und oberer-interner RAM teilen sich den gleichen Adreßbereich (0h-ffH) Zugriff muß über unterschiedliche Adressierungsmodi erfolgen Oberer interner RAM nur über indirekte Adressierung adressierbar SFR nur über direkte Adressierung adressierbar SFR s, deren Adreßbits 0-2 Null sind (0H,H,90H...f0H,ffH)= sind bitadressierbare SFR s Abbildung 2: Interne Organisation des Datenspeichers Interner Datenspeicher XRAM Einige Mitglieder der C500-Familie verfügen über einen zusätzlichen internen Datenspeicher: wird als XRAM bezeichnet XRAM liegt am oberen Ende des externen Datenspeichers (außer 502) Ist aber im Chip integriert XRAM wird auf gleiche Art und Weise verwendet, wie externer Datenspeicher Deshalb Verwendung der gleichen Befehlsstypen Typisches XRAM-Adreßmapping in Abbildung 3 Größe des XRAM ist abhängig vom C500-Derivat. (12 bis 3K Byte) 3
feffh Interner XRAM ff00h Externer Datenspeicher 0000H Abbildung 3: XRAM Memory Mapping XRAM liegt im oberen Bereich des externen Datenspeicherbereiches Externer Datenspeicher Instruktionen, die - oder 16-Bit indirekte Adressierung verwenden MOVX 16-bittige externe Speicheradressierung, verwendet DPTR MOV -bittig mit R0/R1 Special Function Register Area Alle Register mit Ausnahme des Programmzählers und der 4 GPR-Bänke befinden sich im SFR-Bereich SFR-Area umfaßt 12 Bytes adressierbare SFR s Die SFR, deren Bits 0-2 Null sind, sind bitadressierbar Bitadressen umfassen die Adressen 0H bis ffh Einige C500-Derivate haben einen zusätzlichen 12 Byte großen Bereich von SFR: mapped SFR-Bereich Das SFR SYSCON (Adresse b1h) MSB LSB 7 6 5 4 3 2 1 0 b1h - - - RMAP - - - - SYSCON Die Funktion der anderen Bits ist hier nicht dargestellt 4
Bit RMAP Funktion =0 Der Zugriff auf den non-mapped (Standard) SFR-Bereich ist eingeschaltet =1 Der Zugriff auf den zusätzlichen (mapped) SFR-Bereich ist eingeschaltet Die beiden Bits im PSW RS0 (PSW.3) und RS1 (PSW.3) selektieren die aktive Register- Bank. Damit ist schnelles Kontextswitching möglich 5
Schreib- und Lesevorgänge des mcontrollers Abbildung 4: Externer Programmspeicherzyklus Abbildung 5: Externer Programmspeicherzyklus /PSEN Programm Store Enable ALE Adress Latch Enable Zugriff auf externen Programmspeicher wird von /PSEN freigegeben An Port2 liegt durchgehend High-Byte des Adreßbusses an Port 0 wechselt zwischen Low-Byte des AB und des Datenbussses 6
Abbildung 6: Externer Programmspeicherzyklus Abbildung 7: Zeitdiagramm Befehl 002h MOV A,#23h Abbildung : Externer Datenspeicherzyklus 7
Abbildung 9: Zwischenspeicherung des niederwertigen Adressbytes Abbildung 10: Externer Programm-/ Datenspeicher
Spezielle Eigenschaften Tabelle 1: Ausschnitt aus den Spezial Function Registern 0FH Port 5 P5 0B9H Interrupt Priority Register 1 IP1 0F0H B-Register 5 0BH Interrupt Enable Register 1 IEN1 0EH Port 4 P4 0B0H Port 3 P3 0E0H Akkumulator A 0A9H Interrupt Priority Register 0 IP0 0DAH D/A Converter (U Ref für A/D) DAPR 0AH Interrupt Enable Register 0 IEN0 0D9H A/D Converter Data Register ADDAT 0A0H Port 2 P2 0DH A/D Converter Control Register 99H Serial Buffer Register SBUF 0D0H Programmstatuswortregister PSW 9H Serial Port Control Register SCON 0CDH Timer 2 High Byte TH2 90H Port 1 P1 0CCH Timer 2 Low Byte TL2 DH Timer 1 High Byte TH1 0CBH Comp/ Reload/ Capt Reg. High CRCH CH Timer 0 High Byte TH0 0CAH Comp/ Reload/ Capt Reg. Low CRCL BH Timer 1 Low Byte TL1 0CH Timer 2 Control Register T2CON AH Timer 0 Low Byte TL0 0C7H Comp/ Capt Reg. 3 High CCH3 9H Timer Mode Register TMODE 0C6H Comp/ Capt Reg. 3 Low CCL3 H Timer Control Register TCON 0C5H Comp/ Capt Reg. 2 High CCH2 7H Power Control Register PCON 0C4H Comp/ Capt Reg. 2 Low CCL2 3H Data Pointer High Byte DPH 0C3H Comp/ Capt Reg. 1 High CCL1 2H Data Pointer Low Byte DPL 0C2H Comp/ Capt Reg. 1 Low CCL1 1H Stack Pointer SP 0C1H Comp/ Capt Enable Register CCEN 0H Port 0 P0 0C0H Interrupt Request Control reg. IRCON 9
MPU3a.doc Anschlüsse des Mikrocontrollers 051 XTAL 1 XTAL 2 VDP VBB AN0 - AN7 VAREF VAGND /EA /RESET 0535 Port 0 Port 1 Port 2 Port 3 Port 4 Port 5 ALE /PSEN Port 0: Ein- und Ausgang für Daten und niederwertiges Adreßbyte Port 1: bitweise adressierbar, Port für Steuersignale (Interrupteingänge, Timereingänge) Port 2: Ausgabe des höherwertigen Adreßbytes Port 3: bitweise adressierbar, Port für Steuersignale (u.a. serielle E/A, Interrupteingänge, Speichersteuerung) Zusätzlich beim Mikrocontroller 0535 Port 4: frei verfügbar, bidirektional adressierbar Port 5: frei verfügbar, bidirektional adressierbar Tabelle 1: Ports des 0535 P0.0 - P0.7 Beim Speicheranschluß: - Zuerst Ausgabe des niederwertigen Adreßbytes - Danach Einlesen des Befehls- oder Datenbytes bzw. Ausgabe des Datenbytes P1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 Bidirektion, bitadressierbar INT3, Externer Interrupt 3 (input) CC0, compare 0 output, capture 0 input INT4, Externer Interrupt 4 (input) CC1, compare 1 output, capture10 input INT5, Externer Interrupt 5 (input) CC2,, compare 2 output, capture 2 input INT6, Externer Interrupt 6 (input) CC3, compare 3 output, capture 3 input INT2, Externer Interrupt 2 (input) T2EX, externer Timer 2 reload trigger input CLKOUT, System clock output T2, externer Timer 2 counter input 1
MPU3a.doc P2.0 P2.7 Beim Speicheranschluß: - Ausgabe des höherwertigen Adreßbytes - Zeitgleich dazu wird das niederwertige Adreßbyte aus Port 0 ausgegeben P3 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 bidirektion, bitadressierbar RxD, Serieller Port (receive date) (input) TxD, Serieller Port (transmit date) (output) INT0, Externer Interrupt 0 (input) INT1, Externer Interrupt 1 (input) T0, externer Timer 0 counter input T1, externer Timer 1 counter input /WR, Schreibsignal für externen Datenspeicher: Übergabe des Datenbytes an Port 0 zum externen Speicher /RD, Lesesignal für externen Speicher: Übergabe das Datenbyte in Port 0 P4 P5 Bidirektional, bitadressierbar Bidirektional, bitadressierbar 051 Assembler Adressierungsarten Unmittelbare Adressierung Befehl ist unmittelbar mit der Zahl (Konstanten) verbunden. Zahl ist Teil des Befehls MOV A, # Direkte Adressierung Befehl ist verbunden mit Adreßinformation. Die Adreßinformation zeigt auf den Wert, der zu laden ist. Adresse ist Teil des Befehls. Adresse steht direkt ohne Prefix im Befehl. MOV A, 4 MOV R1, A Indirekte Adressierung Befehl enthält die Adresse des Registers, in dem die Zieladresse steht. 2
MPU3a.doc Auf den internen RAM kann mit @R0 und @R1 zugegriffen werden Auf den gesamten Code- und Datenspeicher kann mit dem 16-Bit-Register @DPTR zugegriffen werden. @DPTR besteht aus DPH und DPL MOV DPTR, #0004h MOVX A,@DPTR Indirekte Adressierung, indiziert durch Basisregister plus Indexregister Befehl enthält die Adresse des Registers, in dem die Basisadresse der Zieladresse und ein weiteres Register (Indexregister) steht. Der Inhalt des Indexregisters wird zur Basisadresse hinzuaddiert. Die Zieladreese ergibt sich also aus Dem Inhalt des Basisregisters und dem Inhalt des Indexregisters. MOV A, #1 MOV DPTR, #0003h MOVC A,@A + DPTR C steht für Codespeicher Registeradressierung Inhalt eines Registers wird in ein anderes Register geschrieben. Teilnehme können sein R0 bis R7, Akkumulator A, B-Register B, Carry-Bit CY, Datenpointer DPTR (besteht aus DPH und DPL) Transportbefehle Arithmetische Verknüpfungen Logische Verknüpfungen Setz-, Lösch-und Verschiebe-Befehle 3