Leer eeprom con pic18 y spi

hola a todos, estoy intentando hacer un datalogger que me almacene temperaturas durante el tiempo que yo quiera y despues pueda descargarlas al pc, para ello utilizo un pic18f2550 y una eeprom 25AA512. ESta memoria funciona por spi, y el problema que tengo es que no se como leerla, es decir, no se donde se almacena el dato ni cuando.
el codigo que iutilizo para leer es este:
Código:
char leer_memoria (int direccion){
	
	char dato;
	
	CS=0;						//HABILITAMOS SPI
	SSPBUF=read; 				//ENVIO EL COMANDO DE CONFIGURACION
	while(PIR1bits.SSPIF==0); 	//ESPERO A QUE SE MANDE
	PIR1bits.SSPIF=0; 			//PONGO EL FLAG MANUALMENTE A 0 DE NUEVO
	SSPBUF=0; 					//ENVIO PARTE ALTA DIRECCIÓN
	while(PIR1bits.SSPIF==0); 	//ESPERO A QUE SE MANDE
	PIR1bits.SSPIF=0; 			//PONGO EL FLAG MANUALMENTE A 0 DE NUEVO
	SSPBUF=direccion; 			//ENVIO PARTE BAJA DIRECCION
	while(PIR1bits.SSPIF==0); 	//ESPERO A QUE SE MANDE
	PIR1bits.SSPIF=0; 
        // AQUÍ LA MEMORIA DEBE MANDARME EL DATO

	while(PIR1bits.SSPIF==0);  <---- AQUI SE QUEDA, NO PONE EL FLAG A 1
	dato=SSPBUF; 				//ALMACENO EL VALOR EN dato
 	PIR1bits.SSPIF=0;
	CS=1;
	return(dato);
	
	
	}

donde almacena el dato el pic cuando lo recibe¿? y que flag me avisa que el dato ya está listo?

gracias por adelantado.

un saludo
 
Hola, proba este codigo, a mi me funciona perfectamente.
dir_h y dir_l son las direccion de memoria parte alta y baja


unsigned char leer_dato_mem(char dir_h,char dir_l)
{
CS_MEMO=0; // Selec. la memoria
WriteSPI(0x03); // Envio comando de lectura
WriteSPI(dir_h); // Envio direccion alta de memoria
WriteSPI(dir_l); // Envio direccion baja de memoria
dato_leido = ReadSPI(); // Dato leido
CS_MEMO=1; // Deselec. la memoria
return (dato_leido); // Retorno con el dato leido
}
 
Atrás
Arriba