int RecvRC5 (void) 
/* recepteur RC5 bas niveau qui scrute le port relie au capteur et decode le signal
 
	2 bits de start
	1 bit de basculement
	5 bits d adressage (type d appareil, TV, VCR etc...)
	6 bits de commande (touches)
*/
{
	uint32_t t;
	uint8_t niv_entree, niv1, niv2; /* booleens - niveaux des deux demi plateaux constituant un bit */
	uint8_t n; 
	uint16_t data;
 
	t=0;
	niv1=0;
	niv2=0;
	data = 0;
 
	niv_entree=1;
	/* attente pendant la duree d une trame d un front descendant (le signal issu du capteur est a 1 au repos)	*/
 
	const unsigned long int tmax = 14*1778; //24892us  = duree de 1 trame (environ 25ms donc)
 
	while ( (niv_entree == 1) && (t<= tmax) ) 
	{
		if ( (PINC & 0b10000000) > 0) { niv_entree=1; } else  { niv_entree=0; }
		_delay_us(1);
		t++;
	}
/* si le signal parvient trop vite (< 2 bits) on en deduit qu on a pris le train en marche et on saute,
	puisque lecture impossible de la trame en cours	*/
 
	if (t < (889 * 2)) return t;
 
	if (t > tmax) return 2;	/* temps maxi ecoule, pas de signal reçu */
 
	/* ici on se trouve juste un epsilon apres le basculement a 0 du premier bit de start (milieu de bit)	*/
 
	_delay_us(444); /* duree de 1/4 bit */
 
	for (n=1; n<=13; n++)
	{
		_delay_us(889); // duree de 1/2 bit
		/*  ici on se trouve au milieu du niveau du plateau du demi bit */
		if ( (PINC & 0b10000000) == 0) { niv1 = 0; } else { niv1 = 1; }
		_delay_us(889); // duree de 1/2 bit
		/* ici on se trouve au milieu du second plateau du demi bit */	
		if ( (PINC & 0b10000000) == 0) { niv2 = 0; } else { niv2 = 1; }
/* ici on connait les valeurs des deux niveaux, on en deduit le sens de la transition (front montant ou descendant)*/
		if (niv1 == niv2) { return 3; } // erreur de lecture, bit non valide
		if ((niv1 == 1 ) && (niv2 == 0)) { data |= 0b00000001; }
		data = data << 1;
	}
	data = data >> 1; // on rejette le dernier decallage (sans perte de bit puisque largeur data = 16 bits > )
 
	rxCmd_IR 		=  data & 0b0000000000111111;
	rxAdr_IR 		= (data & 0b0000011111000000) >> 6;
	bit_bascul_IR 	= (data & 0b0000100000000000) >> 11;
	return 0;
}