Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/02/2010 #1


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

Código 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)
   {   
   }

Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.