TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xabc2007 en 09 de Mayo de 2011, 06:34:59

Título: utilizar un AND en una condicion IF
Publicado por: xabc2007 en 09 de Mayo de 2011, 06:34:59
Hola a todo el foro,quiero que al pulsar dos pulsadores a la vez se encienda un led. Yo lo haria de la siguente manera pero

da error al compilar:



if (BIT_TEST(PORTC,0)==1)  AND  (BIT_TEST(PORTC,1)=1    bit_set  ( PORTC, 2 );   


Como puedo en una solo linea de programa que se cumplan dos condiones: BIT_TEST(PORTC,0)==1 y  BIT_TEST(PORTC,1)==1

Gracias de antemano.

Saludos.


El programa que utilizo es este:







#include <16F876.h>

#FUSES XT,NOWDT
#FUSES
#use delay(clock=4000000)


#BYTE TRISC = 0X87
#BYTE PORTC = 0X07

void main()

 { 


  bit_set (TRISC , 0);  // C0 como entrada, para el pulsador
  bit_set (TRISC , 1);  // C1 como entrada, para el pulsador
   
  bit_clear(TRISC , 2); // C2 como salida, para el led
   
   
while (1)
{


   // Esta linea no funciona:

         if (BIT_TEST(PORTC,0)==1)  AND  (BIT_TEST(PORTC,1)=1 bit_set  ( PORTC, 2 );   
   //encedemos el led cuando se producen estas dos condiciones simultaneamente


         if (BIT_TEST(PORTC,0)==0)  bit_clear( PORTC, 2 );// apagamos el led

      delay_ms(100);
   
   
      }
}


Título: Re: utilizar un AND en una condicion IF
Publicado por: jukinch en 09 de Mayo de 2011, 08:26:08
Hola xabc2007 :
            Mira esta parte del código   
if (BIT_TEST(PORTC,0)==1)  AND  (BIT_TEST(PORTC,1)=1 bit_set  ( PORTC, 2 );   

El igual que usás que te marqué con rojo es de asignación y no de comparación.
Debés usar doble signo == como hacés con if (BIT_TEST(PORTC,0)==1
        Saludos.
              Jukinch





Título: Re: utilizar un AND en una condicion IF
Publicado por: MGLSOFT en 09 de Mayo de 2011, 08:30:54
Da error porque no se escribe AND sino que debes insertarle esto && en vez de AND
Título: Re: utilizar un AND en una condicion IF
Publicado por: pablomanieri en 09 de Mayo de 2011, 09:23:43
Además de todo eso, te faltan algunos paréntesis:


if ((BIT_TEST(PORTC,0)==1) &&  (BIT_TEST(PORTC,1)==1))   bit_set( PORTC, 2 );
también lo puedes escribir así:

if (BIT_TEST(PORTC,0)==1 &&  BIT_TEST(PORTC,1)==1)   bit_set( PORTC, 2 );
Título: Re: utilizar un AND en una condicion IF
Publicado por: xabc2007 en 09 de Mayo de 2011, 09:31:59
MUCHAS GRACIAS jukinch, MGLSOFT, pablomanieri, voy a probarlo.

Saludos.


Título: Re: utilizar un AND en una condicion IF
Publicado por: PalitroqueZ en 09 de Mayo de 2011, 12:31:24
y se puede simplificar mas

if (BIT_TEST(PORTC,0) &&  BIT_TEST(PORTC,1)) bit_set( PORTC, 2 );

Título: Re: utilizar un AND en una condicion IF
Publicado por: xabc2007 en 09 de Mayo de 2011, 12:50:33
PERFECTO, ya funciona. Muy agradecido por TODAS las respuestas.

Un saludo a todo el foro.


Título: Re: utilizar un AND en una condicion IF
Publicado por: bigluis en 09 de Mayo de 2011, 18:07:03
O puedes declarar los bit y utilizarlos de una manera mas rapida

Código: [Seleccionar]
#BYTE PORTC=getenv("SFR:PORTC")
#bit RC0=PORTC.0
#bit RC1=PORTC.1
#bit RC2=PORTC.2
...
void main(){
...
if(RC0==1 && RC1==1)RC2=1;
...

La linea del if la puedes cambiar por:
Código: [Seleccionar]
RC2=RC0 & RC1;

Y resultara igual
Título: Re: utilizar un AND en una condicion IF
Publicado por: xabc2007 en 10 de Mayo de 2011, 06:42:19
Gracias bigluis, ya tengo el programa funcionando. Todas las respuestas han sido de gran ayuda.

Saludos.