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
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)
{
}
}