Interrupcion timer0 1 microsegundo

Hola a tod@s!

Estoy haciendo un proyecto para terminar mi carrera de electrónica, una parte de mi proyecto consiste en usar el Timer0 para que en la interrupcion de overflow incremente una variable ada 1 us, estoy utilizando el PIC 16F876 y lenguaje C, para introducir el software uso MPlab.

Estoy intentando medir distancia, la fórmula genérica para us y cm sería esta:
Distancia(cm) = 340 m/s * (1s/1000000us)*(100cm/1m)*t(us) = (0.034cm/us)*t(us)


Esa es la fórmula real que hay que usar para que haciendo overflow cada 1 us obtenga la distancia en cm, pero creo que he configurado mal la interrupción porque para que me de el valor bueno de distancia en cm he de usar:

Distancia(cm) = (3.4cm/unid)*t(unid) // *****// unid es una unidad que no se cual es.

Uso un prescaler de 1:1 y una carga de 256, teniendo en cuenta que es de 00h-FFh

He configurado de esta manera el timer0 y la interrupción y no consigo obtener la cuenta del timer0 cada microsegundo:

#INT_RTCC
void overflowtimer0()
{
overflow++;
}

//*********************MAIN*************

while(1)
{
setup_counters(RTCC_INTERNAL,RTCC_DIV_1); // overflow cada 1 us? creo que si...
enable_interrupts(GLOBAL);
set_timer0(0XFF);
//Inicio cuenta del tiempo cada microsegundo
overflow=0;
enable_interrupts(INT_RTCC);

while( condición cualquiera)
{
}

disable_interrupts(INT_RTCC);

P = (overflow*3.4); //usando 3.4 me da el valor de P correcto pero debería tilizar 0.034!
//¿cuales son las unidades de overflow? teoricamente son us pero realmente no

}


Gracias de antemano.
 
Atrás
Arriba