TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: championz en 20 de Mayo de 2006, 03:33:26

Título: Duda sobre RTCC
Publicado por: championz en 20 de Mayo de 2006, 03:33:26
Buenas! comoa andan todos? les hago una pregunta... es acerca de las interrupciones por RTCC... cuando ocurre una interrupcion por desordamiento del timer... en la rutina de interrupcion el contador sigue incrementandose luego de pasar a cero, o se pone en cero y compienza a incrementarse cuando sale de la rutina?
Título: Re: Duda sobre RTCC
Publicado por: ORE en 20 de Mayo de 2006, 13:43:07
Hola championz,

Usa el siguiente código:

byte const NInts=11;                    // Numero de interrupciones para 300 ms

// VARIABLES GLOBALES

char C_Ints=0;                         // Contador de Interrupciones ocurridas
char Flag=0;                           // Flag que cambia cada NInts interrupciones
char K=0;                              // Estado anterior del Flag


#int_RTCC                              // Interrupción por desbordamiento
RTCC_isr() {                           // del TIMER0 RTCC

  if(C_Ints > NInts){                  // Si las ints ocurridas > ints para 0.30 seg.

    if(Flag==0){
      Flag=1;
    }
    else{
      Flag=0;
    }
    C_Ints=0;                          // Reinicializo Contador de Ints
  }
  ++C_Ints;                            // Incremento el número de interrupciones
}                                      // Ocurridas


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(INT_RTCC);                // Habilito Interrupción RTCC
   enable_interrupts(global);                  // Habilito Interrupciones
   output_low(PIN_B7);                         // Empiezo apagando el Led


   do{ // Bucle infinito

      if(Flag!=K)
                  {                                         // si ha cambiado Flag ...
                  if(Flag==0){ output_low(PIN_B7); }      // Si es 0 Apago el Led
                  if(Flag==1){ output_high(PIN_B7); }     // si es 1 Enciendo el Led
                  k=Flag;                                 // Guardo estado anterior de Flag
                  }

     }
  While(TRUE);
}

Un saludo,
Título: Re: Duda sobre RTCC
Publicado por: championz en 20 de Mayo de 2006, 17:20:20
gracias Ore por la respuesta, pero no entendiste mi pregunta...

Mi duda es si el timer sigue incrementandose mientras se esta ejecutando la rutina de interrupcion o se detiene el timer hasta que finalice la rutina.
Título: Re: Duda sobre RTCC
Publicado por: Manofwar en 20 de Mayo de 2006, 18:40:49
Hola championz, el tiempo para el timer, y desgraciadamente para nosotros también, no se detiene por lo que sigue contando.