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
Nein!! ICh weiss nicht wie ich das machen muss, sonst häte ich doch nicht gefragt. BItte sag mir wie das geht. Gruss Matthias
Eine Frage habe ich nicht gefunden. Aber ein Blick ins Datenblatt zeigt, wie es geht. Lesen mußt Du schon selber.
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.
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?FILEURL=Support%20Documents/TechnicalDocs/C8051F02x.pdf&src=DocumentationWebPart
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.
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
Seite 139 steht doch alles sehr auführlich! ... ein bisschen arbeit musst du dir schon machen!
> 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.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.