hola este programa que hice no me lee bien la frecuencias del protocolo NEC y por eso cada vez que oprimo una misma tecla del control, me muestra numeros diferentes por el I2C. no se si es que tenga que usar un receptor infrarrojo (estoy usando el SFH 5110-40 de 40kHz, este se encuntra en RB0) distinto o si es problema del programa. si alguin me pudira ayudar se lo agradeceria. gracias.
#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();
}
}
}