Problema con medidor de periodos con 16F8776A

La idea de este programa es medir cuanto tiempo se desmora un periodo de cualquier señal usando el modo comparador CCP1 con el timer1 del PIC16F876A y mostrar el valor en microsegundos en la LCD.
El compilador (CCS C) que estoy utilizando me da un mensaje de alerta diciendo que las interrupciones estan desabilitadas al momento de las llamadas, al momento de simular no me dice ningun valor, en resumen no hace nada... No encuentro un error el que lo encuentre y lo haga funcionar digame :)

Adjunte la libreria para el lcd que estoy usando

PHP:
#include <16f876A.h>
#include <LCD2.C>
  
  #include <stdio.h>
  #include <stdlib.h>

#use fast_io (A)
#use fast_io (B)
#use fast_io (C)

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

int captura=1;         //Contiene nº de captura realizada
int32 v_captura;         //Contiene valor capturado

#int_CCP1
CCP1_isr() 
{
   
   if (captura < 2)   //¿Se han producido 2 capturas?
    {               //No, se ha detectado el primer flanco ascendente   
      captura ++;      //Siguiente captura
      CCP_1=0;   
      set_timer1(0);   //Carga el TMR1 con 0
   }
   else 
   {
      captura = 1;         //Restablecer 1ª captura
      lcd_enviar(LCD_COMANDO,LCD_HOME);   //Coloca el cursor
      v_captura=CCP_1;      //Lee valor capturado
      v_captura=v_captura*8;   //Ajusta *8 según valor del preescaler
      printf(lcd_putc,"%06lu",v_captura);   //Visualiza resultado
   }
   
}


void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   set_tris_c(0xff);         //Puerta C entrada
   lcd_init();               //Inicia el módulo LCD
   setup_spi(FALSE);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_CAPTURE_RE);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(int_ccp1); //Activa interrupción del CCP1
   enable_interrupts(GLOBAL);

   while(1)
   {   
   }
}
 

Adjuntos

  • lcd2.rar
    1.7 KB · Visitas: 5
Atrás
Arriba