Autor Tema: PIC  (Leído 701 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ramce280

  • PIC10
  • *
  • Mensajes: 1
PIC
« en: 02 de Marzo de 2021, 17:02:17 »
apear
« Última modificación: 02 de Marzo de 2021, 20:09:03 por ramce280 »

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Encender led por 2 segundos usando timer 0 (PIC18F4550)
« Respuesta #1 en: 02 de Marzo de 2021, 19:36:16 »
Ya lo tienes evaluado en la interrupción del timer. Cuando desborde 2000 veces tienes los 2 segundos.  En la propia interrupción has puesto que si se cumplen los dos segundos se ponga a cero el contador de desbordamientos Y ADEMÁS aquí es donde tienes que poner el output_low(PIN_A0); para que también se apague el led.

  El encendido si que lo dejas metido donde está para que se encienda cuando el contador llegue a 5.

 El código quedaría así:



Código: C
  1. #include <18F4550.h>
  2. #fuses XT, NOPROTECT, NOWDT
  3. #use delay (clock=4M, crystal=4M)
  4.  
  5. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// VARIABLES GLOBALES
  6. unsigned int8 cont = 0;
  7. unsigned int16 timer0_cont = 0;  ///contador de cuantas veces se desborda el timer0
  8.  
  9. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// INTERRUPCIONES
  10. #INT_EXT   //SUMA
  11. void interrupcion_ext0(void)
  12. {
  13.    cont ++;
  14. }
  15.  
  16. #INT_EXT1   //RESTA
  17. void interrupcion_ext1(void)
  18. {
  19.    cont --;
  20. }
  21.  
  22. #INT_TIMER0
  23. void interrupcion_timer0(void)
  24. {
  25.    set_timer0(130);
  26.    
  27.    timer0_cont ++;
  28.    
  29.    if (timer0_cont == 2000)         //0.001*2000=2seg
  30.    {
  31.       timer0_cont = 0;              //reinicio cuenta
  32.       output_low(pin_a0);        // apagado del led
  33.    }
  34.    
  35. }
  36.  
  37. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FUNCION PRINCIPAL
  38. void main (void)
  39. {
  40.  
  41.    output_low(pin_a0);
  42.    
  43.    ///////////////////////////////////////////TIMER 0
  44.    setup_timer_0(T0_INTERNAL|T0_DIV_8|T0_8_bit);      //configuro timer 0
  45.    
  46.    set_timer0(130);                                   //establecer carga
  47.    
  48.    ///////////////////////////////////////////HABILITAR INTERRUPCIONES
  49.    enable_interrupts(INT_TIMER0);
  50.    enable_interrupts(INT_EXT);
  51.    enable_interrupts(INT_EXT1);
  52.    enable_interrupts(GLOBAL);
  53.    
  54.    while (true)
  55.    {
  56.      
  57.       ///////////////////////////////////EVALUAR
  58.       if (cont == 5)
  59.       {
  60.          output_high(pin_a0);       // enciende el led
  61.          timer0_cont = 0;            // pone a cero el “crono”
  62.          cont = 0;                       // pone a cero el contador.
  63.       }
  64.      
  65.            
  66.    }
  67. }