uC AT89S52 y EEPROM con KEIL

Hola a todos, estoy tratando de hacer un programa para leer y escribir en una memoria eemprom con el micro controlador at89s52, trabajo en el compilador keil, el cual no tiene niguna cabecera para transmitir datos mediante el protocolo i2c, por lo que lo estoy escribiendo yo.
Siguiendo los pasos de informacion encontrada en internet y en su hoja de datos, logro inicializar la comunicacion y grabar un dato. Creo saber que esto esta funcionando porque en cada paso la memoria nos da un bit de reconocimiento y por medio de leds me doy cuenta que funciona. Pero a la hora de leer, leo y a traves de otros leds veo el contenido de un byte y no me da lo que supeustamente programo bien antes. Directamente no prende ningun led. a continuacion les escribo el codigo de la funcion leer solamente, que es donde creo que esta el error.

void read(void){
int I;
char byte[8];
clock=0;
for (I=0;I<8;I++){
retardo(1); //es una funcion que genera retardo, se le da el argumento en mili segundos.
clock=1; //esta conectado a la linea SCL
byte =dato; //dato esta conectado a la linea SDA
retardo(1);
clock=0;
}
dato=0; //envio el bit de reconocimiento a la memoria
clock=1;
retardo(1);
clock=0;

P2_3 = byte[7]; // y repito esta instruccion para los restantes bits del byte recibido.
}


Desde ya mcuhas gracias. Saludos!
 
byte=dato : Está mal, debe ser ser al revés: dato=byte. No conozco el protocolo I2C, por lo que no sé si el dato puesto en SDA viaja con el pulso de clock alto o bajo o con algún flanco de subida o bajada.
Saludos.
 
Hago otra consulta, cuando leo desde la memoria, guardo los datos en un vector, yo necesito guardar el dato recibido en un byte. Como puedo en C pasar de un vector de 8 bits a un char (8 bits desde ya) ?? Saludos!
 
Atrás
Arriba