Sin interrupciones creo que esto haria el trabajo.
Usando tu codigo y minimos cambios
#Include <16F877A.h>
#Fuses XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP //Configuracion de fusibles
#Use delay (clock=4000000) //reloj=4Mhz
#Use fast_io(A)
#Byte portb=6
#Byte porta=2
#Byte portc= 7
#Define uno portc,0 //Definición de variables
#Define dos portc,1 //Definición de variables
int i=0, j=0; //displays
void mostrar( )
{
int display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
portb =(display[i]);
bit_set (uno); //prendo el primer display
delay_ms(1);
bit_clear(uno); //lo apago
portb=(display[j]);
bit_set (dos); //perdo el segundo
delay_ms(1);
bit_clear(dos);
}
void pulsadores(){ //Funcion de conteo de eventos
if(input(pin_A0)){ //Esta cerrado el pulsador?
delay_ms(5); //Si, elimina rebotes
i++;
if (i>9){ //hasta que sea 9
i=0; //borra unidades e
j++; //incrementa las decenas
if(j>9){ //hasta 9
j=0; //borra las decenas
}
}
}
while (bit_test(porta,0)==0){ //Espera visualizando datos , podria usar: while (!input(pin_A0)){ mostrar();}
mostrar(); //mientras la tecla esta presionada
}
if(input(pin_A1)){ //Esta cerrado el pulsador?
delay_ms(5); //Si, elimina rebotes
i=0; j=0; //reset
}
}
void main(){
set_tris_b(0); //portb como salida
set_tris_a(255); //RA0 y RA1 entradas
disable_interrupts(GLOBAL); //activadas interrupciones
do{ //bucle...
mostrar();
pulsadores();
}while(TRUE);
}
Esto tiene algunas desventajas:
Si tenes presionado el boton de aumentar del contador, no podes resetearlo.
El display se encuentre encendido 1ms y luego se apaga por 1ms + tiempo del programa. Esto no supone problema ya que el programa es corto, fuera mucho mas largo o si requiere mucha mas operaciones matematicas por ahi puede influir y conviene con interrupciones. Pero no te compliques todavia y eso miralo cuando lo necesites o cuando quieras aprenderlo.
Errores que vi en tu codigo:
digito1=cont%10;
digito2=cont/10;
digito1,cont y digito2 no estaban definidas, ademas no las usabas, asi que las elimine. No tiene sentido tener una variable contador y luego sacar esos valores si lo estas haciendo 1 varaible para decenas y otra para unidades ( i y j )
en tu codigo no aumentabas i (unidades), cuando entraba al if, sino que aumentaba cont, lo cual vuelvo a repetir no usabas y la condicion del if i>9 jamas se iba a cumplir, por lo cual nunca iba a aumentar. Asi que lo cambie por i++.
Y no es un error pero si te pones a pensar
if(input(pin_A1)){ //Esta cerrado el pulsador?
delay_ms(5); //Si, elimina rebotes
i=0; j=0; //reset
}
Ese delay no tiene importancia, por mas que sirva de antirebote, si entra 100 veces el resultado va a ser i=0 y j=0, distinto el de aumentar la variable que ahi SI preocupa que entre varias veces. Asi que es posible eliminar ese delay y aprovechar el tiempo del micro un poco mas.