www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wert in Flash speichern 8051F020


Autor: Matthias Leu (Firma: Leica-Geosystems) (radelektroniker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich muss 4Byte abspeichern können, die auch wenn der uP kein Strom hat, 
gespeicher bleiben.
Die Lösung darf nur den 8051F020 ohne zusätzliche Hardware benutzen.

Vielen Dank für eure Hilfe

Autor: Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und, bist Du schon fertig? Sollte ja nicht schwer sein.

Autor: Matthias Leu (Firma: Leica-Geosystems) (radelektroniker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein!!
ICh weiss nicht wie ich das machen muss, sonst häte ich doch nicht 
gefragt.
BItte sag mir wie das geht.

Gruss Matthias

Autor: Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage habe ich nicht gefunden.
Aber ein Blick ins Datenblatt zeigt, wie es geht. Lesen mußt Du schon 
selber.

Autor: Matthias Leu (Firma: Leica-Geosystems) (radelektroniker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt habe ich studiert, wenn das Forum nicht dazu da ist um Hilfe 
zu bekommen, dann weis ich auch nicht.
Könnte mir jemand fals es im Datenblat steht die Seite angeben.

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Leu schrieb:
> Könnte mir jemand fals es im Datenblat steht die Seite angeben.

Seite 139, "15.1.Programming The FLASH Memory", Quelle:
https://www.silabs.com/pages/DownloadDoc.aspx?FILE...

Autor: Matthias Leu (Firma: Leica-Geosystems) (radelektroniker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mich nicht ganz klar ausgedrückz.
Ich möchte, dass der uP während des Programmablaufs zwei Bytes 
abspeichert, die auch nicht verlohren gehen, wenn der uP kein Strom mehr 
hat.
Ich habe es mit movc versucht, geht aber nicht.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Leu schrieb:
> Ich habe es mit movc versucht, geht aber nicht.

Im Datenblatt steht aber MOVX.
MOVC ist ein Lesebefehl, kann also schonmal garnicht schreiben.

Vorher muß das Flash-Schreiben enabled werden und die Page gelöscht 
(siehe Sequenz im Datenblatt).


Peter

Autor: Mathias_H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seite 139 steht doch alles sehr auführlich! ... ein bisschen arbeit 
musst du dir schon machen!

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe es mit movc versucht, geht aber nicht.

Nein, so geht das auch nicht. Ich zitiere mal das Datenblatt: "The FLASH 
memory can be programmed by software using a MOVX write instruction, 
..."

Seite 139, "15.1.Programming The FLASH Memory", Quelle:
https://www.silabs.com/pages/DownloadDoc.aspx?FILE...

Das, was da noch im Datenblatt steht, musst Du übrigens auch lesen. Nur 
mit movx funktioniert das nämlich auch nicht. Schau Dir vielleicht auch 
mal AN201 an.

Autor: Matthias Leu (Firma: Leica-Geosystems) (radelektroniker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mich nun ca 3h mit dem Thema befasst, und komme einfach nicht 
weiter.
Ich möchte in C einen Wert, der ich bei einer Kalibrierung erhalte 
abspeichern, und ihn dann später auslesen (uP zwischendurch ohne Strom).
Im Datenblatt stehen nur Assembler Befehle. Ich weiss auch nicht, wo im 
Flash ich es abspeichern muss, damit ich nichts überschreibe.

Könnte mir bitte jemand ernsthaft helfen.

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn nun genau dein Problem ? Wie sehen denn deine Versuche zu 
dem Thema aus. Du nölst herum ohne auch nur ein bischen Gedankengut zu 
liefern.

In welchem Speicherbereich liegt denn dein Programm ?

Für den F420 siehts so aus und dann ist es nun deine Aufgabe zu prüfen 
ob der Code so auch in Ordnung ist... habe keine Lust das Datenblatt zu 
lesen.
// Byte in den PGM Speicher schreiben

void FLASH_write_byte (uint16_t FLADDR, uint8_t FL_byte)  {
  uint8_t xdata * data FL_write;       // PGM Memory 0x0000 - 0x3DFF (16k)
 
  EA = FALSE;                          // disable Interrupts
  FL_write = (char xdata *) FLADDR;    // Flash pointer
  FLKEY = 0xA5;                        // Key Sequence 1
  FLKEY = 0xF1;                        // Key Sequence 2
  PSCTL |= 0x01;                       // PSWE = 1 => enable "write"

  *FL_write = FL_byte;                 // save byte @ Flash Memory

  PSCTL &= ~0x01;                      // disable "write"
  EA = TRUE;                           // Interrupts freigeben
}

Byte aus dem Speicher lesen machst du dann mal schön selbst.

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.