21 septiembre, 2010

Problemas al usar la flash del pic como EEprom.



     Al intentar usar la fash como memoria EEprom de dos bytes vienen los problemas. El de mayor peso no es de 8 bits. Por eso al leer los bancos de memoria aparece 3FFF en los bytes vacios. Al intentar guardar los textos que se han de enviar: o se usan como un solo byte (se desperdicia un montón de memoria) o empleamos mayúsculas.

     El valor menor que se usa es 0x30 (por si enviamos números) y el máximo es 0x5A (Z). Al programar le restamos 0x30 al valor que vaya al byte de mas peso y al leer le sumamos otros tantos (0x30) Es una forma sencilla de salir del paso. Cuando coincide el espacio en el byte alto (espacio=0x20) hay que colocar el valor 0x30. Al detectarlo, el programa envía el 0x20. Para terminar usaremos 0x0D0A que indicará que la frase ha llegado a su fin.

     Notas para el 16F876. Para otros micros hay que variar la dirección de memoria.
     Para grabar la EEprom interna desde el programa: #rom
          Para grabar en la última línea de la EEprom:
               #rom 0x21F8={0x00,0x00,0x00,0x00,0x00,0x00,0X00,0x00}
     Para grabar en la Flash desde el programa: #rom
          Para grabar en la última linea de la flash:
              #rom 0x1FF8={0x0011,0x0111,0x0211,0x0311,0x0411,0x0511,0x0611,0x0711}
     Para grabar el ID desde el programa: #rom
              #rom 0x2000={0x00,0x01,0x02,0x03}

     Para leer y grabar cualquiera de las memorias usaremos:
       read_program_eeprom(0x1ff8); // leerá la posición de memoria 0x1FF8 que pertenece a la Flash
       write_program_eeprom(0x1ff8,0x1221); // grabará 0x1221 en la posición 0x1FF8 de la Flash
       read_eeprom(0x2100); // lee la posición 0x00 de la EEprom interna del pic.
       write_eeprom(0x2100,0x12);  grabará 0x12 en la posición 0x00 de la EEprom interna.

No hay comentarios:

Publicar un comentario