hola !! e estado investigando todo hacerk del protocolo nec y gracias a este foro encontre es codigo pero no se q pines maneja la recepcion del infrarrojo si alguien sabe leer bn este codigo y decirme quedare muy agradecido
aqui esta el codigo
#INCLUDE <16F877A.h>
#INCLUDE <MATH.H>
#USE delay(clock=20000000)
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
#USE I2C(master,SDA=PIN_C4,SCL=PIN_C3,slow)
#BYTE PORT_B= 6
#BYTE PORT_C= 7
LONG TT,T,TTI;
INT1 START=0,DAT[32],HAYDAT;
INT CDAT,I,CONTROL,CONT,AUX;
VOID LIMPIAR(VOID)
{
FOR(I=0;I<32;I++)
{
DAT=0;
}
CDAT=0;
}
#INT_EXT
VOID LEER()
{
TT = GET_TIMER1();
T = TT-TTI;
TTI= TT;
IF(START==1)
{
IF(T>1375 && T<1420)
{
DAT[CDAT]=1;
CDAT++;
}
IF(T>686 && T<708)
{
DAT[CDAT]=0;
CDAT++;
}
IF(CDAT==32)
{
HAYDAT=1;
}
}
IF(T>8375 && T<8500)
{
START=1;
LIMPIAR();
}
}
VOID CONVERTIR()
{
FOR(CONT=16;CONT<=23;CONT++)
{
IF(DAT[CONT]==1)
{
AUX=POW(2,CONT-16);
CONTROL=AUX+CONTROL;
}
}
}
VOID MAIN()
{
SET_TRIS_B(0B11111111);
SET_TRIS_C(0B11100111);
EXT_INT_EDGE(H_TO_L); // Configuro captura de 1er flanco de subida
ENABLE_INTERRUPTS(INT_EXT); // Habilito las interrupciones necesarias
ENABLE_INTERRUPTS(GLOBAL);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
START=0;
HAYDAT=0;
LIMPIAR();
WHILE(TRUE)
{
IF(HAYDAT==1)
{
HAYDAT=0;
CONVERTIR();
I2C_START();
I2C_WRITE(0X40);
I2C_WRITE(CONTROL);
I2C_STOP();
}
}
}
aqui esta el codigo
#INCLUDE <16F877A.h>
#INCLUDE <MATH.H>
#USE delay(clock=20000000)
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
#USE I2C(master,SDA=PIN_C4,SCL=PIN_C3,slow)
#BYTE PORT_B= 6
#BYTE PORT_C= 7
LONG TT,T,TTI;
INT1 START=0,DAT[32],HAYDAT;
INT CDAT,I,CONTROL,CONT,AUX;
VOID LIMPIAR(VOID)
{
FOR(I=0;I<32;I++)
{
DAT=0;
}
CDAT=0;
}
#INT_EXT
VOID LEER()
{
TT = GET_TIMER1();
T = TT-TTI;
TTI= TT;
IF(START==1)
{
IF(T>1375 && T<1420)
{
DAT[CDAT]=1;
CDAT++;
}
IF(T>686 && T<708)
{
DAT[CDAT]=0;
CDAT++;
}
IF(CDAT==32)
{
HAYDAT=1;
}
}
IF(T>8375 && T<8500)
{
START=1;
LIMPIAR();
}
}
VOID CONVERTIR()
{
FOR(CONT=16;CONT<=23;CONT++)
{
IF(DAT[CONT]==1)
{
AUX=POW(2,CONT-16);
CONTROL=AUX+CONTROL;
}
}
}
VOID MAIN()
{
SET_TRIS_B(0B11111111);
SET_TRIS_C(0B11100111);
EXT_INT_EDGE(H_TO_L); // Configuro captura de 1er flanco de subida
ENABLE_INTERRUPTS(INT_EXT); // Habilito las interrupciones necesarias
ENABLE_INTERRUPTS(GLOBAL);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
START=0;
HAYDAT=0;
LIMPIAR();
WHILE(TRUE)
{
IF(HAYDAT==1)
{
HAYDAT=0;
CONVERTIR();
I2C_START();
I2C_WRITE(0X40);
I2C_WRITE(CONTROL);
I2C_STOP();
}
}
}