ayuda con pic16f877a on off (led) un pulsador en pic c compiler

hola les agradeceria enormemente la ayuda soy nuevo en esto de los pic´s y actualmente estoy trabajando en un sistemade control de un led on off osea al presionar y soltar un boton conectado al (pin_a1) el led que esta en el (pin_b0) enciende quedando encendido y se apaga cuando vuelva a presionar el boton me refiero a un "interruptor digital on of con un boton "

//en pic c compiler//
esto es lo que llevo hasta ahora;

void main()
{
set_tris_a(0b11111111);
set_tris_b(0b00000000);
while(true){
if(input(pin_A1)==0)
output_low(LED);
if(input(pin_A1)==1)
output_high(LED);
}
}

:confused: lo pruebo en proteus y al presionar el boton el led enciendo pero cuando lo suelto se apaga y en lealidad lo que quiero es que se quede encendido . y apagarlo presionando el boton otra vez
 
Código:
while(true){

if(input(pin_A1)==0)
output_low(LED);

if(input(pin_A1)==1)
output_high(LED);
}

// Tu código hace: Si PINA1 = 0 _ (LED_OFF) * SI PINA1 = 1 _ (LED_ON)
// segun lo que dices deberia de ser
// Si PINA1 = 0 _ (negar_LED y salir hasta que PINA1 sea distinto de 0) ó algo similar :unsure:
 
hola les agradeceria enormemente la ayuda soy nuevo en esto de los pic´s y actualmente estoy trabajando en un sistemade control de un led on off osea al presionar y soltar un boton conectado al (pin_a1) el led que esta en el (pin_b0) enciende quedando encendido y se apaga cuando vuelva a presionar el boton me refiero a un "interruptor digital on of con un boton "

//en pic c compiler//
esto es lo que llevo hasta ahora;

void main()
{
set_tris_a(0b11111111);
set_tris_b(0b00000000);
while(true){
if(input(pin_A1)==0)
output_low(LED);
if(input(pin_A1)==1)
output_high(LED);
}
}

:confused: lo pruebo en proteus y al presionar el boton el led enciendo pero cuando lo suelto se apaga y en lealidad lo que quiero es que se quede encendido . y apagarlo presionando el boton otra vez

Puesde usar lo siguiente:

Código:
if(input(pin_A1)==0)    // Si el boton cuando es presionado pasa de 1 a 0 .
   output_toggle(LED); //Cambia de estado

Al usar botones y lo quieras probar en fisico recuerda usar alguna rutina antirebotes.
Para hacerlo facilito agrega un retardo de minimo 20ms despues de presionar el boton.

Saludos!
 
muchas gracias funciona al a perfeccion . lo aplique asi


void main()
{


// control on off led en (pin_b2)//

while (true){

if(input(pin_A1)==0){ //presionando boton//
delay_ms(30); //retardo anti rebotes//
if(input(pin_A1)==0)
output_toggle(pin_b2);
while(input(pin_A1)==0);
}

}
}
 
Atrás
Arriba