TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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);
}
}
-
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
-
Da error porque no se escribe AND sino que debes insertarle esto && en vez de AND
-
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 );
-
MUCHAS GRACIAS jukinch, MGLSOFT, pablomanieri, voy a probarlo.
Saludos.
-
y se puede simplificar mas
if (BIT_TEST(PORTC,0) && BIT_TEST(PORTC,1)) bit_set( PORTC, 2 );
-
PERFECTO, ya funciona. Muy agradecido por TODAS las respuestas.
Un saludo a todo el foro.
-
O puedes declarar los bit y utilizarlos de una manera mas rapida
#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:
RC2=RC0 & RC1;
Y resultara igual
-
Gracias bigluis, ya tengo el programa funcionando. Todas las respuestas han sido de gran ayuda.
Saludos.