Escribiendo datos en la memoria EEPROM o Flash del PIC18F47J53

2

Por lo tanto, estoy usando el 18F47J53 en el compilador Hitech PICC18-PRO con MPLAB-X IDE, y por alguna razón no hay absolutamente ningún soporte para la función de lectura / escritura para el flash o la EEPROM. Todo lo que necesito hacer es escribir un número de teléfono móvil recibido que se lee desde un módulo GSM cuando se recibe un SMS. Luego, más adelante, recupere este número para comparar.

Parece que debería ser un procedimiento realmente simple que utiliza uno de los comandos predefinidos como "eeprom_write (dirección int sin firmar, datos de caracteres sin firmar)"; aunque después de comprobar por qué recibo un error, veo que estos comandos no son compatibles, e incluso el comando estándar básico "EEPROM_WRITE (addr, datos)" que se compila, no hace nada como lo fue "Agregado solo para portabilidad de código", y las funciones han sido comentadas.

Esto significa que este procesador no admite ningún tipo de funcionalidad de lectura / escritura interna, o simplemente nunca se ha definido.

Empecé a escribir manualmente (en modo bit) las funciones de lectura / escritura / borrado para esto, aunque sin el direccionamiento adecuado podría causar algunos errores importantes en el tiempo de ejecución, especialmente debido al hecho de que la función de borrado solo puede funcionar en bloques de 1024 bytes .

La función de escritura se ve así:

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

que recibe 2 bytes a la vez, ya que la hoja de datos indica que el tamaño de escritura más pequeño es 1 palabra a la vez.

¿Alguien ha encontrado una manera de evitar esto? Seguramente hay una forma más sencilla.

Cualquier ayuda sería muy apreciada.

    
pregunta Antz411

1 respuesta

1

El PIC18F47J53 no tiene memoria EEPROM.

En cuanto a la programación de Flash, no creo que haya una forma más sencilla de escribir que la que probaste. Solo debes tener cuidado de no escribir / borrar una sección de memoria ya usada.

    
respondido por el m.Alin

Lea otras preguntas en las etiquetas