mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 externes RAM als Codespeicher (Beschaltung)


Autor: itsme (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich möchte einen 32k RAM Baustein an einen DS89C430 anschliessen, doch 
weiss ich nicht genau wie ich das tun soll, da ich nicht alle Pins habe, 
wie sie hier im Schaltplan sind.
Es soll so angeschlossen werden, dass Code aus dem Speicher ausgeführt 
werden kann, wie im angehängten Plan.

Die Pins, die im Plan sind, aber ich nicht habe sind RD# und WR#.
Ich habe am Controller:
 ALE/PROG# (im Plan ALE)
 PSEN# (im Plan PSEN#)
 EA

Jedoch brauche ich laut Plan RD# und WR#, da jedoch RD# und PSEN# über 
ein AND gehen, müsste es doch reichen nur das PSEN# an das erste AND 
(beide Inputs) gehen zu lassen und ist dann EA an meinem Controller 
gleich wie WR# in Plan?

Ich hoffe mir kann da jemand weiterhelfen...

Autor: ds89c430 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal ins Datenblatt geschaut?

PORT  ALTERNATE  FUNCTION
P3.0 RXD0  Serial Port 0 Receive
P3.1 TXD0  Serial Port 0 Transmit
P3.2  INT0  External Interrupt 0
P3.3  INT1  External Interrupt 1
P3.4 T0  Timer 0 External Input
P3.5 T1  Timer 1 External Input
P3.6  WR  External Data Memory Write Strobe
P3.7  RD          External Data Memory Read Strobe

Da ist doch alles, was Du brauchst!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun du musst es genauso machen wie in dem Plan und in den Controller den 
Paulmon flashen sonst geht es nicht!
Das Coderam liegt in diesem Beispiel bei 0x8000.

Thomas

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du auf den "movx a,@dptr"-Befehl verzichten kannst (Ersatz durch 
"clr a / movc a,@a+dptr"), könntest Du auch die ~RD weglassen und damit 
ein Portpin gewinnen. Hat sich bei mir gut bewährt.
mfG ingo

Autor: itsme (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Schon mal ins Datenblatt geschaut?

>PORT  ALTERNATE  FUNCTION
>P3.0 RXD0  Serial Port 0 Receive
>P3.1 TXD0  Serial Port 0 Transmit
>P3.2  INT0  External Interrupt 0
>P3.3  INT1  External Interrupt 1
>P3.4 T0  Timer 0 External Input
>P3.5 T1  Timer 1 External Input
>P3.6  WR  External Data Memory Write Strobe
>P3.7  RD          External Data Memory Read Strobe

>Da ist doch alles, was Du brauchst!

Omg, die alternate Funktionen habe ich natürlich nicht beachtet... Habe 
zwei Stunden gebraucht, bis ich das Eagle Symbol fürs Layout gebastelt 
hatte und irgendwie.. naja, Dummheit kennt keine Grenzen :D

>den Paulmon flashen sonst geht es nicht!
Das ist egal, was für Software da drin rennt, mein Controller ist per 
ISP Programmierbar, da brauch keinen extra Bootloader/Monitorprogramm 
dafür...

DANKE!

Autor: itsme (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ingo schrieb:
> Wenn Du auf den "movx a,@dptr"-Befehl verzichten kannst (Ersatz durch
> "clr a / movc a,@a+dptr"), könntest Du auch die ~RD weglassen und damit
> ein Portpin gewinnen. Hat sich bei mir gut bewährt.
> mfG ingo
Hmm da ich mit 8051ern gerade erst Anfange, möchte ich nicht direkt auf 
einen Befehl verzichten, der mir mir von einer Adresse im Datenpointer 
direkt in den Akku lädt :)
Vorallem, vlt kommt ja noch C und das müsste ich irgendwie dem Compiler 
beibringen...

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das müsste ich irgendwie dem Compiler beibringen...
Dann geht es natürlich nicht so gut.
mfG ingo

Autor: Graue Maus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pin 31 = /EA
Diese Leitung legt fest, ob der Programmspeicher intern oder oder extern 
genutzt wird. Schau dir mal das Datenblatt vom DS89C430 an.

Autor: ds89c430 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit /EA auf Low schaltet man den internen Programmspeicher komplett ab.
Dann kann man nur noch externen Speicher nutzen.
Im geposteten Fall wird durch die Verknüpfung von /RD und /PSEN auf den 
externen Programmspeicher zugegriffen. Wenn der externe Speicher nur als 
Datenspeicher genutzt wird, kann auf /PSEN verzichtet werden.

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itsme schrieb:
> Das ist egal, was für Software da drin rennt, mein Controller ist per
> ISP Programmierbar, da brauch keinen extra Bootloader/Monitorprogramm
> dafür...

Dann brauchst Du doch auch keinen RAM, aus dem Du Code ausführen kannst.
Der ISP-Programmer kann nämlich keine Daten ins RAM schreiben.

Nachtrag: Dann nutze lieber die 18 frei gewordenen Ports für andere 
Sachen.


itsme schrieb:
> Hmm da ich mit 8051ern gerade erst Anfange, möchte ich nicht direkt auf
> einen Befehl verzichten, der mir mir von einer Adresse im Datenpointer
> direkt in den Akku lädt :)

Aber genau das tut MOVC A, @A + DPTR doch ...


Gruß

Jobst

Autor: Bernhard Spitzer (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itsme schrieb:
> Hmm da ich mit 8051ern gerade erst Anfange, möchte ich nicht direkt auf
> einen Befehl verzichten, der mir mir von einer Adresse im Datenpointer
> direkt in den Akku lädt :)
>
> Vorallem, vlt kommt ja noch C und das müsste ich irgendwie dem Compiler
> beibringen...

Dem Compiler bringt man die gewünschten Speicherbereiche über Space 
Qualifier bei. Eine globale Variable (nur da geht die exakte Adresse, 
bei lokalen Variablen geht nur der Speicher-Bereich) kann man an eine 
beliebige Speicheradresse "tackern". Bei RIDE z.B.
xdata at 0x100 unsigned char Wert1, Wert2, Wert3;
Damit liegt Wert1 an 0x100, Wert2 an 0x101 etc. Weitere Speicherbereiche 
sind data (unteres RAM), idata (oberes RAM), code (ROM), bit (Bit im 
bitadressierbarem RAM), sfr und sbit.
Die Bit-Variablen kann man so z.B. über eine char-Variable legen und 
mehrere Bits so auf einen Schlag lesen oder schreiben.
bit at 0x00 Flag0, Flag1, Flag2, Flag3; // und so weiter...
data at 0x20 unsigned char AlleFlags; // liegt auf den Bitadressen 
0x00-0x07...

tschuessle
Bernhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.