Es sencillo, pero ni siquiera tengo instalado el proteus, si alguien lo quiere probar me hará un gran favor...
¿Que quiero que haga el programa?
Tengo tres pulsadores: Marcha, Pausa y Stop.
Al pulsar Marcha iniciará una secuencia que será: Un led encendido 1 min, Apagado 10s, encendido otro led 1 min. Cuando termine, no se repetirá hasta pulsar denuevo. (Realmente no son leds, pero con hacer la comprobacion con led me sirve)
Si se le da a Stop durante la secuencia, pondrá todas las salidas a cero y esperará a que se pulse marcha.
Si se le da a Pausa durante la secuencia pondrá todas las salidas a cero, esperará a q se vuelva pulsar pausa e retomará su tarea donde la dejó.
El programa compila bien, solo necesito que alguien lo simule y me diga si hace lo q creo




. Gracias!
PD: Admito sugerencias de mejora

Codigo:
#include <16f84.h>
#use delay(clock=4000000)
#byte port_b = 6 // Identificador asociado al registro de dirección 6
#use fast_io(A)
#use fast_io(B)
#int_rtcc
// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
long int cont;
short E1,E2,E3; //Estados GiroIzq, Pausa y GiroDerecho
short M,P,S; //Bits de estado Marcha, Pausa o Stop
enable_interrupts(INT_RTCC);
void interrupcion()
{
cont=cont+1;
set_rtcc(0);
}
void pausa()
{
output_low(PIN_B0);
output_low(PIN_B1);
while (input(PIN_A1));
}
main()
{
set_tris_a(0x0F); // RA0, RA1, RA2 y RA3 entradas digitales
set_tris_b(0x00); // Puerto B como salida digital
port_b=0; // Pone a 0 todas las salidas
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //Reloj interno, timer0 div 256
while (1)
{
M,P,S==0; //Variables incialmente todas a 0
E1,E2,E3==0;
if (input(PIN_A0)) // Si se pulsa A0
{
delay_us(50); // Introducimos pausa para rebotes
M==1; // Bit de estado de Marcha
P==0; // Bit de estado de Pausa
S==0; // Bit de estado de Stop
E1==1;
}
if ((M=1)&(E1=1)) // Estado 1, giro izquierdo
{
output_high(PIN_B0); // Activa PIN
cont==0;
set_rtcc(0);
while ((cont<920)&(S=0)) //Mientras no termine o pulses boton parada
{
while (get_rtcc()!=255);
interrupcion();
if (input (PIN_A2)) // Boton de Stop
{
S==1;
M==0;
}
if (input (PIN_A1)) // Comprueba el boton de Pausa
{
P==1;
pausa();
P==0;
output_high(PIN_B0);
}
}
output_low(PIN_B0);
E1=0;
E2=1;
}
if ((M=1)&(E2=1))
{
while ((cont<154)&(S=0)) //Mientras no termine o pulses boton parada
{
while (get_rtcc()!=255);
interrupcion();
if (input (PIN_A2)) // Boton de Stop
{
S==1;
M==0;
}
if (input (PIN_A1)) // Comprueba el boton de Pausa
{
P==1;
pausa();
P==0;
}
}
E2=0;
E3=1;
}
if ((M=1)&(E3=1))
{
output_high(PIN_B1);
cont==0;
set_rtcc(0);
while ((cont<920)&(S=0)) //Mientras no termine o pulses boton parada
{
while (get_rtcc()!=255);
interrupcion();
if (input (PIN_A2)) // Boton de Stop
{
S==1;
M==0;
}
if (input (PIN_A1)) // Comprueba el boton de Pausa
{
P==1;
pausa();
P==0;
output_high(PIN_B1);
}
}
output_low(PIN_B1);
}
}
}
Edito:: Interrupciones habilitadas! Gracias MGLSOFT