Hola que tal, mira te voy a mostrar como fue que yo configure mi modulo de I2C.
#define USE_AND_OR //USED FOR THE OpenI2C1 INSTRUCTION
#include<stdlib.h> //ESTAS LIBRERIAS SON PARA VARIOS USOS EN EL PROGRAMA NO PARA LA CONFIGURACION
#include<string.h> //
#include<stdio.h> //
#define FCY 2000000UL //THIS IS FOR THE USE OF THE DELAY LIBRARY "libpic30.h"
#include<libpic30.h>
#include<i2c.h> //LIBRERIA DEL I2C
unsigned int config1,config2;
void eeprom_ini() //FUNCION QUE INICIALIZA A LA MEMORIA EEPROM
{
/* Turn off I2C modules */
CloseI2C1(); //Disbale I2C1 mdolue if enabled previously
config2 =(37); //CONFIGURE OF THE I2C1BRG REGISTER: 100KHZ
config1 =(I2C_ON | I2C_7BIT_ADD); //CONFIGURE OF THE I2C1CON REGISTER: I2C1 ENABLE, I2CADD IS 7 BIT ADDRESS
OpenI2C1(I2C1CON | config1,config2); //CONFIGURATION OF THE MICROCONTROLLER AS MASTER AND WITH VELOCITY OF 100KHZ (SLEW RATE DISABLED)
}
/*EL SIGUIENTE CODIGO LEERA UN BYTE DE LA MEMORIA*/
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
StartI2C1(); //COMUNICATION START!
while(I2C1CONbits.SEN ); //WAIT TILL START CONDITION IS OVER
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
MasterWriteI2C1(0xA0); //CONTROL BYTE TO WRITE
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
MasterWriteI2C1(addr_alta); //*************** High byte of the eeprom address
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
MasterWriteI2C1(addr_baja); //*************** low byte of the eeprom address
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
RestartI2C1();
while(I2C1CONbits.SEN); //WAIT TILL START CONDITION IS OVER
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
MasterWriteI2C1(0xA1); //CONTROL BYTE TO READ
IdleI2C1(); //WAIT TILL THE COMUNICATION BUS IS FREE
byte1=MasterReadI2C1(); //READ DE BUS
IdleI2C1();
NotAckI2C1(); //AQUI LE DICES A LA MEMORIA QUE YA NO TE MANDE DATOS.
IdleI2C1();
StopI2C1();
Es muy importante la instruccion IdleI2C1(); ya que te ayuda a que no haya colision de datos en el bus I2C.
Esto es un ejemplo asi muy rapido y basico de como seria leer un byte, ojala y te pueda servir