interrupcion por timer y USART...

Un saludo...

Estoy tratando de diseniar un sistema que de indique (con un led) si en un rango de un segundo se recibieron tres datos. Es decir una vez que se detecte el primer dato, se tiene que correr una temporizacion de un segundo, y si dentro de esa temporizacion caen otros dos datos se indicara encendiendo un led).
El problema es que no se como hacerlo, por que el USART lo estoy manejando por interrupcion (es la unica manera que se hacerlo) y si corro el timer dentro de la temporizacion, no se detectara la entrada del segundo dato por que se esta trabajando en la interrupcion que me genero el USART con el primero dato, es algo enredeso.
En cambio si detecto interrupcion, tomo el dato y fuera de la interrupcion corro el timer para dejar habilitada la posibilidad de detectar el segundo dato entrante, al momento de generarse la interrupcion se detendra la cuenta del temporizador, por lo que la temporizacion sera incorrecta.
Alguien ha hecho algo parecido ? Se trata de un sistema contador de votos donde se tienen 5 jueces, si tres de ellos coninciden con un punto dentro de un rango de segundo, se contabiliza un voto.

gracia por su tiempo..
 
la USART pues si la puedes manejar por interrupcion, pero el timer no necesitas, es decir, puedes hacer que cuando detectes el primer voto inicies el timer cuando te aparece la interrupcion del USART, luego continuas con el programa, cuando detectas la proxima interrupcion es porque tienes el siguiente voto y en ese momento ves que cuenta lleva el timer en ves de iniciarlo, y lo mismo con el tercer voto.

El timer debes configurarlo para que la maxima cuenta no supere por mucho al segundo asi no tienes mucho error.
 
Gracias por tu respuesta willynovi, es decir me dices que realice una interrupcion un poco menor al segundo para compensar las perdidas de tiempo por atencion a la interrupcion ? De ser asi unos 900ms estaria bien no ?
 
mmmm, no. te decia que manejes el timer como contador, es decir, que no le habilites la interrupcion.
Si no pon parte del codigo a ver si mepuedo explicar mejor.
 
Lo que pasa es que necesito una temporizacion, yo pensaba que me decias que usara el timer como temporizador pero sin interrucpion por timer... adjunto lo que llevo de codigo esta en ccs...

#INCLUDE <16F628.H>
#FUSES INTRC,NOWDT,NOMCLR
#USE DELAY(CLOCK = 4000000)
#USE STANDARD_IO(B)
#USE RS232(BAUD = 9600, XMIT = PIN_B2, RCV = PIN_B1)

INT NUMERO_VOTOS = 0; //CONTABILIZA CUANTAS INTERRUPCIONES POR USART VAN ES DECIR EL NUMERO DE VOTOS...

#INT_RDA //SUBRUTINA DE ATENCION A INTERRUPCION USART
VOID ISR_RDA()
{
NUMERO_VOTOS++;
IF (NUMERO_VOTOS <= 3) TEMPORIZACION();
NUMERO_VOTOS = 0;
}

VOID TEMPORIZACION() //FUNCION PARA TEMPORIZAR 3 SEGUNDOS SIN
{ //INTERRUPCION POR TIMER1...
INT CONT = 0;
OUTPUT_TOGGLE(PIN_A0);
WHILE(CONT<6)
{
SET_TIMER1(3036); //CARGA AL TIMER1 PARA CONTAR APROX 500ms
WHILE(GET_TIMER1()>=30036);
CONT++;
}
}

VOID MAIN()
{
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
DO
{}WHILE(TRUE); //ESPERO LA INTERRUPCION POR RECEPCION DE DATOS
}
 
Atrás
Arriba