You are on page 1of 4

static void ler_eeprom(void)

{
int eeprom = 0b10100110;
int eepromler = 0b10100111;
int ler = 0;
int total = 0;
char valor [6];
int readeeprom = 0;
int readeepromh = 0;
int readeeproml = 0;
int i = 0;
int j = 0;
int a = 0;
int b = 0;
int apresetvalorh = 0;
int apresetvalorl = 0;

readeeprom = localeeprom;

for(j = 0 ; j<au ; j++)


{
readeeprom = readeeprom - 1;
readeepromh = (readeeprom & 0xFF00)>>8;
readeeproml = (readeeprom & 0x00FF);

/* garante inactividade no barramento */


IdleI2C();
/* emite uma condicao de START no barramento I2C */
StartI2C();
/* aguarda terminacao da condicao de START */
while (SSPCON2bits.SEN);
/* endereca o dispositivo no barramento I2C, para escrita */
WriteI2C(eeprom);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (mais
significativo) */
WriteI2C(readeepromh);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (menos
significativo)*/
WriteI2C(readeeproml);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* emite uma condicao de REPEATED START no barramento I2C */
RestartI2C();
/* aguarda terminacao da condicao de REPEATED START */
while (SSPCON2bits.RSEN);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* Envia o valor para a eeprom */
WriteI2C(eepromler);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* comuta para modo de recepcao */
SSPCON2bits.RCEN = 1;
/* aguarda recepcao dos dados */
while (!DataRdyI2C());
/* Envia o valor para a eeprom */
ler = ReadI2C();
/* verifica terminacao da sequ�ncia de recepcao */
while (SSPCON2bits.RCEN);
/* aguarda recepcao de acknowledge do sensor */
NotAckI2C();
/* aguarda terminacao da condicao de NOT ACKNOWLEDGE */
while ( SSPCON2bits.ACKEN );
/* Emite uma condicao de STOP no barramento I2C */
StopI2C();
/* aguarda terminacao da condicao de STOP */
while ( SSPCON2bits.PEN );
/* garante inactividade no barramento */
IdleI2C();

i++;
a++;
b++;

if(a == 2)
{
apresetvalorh = ler <<8;
total = apresetvalorh + apresetvalorl;
}

if(a == 1)
{
apresetvalorl = ler;
}

if(i == 2)
{
if(b == 4)
{
putrsUSART("Valor em Lux de Referencia -> ");
sprintf(valor,"%03d",total);
putsUSART(valor);
putrsUSART("\r");
b = 0;
}
else
if(b == 2)
{
putrsUSART("Valor em Lux Actual -> ");
sprintf(valor,"%03d",total);
putsUSART(valor);
putrsUSART("\r" );
}

a = 0;
i = 0;
total = 0;
}
}
}

//----------------------------------------------------FUNCAO GUARDA VALORES


EEPROM-------------------------------------------------------
//Guarda os valores de referencia introduzidos pelo utilizador
static void guarda_eeprom_referencia(void)
{
int eeprom = 0b10100110;

valorluxingh = (intensidade & 0xFF00)>>8;


valorluxingl = (intensidade & 0x00FF);

/* garante inactividade no barramento */


IdleI2C();
/* emite uma condicao de START no barramento I2C */
StartI2C();
/* aguarda terminacao da condicao de START */
while (SSPCON2bits.SEN);
/* endereca o dispositivo no barramento I2C, para escrita */
WriteI2C(eeprom);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (mais significativo) */
WriteI2C(localeepromh);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (menos significativo)*/
WriteI2C(localeeproml);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* Envia o valor para a eeprom */
WriteI2C(valorluxingh);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* Envia o valor para a eeprom */
WriteI2C(valorluxingl);
/* aguarda recepcao de acknowledge do sensor */
while (SSPCON2bits.ACKSTAT);
/* Emite uma condicao de STOP no barramento I2C */
StopI2C();
/* aguarda terminacao da condicao de STOP */
while ( SSPCON2bits.PEN );
/* garante inactividade no barramento */
IdleI2C();

Delay1KTCYx(50);

localeeprom = localeeprom + 2;

localeepromh = (localeeprom & 0xFF00)>>8;


localeeproml = (localeeprom & 0x00FF);

if(localeeprom == 124)
{
localeeprom = 0;
}
}

//Guarda os valores actuais lidos pela LDR


static void guarda_eeprom_actual(void)
{
int eeprom = 0b10100110;
valorluxh = (lux & 0xFF00)>>8;
valorluxl = (lux & 0x00FF);

/* garante inactividade no barramento */


IdleI2C();
/* emite uma condicao de START no barramento I2C */
StartI2C();
/* aguarda terminacao da condicao de START */
while (SSPCON2bits.SEN);
/* endereca o dispositivo no barramento I2C, para escrita */
WriteI2C(eeprom);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (mais significativo) */
WriteI2C(localeepromh);
/* aguarda recepcao de acknowledge do eeprom */
while (SSPCON2bits.ACKSTAT);
/* selecciona o local onde quer armazenar na eeprom (menos significativo)*/
WriteI2C(localeeproml);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* Envia o valor para a eeprom */
WriteI2C(valorluxh);
/* aguarda recepcao de acknowledge da eeprom */
while (SSPCON2bits.ACKSTAT);
/* Envia o valor para a eeprom */
WriteI2C(valorluxl);
/* aguarda recepcao de acknowledge do sensor */
while (SSPCON2bits.ACKSTAT);
/* Emite uma condicao de STOP no barramento I2C */
StopI2C();
/* aguarda terminacao da condicao de STOP */
while ( SSPCON2bits.PEN );
/* garante inactividade no barramento */
IdleI2C();

Delay1KTCYx(50);

localeeprom = localeeprom + 2;

localeepromh = (localeeprom & 0xFF00)>>8;


localeeproml = (localeeprom & 0x00FF);

if(localeeprom == 124)
{
localeeprom = 0;
}
}

You might also like