NO NO NO y NO..
Vamos desde el comienzo.
- input(pin) es una funcion, que cuando vos le pasas como parametro PIN_xx el compilador lo reemplaza por una instruccion simple la cual retorna el estado del pin, y no hace nada mas.
- PIN_xx es un numero que a vos sinceramente no te interesa que valor tenga
- dentro del if podes poner cosas, pero no hay ninguna razon por que le pongas una coma.
- la funcion output_bit(pin,valor) toma 2 parametros, uno que es el PIN_xx y el valor, esta funcion lo que hace es cambiar la salida. Pensalo como si sacas una caja y la pones en otro lado, al igual que input.
- input_xx y ouput_xx son funciones !, no por que si es salida tenes que usar output y si es entrada tenes que usar input, input es una funcion que lee y retorna el valor del puerto o pin segun la funcion usada, y el output lo que hace es enviar el valor que uno le de al puerto. NADA MAS. CCS si no usas FAST_IO hace que si usas output sobre una entrada te lo cambia a salida. Sinceramente es una MIER*** eso, y la mayoria que vienen con problemas aca al foro es uno de los mas comunes. Pero si usas el FAST_IO y seteaste correctamente los tris el input y output hacen lo que dije nomas.
Entonces con todo lo anterior. Si tenes:
Primero se ejecuta la funcion output_bit(PIN_B7,0) el resultado de eso puede retornar cualquier cosa ( Indefinido, ya que no tiene valor de retorno, porque no esta hecha para eso ) supongamos por un momento que devuelve un numero 100. Lo siguiente es comparar ese 100 con el 0, y de alli se transforma en true o en false.
Esta linea:
se traduce en lo siguiente:
- Evaluo PIN_B7, como es un numero y distinto de 0, quiere decir que es TRUE
- Por estar la coma, descarto lo anterior y tomo el 0, como es 0 entonces es FALSE y esto es lo que usa ese if, seria lo mismo que escribir if(0)
Si quisiera saber exactamente el estado de un pin o una variable usaria:
if(input(PIN_A0)==1) {}
if(variable==1) {}
Respetando siempre de ponerlo como FAST_IO