Hola amigos de todopic, actualmente me encuentro haciendo el control de una antena por medio de un 16F877a, un encoder de 2 pulsos en cuadratura como potenciometro digital y un potenciometro de retroalimentación, no he tenido problemas hasta ahora, tengo implementados en mi programa la interrupción por cambio de edo. en RB para el encoder, el timer0 para hacer la rutina antirebotes de mis botones, el timer1 para refrescar un LCD y medir con el ADC el encoder, y quiero usar el timer2 para diferenciar entre presionar un boton menos de 500ms y más de 500ms, con lo que tendría 2 funciones en un solo botón, al parecer mi programa funciona bien, excepto por una cuestión:
Cuando presiono el botón se habilita el timer2, y le cargo el valor necesario para medir los 500ms, pero resulta que cada que suelto el botón, el timer se queda con el valor precargado en el que iba, y aunque utilice la instrucción set_timer2(x); no consigo que me cuente desde el principio, es decir, si suelto el botón a los 450ms y lo vuelvo a presionar, en lugar de contar de nuevo desde 0, me cuenta desde los 450ms; ya probe desabilitando el timer2, volviendolo a habilitar, deshabilitando y habilitando la interrupción, precargando antes y despues de habilitar el timer el valor, etc, etc, etc, y no logro saber que sucede, este es mi código actual:
if(boton_b_state1==0&&boton_b_state2==1) // Si se presiona el botón
{
setup_timer_2(T2_DIV_BY_16,223,7);
set_timer2(223);
}
if(boton_b_state1==1&&boton_b_state2==0) // Si se suelta el botón
{
setup_timer_2(T2_DISABLED,0,7);
}
También probé así:
if(boton_b_state1==0&&boton_b_state2==1)
{
enable_interrupts(INT_TIMER2);
set_timer2(223);
}
if(boton_b_state1==1&&boton_b_state2==0)
{
disable interrupts(INT_TIMER2);
}
Y algunas combinaciones de las 2, pero no logro reiniciar el valor de timer2 a cualquier valor, siempre se queda en el último.
Cabe señalar que la interrupción en si funciona bien, el problema es solo la precarga del timer2; alguien me podría ayudar a entender que estoy haciendo mal?.
Muchas gracias por su ayuda.