Wert in Flash speichern 8051F020

#1922395
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?FILEURL=Support%20Documents/TechnicalDocs/C8051F02x.pdf&src=DocumentationWebPart

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.
OP (Firma: Leica-Geosystems) #1923130
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.
Gast #1923354
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.
1
// Byte in den PGM Speicher schreiben
2

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

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

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

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.