Necesito hacer una rutina que cada 20 micros me salte el timer, esta funciona pero cuando lleva un poco se "cuelga" aparentemente para calcular el tiempo lo hago cambiando el valor de una pata para poder verlo por el osciloscopio. Con el timeLCD queria controlar los milis y micros tomando como base los 20 micros del timer. Gracias y espero vuestra ayuda.
Alqguien me puede decir por que no va ?
void actTimer1(void){
popEventBufferDisplay();
TRIS_DATA_PIN_4 = 0;
DATA_PIN_4 = 1;
timeLCD = 0;
T1CON = 0; // Borra el timer y resetea los registros de control
TMR1 = 0; // Borra los contenidos del registro
PR1 = 322; // Carga el periodo (en este caso esto son 20 microsegundos)
T1CONbits.TCS = 0; // Utilizando nuestro reloj (no uno externo)
IPC0bits.T1IP = 4; // Especifica el nivel de prioridad de la interrupcion.
IFS0bits.T1IF = 0; // Borro el flag de estado del timer
IEC0bits.T1IE = 1; // Habilita la interrupción del timer 1.
T1CONbits.TCKPS = 0; // Seleccionamos el valor por el que se divide la frecuencia en este caso 1:1
SRbits.IPL = 3;
T1CONbits.TON = 1; // Activamos el temporizador 1.
}
void _ISR _T1Interrupt(){ // Interrupcion del timer1.
IFS0bits.T1IF = 0; // Borra el flag de la interrupción.
timeLCD++;
if (timeLCD == 1){
timeLCD = 0;
if (PORTBbits.RB8 == 1) PORTBbits.RB8 = 0;
else PORTBbits.RB8 = 1;
}