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
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
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 ... |