Ajuda I2C

Pessoal do C e MORAL,tenho um colega que não esta conseguindo no 16F628 se comunicar com uma memo 24C64 com uma rotina,que segundo ele,funciona na empresa com um PIC de 40 pinos.
Como sabem não programa µc em linguagem C mas sei que muitos aqui podem ajudar.
A rotina é essa:
Segundo ele não funcionou,veja se estou errado mas o endereçamento não seria:
e
Segundo ele estou errado e a rotina funciona em um PIC 40.
quem puder ajudar agradeço pois posso estar enganado tambem.
Aqui esta a biblioteca que ele fez:
Como sabem não programa µc em linguagem C mas sei que muitos aqui podem ajudar.
A rotina é essa:
- Código: Selecionar todos
#include <16f628a.h>
#device ADC=10
#use delay (clock=8000000)
#define use_portb_lcd true
//#include <cuscostdio.h>
#use i2c(MASTER, SDA=PIN_B4, SCL=PIN_B3)//habilita comunicação i2c
#use RS232(baud=9600, parity=E, bits=8, xmit=PIN_B2,rcv=PIN_B1)//habilita comunicação serial RS-232
#define EEPROM_WRITE_ADDRESS 0xA4
#define EEPROM_READ_ADDRESS 0xA5
void main()
{
int num, hora, mim, seg, dia, mes, ano;
long j = 0;
int16 add = 0;
printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");
while (1)
{
i2c_start();
i2c_write(EEPROM_WRITE_ADDRESS);
i2c_write(add >> 8);
i2c_write(add);
i2c_start();
i2c_write(EEPROM_READ_ADDRESS);
num = i2c_read();
hora = i2c_read();
mim = i2c_read();
seg = i2c_read();
dia = i2c_read();
mes = i2c_read();
ano = i2c_read(0);
i2c_stop();
j++;
if (((j % 4) == 0) && (j != 0))
{
add = 32 * (j / 4);
}
else
{
add += 7;
}
if ((num == 0xFF) && (hora == 0xFF))
{
add = 0;
j = 0;
}
if ((add != 0) && (j != 0))
{
printf ("\n\r%d - hora: %02d: %02d: %02d - data: %02d/ %02d/ %02d", num, hora, mim, seg, dia, mes, ano);
}
else
{
printf ("\n\rMECTRON AUTOMACAO INDUSTRIAL\n\rwww.mectron.ind.br");
}
}
}
Segundo ele não funcionou,veja se estou errado mas o endereçamento não seria:
- Código: Selecionar todos
#define EEPROM_WRITE_ADDRESS 0xA0
e
- Código: Selecionar todos
#define EEPROM_READ_ADDRESS 0xA1
Segundo ele estou errado e a rotina funciona em um PIC 40.
quem puder ajudar agradeço pois posso estar enganado tambem.
Aqui esta a biblioteca que ele fez:
- Código: Selecionar todos
#define SCL PIN_B3
#define SDA PIN_B4
void i2cWrite(int8 cmd)
{
int8 i;
int8 send;
short ack;
send = cmd;
do
{
for(i=0;i<=7;++i)
{
output_bit(SDA, shift_right(&send,1,0) );
output_high(SCL);
output_low(SCL);
}
output_high(SCL);
ack = input(SDA);
output_low(SCL);
}while (ack == 0);
}
int8 i2cRead(short cmd)
{
int8 i,data;
for(i=0;i<=7;++i) {
shift_right(&data,1,input(SDA));
output_high(SCL);
delay_us(2);
output_low(SCL);
delay_us(2);
}
i2cWrite(cmd);
return(data);
}
void i2cStart()
{
output_high(SCL);
output_low(SDA);
output_low(SCL);
}
void i2cStop()
{
output_low(SDA);
output_high(SCL);
output_high(SDA);
output_float(SCL);
output_float(SDA);
}