Feer, encontré algunos detalles. Como vos me pediste que te lo revise, te lo revise renglon por renglon como un hijo de mil putas que te quiere desaprobar jajaja.
- Hay un error en el antirebote. Para mi te confundiste la ubicación de la llave }. Leyendo el codigo que vos hiciste, pusiste el contador = 0 en el else de IF (Contador [i] > Max_cant_rebotes). No se resetea ahi por que sino nunca se cumpliria el antirebote. el contador = 0 va en el else del caso que no sean iguales la tecla actual y la anterior. Si no entendes, avisame que te seleciono en la imagen el error
-En la maquina de estados, en el Estado 1 hay un pasiiito que hiciste demás. Esta perfecto, pero es importante que la maquina de estado sea lo mas sincero y lo mas corto posible para que corra lo mas rápido posible.
en el IF (tiempo>MAX_tiempo)
{
tiempo = MAX_tiempo;
}
else tiempo ++;
no hace falta. solo pone
if(tiempo<MAX_tiempo)
{
tiempo++;
} y se acabo. Si el tiempo es mayor que MAX_tiempo, que no suba directamente. (ya el tiempo es igual a MAX_tiempo.)
y despues en el caso 2 de la maquina de estados. Antes de prender un timer, siempre tenes que apagar el flag. nunca despues de prender el timer como hiciste con el timer(1).
- Ojo con lo que te referís a Inicializar_variables(); porque lo hiciste adentro del Main (void) osea que serian todas variables Locales. No aplica a las variables globales. Y en ningún lado (salvo que no lo haya visto) no declaraste las variables locales, ni las variables locales de las demás funciones. Te digo esto por que me parece que vos pusiste inicializar_variables(); pensas que safas de tener que declarar las variables y no es así.. ojo que te puede cagar con esta boludes. Yo por mi declaro una por una en una hoja aparte. (nadie te va a revisar si todas las variables están declaradas pero si que lo tuviste en cuenta la declaración de variables locales y globales. y tambien con los #define. es muy importante. No se como manejas el arriba, abajo, on, off.
- hay un error en el barrido de display. hay dígitos que no lo apagas. Lo tenes que apagar si o si por que sino se proyectaria cualquier cosa.
switch (indice)
case 0:
dig_0 =1;
dig_1 = 0;
dig_2 = 0;
case 1:
dig_0=0; // si o si lo tenes que apagar! sino queda prendido desde el case anterior
dig_1= 1;
dig_2 = 0;
- como vos dijiste que te falto poner display(tiempo). Yo lo pondia debajo del tiempo++ y del tiempo-- asi se va actualizando cada vez que modificas la variable. asi esta bueno el producto sino es una cagada jajajaja.
-hay un error grave en el timertick. A pesar de que no hagas la cuentita del timer. en el enunciado dice que la inicializacion del timer fue hecha por otro ingeniero a cada 2500Hz. y vos en el timertick empezaste con " mseg--". tenes que hacer la cuenta previa para que cuentes la cantidad de ciclos (2500hz) para llegar un mili segundo.. y recien ahi haces el desconteo del mili segundo. Ojo con esto...
Pusiste la variable Tiempo en el desconteo de segundos. Pero tiempo son Minutos. Ojo con esto...
-No hiciste la funcion de Timer_on, timer_off... por lo menos a mi me tomaron en todos los parciales y finales y hay que practicar un poco por que puede presentar confusiones muy boludas.
En general esta muy bien hecho. Hay que prestar mucha atencion a los detalles que te puede dar vuelta el programa o pasar horas y horas sin encontrar el problema.
Espero que te sirva.
Saludos.