Como puedo detener el motor con un logicsState o push button

Hola electrónicos
Bueno pues me estoy en enseñado a programar, y estoy haciendo este pequeño programa para saber manejar interrupciones externas, este programa es para cambio de giro de un motor de CD y hasta ahora e logrado que cambie de giro pero quisiera por medio de otra interrupción detener el motor, osea que sea cual sea hacia el lado que gire que por medio de otro logicsState o un push button lo pueda detener, pero no se como y ya le moví bastante, el programa es el siguiente:

#include <intext.h>

#int_EXT
void EXT_isr(void)
{
output_low(PIN_B7); // si esta en bajo lo apago
output_high(PIN_B6); // si esta en alto lo enciendo
}

#int_EXT1
void EXT1_isr(void)
{
output_high(PIN_B7); // si esta en alto lo enciendo
output_low(PIN_B6); // si esta en bajo lo apago

}

void main()
{
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);

enable_interrupts(INT_EXT); //habilito interrucpion externa
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL); //habilito interrupcines globales
//disable_interrupts(INT_EXT);

while(TRUE)
{
//TODO: User Code
}

}

ojala puedan ayudarme, de antemano gracias
(adjunto la imagen de proteus)
 

Adjuntos

  • Dibujo1.JPG
    Dibujo1.JPG
    100.3 KB · Visitas: 9
usa una variable de tipo entero que si le das a una interrupcion tome un valor, si le das a otra otro ,y si le das a la otra otro, para eso necesitarias un pic con 3 external interrupts.

y en el main pues pones que si la variable esta a un valor x se encienda el puerto, y un else que si no esta se apague ese puerto, lo mismo si el valor es y para el giro en la otra direccion, y ya esta que tome un valor diferente a x o y cuando quieras que se pare



#include <intext.h>

int i=0;

#int_EXT
void EXT_isr(void)
{
i=1;
}

#int_EXT1
void EXT1_isr(void)
{
i=2;
}
#int_EXT2
void EXT2_isr(void)
{
i=0;
}
void main()
{
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);

enable_interrupts(INT_EXT); //habilito interrucpion externa
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL); //habilito interrupcines globales
//disable_interrupts(INT_EXT);
//TODO: User Code
while(1)
{if (i=1)output_high(pin_b7);else output_low(pin_b7);
if(i=2)output_high(pin_b6);else output_los(pin_b6);
}
}

}
 
Última edición:
hola Limako muchas gracias, la verdad no me funciono como me dijiste pero me diste una muy buena idea de como hacerle. Ahora solo me falta cambiar los logicsState por push button jeje que aun no me a salido, creo que tengo que habilitar 3 pines como entrada o algo así.


gracias
 
Atrás
Arriba