TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: retovil en 05 de Enero de 2017, 09:55:42
-
hola amigos , como parar un toggle ? toggle off ,o toggle break.
if (pin_b7,0){output_toggle (pin_b5)=off;} .
o
if(pin_b7,0){output_low(pin_b5);} esta no funciona .
porque no me funcionan las sentencias if ? :D
-
Me parece que deberias buscar un tutorial de C por el error que estoy viendo.
Aunque sea para que veas el tema de los loops y/o control de flujo, como funcionan, como se escriben, que significa cada parte del mismo.
Solo te voy a aportar una cosa.
PIN_xx es un numero solamente, el compilador entiende que ese numero es un pin nada mas.. pensalo como si fuera:
#define HOLA 5
que ocurre si haces if(HOLA)
que seria lo mismo que hacer if(5).
-
Pero KillerJC , si pongo lo siguiente : output_toggle(PIN_B5); seguro que a la salida del pin b5 empezara un alto y despuès un bajo .y sera infinito con un while o loop.
ahora el sistema me demanda a modo de informacion del usuario ,que ese blink en el pin 5 del pic ,se detenga cuando la salida de algun otro pin sea 0 .Me obliga a usar un condicional
If(expresión)
{
Sentencia_1;
}
Ejemplo:
if(input(PIN_A0)==1)
{
output_low(PIN_B5);//que es el del blink
}
else
{
return;
}
-
esta bien, tu problema esta en el condicional... Observa lo que pusiste en tu ultimo codigo que es lo correcto:
Y lo que pusiste antes:
¿Notas la diferencia?, hay una coma y no esta el input()
-
Claro porque en este caso la que se pone a 0 es una salida y no una entrada
if (PIN_B7,0).
porque este codigo no lo toma ,supuse que como es una salida ,output
if (output(PIN_B7)==0)
el tema es que no me funciona cuando quiero bloquear el toggle .
-
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