Supongo que esto que te voy a poner ya lo habrás probado, pero por si acaso te lo pongo:
#INCLUDE <18F2550.h>
#FUSES XTPLL //Cristal mayor de 4Mhz y usando el PLL interno del pic para modificar aumentarlo/disminuirlo.
#FUSES NOWDT
#FUSES NOPROTECT //No proteger el PIC contra lectura.
#FUSES PUT //El Power Up Timer(PUT) espera unos nilisegundos antes de iniciarse el PIC.
#FUSES NOBROWNOUT //No uso reset automatico cuando se encuentra alguna baja tension especificada.
#FUSES NOLVP //No usare programacion en bajo voltaje.
#FUSES PLL1 //Se divide entre 1 el oscilador(4Mhz) a la entrada del divisor porque el sistema necesita estos 4Mhz para generar 48Mhz para el usb.
#FUSES CPUDIV1 //Esto es para la velocidad conque el PIC trabajara. Esta dividido entre 1, entonces trabajara tambien a 48Mhz.
#USE Delay (Clock = 48 000 000)
//#USE RS232 (Baud = 115200, xmit = Pin_C6, rcv = Pin_C7)
#USE RS232 (Baud = 9600, xmit = Pin_C6, rcv = Pin_C7) //Pongo esta porque el PROTEUS no tiene 115200 baud
//¡¡¡Sin el Force_HW va bien!!!
#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = RTC) //1º el RELOJ, 2º la EEPROM
#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Fast = 400000, Stream = ExtEEprom)
/*
//¡¡¡Sin el Force_HW va bien!!!
#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Fast = 400000, Stream = ExtEEprom) //1º la EEPROM, 2º el RELOJ
#USE I2C (Master, SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = RTC)
*/
/*
//¡¡¡Con el Force_HW va mal!!! --> La EEPROM solo lee la primera posición
#USE I2C (Master, Force_HW,SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = RTC) //1º el RELOJ, 2º la EEPROM
#USE I2C (Master, Force_HW,SDA = Pin_B0, SCL = Pin_B1, Fast = 400000, Stream = ExtEEprom)
*/
/*
//¡¡¡Con el Force_HW va mal!!! --> El reloj no va bien
#USE I2C (Master, Force_HW,SDA = Pin_B0, SCL = Pin_B1, Fast = 400000, Stream = ExtEEprom) //1º la EEPROM, 2º el RELOJ
#USE I2C (Master, Force_HW,SDA = Pin_B0, SCL = Pin_B1, Slow, Stream = RTC)
*/
#include "ds1307_modificado.c" //Funciones para el uso del Real Time Clock del integrado DS1307.
#include "24512_modificado.c" //Funciones para el uso de la memoria volatil serial eeprom externa 24LC256.
void main(void)
{
int8 DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA, DS1307HoraA, DS1307MinutoA, DS1307SegundoA;
int8 Buffer[256];
int16 cont, i;
init_ext_eeprom(); //Inicializo la EEprom externa.
ds1307_init(); //inicializamos el RTC (DS1307).
ds1307_set_date_time(17, 6, 8, 4, 9, 00, 00); //día-més-año-día semana-horas-minutos-segundos
cont = 0;
delay_ms(300);
while (TRUE)
{
delay_ms(50);
ds1307_get_date(DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA);
ds1307_get_time(DS1307HoraA, DS1307MinutoA, DS1307SegundoA);
printf("\n\r%02u/%02u/%02u %u\n\r%02u:%02u:%02u", DS1307DiaA, DS1307MesA, DS1307AnoA, DS1307DSA, DS1307HoraA, DS1307MinutoA, DS1307SegundoA);
delay_ms(1000);
printf(" Direcion[%Lu] -> %03u", cont, read_ext_eeprom(cont));
putc('\r');
cont++;
printf("\r\n\nEmpezando lectura secuencial de 24LC512...");
read_ext_eeprom_seq(Buffer, 0, 255);
printf(" Terminada:\r\n");
for (i = 0; i <= 255; i++)
printf("%03u ", Buffer[i]);
/*
for (i = 0; i <= 255; i++)
{
Buffer[i]=read_ext_eeprom(i); //Otra forma
printf("%03u ", Buffer[i]);
}
*/
}
}