#define Ack	1
#define NotAck 	0

//Definition des bits sur le CPU
sbit  IntLpc28	 = P1 ^ 0;	//INT du LPC28
sbit  SDA 	 = P1 ^ 1;
sbit  SCL	 = P1 ^ 2;


/**************************I2C Manuel***************************************/
//Def des buffers
octet data i2c_mtd[10] ; /* tampon 10 octets à transmettre  en master trans*/ 
octet data i2c_mrd[10] ; /* tampon 10 octets à recevoir  en master rec */

//Routines de base pour l'I2C en assembleur
//Voir I2C.A51
extern  bit EmisI2c(octet OctI2c);	//_EmisI2c(OctetAEnvoyer) retourne C=1 si octet envoyé est acquitté
//Si pas ack,EmisI2c(octet OctI2c) génère automatiquement le stop
extern  octet RecepI2c(octet Acqt); //OctetAttendu=RecepI2c(00 ou 01) ,Acqt=00 pas d'acquit,Acqt=01 acquit
extern void StopI2c(); //Stop I2C
extern void StartI2c();//Start I2C
extern void Tempo5MicroS();//tempo 5 µS


/********************************************************************************/
/*Lecture de 2 octet du LPC28 en manuel retounés dans i2c_mrd[0]à i2c_mrd[1] a partir de l'adresse add*/
/*avec add= 41h à 4Fh*/
/********************************************************************************/
bit LecLPC28(octet add)
{
bit ok;



StartI2c();
if(EmisI2c(add))    //Ecriture de l'adresse avec bit0=1 pour read=1
	{ok=1;
     	i2c_mrd[0]=RecepI2c(Ack);//Rec et ack du 1° octet
	i2c_mrd[1]=RecepI2c(NotAck);//Rec sans Ack du 2° octet	
        StopI2c();
	}



else    {        StopI2c();
	ok=0;
         }
return(ok);

}

main (void)	//Attente reception trame RC5,lecture quand INT=0

{
char data SousAdd;
char data Commande;
while (IntLpc28);	//Attente IntLpc28=0
{if(LecLPC28(0x41))	//0x41->A0,A1,A2=0
	 {SousAdd=i2c_mrd[0];
	  Commande=i2c_mrd[1];
	}
}
}

