TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cicloide2 en 31 de Marzo de 2014, 20:31:42
-
Que diferencia hay en las siguientes notaciones, es decir funcionan de la misma manera o no? y por que?, y que funcion cumple en particular la operacion OR? (supongo yo, que es una manera de forzar el puerto B, como salida independientemente del estado en que se encuentren los pines), en fin el que sabe, sabes y el que no apela, a los colaboradores de todopic. ;-)
1)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80);
y
2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80);
Estoy jugando con 8 led, si quieren que postee el codigo lo subo.
Gracias.
-
Hola, no funcionan de la misma manera, la primera forma es con el operador OR a nivel de bits, osea que hace la operación OR bit a bit de los operandos, que si no me equivoco te daría 0xFF en este caso.
La segunda forma es a nivel booleano digamos, hace la operación OR pero con el valor booleano de los operandos, que en este caso de daria VERDADERO.
Saludos.
-
Gracias diguito_69, por la respuesta.
Al resto pido disculpas, pero después me di cuenta que debería haber posteado mi duda, en la seccion de lenguajes de programacion. Pero asocié mal, dije para mi si estoy con un MC9S08QG8, de Freescale, debo colocar mi duda aca, en fin si la comunidad ó los moderadores deciden que debe ser así que así sea, no hay problema, si debo hacerlo yo mismo, (digo lo de trasladar la pregunta a la seccion que sea la correcta ) me lo dicen.
Saludos y gracias. :-/
-
Gracias Nocturno. ;-)
Ahora para diguito_69, es como tu dices al colocar:
2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera
a- PTBDD=0xFF; // ó
b- PTBDD=0b11111111; //verdad?
Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.
Gracias. :)
-
es al revés, al usar || solo obtendrás como resultado un "verdadero", si quieres hacer que todos esten en 1, entonces debes hacer:
0x01 | 0x02 |.....
-
Gracias Nocturno. ;-)
Ahora para diguito_69, es como tu dices al colocar:
2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera
a- PTBDD=0xFF; // ó
b- PTBDD=0b11111111; //verdad?
Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.
Gracias. :)
De estas tres formas solo la a y la b son equivalentes, porque como te dije anteriormente, con el operador || solo obtenes VERDADERO o FALSO, este operador generalmente lo tienes que usar solo en condiciones de los bucles for, etc., bloques if o alguna llamada a función que así lo requiera. En cualquier otro caso, como una asignación (lo que estas haciendo vos), solo lo tendrías que usar si tenes bien claro el porque lo estas haciendo.
La forma a y b serian equivalentes a la forma 1 del primer mensaje (ya lo aclaro rivale). En el caso tuyo, que estas asignando un valor constante, seria conveniente utilizar las formas a y b.
Veo que no entendiste bien lo que explique en el primer mensaje; la primera forma, con el operador | , lo hace a nivel de bit osea que si por ejemplo tengo a = b | c, y si b = 0b00110100 y c = 0b01000111, entonces
b = 0b00110100 |
c = 0b01000111
-------------------------
a = 0b01110111
La segunda forma, con el operador ||, lo hace a nivel booleano osea que si por ejemplo si tengo a = b || c y si b = VERDADERO y c = FALSO, a = VERDADERO (si b = VERDADERO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = FALSO, a = FALSO).
Espero haber sido claro.
Saludos.
-
es al revés, al usar || solo obtendrás como resultado un "verdadero", si quieres hacer que todos esten en 1, entonces debes hacer:
0x01 | 0x02 |.....
Gracias rivale, fue una confucion al copiar y pegar, aclarada mi duda.
Salu2. :-/
-
Gracias Nocturno. ;-)
Ahora para diguito_69, es como tu dices al colocar:
2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera
a- PTBDD=0xFF; // ó
b- PTBDD=0b11111111; //verdad?
Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.
Gracias. :)
De estas tres formas solo la a y la b son equivalentes, porque como te dije anteriormente, con el operador || solo obtenes VERDADERO o FALSO, este operador generalmente lo tienes que usar solo en condiciones de los bucles for, etc., bloques if o alguna llamada a función que así lo requiera. En cualquier otro caso, como una asignación (lo que estas haciendo vos), solo lo tendrías que usar si tenes bien claro el porque lo estas haciendo.
La forma a y b serian equivalentes a la forma 1 del primer mensaje (ya lo aclaro rivale). En el caso tuyo, que estas asignando un valor constante, seria conveniente utilizar las formas a y b.
Veo que no entendiste bien lo que explique en el primer mensaje; la primera forma, con el operador | , lo hace a nivel de bit osea que si por ejemplo tengo a = b | c, y si b = 0b00110100 y c = 0b01000111, entonces
b = 0b00110100 |
c = 0b01000111
-------------------------
a = 0b01110111
La segunda forma, con el operador ||, lo hace a nivel booleano osea que si por ejemplo si tengo a = b || c y si b = VERDADERO y c = FALSO, a = VERDADERO (si b = VERDADERO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = FALSO, a = FALSO).
Espero haber sido claro.
Saludos.
Claro como el agua clara, como le postee a rivale, fue una confución al copiar y pegar, pero no estubo mal tu segunda manera de hacerme eneder, (por el ejemplo,digo), asi que gracias a tí tambien. :-/
Salu2.
-
Gracias Nocturno. ;-)
Ahora para diguito_69, es como tu dices al colocar:
2)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera
a- PTBDD=0xFF; // ó
b- PTBDD=0b11111111; //verdad?
Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.
Gracias. :)
Corregido.
-
Gracias Nocturno. ;-)
Ahora para diguito_69, es como tu dices al colocar:
2)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera
a- PTBDD=0xFF; // ó
b- PTBDD=0b11111111; //verdad?
Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.
Gracias. :)
Cooooregido ;-)