Forum: Mikrocontroller und Digitale Elektronik 8051 +externer ROM u. Interruptvektoren


von Christian (Gast)


Lesenswert?

Ich soll für ein Projekt ein Board mit einen 8051 und externen EPROM und 
RAM sowie einen 8255 IO Baustein versehen. Für externen Rom gibt es 2 
Varianten diesen zu verwenden in dem man den internen Rom von 0000h bis 
0fffh und ab 1000h bis ffffh den Externen Adressiert oder nur den 
externen von 0000h bis ffffh -> Stehen mir in der 2. Variante noch die 
Interruptvektoren zur Verfügung?

Geht das überhaupt den IO am gleichen Bus wie den ROM aus dem das 
Programm läuft und wenn ja kann ich WR und RD einfach selber setzen?

von Helmut L. (helmi1)


Lesenswert?

Christian schrieb:
> Stehen mir in der 2. Variante noch die
> Interruptvektoren zur Verfügung?

Ja das geht die liegen dann im EPROM.


> Geht das überhaupt den IO am gleichen Bus wie den ROM aus dem das
> Programm läuft und wenn ja kann ich WR und RD einfach selber setzen?

Der 8051 unterscheidet zwischen Programmzugriffen mit PSEN und 
Datenzugriffen mit RD/WR.  Du hast also 2 x 64 Kbyte Addressraum zu 
verfuegung.

WR und RD setzt der Prozessor bei zugriffen auf externe Datenspeicher 
(nicht Programmspeicher) selber. Darum brauchst du dich nicht zu 
kuemmern.


Gruss Helmi

von Gast 22 (Gast)


Lesenswert?

Wenn Du mit ROM den internen Flash des 8051 meinst, sonst ist es eine 
Maske,
kannst Du den externen Speicher ab 1000h verwenden. Der 8051 schaltet 
die
Zugriffe automatisch um. Sonst Internes ROM abschalten und alles ins 
Externe
(würde ich vorziehen)

Die Interruptvektoren bleiben an der alten Stelle, sind nicht abhängig
vom Externen Speicher.

R wund W werden, bei jedem IO-Zugriff entsprechend vom 8051 aktiviert,
die Datenleitungen der Externen Bausteine müssen am Datenbus hängen.
(22k Pull-Ups nicht vergessen)
Die Chip-Selects passen aus den Adressen generieren und gut ist es.
Auf eindeutige Adressen achten!

von Matthias K. (matthiask)


Lesenswert?

>Geht das überhaupt den IO am gleichen Bus wie den ROM aus dem das
>Programm läuft und wenn ja kann ich WR und RD einfach selber setzen?

Ist kein Problem. Wenn Du schreibend und lesend zugreifen willst, dann 
lege den 8255 in den Datenspeicher-Bereich, welcher mit WR bzw. RD = Low 
ausgewählt wird. Für CS baust Du Dir einen Adressdecoder oder je nach 
Platzfreiheit reicht auch eine einzelne höherwertige Adresse, so das Du 
mit den externen RAM nicht in Adresskonflickte kommst.

von Peter D. (peda)


Lesenswert?

Christian schrieb:
> Ich soll für ein Projekt ein Board mit einen 8051 und externen EPROM und
> RAM sowie einen 8255 IO Baustein versehen.

Das ist dann aber nur ne Übungsaufgabe ohne jeglichen praktischen 
Nutzen.

Für praktischen Einsatz nimmt man nen 8051 mit internem Flash und 
Bootloader.


Peter

von Christian (Gast)


Lesenswert?

Danke an alle.
heißt also wenn der 8051 auf das ext. ROM zugreift setzt er PSEN und bei 
allen anderen ist PSEN nicht gesetzt
und nur bei zugriff auf ext. ROM setzt er WR/RD sonst muss/kann ich das 
tun?
bleiben da dann seine Einstellungen oder setzt er sie wieder auf den 
letzten wert zurück?

@Peter Dannegger
ja für meinen Techniker beim DAA

von Matthias K. (matthiask)


Lesenswert?

Christian schrieb:
> heißt also wenn der 8051 auf das ext. ROM zugreift setzt er PSEN und bei
> allen anderen ist PSEN nicht gesetzt
> und nur bei zugriff auf ext. ROM setzt er WR/RD sonst muss/kann ich das
> tun?
> bleiben da dann seine Einstellungen oder setzt er sie wieder auf den
> letzten wert zurück?

Also, du solltest als erstes mal was über Grundlagen des 8051 lesen. Dir 
fehlen elementare Grundkenntnisse. Vorallem zur grundsätzlichen 
Speicherarchitektur (Harward). Die ist bei (fast) allen 8051ern gleich. 
Im Netz gibt es unzählige Dokumente dazu.

von Helmut L. (helmi1)


Lesenswert?

Christian schrieb:
> heißt also wenn der 8051 auf das ext. ROM zugreift setzt er PSEN und bei
> allen anderen ist PSEN nicht gesetzt

Richtig

> und nur bei zugriff auf ext. ROM setzt er WR/RD sonst muss/kann ich das
> tun?

Bei externem ROM setzt er nur PSEN , WR/RD bleiben inaktiv.
Du must unterscheiden zwischen Programmspeicher und Datenspeicher.
Du hast da eine Harward Architektur und keine von Neumann.

> bleiben da dann seine Einstellungen oder setzt er sie wieder auf den
> letzten wert zurück?

Das macht der automatisch.

von Bernd N (Gast)


Lesenswert?

Pin 31 ist mit EA External Acces (externer Zugriff) gekennzeichnet. 
Führt dieser Anschluss + so liest der MC von dem internen 
Programmspeicher, andernfalls von einem externen Eprom. P0, P2 
übernehmen die Funktion eines Adress / Datenbusses. Im ersten Zyklus 
gibt der MC die Adresse für den Programmspeicher aus. P0 das Adress low 
Byte, P2 das Adress high Byte. Mit Hilfe des ALE  Signals (Pin 30) wird 
das Adress low Byte in einen Adress-Speicher übernommen. ALE steht für 
Adress Latch Enable. Im zweiten Zyklus schaltet nun der MC mit dem 
Signal PSEN Program Store  ENable das Eprom in den Freigabezustand. P0 
liest nun das Befehlswort ein und der MC führt es aus. Dieser Vorgang 
wiederholt sich während des gesamten Programmablaufs in der gleichen 
Weise.

WR/RD bleiben inaktiv. Erst wenn Du den 8255 ansprichst dann passiert 
auch hier etwas.

Harvard bitte nicht mit w schreiben :-)

von Peter D. (peda)


Lesenswert?

Ganz trivial ist die Sache nicht.

Eventuell brauchst Du nen PAL für Dekodierung, Umschaltung.
Eventuell mußt Du die Interruptvektoren vom internen Flash umleiten 
(LJMP-Tabelle).

Wie groß ist der externe SRAM, EPROM?
Soll aus dem XRAM auch Code ausgeführt werden?
Was für ein Adreßmapping hast Du dir ausgedacht?
Hat der 8051 schon internen Flash, SRAM und wie groß?
Welcher 8051?

Und schau Dir auch das Timing der 82C55 an, manche sind schnarchlahm und 
brauchen extra Waitzyklen. Aber nicht jeder 8051 kann externen Zugriffe 
strecken, dann hilft nur ein langsamerer Quarz.


Peter

von Hans M. (bauzi)


Lesenswert?

@ Christian
Für Dich bestimmt sehr nützlich:
"Das Microcontroller Kochbuch MCS51" von Andreas Roth.
Entweder kaufen oder ausleihen.
Wirst nicht bereuen.

von Hans M. (bauzi)


Lesenswert?


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
Noch kein Account? Hier anmelden.