Hola mundo PIC; a continuación os dejo un código que implementa una secuencia sobre el puerto B y 2 pines puerto A. Se programan varios estados del puerto con distintos flashes todo ello implementando en una función que será llamada desde el programa principal, siendo sencillo de renonbrar y ampliar. Sólo tiene un fallo: que el el programa comience a desarrollarse depende que A1 llegue negativo (interruptor cerrado y conectado en un extremo a A1 y al otro GND); EL PROBLEMA y aquí mi pregunta: ¿cómo hacer que el programa se detenga instantaneamente cuando abra el interruptor?.Ahora mismo acaba toda la secuencia.
PD: A0 está configurado como entrada y cuando recibe negativo las salidas A2 y A3 se inhiben y no actúan en la secuencia antes de parar.
Saludos#include <16F84a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOPROTECT
#use fast_io(B)
#use fast_io(A)
#byte PORTB = 0x06
#byte PORTA = 0x05
#bit RA3=PORTA.3
#bit RA2=PORTA.2
#bit inhibi=PORTA.0
int1 A3;
int1 A2;
int8 i;
int8 flash;
int8 TB;
void puerto(int8 TB, int1 A3, int1 A2)//funcion_flashes
{
switch (flash)
{
case 1://1flash
{
PORTB=TB;
if (inhibi==1){
RA3=A3;
RA2=A2;}
else{
RA3=0;
RA2=0;}
delay_ms(200);
PORTB=0X00;
RA3=0;
RA2=0;
delay_ms(300);
i=0;
break;
};
case 2://2flash
{
for(i=0;i<2;i+=1){
PORTB=TB;
if (inhibi==1){
RA3=A3;
RA2=A2;}
else{
RA3=0;
RA2=0;}
delay_ms(200);
PORTB=0X00;
RA3=0;
RA2=0;
delay_ms(300);
};
i=0;
break;
};
case 3://3flash
{
for(i=0;i<3;i+=1){
PORTB=TB;
if (inhibi==1){
RA3=A3;
RA2=A2;}
else{
RA3=0;
RA2=0;}
delay_ms(200);
PORTB=0X00;
RA3=0;
RA2=0;
delay_ms(300);
};
i=0;
break;
};
case 4://5flash
{
for(i=0;i<5;i+=1){
PORTB=TB;
if (inhibi==1){
RA3=A3;
RA2=A2;}
else{
RA3=0;
RA2=0;}
delay_ms(200);
PORTB=0X00;
RA3=0;
RA2=0;
delay_ms(300);
};
i=0;
break;
};
}
}
void main (){
int u;
u=0;
i=0;
TB=0;
flash=0;
disable_interrupts(GLOBAL);
set_tris_b(0x00);
set_tris_a(0x03);
portb=0x00;
porta=0X00;
while(true)
{
do{
delay_ms(1);
}while(input(pin_a1)!=0);
delay_ms(20);
if(input(pin_a1)==0)
{
flash=1;
puerto(255,1,1);
flash=2;
puerto(153,0,1);
flash=2;
puerto(86,1,0);
flash=3;
puerto(255,1,1);
flash=1;
puerto(153,1,1);
flash=1;
puerto(86,1,1);
flash=2;
puerto(153,1,0);
flash=2;
puerto(86,0,1);
flash=3;
puerto(153,1,0);
flash=3;
puerto(86,1,1);
flash=4;// 5 flashes
puerto(255,1,1);
for(u=0;u<2;u+=1){
flash=1;//corrido
puerto(16,0,0);
flash=1;
puerto(32,0,0);
flash=1;
puerto(64,0,0);
flash=1;
puerto(128,0,0);
flash=1;
puerto(8,0,0);
flash=1;
puerto(4,0,0);
flash=1;
puerto(2,0,0);
flash=1;
puerto(1,0,0);
flash=1;
puerto(0,1,0);
flash=1;
puerto(0,0,1);
};
u=0;
flash=1;
puerto(0,0,1);
flash=1;
puerto(0,1,0);
flash=1;
puerto(1,0,0);
flash=1;
puerto(2,0,0);
flash=1;
puerto(4,0,0);
flash=1;
puerto(8,0,0);
flash=1;
puerto(128,0,0);
flash=1;
puerto(64,0,0);
flash=1;
puerto(32,0,0);
flash=1;
puerto(16,0,0);
flash=3;
puerto(255,1,1);
}
//}while(input(pin_a1)==0);
}//WHILE1
}//MAIN()