www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM des AT89S8252 ansprechen


Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin Anfänger und versuche gerade mittels dem Flashboard von Elektor mir 
C mit Mikrocontrollern beizubringen.
LEDs blinken und serielle Kommunikation funktionieren soweit.
Jetzt möchte ich eine Variable im EEPROM speichern, die ich nach dem 
Einschalten wieder auslesen kann.

z.B:
Lies Variable z.B. 5  ->  Blinke 5x  ->  schreibe 6 ins EEPROM

Ich verwende den SDCC. Eine eeprom.h gibt es nicht. Habe in einem Forum 
gelesen, das Assembler-Code entsprechend angepasst werden muss. Dies 
überfordert meinen momentan noch geringe Kenntnisse.
Gibt es hier nicht eine einfache Lösung?


Danke
Rüdiger

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rüdiger,

das ist eigentlich im Datenblatt beschrieben. Wenn die entsprechenden 
BIT's gesetzt sind dann ist es wie ein Speicherzugriff im XRAM. An die 
folgende Funktion übergibst du die Adresse (wo soll gespeichert werden) 
sowie das entsprechende Datenwort (das was du Speichern willst).
void SaveEeprom (unsigned int address, unsigned char Data)  {
  xdata unsigned char *XEEPData;  
  XEEPData = (xdata *) address;
  WMCON |= WMCON_EEMEN;                     // Enable EEPROM
  WMCON |= WMCON_EEMWE;                     // Enable Write EEPROM
  *XEEPData = Data;                         // save Data
  while (!(WMCON & WMCON_WDTRST));          // check busy Flag                                  
  WMCON &= 0x77;                            // disable EEPROM
}

Beim lesen siehts dann folgendermaßen aus:
unsigned char ReadEeprom (unsigned int address)  {
  xdata unsigned char *XEEPData;
  unsigned char Data;
  XEEPData = (xdata *) address;    
  WMCON |= WMCON_EEMEN;                     // EEPROM Enable
  Data = *XEEPData;                         // read Data
  WMCON &= 0xF7;                            // disable MOVX EEPROM
  return Data;
}

Also Adresse die Gelesen werden soll und du erhälts den Inhalt der 
Speicherzelle zurück.

Das Ganze ist mit SDCC getestet, liegt also nicht am Compiler ;-))

Autor: Rüdiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Joe,

funktioniert einwandfrei!


Rüdiger

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.