Hallo! Ich möchte gerne an meinem 80C51 eínen externen 64kByte SRAM Speicher anschliesen, nur möchte ich auch wiederrum meine internen 4kByte ebenfalls nutzen. Nun stelle ich mir die Frage, wie bekomme ich das Sauber [Hardware/Softwaremäßig] hin, dass wenn ich eigentlich die unteren 4kByte anspreche, er nicht das externe Ram anspricht? Oder den umgekehrten Fall? Ich muss ja meine EA [External Access] vorher richtig definieren! Danke für Eure Mithilfen !!
Hallo Daniel, ich kenn mich mit MCS-51 Controllern mit internem XRAM nicht wirklich aus, aber ich vermute, daß es ähnlich funktioniert wie mit dem Programmspeicher: Wenn ein Bit gesetzt ist, dann wird der interne RAM verwendet, ansonsten das externe RAM. Für den Programmspeicher gibts ja extra einen Gehäuseanschluss... beim RAM wird das wahrscheinlich nur ein Bit in einem SFR sein. Extern kannst du den 8051 also so beschalten, als hätte der keinen internen RAM. Ich bin mir, wie gesagt, nicht sicher.... aber das ist die wahrscheinlichste Möglichkeit. Gruss, SIGINT
Hallo, irgendwo habe ich gelesen, dass es so eine Umsetzung zwischen den interen und externen Ram gibt. Es muss doch möglich sein, dass man den internen 4K und den externen 64k Adressraum ansprechen kann,oder? Vielleicht hat jemand anders noch ne Lösung...
a) Ein 8051 hat nur 128 Bytes RAM, also sag erstmal was für einen uC du wirklich hast... b) schau ins Datenblatt von diesem.
80c552 µC, ok und ich gebe Dir recht die haben nur die lower 128kByte als vergleich können wir auch einen atmega128 nehmen, der hat 256kbyte bzw. 4kbyte Sram: Mir kommt es auch mehr auf die Adressierung an, wäre nett für eine Hilfestellung.. Danke schon mal
Die Unterscheidung wird im Befehl gemacht. für externes RAM nimmt man movx (und indirekte Adressierung), für internes RAM nur mov.
Der 80c552 von Philips hat keinen XRAM (externer RAM für die CPU aber gleiches IC), da kann man dann vermutlich auch nichts ein/ausschalten. Ich weiß das der Atmel AT89C51RD2 1792KByte XRAM hat, zum umschalten gibt es ein Register: AUXR - Auxilary Register Darin gibt es eine Bit (EXTRAM) um das XRAM ein/Auszuschalten und man kann man auch die eingeschaltete Größe ändern (256/512/768/1024/...) dazu kommt dann noch der interne RAM (256 BYte), der mit einem anderen Befehl benutzt wird (MOVX und @DPTR) Es hilft also nur in das Datenblatt des µP zu schauen. Gruß Michael
Ok dann lass uns das ganze Mal auf einen ATmega 128 beziehen! Da gibt es 4kByte internes RAM, jezt möchte ich gerne ein externes RAM mit 64kByte anschliessen. Und den gesamten Adressraum von 64K extern und 4k intern nutzen. Gibt es dafür ne konkrete Lösung ?
Nein. Schau mal im Datenblatt auf Seite 27. Die unteren 4351 Bytes (4kB + I/O-Space) werden Grundsätzlich intern adressiert. Darüber kommen dann noch ca. 60kB extern. Brauchst du mehr, dann bleiben Bankswitching(Speicherumschaltung per Portpin), serieller Speicher (z. B. Atmel Dataflash) oder reine Portanbindung über Adressregister (74HCT573 gehen dafür gut). Gruss Jadeclaw.
Ich mische mich jetzt einfach mal dazu: Ohne mich mit AVRs auszukennen, verrät mir ein Blick ins Datenblatt auf Seite 19, dass man bei Verwendung vom externen RAM diese RAM nur ab der Adresse benutzen kann, die größer als die letzte Adresse des internen RAMs ist. Das heisst, selbst wenn du 64kB externes RAM anschliest, kannst du davon nur 60kB benutzen. So, und jetzt bitte zurück zu deinem eigentlichen Controller, dem 80552. Was genau willst du machen bzw. haben? Ich hab es noch nicht ganz begriffen. Der 80C552 hat kein internes Flash, also musst du ein externes EPROM bzw. Flash verwenden. Genauso hat er offenbar kein internes XRAM. Woher kommen also deine oben erwähnten 4kB RAM??? Ralf
@Michael: Du hast dich in den Befehlen geirrt... Carsten hat Recht. @Daniel: Der 8051 hat intern nur 128Byte Speicher der wie Register verwendet wird... der 8052 hat nochmal 128Byte, die "unter" den SFRs liegen und auf die nur indirekt zugegriffen werden kann. Jeder andere RAM ist sog. XRAM, der für den Prozessor wie normaler, externer, Speicher aussieht und im selben Adressraum liegt. Deshaln musst du diesen XRAM ausschalten um auf das externe RAM zuzugreifen. Michael hat ja schon gesagt, wie sowas gehen könnte. Schau dir mal ein paar Tutorials zum Thema 8051 (auch MCS-51 genannt) an... die Grundlagen sind bei jedem Mikrocontroller eigentlich extrem wichtig. Gruß, SIGINT
Erstmal danke für Eure Beiträge.. Wie erkennt der µC denn, dass ich nicht die 4kByte anspreche? Im Prinzip nutze ich 2 Port´s a 8 Bit, damit mein Adressraum 64k groß ist. Da ich die Ports bitweise programmieren muss, verstehe ich leider nicht den Zusammenhang? Könnte mir jemand dieses erklären?
@Daniel: Eins vorweg: Es ist total unsinnig den Atmega mit dem MCS-51 zu vergleichen, da diese Prozessoren ganz anders aufgebaut sind. Dann zum 80C552: Wie ich eben auch gesehen habe hat der 80C552 KEINEN internen Programmspeicher und KEINEN internen XRAM. Das bedeutet,daß du sowieso Programmspeicher und XRAM extern anschließen musst und keine Konflikte mit einem internen Speicher befürchten musst. Die 128Byte(!), oder 256Byte beim 8052, werden (wie oben schon erwähnt) anders angesprochen als XRAM und Programmspeicher. [zitat] Wie erkennt der µC denn, dass ich nicht die 4kByte anspreche? Im Prinzip nutze ich 2 Port´s a 8 Bit, damit mein Adressraum 64k groß ist. Da ich die Ports bitweise programmieren muss, verstehe ich leider nicht den Zusammenhang? [/zitat] Dir scheinen wichtige Grundlagen zu fehlen. Wenn dein Controller externen Speicher unterstüzt, dann musst du nichts "programmieren"... der Controller legt dann seinen Adress- und Datenbus auf die Portpins und greift dann wie ein Mikroprozessor auf den RAM,Programmspeicher und IO-Komponenten zu. Wie die genaue Realisierung des externen Bus aussieht hängt von verwendeten Mikrocontroller ab. Beim MCS-51 wird mit den Befehlen movx und movc auf den externen Bus zugegriffen... wenn der MCS-51 aber eingebauten XRAM besitzt, dann muss man dem Controller sagen, ob man auf den internen XRAM oder dem externen XRAM zugreifen möchte... wie das geht wurde oben ja schon gesagt. Wie man beim ATmega erreicht, daß der Bus nach aussen verlegt wird kann ich nicht sagen. Wahrscheinlich gibt es irgendwelche SFRs um das einzustellen.... das hängt aber alles vom verwendeten Controller ab: Deshalb lies dir die Datenblätter durch und eigne dir die Grundlagen an.
Beim AVR ist es NICHT möglich, externen Programmspeicher anzuschließen. Das liegt daran, dass der AVR 16-Bit Befehle verwendet. Einige AVRs unterstützen externen Datenspeicher per Hardware, wie z.B. der ATmega8515. Andere AVRs können das nicht per Hardware, dann muss man eben den Zugriff (also das Bedienen der Ports) per Software nachbilden. Ralf
@Sigint Danke für Deinen Beitrag! Wie Du schon gemerkt hast, hakt es an den Grundlagen! Falls ich noch ne Frage habe, melde ich mich noch mal Mfg Daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.