Schreiben von Daten auf EEPROM oder Flash-Speicher des PIC18F47J53

Ich verwende also den 18F47J53 im Hitech PICC18-PRO-Compiler mit MPLAB-X IDE, und aus irgendeinem Grund wird die Lese-/Schreibfunktion weder für den Flash noch für das EEPROM absolut unterstützt. Ich muss nur eine empfangene Handynummer schreiben, die beim Empfang einer SMS von einem GSM-Modul gelesen wird. Rufen Sie diese Nummer später zum Vergleich auf.

Es scheint, als ob es eine wirklich einfache Prozedur sein sollte, die einen der vordefinierten Befehle wie "eeprom_write (unsigned int address, unsigned char data);" verwendet, obwohl ich nach der Überprüfung, warum ich einen Fehler bekomme, sehe, dass diese Befehle nicht unterstützt werden , und selbst der grundlegende Standardbefehl "EEPROM_WRITE (addr, data)", der kompiliert, macht nichts, da er "nur für die Codeportabilität hinzugefügt" wurde und die Funktionen auskommentiert wurden.

Bedeutet dies, dass dieser Prozessor keinerlei interne Lese-/Schreibfunktionalität unterstützt oder einfach nie definiert wurde.

Ich habe damit begonnen, Lese-/Schreib-/Löschfunktionen manuell (bitweise) zu schreiben, obwohl ohne richtige Adressierung einige schwerwiegende Laufzeitfehler auftreten könnten, insbesondere aufgrund der Tatsache, dass die Löschfunktion nur in Blöcken von 1024 Bytes arbeiten kann.

Die Write-Funktion sieht in etwa so aus:

while(WR != 0){;}   // wait till EEPROM idle

    /* Load Table pointer Reg with Write to address (previously block erased) */
    TBLPTRU = Code_Addr_Upper;  // Load TBLPTR with Base Addresses?
    TBLPTRH = Code_Addr_High;   // Load TBLPTR with Base Addresses?
    TBLPTRL = Code_Addr_Low;    // Must be EVEN Addresses?

do{
       GIE = 0;                 /* disable interrupts */
    }while(GIE != 0);           /* make sure it worked */

WREN=1;                     /* enable writes */
EECON2=0x55;                // required sequence for EEPROM update
EECON2=0xAA;

do{
       WR = 1;                  /* disable interrupts */
    }while(WR != 1);            /* make sure it worked */

    WREN=0;                     /* Disable writes */
GIE=1;                      // re-enable interrupts

die 2 Bytes gleichzeitig empfängt, da das Datenblatt angibt, dass die kleinste Schreibgröße jeweils 1 Wort beträgt.

Hat jemand einen Weg gefunden, dies zu umgehen? Es gibt sicher einen einfacheren Weg.

Jede Hilfe wäre sehr willkommen.

Antworten (1)

Der PIC18F47J53 hat keinen EEPROM-Speicher.

Was die Flash-Programmierung betrifft, glaube ich nicht, dass es einen einfacheren Weg gibt, darauf zu schreiben, als den, den Sie versucht haben. Sie müssen nur darauf achten, keinen bereits belegten Speicherabschnitt zu schreiben/löschen.