TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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?
-
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,
-
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.
-
Hola championz, el tiempo para el timer, y desgraciadamente para nosotros también, no se detiene por lo que sigue contando.