¿Se puede leer el estado de la salida de un PIC?

Mi pregunta es si se puede leer el estado de una salida de un PIC.
En este caso sería el 16F628A, para después con la información de dicha salida poder condicionarlas.

Por ejemplo:
Quiero condicionar el encendido de cierta cantidad de motores, pero debe de haber una condición.
El motor 2 y 3 sólo se podrán prender si anteriormente se prendió el motor 1
El motor 2 sólo se podrá prender si el motor 1 fue activado anteriormente.
El motor 3 no podrá prender si el motor 1 y 2 no están encendido.
Y claro, cada uno que se pueda apagar por separado.

Mi idea era condicionar las entradas para poder encender los motores con alguna condición IF y así poder prender el primer motor.
Mi sorpresa comienza cuando intento prender el segundo motor.

Mi idea era condicionar algo así:
Antes se declararon las respectivas #define If (input(boton1) == 1 && (output(motor1) == 1))
encender(motor2);

Pero al querer hacer esto el compilador me marca un error.

Quisiera saber si hay alguna manera de poder leer el estado de las salidas y después poder utilizar dicha información para condicionarla en un IF.
 
Última edición por un moderador:
Un par de preguntas, puedes poner tu codigo para ver a que te refieres de lo contrario hay que jugar a adivinar lo que quieres, yo no soy el mas indicado, seguramente, para responderte pero va bien ver el codigo, y la otra, por que pones if(input(boton1))==1), con poner if(input(boton1)) es suficiente, ahorras escritura.
 
Desconozco en general los pics y en particular ese modelo pero casi siempre siempre se puede leer el registro con lo que has escrito previamente en el pin, y si no se puede, puedes guardar una copia en RAM cada vez que escribes.
Una tercera opción es incluirlo en la lógica de activación.
 
Quisiera saber si hay alguna manera de poder leer el estado de las salidas y después poder utilizar dicha información para condicionarla en un IF.
Para leer estado de un bit de un puerto, se usa la instrucción input_state(PIN);
Esta instrucción no altera el comportamiento del pin, al contrario de input(PIN); que lo convertiría en entrada afectando su comportamiento como salida.

Para definir instrucciones, se hace de esta forma, por ejemplo:
C:
#define motor1 PIN_B3
#define motor2 PIN_B4
#define motor3 PIN_B5

#define estado_motor1 input_state(motor1)
#define estado_motor2 input_state(motor2)
#define estado_motor3 input_state(motor3)

#define encender_motor1 ouput_high(motor1)
#define encender_motor2 ouput_high(motor2)
#define encender_motor3 ouput_high(motor3)

#define apagar_motor1 output_low(motor1)
#define apagar_motor2 output_low(motor2)
#define apagar_motor3 output_low(motor3)
Nunca le he visto mucha utilidad a eso y prefiero usar el método directo.

Ya con eso puedes comparar los estados:
C:
if(estado_motor1 == 1 && estado_motor2 == 0)
{
     // Código
}
Existen otras formas, como declarar los puertos y los bits, pero me parece que en tu caso con eso basta.
 
Atrás
Arriba