Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/03/2016 #21


Encender varios leds en C
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.
Código 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.
31/03/2016 #22

Avatar de yorsk2004

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
			}
		}
	}
}
31/03/2016 #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
31/03/2016 #24
Moderador

Avatar de D@rkbytes

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.
30/04/2016 #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
Archivos Adjuntos
Tipo de Archivo: rar 16F84A Toggle.rar (20,9 KB (Kilobytes), 13 visitas)
30/04/2016 #26
Moderador

Avatar de D@rkbytes

OliMarch dijo: Ver Mensaje
D@rkbytes disculpa. El código que subiste hecho en C, ¿cómo lo pasarías para Microcode Studio ?
Cambiando la sintaxis y las instrucciones, por las que se usan en Basic de MCS.

Por ejemplo:
If PORTA.2 = 0 Then
Toggle PORTB.7
While PORTA.2 = 0 Wend
EndIf
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.