Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AjarDeNauer en 28 Abril 2011, 13:06 pm



Título: Instrucción para controlar un pin ???
Publicado por: AjarDeNauer en 28 Abril 2011, 13:06 pm
¡ Hola ! 

Necesito resolver una pequeña duda y he echado mano de este foro para ver si la puedo solventar.

Hay alguna instrucción que me permita cambiar el estado lógico de un pin sin tener que evaluarlo? Me explico: esté como esté el pin, ya sea a uno o a cero, que se cambie al estado contrario, sin tener que evaluarlo con el posible if / else, para que así consiga hacerlo en una sola línea de código y emplear el menor tiempo posible

Muchas gracias.  :D


Título: Re: Instrucción para controlar un pin ???
Publicado por: ssaammuu en 28 Abril 2011, 14:32 pm
Si extraes el valor, este será 1 o 0, si tratamos 1 como booleano verdadero y 0 como booleano falso puedes hacer estado=!estado para cambiar.


Título: Re: Instrucción para controlar un pin ???
Publicado por: AjarDeNauer en 28 Abril 2011, 16:40 pm
He puesto PIN_B1=!PIN_B1; pero al compilar no me pilla esa expresión


Título: Re: Instrucción para controlar un pin ???
Publicado por: arisma en 28 Abril 2011, 16:46 pm
Sí existe.

Creo recordar que debes usar o/y lógicos para cambiar el pin(bit?)


Título: Re: Instrucción para controlar un pin ???
Publicado por: Akai en 28 Abril 2011, 17:40 pm
Utiliza una XOR:


cplusplus.com :

XOR (Exclusive Or)
This operation is performed between two bits (a and b). The result is 1 if either one of the two bits is 1, but not in the case that both are. There for, if neither or both of them are equal to 1 the result is 0.

XOR (^)
a   b   a^b
0   0   0
0   1   1
1   0   1
1   1   0


La utilidad de la XOR en este caso, es que algo XOR 1 = !algo.

Por tanto:

Código
  1. bool a=1, PIN_B1=0;
  2.  
  3. PIN_B1=a^PIN_B1

cambia el estado de PIN_B1 al negado.


Título: Re: Instrucción para controlar un pin ???
Publicado por: El_Java en 28 Abril 2011, 18:51 pm
No valdría en vez de usar XOR usar el complemento "~"?

Por ejemplo:
Código
  1. PIN_B1 = ~PIN_B1

Pregunto, no tengo aun claro los operador de bits xD


Título: Re: Instrucción para controlar un pin ???
Publicado por: Akai en 28 Abril 2011, 18:57 pm
@El_Java:

Si, de hecho esa es la respuesta que precisamente se está buscando y en la que no había caído. Me acostumbré a la XOR cuando necesito cambiar un bit  en concreto para máscaras usando enteros y no pensé en el complemento.


Título: Re: Instrucción para controlar un pin ???
Publicado por: El_Java en 28 Abril 2011, 19:48 pm
Me alegro de haber ayudado, no estaba seguro, los operador de bits me lian muchisimo.

Por cierto Akai, sino te importa echale un ojo a mi tema del foro, que se que tu entiendes bastante, a ver si pudieras ayudarme.

Un saludo.


Título: Re: Instrucción para controlar un pin ???
Publicado por: AjarDeNauer en 29 Abril 2011, 01:38 am
gracias pero... no sé qué pasa, no me pilla la instrucción, me da error el compilador. No puedo asignarle nada al pin (=) pero sí evaluarlo (==). Me dice esto: expecting LVALUE such as a variable name or * expression


Título: Re: Instrucción para controlar un pin ???
Publicado por: Akai en 29 Abril 2011, 02:03 am
Si pones el código que da problemas, es probable que podamos ayudarte sin recurrir a bolas de cristal adivinatorias.


Título: Re: Instrucción para controlar un pin ???
Publicado por: AjarDeNauer en 29 Abril 2011, 16:36 pm
Sí claro como no:

PCW y es el clásico reloj con 4 displays, y los segundos vienen marcados por dos leds centrales que se encienden y apagan. La señal les viene del pin B1, donde su instrucción la estoy implementado en esta rutina o función, que a cada segundo pasa por ahí con el consiguiente retardo. estoy pensando que tal vez sea este compilador no sé ni que versión es.

este es el error que me da:

(http://img836.imageshack.us/img836/3735/77098676.jpg)

main:

(http://img3.imageshack.us/img3/7923/34305399.jpg)

la rutina:

(http://img856.imageshack.us/img856/1671/13648969.jpg)


y las directivas declaradas:

(http://img607.imageshack.us/img607/2605/51916608.jpg)




















Título: Re: Instrucción para controlar un pin ???
Publicado por: Akai en 29 Abril 2011, 19:53 pm
Lo interesante sería saber en qué y ver la linea del código da ese error, porque no parece verse en los fragmentos que tu has puesto.

Por otro lado, recordemos que ^ es una XOR bit a bit, por tanto si el PIN_B1 tiene más de un bit y le haces una XOR a 1, únicamente alterarás el LSB, el bit menos significativo. Para 2 bits, necesitarías hacer la XOr con 0x3, para 3 con 0x7 ...