Como utilizo timer0 con 16f877?

hola a todos, necesito hacer una temporizacion (simplemente practica) de 40ms, y con la ecuacion si no la estoy haciendo mal es..
TMR0=(40ms)/((4/4Mhz)(256))=99.75 preescaler de 256,cristal de 4Mhz pero pasan dos cosas, la primera el tiempo no da, me parecen como 8ms
y el otro es que cuando no se preciona el pin b0 y se queda en el ciclo el conteo empieza y me imagino que no deberia ser asi, puesto que si tengo el timer0 como interrupcion se me activa o me equivoco?

el programa lo que hace es que al oprimir el boton rb0 tenga una temporizacion de 40ms y encienda el led rc0, cualquier colaboracion muchas gracias....a otra pregunta puedo utilizar este timer0 sin interrupciones o siempre se debe utilizar una interrupcion, a continuacion el programa... :LOL:



#include<16f877.h>
#fuses XT,NOPUT,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock=4000000)
#use standard_io(c)
#use standard_io(b)
#bit T0IF=0X0B.2


void timer1(void);

void main(void)
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); //RELOJ INTERNO Y PREES DE 256

output_low(pin_c0); //LIMPIO EL PIN C0


do{
if(input(pin_b0)==1) //ESPERO QUE SEA PRECIONADO RB0
{
delay_ms(150); //ANTIRREBOTE
if(input(pin_b0)==0) //ANTIRREBOTE
{
timer1();
}

}

}while(true);
}


//---------SUBRUTINAS----------
//-----------------------------
void timer1(void){
set_timer0(99); //CARGO EL TIMER CON 99 PARA OBTENER RETARDO DE
do{ //50MS
}while(T0IF==0); //CICLO HASTA QUE TERMINE EL CONTEO
T0IF==0; //PONGO LA BANDERA DE DESBORDAMIENTO EN 0
output_high(pin_c0); //ENCIENDO LED RC0
}
 
hola bueno con restecto al timmer si esta bn y si en el momento que habilitas la interrepcion del mismo el debe saltar pero debes tener en cuenta que en el momento de hablilitar el timer debes limpiar el registro de conteo, con respecto al pulsador del rb0 es un bit de interrupcion por flanco ya se a de subida o bajada mira bien el intcon que este el la configuracion que quieres y ademas es una interrupcion, si no quieres trabajar interrupciones puedes probar con resistencias de pull down o un retardo de unos pocos milisengundo para verificar que no halla ruido en tu entrada de pulsador.
que tengas suerte
 
Atrás
Arriba