gracias killerjc!!!
funciona después de tantos idas y venidas solo tengo dos problemas que no puedo solucionar
1) cuando enciendo lcd no me aparecen los ceros, recién cuando recibe un pulso empieza a contar
2) cuando corto los pulsos queda el valor no vuelve a cero como lo cambio es el if (pulsonuevo) pero no se modificarlo de otra manera, gracias
#include <16f883.h>
#device ADC=10
#use delay (internal = 8MHz)
#define use_portb_lcd true
#fuses NOFCMEN, NOIESO,INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT,
#include <lcd.c>
int1 nuevopulso=0;
int16 t_bajada_1=0,t_subida_1=0,t_on=0,t_total=0,t_subida_2=0;
float32 t=0,f,duty,periodo;
int flag;
#int_ccp1
void ccp1_int(void)
{
if(flag == 3)
{
flag = 0;
}
if (flag == 0 )
{
t_subida_1=ccp_1;
setup_ccp1(CCP_CAPTURE_FE);
}
if (flag ==1 )
{
t_bajada_1=ccp_1;
setup_ccp1(CCP_CAPTURE_RE);
}
if ( flag==2)
{
t_subida_2=ccp_1;
setup_ccp1(CCP_CAPTURE_RE);
if (nuevopulso==0)
{
nuevopulso=1;
}
}
flag++;
}
void main()
{
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_CAPTURE_RE);
flag=0;
enable_interrupts(int_ccp1);
enable_interrupts(global);
nuevopulso=0;
lcd_init();
while(true)
{
if(nuevopulso)
{
t_on=(t_bajada_1-t_subida_1);
t_total=(t_subida_2-t_subida_1);
t=4.0*8.0/8000000.0;
Periodo=T*t_total;
f=1/periodo;
duty=(float)t_on*100/t_total;
delay_ms(50);
lcd_gotoxy(1,2);
printf(lcd_putc,"F=%3.0f",f);
lcd_gotoxy(9,2);
printf(lcd_putc,"duty=%2.0f%%",duty);
delay_ms(100);
nuevopulso=0;
}
}
}