mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM schreiben/lesen


Autor: Sebastian Barth (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich benutze den AT98C51ED2 von Atmel. Dieser hat ein 2kB EEPROM,
welches ich gerne nutzen möchte. :)

Aus der Manual werde ich einfach nicht schlau (als Anlage beigefügt).
Ich check es einfach nicht!

Kann mir bitte einer erklären, wie ich in das EEPROM schreibe, auslese?


Wäre echt super!


Danke im Voraus.

liebevoll .. Sebastian Barth

Autor: Sebastian Barth (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Manual vergessen. :)

Autor: sash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi, ich hab das gleiche problem wie du. versuch das ganze in c
hinzubekommen. wenn du schon irgendetwas hast was funktioniert (egal ob
assembler, basecom) koenntest des ja posten oder mir schicken.
werds selber auch weiter probieren und dann hier posten (wenns laeuft)

sash

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Turorial auf deiser Seite ist doch beschrieben wie man aufs EEProm
zugreift...

Autor: sash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja fuer den avr, aber nicht fuer den 89c51ed2 (8051er).
das datenblatt versteh ich ja soweit, nur das dptr is nicht direkt
vorhanden. dafuer zwar des dpl und dph. aber soweit komm ich eigentlich
gar nicht weill mein eeprom anscheinend sehr beschaeftigt ist, auch wenn
ich alle interrupts deaktiviere. auch wenn ich die abfrage uebergehe, ob
das busyflag gesetzt is, funktionierts net.

sash

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da gibt es doch nicht so viel zu kapieren.
Seite 91 bis 94 anschauen.
Die Flussdiagramme sagen doch alles.

Schreib doch mal was nicht funktioniert, oder was Du am Flussdiagramm
nicht verstehst.

Michael

Autor: sash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier mal kurz mein ansatz:

void write (unsigned int adresse, unsigned char wert)
{
  EA = 0;
  while (EECON =! 0) {;}   // warten eebusy = 0
  DPL = adresse;
  EECON = 0x02;
  DPL = wert;
  EECON = 0x00;
  EA = 1;
}

unsigned char read (unsigned int adresse)
{
  EA = 0;
  while (EECON =! 0) {;}
  DPL = adresse;
  EECON = 0x02;
  wert = DPL;
  EECON = 0x00;
  EA = 1;
  return (wert);
}

hatte es anstatt mit while (eecon != 0) auch mit eebusy probiert,
wobei ich eebusy so festgelegt hab: Sbit (EEBUSY , 0xD2, 0)
blieb dann aber immer in der while schleife haengen. hab se dann
einfach ganz rausgenommen, klappt aber trotzdem nicht

sash

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while (EECON =! 0) // Falsche Syntax
while (EECON != 0);// Ist richtig

cli();        // Interrupts sperren

Dann als Assembler...

out EEAR, address                 ; EEPROM-Adresse
sbi EECR, EERE                    ; Lesevorgang starten
in data, EEDR                     ; gelesenes Byte nach "data"

sei();      // Interrupts freigeben
Michael

PS: Ist aus dem Tutorial von dieser Seite

Autor: Sebastian B. (lufti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und mit dem Befehlssatz vom 8051? :)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der EEPROM wird in den XDATA-Space gemappt, unter C also die Adresse zu
einem xdata-Pointer casten und dann einfach das Byte reinschreiben und
dann warten bis das Schreiben beendet ist, das nächste Byte usw.

Bzw. in Assembler:
  mov eecon, #002h
  mov dptr, #Adresse
  mov a, #Daten
  movx a, @dptr
busy:
  mov a, eecon
  jb acc.0, busy
  mov eecon, #000h


Peter

Autor: Sebastian B. (lufti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super! Vielen Dank!

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.