AT89C51 externes EPROM auslesen

OP #6545710
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.
Angehängte Dateien:
Gast #6545742
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?
#6545764
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.
#6545809
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.
OP #6546717
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.
#6546731
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?
Gast #6546743
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.
OP #6546776
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.
#6547015
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.
Gast #6547125
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren