#include <16F877A.h>
#fuses XT, NOWDT
#use delay(clock = 4MHz)
#include <lcd.c>
int1 nuevoPulso = 0;
int16 inicioPulso = 0, fimPulso = 0, duracaoPulso = 0;
float periodo = 0.0, frequencia = 0.0;
#int_ccp1
void ccp1_int(){
if (!nuevoPulso){
inicioPulso = CCP_1;
nuevoPulso = 1;
}
else{
fimPulso = CCP_1;
nuevoPulso = 0;
duracaoPulso = fimPulso - inicioPulso;
}
}
void calcularPeriodoFrequencia(){
periodo = duracaoPulso * 1.0 / 1000.0;
frequencia = 1.0 / (periodo / 1000.0);
}
void main(){
lcd_init();
setup_timer_1(T1_INTERNAL);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(int_ccp1);
enable_interrupts(global);
while (TRUE){
if (nuevoPulso){
calcularPeriodoFrequencia();
printf(lcd_putc, "\fPulso = %.2f ms\nFreq= %.2f Hz", periodo, frequencia);
delay_ms(50);
nuevoPulso = 0;
}
}
}
Saída gerada |
Nenhum comentário:
Postar um comentário