Ayuda I2C en PIC18f4520

Hola soy principiante en esto de los pics y tengo problemas para comunicarme con un Reloj de tiempo real DS1307 con I2C usando el compilador CCS.

El problema es el siguiente, despues de mandar el bit de start de la libreria del CCS, se para la ejecución del programa, como si se levantara una interrupcion pero segun yo estas las tengo desactivadas.

Pongo aqui el codigo por si alguien tiene algun consejo.

Lo ultimo que leo en el display es el 0 por lo que puedo asegurar que el i2c_start() hace algo que detiene la ejecución del programa.

Ya lei el Datasheet pero no encuentro problemas en mi implementación.



//////////////////////////////////////////////////
#include <main.h>

#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

#define clkWrite 0B11010000
#define clkRead 0B11010001

#include <lcd.c>

void confCLK (void);
void leeCLK (void);

unsigned char seg;
unsigned char min;
unsigned char hor;
unsigned char dSem;
unsigned char dMes;
unsigned char mes;
unsigned char ano;

void main()
{

lcd_init();

confCLK();

while(1){
leeCLK();

lcd_putc("\fFecha: ");
lcd_putc(dSem);
lcd_putc("/");
lcd_putc(mes);
lcd_putc("/");
lcd_putc(ano);
lcd_putc("\nHora: ");
lcd_putc(hor);
lcd_putc(":");
lcd_putc(min);
lcd_putc(":");
lcd_putc(hor);
lcd_putc(seg);

delay_ms(500);
}
}

void confCLK (void){

lcd_putc("\f");
i2c_start();
lcd_putc("0");
i2c_write(clkWrite); // direccion del clk con bit de escribir
lcd_putc("1");
i2c_write(0x00); // registro de segundos
lcd_putc("2");
i2c_write(0x06); // escribe segundos
lcd_putc("3");
i2c_write(0x06); // escribe minutos
i2c_write(0x06); // escribe horas
i2c_write(0x06); // escribe dia de la semana
i2c_write(0x06); // escribe dia del mes
i2c_write(0x06); // escribe mes
i2c_write(0x06); // escribe ano
i2c_write(0x90); // configura Square Wave
i2c_stop();
}

void leeCLK (void){
i2c_start();
i2c_write(clkWrite); // direccion del clk con bit de escribir
i2c_write(0x00); // registro de segundos
i2c_start(); // restart
i2c_write(clkRead);
seg=i2c_read();
min=i2c_read();
hor=i2c_read();
dSem=i2c_read();
dMes=i2c_read();
mes=i2c_read();
ano=i2c_read();
i2c_stop();
}
////////////////////////////////////




Gracias de antemano y saludos !!!!
 
Atrás
Arriba