TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: marcriaturo en 14 de Noviembre de 2006, 23:31:34
-
Hola amigos del foro, necesito ayuda acerca de como guardar un dato tipo long (16 bits), en la memoria externa (24LC256), y luego poder recuperarlo. Existe alguna libreria que permita hacer esto??? Especificamente deseo guardar una direccion (16 bits). Muchas gracias :-/
-
No hace mucho hemos escrito sobre este tema aquí en el foro ... prueba a utilizar el buscador del mismo a ver qué encuentras ... si logro encontrarlo te lo posteo de nuevo.
-
Gracias Red-Pic, te cuento ya encontre la solucion a mi problema!!!!!!!, buscando por ahi encontre funciones para grabar long int a la memoria interna del pic , y lo modifique un poco, por lo menos en proteus funciona bien, falta armar bien el programa y probarlo en el pic y listo. Les adjunto la solucion, por si alguien se interesa:
void write_eeprom_16bits(long int address, long val){
int pLow, pHigh;
pLow = val;
pHigh = val>>8;
write_ext_eeprom(address,pHigh);
++address;
write_ext_eeprom(address,plow);
}
long read_eeprom_16bits(long int address){
int pLow, pHigh;
long result;
pHigh = read_ext_eeprom(address);
++address;
pLow = read_ext_eeprom(address);
result=(pHigh<<8);
result+=pLow;
return result;
} 8)
-
Es que el buscador hace milagros... :mrgreen:
Suerte!!! ;)
-
Desde luego amigo :mrgreen: . Llevo una temporadita que casi no posteo nada ya que lo que toy haciendo es jartarme de leer todos los post mas antiguos y los nuevos claro y para ello nada mejor que el buscador. :P
-
Bueno, aca te dejo mas ayuda, si usas el compilador de CCS hay una forma explicada en el manual, y ademas una libreria, que tiene la siguiente funcion, solo incluye la libreria external_eeprom.c y llamala, ademas hay muchas cosas mas 32 bits, 1 bit, vale la pena.
// Purpose: Write a 16 bit number to external eeprom
// Inputs: 1) An eeprom address
// 2) The 16 bit number to write to external eeprom
// Outputs: None
void write_int16_ext_eeprom(EEPROM_ADDRESS address, int16 data)
{
int8 i;
for(i = 0; i < 2; ++i)
{
write_ext_eeprom(address + i, *(&data + i));
}
}
// Purpose: Read a 16 bit number from external eeprom
// Inputs: An eeprom address
// Outputs: The 16 bit number read from external eeprom
int16 read_int16_ext_eeprom(EEPROM_ADDRESS address)
{
int8 i;
int16 data;
for(i = 0; i < 2; ++i)
{
*(&data + i) = read_ext_eeprom(address + i);
}
return(data);
}