Hola que tal ya solucione el problema de escoger una opcion, alguien me podria decir ¿cuantas veces un control remoto manda un codigo para alguna accion? dejo el codigo espero que le sirva a alguien.laidea principalla obtube de esta pagina
http://electronicayciencia.blogspot.mx/2010/05/transmisor-protocolo-nec-con-pic.html#include <12F683.H>
#fuses INTRC, NOWDT, MCLR, IESO, PROTECT, PUT, NOBROWNOUT, FCMEN
#use delay( clock = 8000000 )
#use standard_io( A )
#define CODIGO 0xA1 //Codigo 1
#define APAGADO 0xA8 //Codigo de Apagado.
int lim1, lim2;
void Rutime( int limt ) //Rutina de tiempo.
{
int Cont = 0;
while( Cont < limt )
{
set_timer0( 100 ); //Carga el timer para 5ms.
while( get_timer0() ); //Se espera aqui hasta que el timer0 valga 0 osea que se ha desbordado y ha pasado 10ms.
Cont++; //Cada 5ms se incrementa contador.
}
Cont = 0; //Pasando los 5ms en alto pasamos el contador a 0.
}
void tardio( void )
{
int ttard = 100;
set_pwm1_duty( 0 );
Rutime( ttard );
}
void manco1( int cod, int l1,int l2 )
{
int s = 0;
tardio();
while( s < 8 ) //genera el codigo
{
#bit uno = cod.7
if( uno )
{
set_pwm1_duty( 25 ); //Modula a 38KHz
Rutime( l1 );
}
else
{
set_pwm1_duty( 0 ); //PWM a cero
Rutime( l2 );
}
cod <<= 1;
s++;
}
tardio();
}
void main( void )
{
int menu = 0, vec = 0; //Variable del menu y variable de las veces que se repetira el codigo.
//setup_oscillator( OSC_8MHZ );
setup_wdt( WDT_OFF );
setup_adc( ADC_OFF ); //Desactiva el ADC.
setup_adc_ports( NO_ANALOGS ); //No puertos analogos
setup_timer_2( T2_DIV_BY_1, 51, 1 ); //Prescaler de 1, PR2 = 51.
setup_ccp1( CCP_PWM ); //Activa el PWM
set_pwm1_duty( 0 ); //Desactiva el modulo PWM. si se lo pone 0 al ciclo util es como si se desactivara.
set_timer0( 100 ); //Carga del Timer0.
setup_timer_0( RTCC_INTERNAL | RTCC_DIV_64 ); //Prescaler de 64.
while( 1 )
{
if( INPUT( PIN_A0 ) == 0 )
{
menu++;
delay_ms( 300 );
if( menu == 4 )
{
menu = 0;
}
switch( menu )
{
case 0: lim1 = 1, lim2 = 1; //Manda el codigo para la primera opcion
while( vec < 3 ) //la duracion de los '1' es de 20ms la de los '0' es 10ms.
{
manco1( APAGADO, lim1, lim2 );
vec++;
}
vec = 0;
break;
case 1: lim1 = 4, lim2 = 2; //Manda el codigo para la primera opcion
while( vec < 3 ) //la duracion de los '1' es de 20ms la de los '0' es 10ms.
{
manco1( CODIGO, lim1, lim2 );
vec++;
}
vec = 0;
break;
case 2: lim1 = 8, lim2 = 2; //Manda el codigo para la segunda opcion
while( vec < 3 ) //la duracion de los '1' es de 40ms la de los '0' es 10ms.
{
manco1( CODIGO, lim1, lim2 );
vec++;
}
vec = 0;
break;
case 3: lim1 = 12, lim2 = 2; //Manda el codigo para la segunda opcion
while( vec < 3 ) //la duracion de los '1' es de 60ms la de los '0' es 10ms.
{
manco1( CODIGO, lim1, lim2 );
vec++;
}
vec = 0;
break;
}
}
}
}