Encender varios leds en C

#21
Buen día. Quiero encender dos LEDs con el mismo botón pero cada LED está en un puerto diferente.
El PIC es el 16F877A y el lenguje es C, uso PIC C Compiler.


Esta es la parte del código que me falla, todo lo demás está bien.
PHP:
if(input(pin_a2)==1) {
   output_low(pin_d0);      //led verde
   delay_ms(200);
   output_low(pin_c0);       // led rojo
   delay_ms(200);

 if (input(pin_a2)==1)
     output_high(pin_d0);   //led verde
     delay_ms(200);
     output_high(pin_c0);  //led rojo
     delay_ms(200); }
    
  }
}
Los problemas que se presentan al simularlo en isis y en la vida real, son:

1) cuando oprimo el botón (pin_a2) ==1 se apagan los dos leds, el verde y el rojo pero el rojo se enciende de nuevo; cuando vuelvo a presionarlo el botón (pin_a2)== 1 debo hacerlo varias veces para que el led verde se prenda
El rojo si, con cada pulso apaga y enciende al momento.

En pocas palabras y espero no confundirlos, deseo que ambos se apaguen y prendan a la vez.
 
#22
Prueba con esto y me comentas:

Código:
int1 flag; 						//Bandera
while (true) 						//Hacer siempre
{
	if(input(pin_a2)) 				//Si pin_a2 es presionado...
	{
		output_high(pin_c0);			//Encender pin_c0 
		output_high(pin_d0);			//Encender pin_d0
		flag=1;					//Bandera es 1
		while(flag==1)				//Hacer mientras bandera sea 1
		{
			if(input(pin_a2))		//Si pin_a2 es presionado...
			{
				output_low(pin_c0);	//Apagar pin_c0
				output_low(pin_d0);	//Apagar pin_d0
				flag=0;			//Bandera es 0, para que vuelva a empezar todo
			}
		}
	}
}
 
#23
yo creo que lo que buscas es algo parecido a esto
Código:
void main(void)
  {
output_low(pin_C0); // Pones a 0 la salida C0
output_low(pin_D0); // Pones a 0 la salida D0
 
while(true) // Bucle infinito
     {
 
   if(input(pin_A2))
     {
   delay_ms(250); 
  output_toggle(pin_C0);
  output_toggle(pin_D0);
    }
   }
 }
Cada vez que pulses cambiaran las salidas
 
#24
Está bien así como el código de miglo, pero falta poner un bucle de retención.
De otra forma, siempre estarán cambiando de estado los pines mientras se mantenga RA2 en 1

Poner: while(input(pin_a2)); antes de salir del bloque "if"
Esto simplificaría el código de yorsk2004 evitando la bandera.
 
#25
D@rkbytes disculpael código que sibiste hecho en C como lo prías para Microcode Studio ?.... me podrias ayudar? .... esque necesito hacer un Tres en línea con el Pic16F887 o 16F877A pero para eso necesito enviar datos fijos con pulsadores...Gracias... Feliz tarde
 

Adjuntos

Temas similares

Arriba