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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren