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

Verdad si alguien tiene un codigo mas facil de contador multiplexado con timer.. Porfa se los agradeceria mucho
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: