Hola DominusDRR
muchas gracias por tu respuesta.
en el default, que me preguntas donde deberia de ir, se supone que al terminar de activar y desactivar la RA3, debe de quedarse a la espera de cuando se vuelve a realizar el ciclo de los dos cases.
lo que no entiendo es lo que me explicas del retardo asincrono para la interrupcion de 1ms. eso de donde lo saco?
muchas gracias de nuevo por tu ayuda.
#include <16F84A.h>
#use delay (clock=4MHz)
#use fast_io(all)
#byte pb=6
#byte pa=5
int8 state=0;
#define TIMERs(x) TimeOut=(.5+x/.065536)
int8 TimeOut=0 ; // int8 para un maximo de 16.7"
// int16 para un maximo de 1h 11'
#INT_RTCC
void RTCC_isr(void)
{
if(TimeOut) TimeOut-- ;
}
void state0() // IDLE , state=0
{
output_high(PIN_A0);
//---------------------------------------------------
// Bucle ppal del estado
// En este caso es solo la condición de salida
while(!input(PIN_B0)) ;
//---------------------------------------------------
state=1 ;
output_low(PIN_A0);
}
void stateA() // state=1
{
output_high(PIN_A1);
delay_ms(400) ; // si no, saldría inmediatamente por seguir
// activo el PIN_B0
TIMERs(5) ; // Dispara la cuenta descendente
//---------------------------------------------------
// Bucle ppal del estado
// En este caso son solo las condiciones de salida
while(TimeOut!=0 && !input(PIN_B0)) ;
//---------------------------------------------------
state = Timeout ? 2 : 0 ;
output_low(PIN_A1);
}
void stateB() // state=2
{
output_high(PIN_A2);
delay_ms(400) ; // si no, saldría inmediatamente por seguir
// activo el PIN_B0
TIMERs(5) ; // Dispara la cuenta descendente
//---------------------------------------------------
// Bucle ppal del estado
// En este caso son solo las condiciones de salida
while(TimeOut!=0 && !input(PIN_B0)) ;
//---------------------------------------------------
state = Timeout ? 3 : 0 ;
output_low(PIN_A2);
}
void startBomba() // state=3
{
output_high(PIN_A3);
delay_ms(1000);
state = 0; // IDLE
output_low(PIN_A3);
}
void main()
{
set_tris_a(0x00) ;
set_tris_b(0x01) ;
// 0. idle
// A. Boton arranque: count_down = 5sec
// B. Boton arranque: count_down = 5sec
// Finish. Boton arranque: start
pa=0;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT); //65.5 ms overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(true){
switch(state){
case 1: stateA() ; break ;
case 2: stateB() ; break ;
case 3: startBomba(); break ;
default: state0() ;
}
}
}