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