PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RAM an 89C52



Import-Script
26.12.2002, 11:40
Moin und Frohe Weihnachten! <BR> <BR>Hab da so ein kleine Problem mit meinem 89C52. <BR>Ich möchte auf ein externes RAM zugreifen, aber er nicht, und dabei verhält er sich ganz komisch... <BR>Ich schreibe erst ein Byte in das RAM und lese es kurze Zeit später wieder aus, um es an Potr 1 anzuzeigen. Das seltsame ist, dass er nicht das geschriebene Byte an Port 1 anzeigt, sondern das low Byte des Datapointers. Und ganz toll ist, dass er das auch ganz ohne angechlossenes RAM macht. <BR>Ich finds äusserst suspekt, ich hab mir schon einige Programmierbeispiele angesehen, aber meiner Meinung nach kann man garnicht soviel falsch machen. <BR> <BR>Help Please! <BR>gruss Flojoe

Import-Script
26.12.2002, 11:54
Was f&uuml;r ein RAM ist das denn &uuml;berhaupt? Und ein bisschen Quellcode mit Schaltplan wäre auch nicht schlecht. <BR> <BR>Aus deiner Beschreibung erkennt man keinerlei Zusammenhänge zwischen µC, RAM und Programm.

Import-Script
26.12.2002, 14:33
Jo denn: <BR> <BR>Erstmal das Progrämmchen: <BR> <BR>ORL 8Eh,#1 ;LSB des SFR setzen ALE=1 <BR> <BR>MOV DPTR,#0 ;Datapointer initialisieren <BR>MOV A,#10101010b ;Zu schreibendes Byte in A <BR>MOV @DPTR,A ;Byte in EEPROM schreiben <BR>MOV A,#0 ;A Löschen, danach kleines Päuschen <BR>CALL wait_1000 <BR>MOV A,@DPTR ;Byte wieder einlesen <BR>MOV P1,A ;Byte an P1 schreiben <BR> <BR>jmp $ ; Endlosschleife <BR> <BR> <BR>So.. <BR>das verwendete EEPROM ist ein XLS28C16BP-150 vom EXEL, das wie ein statisches Ram angesprochen werden kann und eine Zugriffszeit von ca 100ns besitzt. <BR>Die unteren 8 Adresseingänge sind &uuml;ber ein Latch&#40;74573&#41; an Port 0 des MC angeschlossen, die Datenleitungen habe ich direkt mit Port 0 verbunden. Die oberen Adressleitungen des EEPROMS habe ich einfach auf Masse gelegt, Port 2 des MC liegt frei. Den Takteingang des Latch habe ich &uuml;ber einen Inverter an ALE angeschlossen. Das mache ich deshalb, dass ich die Adresse noch nachmessen kann. <BR>WR und RD sind entsprechend den Pinbelegungen an den MC angechlossen, E liegt auf Masse. <BR>Und wie gesagt, die Adresse schreibt er wunderbar raus, man kann sie am Latch nachpr&uuml;fen, das Problem liegt im einlesen. Er liest nicht das Byte vom Datenbus, sondern schreibt einfach das Low Byte des Datapointers in den Akku. und das gibt er mir dann an Port 1 aus. Ich habe auch schon das Ram komplett abgeklemmt, es verändert sich garnichts.Auch habe ich schon Pausen zwischen den Zugriffen eingef&uuml;gt und den ausgang ALE nicht Softwaremässig beeinflusst, es kommt immer das selbe raus. Einen anderen MC habe ich auch schon verwendet, der macht den gleichen scheiss. Ich sitz schon seit ner Weile Dran, aber trotzdem möchte ich nicht ausschliessen das ich einen derben Fehler eingebaut habe... <BR> <BR>Im vorraus schonmal DANKE<IMG SRC="http://progshop.com/elektronik/diskussion/clipart/happy.gif" ALT=":-&#41;" BORDER=0> <BR> <BR>Greez Flojoe

Import-Script
26.12.2002, 14:51
Versuch mal MOVX A,@DPTR beziehungsweise MOVX @DPTR,A &#40;X wie xternes RAM&#41; <BR>ALE m&uuml;sste dann auch automatisch im richtigen Moment aktiv werden, weil der Prozessor weiß, dass er auf externen Speicher zugreift. <BR>

Import-Script
26.12.2002, 14:52
Hi <BR> <BR>hier mal ein paar Fehler :-&#41; <BR> <BR>MOV @DPTR,A ;Byte in EEPROM schreiben <BR>MOV A,@DPTR ;Byte wieder einlesen <BR>muß jeweils movx heißen. Ansonsten sollte eine Fehlermeldung vom ASM kommen. Wenn nicht -&#62; ASM entsorgen und durch AS ersetzen <BR> <BR>...Inverter an ALE... <BR>Da das 573 ein transparentes Latch ist &uuml;bernimmt es irgendwas undefiniertes wenn du ALE einfach so invertierst. Schau dir mal das Bustiming an <BR> <BR>Nach dem Schreiben in ein EEPROM mußt du mindestens 1ms warten bis das EEPROM fertig ist mit schreiben. <BR> <BR>Matthias

Import-Script
26.12.2002, 15:16
UPS, das mit dem MOVX war ein Tippfehler meinerseits, im eigentliche Programm stimmts, und das mit der Warteroutine hab ich auch schon versucht, tut nicht. <BR>Und das Latch &uuml;bernimmt Adressen astrein. da ALE durch den Softwareeingriff auf high liegt und nur bei einer Adress&uuml;bernahme auf low geht hält das Latch durchden Inverter die Adresse fest, man kann sie mit einem Multi nachmessen, und das Latch gibt exakt die Adressen aus, die ich im Prog definiere. <BR>Aber ich kann nicht verstehen, wie bei dem Befehl MOVX A,@DPTR das untere Byte des Datapointers in nden Akku gelangen kann.

Import-Script
27.12.2002, 11:16
Hey, jetzt hab ichs gefunden! <BR>war wohl doch das Timing. Hab einfach nicht lang genug gewartet. Bei 2-3 ms funktionierts endlich. <BR>Aber das EEprom macht trotzdem noch manchmal was es will.. Übrigens, das mit dem Inverter hab ich gekickt , funzt nicht. Werd ich aber noch zur Ansteuerung eines Multiplexers verwenden <BR> <BR>Also, nochmal Danke f&uuml;r die Hilfe und nen guten Rutsch