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...
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!
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
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
>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!
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...
> das müsste ich irgendwie dem Compiler beibringen...
Dann geht es natürlich nicht so gut.
mfG ingo
Pin 31 = /EA Diese Leitung legt fest, ob der Programmspeicher intern oder oder extern genutzt wird. Schau dir mal das Datenblatt vom DS89C430 an.
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.
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
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
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.