Follow along with the video below to see how to install our site as a web app on your home screen.
							
						
Nota: This feature currently requires accessing the site using the built-in Safari browser.
	
	
	
	
	
	
	
	
	
	
	
	Miren estro esta en un tema que Hizo rash yo aproveche y subi un frecuencimetro pruebenlo:
https://www.forosdeelectronica.com/...nado-electronico-19782-post530512/#post530512
El programa se ese frecuencimetro está en el libro microcontroladores de cekit.
Frecuencimetro del libro de microcontroladores cekit
#include "Basic4550.h"
#define _XTAL_FREQ 48000000 // Reloj CPU
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include "LCD-1.h"
// Variables globales
char buffer[16] = "";    // Buffer de texto
unsigned long pulseCount = 0;
unsigned long freq = 0;
unsigned long timer0InterruptCount = 0;
void config_ptos(void);
void config_timers(void);
// Configuración de interrupciones
void __interrupt() isr()
{
    // Si se generó una interrupción por Timer0
    if (INTCONbits.TMR0IF)
    {
        timer0InterruptCount++;  // Incrementar el contador de interrupciones del Timer0
        // Borrar la bandera de interrupción y resetear Timer0
        INTCONbits.TMR0IF = 0;
        TMR0 = 61;  // Valor inicial para generar una interrupción cada 1 ms
    }
    // Si se generó una interrupción por Timer1
    if (PIR1bits.TMR1IF)
    {
        pulseCount++;  // Incrementar el contador de pulsos del Timer1
        // Borrar la bandera de interrupción y resetear Timer1
        PIR1bits.TMR1IF = 0;
        TMR1 = 0;
    }
}
void main(void)
{
    config_ptos();
    config_timers();
    lcd_init();
    lcd_cmd(_LCD_CURSOR_OFF);  // Apagar cursor
    while (1)
    {
        // Calcular frecuencia
        freq = pulseCount / timer0InterruptCount;  // Dividir el número de pulsos por el tiempo de interrupción del Timer0
        // Imprimir la cantidad de pulsos en el buffer del LCD:
        sprintf(buffer, "Pulsos: %lu", pulseCount);
        // Imprimir en la primera fila:
        lcd_out(1, 1, buffer);
        // Mostrar frecuencia en la segunda fila del LCD
        sprintf(buffer, "Frec: %lu", freq);
        lcd_out(2, 1, buffer);
    }
}
void config_ptos(void)
{
    TRISD = 0x00;
    TRISA = 0xFF;
    LATA = 0x00;
    PORTA = 0x00;
    TRISB = 0b00000000;
    LATB = 0x00;
    PORTB = 0x00;
    PORTD = 0x00;
    LATD = 0x00;
    PORTCbits.RC0 = 0;
    LATCbits.LC0 = 0;
}
void config_timers(void)
{
    // Configurar Timer0
    T0CON = 0b10000011;   // Timer0 encendido, modo de 16 bits, incremento en transición de bajo a alto, prescaler 1:16
    INTCONbits.TMR0IE = 1;   // Habilitar la interrupción por Timer0
    // Configurar Timer1
    T1CON = 0b00000001;   // Timer1 encendido, incremento en transición de bajo a alto, prescaler 1:1
    PIE1bits.TMR1IE = 1;   // Habilitar la interrupción por Timer1
    // Configurar interrupciones
    INTCONbits.PEIE = 1;    // Habilitar interrupciones periféricas
    INTCONbits.GIE = 1;     // Habilitar interrupciones globales
}
	Soy extremadamente novato en dicho tema, por eso mismo estoy buscando la ayudaJajajajajaja y más ja.
Debes saber que los delay están prohibidos en interrupciones.