//***************************************************
// CCS Compiler
// Receptor IR (código RC5 de Philips)
//
// Autor : HEILIG Yves ; Editado por RaDoN
//***************************************************
#include <16F876.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include <lcd_c.c>
#define REC_IR PIN_B0
main()
{
int1 bit;
int i, nbit, error;
byte buffer[2];
lcd_init();
printf(lcd_putc
,"\fReceptor IR:"); // El sensor receptor invierte el código // RC5 del emisor (mando a distancia)
lcd_gotoxy(1,2);
printf(lcd_putc
,"RC5 de PHILIPS\n"); delay_ms(2000);
while(1)
{
buffer[0]=0;
buffer[1]=0;
error=0;
nbit=0;
i=0;
// Sin este trozo de programa va igual
/*
while( i++ != 4)
{ // Test si REC_IR au repos prolongé
if(REC_IR == 0) i=0;
delay_us (889);
}
*/
while(input(REC_IR)==1); // Espera al 1er bit de START (flanco de bajada)
delay_us(444); // Se posiciona en el medio
while((nbit++ != 13) && (error == 0)) // 2º bit de START + 1 bit TOGGLE +
{ // 5 bits DIR + 6 bits COMANDO
// nbit varía de 0 a 12 = 13 bits
delay_us (889); // Mide en el primer semiperiodo del
// bit, para que invierta el código y
// dé el original RC5 del emisor
if(input(REC_IR)==0)
{
delay_us (889);
if(input(REC_IR) != 1) error=1;
bit=0; // Es un 0
}
else
{
delay_us(889);
if (input(REC_IR) != 0) error=1;
bit=1; // Es un 1
}
shift_left(buffer,2,bit); // buffer=buffer[0], 2·8=16bits, bit=0 ó 1
}
if(error)
else
printf(lcd_putc
,"\f%x %x Comando %d\n",buffer
[1],buffer
[0],buffer
[0]); }
}