Contador 0 a 99 con PIC y display

Dr. Zoidberg

Well-known-Papá Pitufo
Por suerte el programa está en C. No me quiero imaginar si estuviera en assembler....
 

D@rkbytes

Moderador
Por lo que veo va a existir un problema de contención lógica con el pulsador al estar en el puerto A y este mismo usado como salida.
Ya que se usó #use standard_io(a) se debió haber hecho uso del set_tris_a(x); para definir entradas y salidas.

Edit: Cambiar #use standar_io(a) por #use fast_io(a) y en el main declarar: set_tris_a(0b00000100);
 
En lugar de unidad++; sería unidad--;
Lo mismo con las decenas.


asi??

if (input(pin_a3)==1)
{
unidad--;
if (unidad>9)
{
decena--;
unidad=0;
}

if(decena>9)
{
decena=0;
unidad=0;
}
}
 

D@rkbytes

Moderador
No, porque ahora estás restando y ya no se debe comparar con > 9, sino con == 0
De igual forma, ahora las variables se deben inicializar en 9 porque habrá un decremento.

Sería así:
C:
#include <16F628A.h>

#use delay(INTERNAL = 4 MHz)
#use fast_io(A)

int display[10] = {0b0000001, 0b1001111, 0b0010010, 0b0000110, 0b1001100,
                   0b0100100, 0b0100000, 0b0001111, 0b000000, 0b0000100};

void main (void)
{
    int unidad = 9;
    int decena = 9;
    int16 tiempo = 5;
 
    set_tris_a(0b00000100);

    while(TRUE)
    {
        if(input_state(PIN_A2))
        {
            output_a(0b10);
            output_b(display[unidad]);
            delay_ms(tiempo);
            output_a(0b01);
            output_b(display[decena]);
            delay_ms(tiempo);
        }
        else
        {
            delay_ms(tiempo);
            output_a(0b10);
            output_b(display[unidad]);
            delay_ms(tiempo);
            output_a(0b01);
            output_b(display[decena]);
            delay_ms(tiempo);
 
            if (input_state(PIN_A2))
            {
                unidad --;
         
                if (unidad == 0)
                {
                    decena --;
                    unidad = 9;
                }
             
                if (decena == 0)
                {
                    decena = 9;
                    unidad = 9;
                }
            }
        }
    }
}
Corrijo la comparación porque al parecer al llegar a 10 regresaría a 99
Quedaría de esta forma:
C:
            if (input_state(PIN_A2))
            {
                unidad --;
          
                if (unidad > 9)
                {
                    decena --;
                    unidad = 9;
                }
              
                if (decena > 9)
                {
                    decena = 9;
                    unidad = 9;
                }
            }
 

Arriba