TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cucu en 12 de Diciembre de 2008, 09:31:12
-
hola, tengo una duda que creo que es muy tonta... ¡pero no se como se hace!, el tema está en que quiero hacer el or lógico de varios bits, ejemplo:
char uno = 0b00110011;
char dos = 0b11000000;
char solucion = ¿?¿?¿?;
la solución que espero es 0b11110011 pero no me sale, pensaba que era || pero no sale el resultado que yo espero.
¿alguna idea? Gracias !
(por cierto, supongo que da igual, pero mi compilador es el C18)
-
solucion = uno | dos;
Eso debería servirte.
La diferencia entre "|" y "||" es que el primero hace un OR bit a bit, y el segundo hace un OR a nivel de la condición completa. O sea, como tanto "uno" como "dos" son distintos a 0, el resultado sería "1".
-
Eso ya lo probé y tampoco funcionaba. Mi código real hace:
unsigned char config = USART_TX_INT_OFF || USART_RX_INT_OFF || USART_ADDEN_OFF || USART_BRGH_HIGH
|| USART_CONT_RX || USART_EIGHT_BIT || USART_ASYNCH_MODE ;
#define USART_TX_INT_OFF 0b00000000 // Transmit interrupt off
#define USART_RX_INT_OFF 0b00000000 // Receive interrupt off
#define USART_ADDEN_OFF 0b00000000 //
#define USART_BRGH_HIGH 0b00010000 // High baud rate
#define USART_CONT_RX 0b00001000 // Continuous reception
#define USART_EIGHT_BIT 0b00000000 // 8-bit data
#define USART_ASYNCH_MODE 0b00000000 // Asynchronous mode
lo que da como resultado 00011000,
si hago el cálculo con || me sale 00000001
y con | sale 11111111
No soy capaz de descubrir que está haciendo...
Gracias
-
El operador que debes usar es |, y no ||
Si no sale bien es que pasa algo raro. Revisa paso a paso simplificando la operación hasta encontrar dónde falla:
unsigned char config = USART_TX_INT_OFF | USART_RX_INT_OFF;
config = config | USART_ADDEN_OFF;
config = config | USART_BRGH_HIGH;
config = config | USART_CONT_RX;
config = config | USART_EIGHT_BIT;
config = config | USART_ASYNCH_MODE ;
-
vale, ya he descubierto donde falla no tenía nada que ver con la suma, era que los valores no eran los que yo pensaba. Gracias