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...
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