TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cucu en 12 de Diciembre de 2008, 09:31:12

Título: suma de bits
Publicado 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)
Título: Re: suma de bits
Publicado por: Nocturno en 12 de Diciembre de 2008, 10:16:37
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".
Título: Re: suma de bits
Publicado por: cucu en 12 de Diciembre de 2008, 10:36:20
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
Título: Re: suma de bits
Publicado por: Nocturno en 12 de Diciembre de 2008, 10:58:18
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 ;
Título: Re: suma de bits
Publicado por: cucu en 12 de Diciembre de 2008, 11:34:36
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