Hola amigos:
Tengo un problema a la hora de programar en C (CSS) y me gustaría que me dieran una mano.
Quiero empezar diciendo que hace un tiempo que no programaba para PICs.
Estoy diseñando un control para una lavadora de las de 2 tambores separados.
El asunto es que la programación la he hecho básicamente dentro de 3 interrupciones; me explico:
La primera es una interrupción que se encarga de detectar cambios en RB4-RB7. Los pines desde RB4-RB5 son los encargados del decremento/aumento del reloj de la lavadora (por botones, un pin para cada uno); mientras que RB6-RB7 se encargan del reloj de la secadora.
Cuando esta interrupción se activa, dentro la propia interrupción busco pin por pin cual es el que se activó (desde RB4 - RB7) y en dependencia del pin aumento/ disminuyo el reloj, y los Leds correspondientes a la señalización del tiempo.
La segunda es una interrupción (PIN RB0) que se encarga de detectar cuando está abierta la puerta de la secadora, en cuyo caso no puede encender el motor de la secadora, y en caso de que esté encendido, apagarlo.
Y por último un tercera interrupción, en este caso por timer0 que cada 0.5 s revisa y ajusta las distintas variables de tiempo y enciende/apaga los motores y en el caso de la lavadora le da dirección.
Aparte de estas 3 interrupciones (donde verdaderamente está todo el código de lo que hace la lavadora), hay algo más y es una rutina (Rutina inicial) que se ejecuta (o se debe ejecutar) cuando se enciende la lavadora que es encender por orden los leds del control de lavadora/secadora simultáneamente y luego se apagan en orden inverso.
Este código es el único que está en el Main, el resto está en las interrupciones.
Hasta ahora solo he hecho las dos primeras interrupciones y el esquemático completo en Proteus.
Las preguntas son 2:
1: Quisiera cumplir con la ley que dice (mas o menos): "haz lo mínimo posible en la interrupción y sal de ella" sin embargo no veo como programar la interrupción para que se "enlace" con el main SIN tener al PIC examinando variables todo el tiempo. Lo ideal para mi sería que se encendiera la lavadora, ejecutara la Rutina inicial y luego ejecute solamente la interrupción por timer0 hasta que haya una interrupción por RB4-RB7 para proceder, pero sin "sobrecargar" las interrupciones.
2: He programado todo excepto la interrupción por timer0 (y la sección de la secadora) y me da un problema que no se si es por "sobrecargar" las interrupciones o es de otro tipo: cuando enciendo la simulación se ejecuta muy bien la rutina inicial (se encienden/apagan los leds en orden), y luego, cuando toco un botón de la lavadora se vuelve a ejecutar la rutina inicial, es decir, se vuelven a encender y luego a apagar los leds.
¿Alguien podría ayudarme en esto?
Saludos de antemano