TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Cryn en 02 de Septiembre de 2008, 19:08:02
-
saludos a todos, quiza la idea que tengo es loca, pero creo que es la unica solución a mi caso, espero pueda dejarme entender, uso un 18f4550:
tengo una variable de 8bits (digamos int8 conta) que debe decrementarse cada vez que exista un pulso en T0CKI (Pin RA4), hasta ahi todo bien; pero...
a la vez el T0CKI se incrementa desde cero, por los pulsos que le envía muy amenamente un Reloj de tiempo real de maxim, uno de los más conocidos creo el ds1307, pulsos que tienen una frecuencia de 1Hz, el TMR0 contará una determinada cantidad de pulsos, hará unos cuantos cambios y luego volverá a contar desde 0 para despues de otra cuenta volver hacer cambios y así sucesivamente..., siendo esta la función principal que debe cumplir el tmr0.
digamos que el TMR0 tiene que contar hasta 20 en forma ascendente, yo quiero usar la variable conta para mostrarlo en un lcd, y conta tendrá que decrementarse desde 20 hasta 0
entonces el tmr0 lo estoy usando con esta configuración:
setup_timer_0(rtcc_ext_h_to_l | rtcc_div_1 | rtcc_8_bit);
ahora donde yo veo el problema es en utilizar el tmr0 con esa misma cuenta del RTC para decrementar la variable conta, porque no puedo perder tiempo en hacer una pregunta como esta:
if(input(PIN_A4)){
do{
}while(input(PIN_A4));
conta--;
}
con eso creo que se soluciona el problema, pero no debo hacerlo así porque pierdo un tiempo valioso en el do...while, que en realidad llega a ser de medio segundo :(
quisiera saber si alguien tiene una mejor solución para mi caso, he hecho este otro codigo, parece que por ahí va la cosa, pero a veces deja de decrementar:
set_timer0(0);
do{
t_temp=get_timer0();
delay_cycles(25);
if(t_temp!=get_timer0()){
conta--;
ver_cambios(); //función que permitirá ver cambios de conta en el lcd, cuando cambie de valor
}
...
... // otras acciones
}while(get_timer0()!=*ptr1); //este do...while sirve para usar el tmr0 para contar los pulsos del RTC
// ptr1 apunta a una posicion de memoria que cambia despues de salir del do...while
Que me sugieren?, o que hago mal?, existe alguna forma de poder hacer lo que quiero?, bueno disculpen si no he sido claro, haganmelo saber si no lo explique bien o si quisieran una aclaración, espero puedan ayudarme, un saludo.
muchas gracias de antemano.