Hola a todos, tengo el siguiente código de un cronometro el cual mide la duración de un pulso,
yo lo quiero modificar para que inicie la cuenta con un pulso en una entrada y la para con otra.
Como nunca trabajé con los módulos CCP que utiliza, no sé si esto es posible.
¿Quizás tenga que cambiar de PIC por uno con dos CCP?
Saludos y gracias a todos.
yo lo quiero modificar para que inicie la cuenta con un pulso en una entrada y la para con otra.
Como nunca trabajé con los módulos CCP que utiliza, no sé si esto es posible.
¿Quizás tenga que cambiar de PIC por uno con dos CCP?
Saludos y gracias a todos.
Código:
#include <16F88.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <lcd.c>
#byte PIR1=0x0C
#fuses CCPB3
float AP=0.0; //Valor final del ancho de pulso
int1 nuevopulso=0;
int1 band=0;
//long rise,fall;
int16 TFB=0,TFS=0,TF=0;
int1 cambio=0;
//lcd_init();
#int_ccp1
void ccp1_int(){
if(cambio==0){
TFS=CCP_1 ;
setup_ccp1(CCP_capture_fe);
cambio=1;
} else{
TFB=CCP_1;
setup_ccp1(CCP_CAPTURE_RE);
cambio=0;
if(nuevopulso==0){
nuevopulso=1;
}
}
}
void main()
{
lcd_init();
setup_timer_1(T1_INTERNAL); // Start timer 1
setup_ccp1(CCP_CAPTURE_RE);
cambio = 0;
enable_interrupts(INT_CCP1); // Setup interrupt on falling edge
enable_interrupts(global);
do {
if(nuevopulso==1){ //¿Pulso nuevo?
TF=(TFB-TFS); //Ancho de pulso.
AP = TF*1.0; //Ancho de pulso en microsegundos (a 4MHz:1us)
printf(lcd_putc,"\nBIP =%4.0fuS ", AP);
nuevopulso=0; //Pulso ya medido, espera nuevo
}
} while (TRUE);
}
Última edición por un moderador: