Que tal comunidad. Mucho me han ayudado en muchas ocasiones leyendo en los diferentes hilos del foro, lo cual les agradezco mucho. Sin embargo, esta vez no encuentro la forma.
Utilizo el 12F629. Estoy haciendo un programa que realiza diferentes secuencias. Estas secuencias las realizo con bucles para disminuir el codigo. Lo que quiero hacer es que mediante un boton vaya cambiando de seuencias.
Mediante una interrupción externa incremento una variable "secuencia". El pseudo codigo sería algo así:
//EN LA INTERRUPCION EXTERNA INCREMENTO LA VARIABLE SECUENCIA
#INT_EXT
void boton(){
secuencia++; //Pongo el codigo simplificado aunque hay que poner antirrebotes y limite de secuencias.
}
void main(){
do{
secuencias();
}while(true);
}
//ESTA SERIA LA SELECCIÓN DE LA SECUENCIA
void secuencias(){
switch(secuencia){
case 1:
SECUENCIA 1 CON BUCLES ANIDADOS
break;
case 2:
SECUENCIA 2 CON BUCLES ANIDADOS
break;
.
.
.
case n:
SECUENCIA N CON BUCLES ANIDADOS
break;
}
}
Esto ya lo tengo programado incluso armado en fierros (circuitos), las funciones corren bien, digamos que funciona "a medias". Porque debido a que las secuencias involucran bucles anidados, el programa "no se da cuenta" de que ya se incremento la variable secuencia. Y no es hasta que termina el bucle hasta que "se da cuenta" y entonces va a la siguiente secuencia.
Lo que yo busco es que independientemente donde este el programa, al presionar el boton, se interrumpa la secuencia que se este ejecutando. Es decir que se rompan los bucles que tengan que romperse y se vaya a la siguiente secuencia. Sin esperar a que termine la secuencia actual.
Tambien intente dentro de la interrupción vovler a llamar la funcion así:
#INT_EXT
void boton(){
secuencia++; //Pongo el codigo simplificado aunque hay que poner antirrebotes y limite de secuencias.
secuencias();
}
Pero tampoco lo he logrado. Espero puedan ayudarme, gracias de antemano. Saludos.