Saludos, para empezar estoy haciendo un contador de 0000 a 9999, el valor ira incrementando cada vez que pulse el pin_a0, he estado revisando y dando vueltas pero el programa solo cuenta hasta 255 y reinicia de nuevo y cuando inicia el proceso el prime digito esta en uno. Les adjunto los archivos para que le den una mirada y me puedan guiar para poder corregir esto.
Gracias
pd.- no se fijen en el nombre del archivos es el correcto para manejarlo con displays XD
#include <16f88.h>
#fuses INTRC_IO,NOMCLR,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(B)
#use standard_io(A)
//Variables
int tabBCD[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};
char conta=0;
int delay=5;
int h_digit,m_digit,l_digit,d_digit;
char a=0,b=0,c=0,d=0;
//Funciones
void vizu(void);
void ass(int valor);
//Programa
void main (void)
{
output_b(tabBCD[ conta ]);
while(1)
{
if(!input(PIN_A0))
{
++conta;
ass(conta);
a=l_digit;
b=m_digit;
c=h_digit;
d=d_digit;
while(!input(PIN_A0))
{
vizu();
}
}
vizu();
}
}
//****************************************************
void vizu(void)
{
output_b(tabBCD[d]|0b11100000); //0b11100000
delay_ms(delay);
output_b(tabBCD[c]|0b11010000); //0b11010000
delay_ms(delay);
output_b(tabBCD|0b10110000); //0b10110000
delay_ms(delay);
output_b(tabBCD[a]|0b01110000); //0b01110000
delay_ms(delay);
}
//****************************************************
void ass(int valor=0)
{
d_digit = (int) valor / 1000;
valor-= d_digit*1000;
h_digit = (int) valor / 100;
valor-= h_digit*100;
m_digit = (int) valor / 10;
valor-= m_digit*10;
l_digit = valor;
}
#