Bueno regreso con mi problema. En el codigo inicial habia varios errores por mi parte, entre ellos el creer que todo el puerto B producia la interrupcion, ya vi que son solo los 4 bits altos.
Aun asi tengo ahora un problema que no consigo detectar. En el adjunto hay tres archivos, un .c, un .hex y un diseño de proteus, todo ello forma parte de mi proyecto de automatismo para una puerta de garaje y el problema es que en la simulacion, funciona todo bien, excepto las lineas en que realizo una operacion "and", (& o &&). El grupo de 8 microswich que hay en el puerto B, definen el modo de funcionamiento del automatismo de la siguiente manera: RB0, RB1, RB2 y RB3 sirven para seleccionar el tiempo que tardara en cerrarse automaticamente, RB4 no se utiliza, RB5 seleciona si se cierra automaticamente (ON) o no (OFF), RB6 selecciona si al abrir se enciende la luz del garaje por un tiempo (ON) o no (OFF) y RB7 selecciona si todo se activa con un pulsador (OFF) o con tres (ON). Estan incluidos en el bucle principal, para hacerlos interactivos, o sea que se tengan en cuenta sin necesidad de reiniciar.
Aunque en el diseño de proteus aparecen LED's como dispositivos de salida, es solo para la simulacion, en el definitivo, en su lugar iran reles.
Otro detalle es que durante la apertura, la celula fotoelectrica permanece apagada, mientras que durante el cierre permanece encendida.
Tal como esta todo, funciona solo el modo de 3 pulsadores, (salvo los finales de carrera y la fotocelula, que utilizan operaciones and), ya que en el de 1 pulsador se utilizan operaciones and en todas las lineas.
Se puede ver en el codigo fuente que he utilizado las llaves ("{}"), incluso en las lineas donde solo hay una instruccion para la funcion, pero eso aun siendo reiterativo y no necesario, tampoco deberia dar problemas.
Agradezco le echeis un vistazo y me comenteis si hay algun error que yo no veo o que esta ocurriendo.
Saludos.
P.D.: El codigo no esta acabado, faltan aun el tratamiento de las interrupciones para los temporizadores.