Forum: Mikrocontroller und Digitale Elektronik AT89C51 externes EPROM auslesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Juergen B. (jbaben)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte mit dem AT89C51 ein EPROM (2764) mit der gezeigten Schaltung 
auslesen.
Die Original-Schaltung war mit einem 8032 und das EPROM war der 
Programmspeicher.
Bei der Original-Schaltung habe ich den MC durch den AT89C51RC2 ersetzt 
und das /EA/VPP-Signal auf +5 Volt beschaltet.
Am Steckverbinder K3 ist ein LC-Display (Adresse F800) angeschlossen.
Wie muss ich die Steuersignale (z.B. /OE) beschalten um das EPROM 
auslesen zu können ?
Programmcode zum auslesen des EPROM:
1
MOV DPTR, #EPROM_ADRESSE
2
MOVX A, @DPTR
3
MOV #SPEICHER, A
4
INC DPTR
5
…..

MfG

Juergen B.

von Stefan F. (Gast)


Lesenswert?

Wie im obigen Schaltplan gezeigt gehört /OE vom Eprom mit /PSEN vom 
Mikrocontroller verbunden. Der EA Pin muss mit GND verbunden werden, 
damit der externe Programmspeicher angesprochen wird.

Dein Programmcode liest aber vom RAM!

Du musst die Operation MOVC verwenden
https://www.keil.com/support/man/docs/is51/is51_movc.htm

Falls du vor hattest, dein Programm vom internen Speicher auszuführen, 
musst du den externen wie RAM anschließen. In diesem Fall gehört /OE vom 
Eprom mit /RD verbunden und EA=VCC.

Ist das Eprom denn schnell genug?

von Georg G. (df2au)


Lesenswert?

Die Anschaltung des LCD wird so nicht funktionieren. Du erzeugst mit 
jedem /RD oder /WR Puls ein E-Signal. Beim Lesen des Eprom kommt es dann 
zur Kollision zwischen LCD und Eprom.
Im Original wurde das Eprom nur bei /PSEN aktiv.
Leg das LCD doch an P1 und steuere es per Bitbanging an.
Wenn es dir nur um den Inhalt des Eprom geht, pack es ein und schick es 
mir. Ich lese es für dich aus.

von Thomas Z. (usbman)


Lesenswert?

Korrigiere mich falls ich falsch liege..
Das Leseprogramm hast du im internen Flashspeicher liegen?

Du musst einen Adressdecoder anflanschen, der dir das Eprom außerhalb 
des internen Flash einblenden. PSEN wird nur außerhalb des Flashes 
aktiv. Das entspricht quasi einer Code Speichererweiterung
Im einfachsten Fall einfach A15 invertiert auf OE und  PSEN auf CS. Dann 
wird dein Eprom mehrfach ab 0x8000 im Code eingeblendet.

von MCUA (Gast)


Lesenswert?

Er soll einfach sein Eprom in den '51er-RAM-Bereich einblenden.

von Juergen B. (jbaben)


Lesenswert?

Hallo,
vielen Dank für Eure Antworten.

Georg G. schrieb:
> Die Anschaltung des LCD wird so nicht funktionieren. Du erzeugst mit
> jedem /RD oder /WR Puls ein E-Signal. Beim Lesen des Eprom kommt es dann
> zur Kollision zwischen LCD und Eprom.
> Im Original wurde das Eprom nur bei /PSEN aktiv.
> Leg das LCD doch an P1 und steuere es per Bitbanging an.
> Wenn es dir nur um den Inhalt des Eprom geht, pack es ein und schick es
> mir. Ich lese es für dich aus.
Vielen Dank für Dein Angebot ist aber nicht so einfach da ich in Süd 
Afrika lebe. Es geht mir auch nicht nur um das auslesen (dafür könnte 
ich mir auch einen EPROMER besorgen), es geht mir hauptsätzlich um die 
Hard-Software däfür zu erstellen.
Das EPROM habe ich vor zig-Jahren programmiert und will dadurch meine 
Assembler Kenntnisse auffrischen.

Ich werde zuerst den Hinweis von Stefan und dann von Thomas Z. 
versuchen.

Der Hinweis von MCUA (51er-RAM-Bereich einblenden) ist mir noch nicht 
klar
MfG
Juergen B.

von Georg G. (df2au)


Lesenswert?

Die Lösung von Thomas sollte am einfachsten realisierbar sein. Nur /CS 
am Eprom auftrennen und per Inverter mit A15 an der CPU verbinden. /EA 
hast du ja schon auf VCC gelegt.
Zugriff auf das EPROM per MOVC  A, @A+DPTR. Du musst dann 0x8000 zur 
gewünschten EPROM Adresse addieren.

OT: Wo in RSA steckst du?

von Stefan F. (Gast)


Lesenswert?

Thomas Z. schrieb:
> Im einfachsten Fall einfach A15 invertiert auf OE und  PSEN auf CS.

Beachte das Timing. Ich hatte gestern in ein Datenblatt von einem 
X-Beliebigen 27C64 geschaut da stand etwas von 250ms delay nach CS. Der 
Mikrcoontroller will aber spätestens nach 95ms saubere Daten sehen.

Da muss man sicher in das zum tatsächlichen Chip gehörige DB schauen, 
denn die kompatiblen Chips sind ja im laufe der Zeit besser/schneller 
geworden. Je nach Eprom könnte es also doch noch klappen.

von Juergen B. (jbaben)


Lesenswert?

Georg G. schrieb:
> Die Lösung von Thomas sollte am einfachsten realisierbar sein. Nur /CS
> am Eprom auftrennen und per Inverter mit A15 an der CPU verbinden. /EA
> hast du ja schon auf VCC gelegt.
> Zugriff auf das EPROM per MOVC  A, @A+DPTR. Du musst dann 0x8000 zur
> gewünschten EPROM Adresse addieren.
>
> OT: Wo in RSA steckst du?

Ich wohne in Nelspruit (seit Mai 2013), das ist die Hauptstadt von 
Mpumalanga.
30 Min. zum Flugplatz, 60 Min. zum Kruger National Park.

MfG

Juergen B.

von Georg G. (df2au)


Lesenswert?

Stefan ⛄ F. schrieb:
> 250ms delay nach CS

genau deshalb gehört /CS an die Adressleitung und /PSEN an /OE. Das 
schenkt dir wertvolle Nanosekunden. Bei 10MHz ist ein -25er Eprom 
hinreichend gut.

@Juergen: Schöne Ecke, kenne ich aber nur vom Auto aus, nie angehalten 
und ausgestiegen. Nelspruit sagt man doch aber nicht mehr, das ist doch 
rassistisch :-)

: Bearbeitet durch User
von Soul E. (Gast)


Lesenswert?

Georg G. schrieb:
> Stefan ⛄ F. schrieb:
>> 250ms delay nach CS
>
> genau deshalb gehört /CS an die Adressleitung und /PSEN an /OE. Das
> schenkt dir wertvolle Nanosekunden. Bei 10MHz ist ein -25er Eprom
> hinreichend gut.

/RD an /OE. Das EPROM ist ja nun XDATA, der Controller arbeitet mit 
internem ROM.

von Peter D. (peda)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ist das Eprom denn schnell genug?

Kein Problem, der AT89C51RC2 kann den CPU-Takt bis auf 1/256 runter 
teilen.

von MCUA (Gast)


Lesenswert?

nicht ms sondern ns

von Stefan F. (Gast)


Lesenswert?

MCUA schrieb:
> nicht ms sondern ns

Ja, gut aufgepasst.

von MCUA (Gast)


Lesenswert?

>> nicht ms sondern ns
> Ja, gut aufgepasst.
Achso, du hast das extra falsch geschrieben

von Georg G. (df2au)


Lesenswert?

Soul E. schrieb:
> /RD an /OE. Das EPROM ist ja nun XDATA, der Controller arbeitet mit
> internem ROM.

Falsch. Bei der angedachten Lösung liegt das Eprom im Code Bereich 
oberhalb 0x8000. Der Controller hat intern das Leseprogramm, greift aber 
per MOVC auf den externen Codebereich zu.
/RD an /OE führt zu der oben angesprochenen Bus Contention.

von MCUA (Gast)


Lesenswert?

> Das EPROM habe ich vor zig-Jahren programmiert und will dadurch meine
> Assembler Kenntnisse auffrischen.
Aber dazu muss man kein EPROM auslesen.
Schon gar nicht das, was man selbst geschrieben hat.

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.