Problema multiplexado en css con display

Alguien me explica como funciona este código lo he probado y no me funca... Si alguien se tomara la molestia de explicarme la parte del timer y como es que va contando uno por uno:);)

Código:
#include "C:\Archivos de programa\PICC\Devices\16F877A.h"
#FUSES NOWDT, NOLVP, PUT //, INTRC
#USE delay (clock=4000000)
#USE standard_io(B)
#USE standard_io(A)
#USE fixed_io(a_outputs=PIN_A0,PIN_A1)   //A0,A1 como salidas en porta

char i=0,j=0,flag=0,var=20;   //variables globales

            ///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{
   if(flag>var){      //¿ya es 1 segundo?
      var--;         //SI -> decremento var...
      if(var<18)
         var=20;      //...ajuste fino de 1s
      flag=0;         //reset flag para contar 1s
      if(i>8){      //¿se ha mostrado por 1º 7seg digito 9?
         i=0;      //SI -> i=0 (muestra digito 0) (*)
         j++;      //incremento indice j
         if(j>9){   //¿se ha mostrado por 2º 7seg digito 9?
            j=0;}   //SI -> j=0 (muestra digito 0)
            }
      else{         //(*) NO -> incrementa i
         i++;}
      }
   set_timer0(61);      //reset TMR0
   flag++;            //incremento variable flag
}

///PROGRAMA
void main(void)
{
   int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};   //7seg hex 0-9
   
   set_tris_b(0x00);                     //portb como salida
   enable_interrupts(INT_TIMER0);            //interrupcion TIMER0 activada
   setup_counters(RTCC_INTERNAL,RTCC_DIV_256);   //configuracion interrupcion TMR0
   set_timer0(61);                        //carga TMR0
   enable_interrupts(GLOBAL);               //activadas interrupciones

   do{                        //bucle...
      output_high(PIN_A1);      //2º 7seg off            
      output_low(PIN_A0);         //1º 7seg on
      delay_ms(15);            
      output_b(tab7seg[ i ]);      //muestra por portb digito 7 segmentos
      output_low(PIN_A1);         //2º 7seg on            
      output_high(PIN_A0);      //1º 7seg off
      delay_ms(15);            
      output_b(tab7seg[ j ]);      //muestra por portb digito 7 segmentos            
      }while(TRUE);            //...infinito         
}

Verdad si alguien tiene un codigo mas facil de contador multiplexado con timer.. Porfa se los agradeceria mucho
 
Última edición por un moderador:
Atrás
Arriba