Comienza por definir cuántas entradas y salidas necesitas:
Entradas: El sensor del control remoto (CR)
Limit Switch puerta abierta (LA)
Limit Switch puerta cerrada (LC)
Sensor óptico de presencia (SO)
Botón local de emergencia (BE)
Salidas: Bajar puerta (PB)
Subir puerta (PS)
Luz roja de aviso (LUZ)
Son 8 líneas en total las que necesitas.
El PIC16F84A tiene 13 líneas de entrada/salida, así cubre perfectamente los requerimientos.
El siguiente paso es hacer un diagrama de flujo, ya que tienes bien comprendida la idea de lo que quieres que haga tu proyecto.
Primero, tu programa debe iniciar con la configuración de puertas, (RB0 a RB4 como entradas y RB5 a RB7 como salidas).
Luego, el micro deberá comprobar la posición de partida o referencia de tu puerta, esto es, debe comprobar que la puerta se encuentra cerrada revisando el LC; si se halla activado, la puerta está cerrada, no hay problema y sólo le resta esperar que se presente un pulso de activación proveniente del control remoto a través de CR. En cambio, si LC no está activado, se deberá activar la salida PB para que la puerta baje a su posición cerrada (probablemente por mantenimiento o por un corte de energía la puerta quedó a medio cerrar o medio abrir). El micro revisará en qué momento se activa LC para apagar la salida PB. Con esto, la puerta queda cerrada y el micro a la espera de un pulso del control remoto.
Enseguida puede el micro revisar una y otra vez la entrada del control remoto (CR) para ver en qué momento se produce un pulso por parte del usuario (solución poco elegante). O puede reservarse la entrada RB0/INT del PIC para esta señal de entrada y mandar al micro a SLEEP (modo de bajo consumo) mientras espera el pulso del control (solución óptima dado que se explota el recurso de las interrupciones que brindan todos los micros).
En el ejemplo que te mando elijo la primera propuesta.
Como ves no es difícil (sí claro, sobre todo si ya has programado algunos, jaja). Checa el archivo PDF adjunto y espero que te sirva y lo puedas continuar haciendo.
Cuando ya terminaste tu diagrama de flujo, podrás ahora codificar el programa, es decir, escribir en lenguaje assembler por ejemplo, y posteriormente ensamblar el programa para obtener el archivo .HEX que es el que enviarás al PIC a través de un buen programador.
Te agrego el código correspondiente al trozo de diagrama de flujo que te envío.
Como ves, no es difícil hacer el código, sobre todo si ya tienes experiencia previa en programar este tipo de micro.
Saludos y Suerte!!!