hola de nuevo como me dijeron estuve investigado sobre los timer bastante y encontré un tutoría donde explica muy detalladamente como funciona ahora bien hice un programa o mejor dicho frecuencímetro pero ahora estoy teniendo problemas en capturar el dato de entrada en Hz, por que el programa me esta contando nomás los pulsos de entrada pero no puedo hacer que..... o mejor dicho no se me ocurre como hacer que la entrada cuente una frec determinada ??como tomo los valores en 1 segundo y nada mas ??? hice el timer para que se desbordara en 1 seg (eso creo yo
) y intente poner a cero esta variable de cuenta pero tampoco funca bueno les dejo el programa para que vean en que me equivoque y ojalas que me pudiesen echar una manito que de verdad la necesito, bueno de antemano gracias.
#include <16f876a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(B)
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd
char flag=0,var=20; //variables globales
float i=0;
///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{
if(flag>var){ //¿ya es 1 segundo?
var--; //SI -> decremento var...
if(var<18)
var=20; //...ajuste fino de 1s
flag=0;//reset flag para contar 1s
}
set_timer0(61); //reset TMR0
flag++; //incremento variable flag
}
///PROGRAMA
void main(void)
{
lcd_init(); //inicializa lcd
set_tris_b(0x00); //portb como salida
enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
set_timer0(61); //carga TMR0
enable_interrupts(GLOBAL); //activadas interrupciones
do{ //bucle...
if(!input(PIN_A0)){
printf(lcd_putc,"\njapifer_22."); //auto publicidad en la 2ºfila lcd
lcd_gotoxy(2,1); //vuelve 1ºfila lcd y apunta la mitad de la columna
printf(lcd_putc,"F:%fHz",i); //muestra por pantalla el numero
printf(lcd_putc,"\b"); //retrasa el cursor una posicion(escribe encima)
i=i+1;
}
}while(TRUE); //...infinito
}