#include <16f876a.h>
#FUSES NOWDT,HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=20000000)
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd
float pulsos,frec;
#int_ccp1
void handle_ccp1_int()
{
pulsos=pulsos+1;
frec=pulsos-1;
}
void main()
{
lcd_init(); //inicializa lcd
setup_ccp1(CCP_CAPTURE_RE);
disable_interrupts(int_ccp1);
enable_interrupts(global);
delay_ms(10); //esperamos a q se estabilice
while(TRUE)
{
pulsos=0;
frec=0;
enable_interrupts(int_ccp1);
delay_ms(1000);
disable_interrupts(int_ccp1);
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",frec); //muestra por pantalla el numero
printf(lcd_putc,"\b"); //retrasa el cursor una posicion(escribe encima)
}
}
tambien les dejo el codigo que cuenta cada un seg se los agrego en el rar que les paso con el circuito en CCS C y proteus
#include <16f876a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP // Opciones de configuración
#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz
#define use_portb_lcd TRUE //definir portb lcd
#define BOTON PIN_A0
#include <lcd.c> //libreria manejo lcd
byte const NInts=30; // Numero de interrupciones para 1 Segundo
// VARIABLES GLOBALES
char C_Ints=0; // Contador de Interrupciones ocurridas
char Flag=0; // Flag que cambia cada NInts interrupciones
float K,i,a;
#int_RTCC // Interrupción por desbordamiento
RTCC_isr() { // del TIMER0 RTCC
if(C_Ints > NInts){ // Si las ints ocurridas > ints para 1 Seg.
if(Flag==0){
Flag=1;
}
else{
Flag=0;
}
C_Ints=0; // Reinicializo Contador de Ints
}
++C_Ints; // Incremento el número de interrupciones
} // Ocurridas
void main(void) {
setup_counters(RTCC_INTERNAL,RTCC_DIV_128);// TIMER0: Clock Interno, Presescaler 128
setup_timer_1(T1_DISABLED); // para una RTCC cada 33.3 milisegundos
setup_timer_2(T2_DISABLED,0,1); // -> 1 Segundo = 30 RTCC
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC); // Habilito Interrupción RTCC
enable_interrupts(global); // Habilito Interrupciones
lcd_init(); //inicializa lcd
do{ // Bucle infinito
if(Flag==K){}
else
{ // si ha cambiado Flag ...
// AQUI HAGO LO QUE DESEE CADA 1 SEGUNDO
i=i+1;
a=i-1;
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",a); //muestra por pantalla el numero
printf(lcd_putc,"\b"); //retrasa el cursor una posicion(escribe encima)
k=Flag; // Guardo estado anterior de Flag
}
}While(TRUE);
}