interrupcion que cuente microsegundos

#1
Hola ,necesito un temporizador con resolucion de 1 microsegundo, se activa por A0 y se desactiva por A1, por el momento tengo esté, pero solo cuenta centenas de microsegundos, alguien que me pueda ayudar ?

Código:
#include <18f452.h>    
#fuses NOWDT,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, PUT, STVREN
#use delay (clock=20000000)         //Fosc=20Mhz

#include <lcd.c>                  //libreria lcd
double useg=0;
double th=0;

#int_TIMER0
void TIMER0_isr()
{
   delay_cycles(1);  // es igual a un NOP
   set_timer0(33); 
   useg=useg+1;
}

void main()
{
   port_b_pullups(TRUE);        //Habilitacion Pull_up PUERTO B
   lcd_init();
   lcd_putc("Prueba\nmicroseg");
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_BIT);
   enable_interrupts(int_timer0);
   enable_interrupts(global);
   WHILE (1)
   {
     while (input(PIN_A0)==1){}//Espera activación de primer sensor SALIDA INVERSOR
     useg=0;
     set_timer0(33);
     enable_interrupts(INT_TIMER0);
       printf(lcd_putc,"\focupado");
     while (input(PIN_A1)==1){}//Espera activación de segundo sensor SALIDA INVERSOR
     disable_interrupts(int_timer0);
     th=useg*0.0001;
     printf(lcd_putc,"\fTiempo:\n%01.4g",th);
     useg=0;
     }
}
 
Última edición por un moderador:
#2
Es practicamente imposible que llegues a esa resolucion por interrupciones. Solamente las instrucciones que ejecutas dentro de la interrupcion duraran mucho mas que ese tiempo (son apenas 10 a 30 ciclos del procesador), y la latencia de las interrupciones en si tambien estan en ese orden.

Para contar tiempos tan cortos, en los microprocesadores se usa hardware, no software. Por ejemplo el MSP430 tiene puertos conectados a timers de hardware que te permiten medir tiempos del orden de microsegundos. No se si los PIC tienen capacidades similares.
 
Arriba