Interrupcion:
- No hace falta desactivar el GIE en la misma, cuando entra ahi se desactiva por si sola y el RETFIE activa el GIE nuevamente.
- El codigo de salvar W/STATUS esta mal, hay instrucciones que modifican banderas, tales como MOVF, te sugiero que busques en el datasheet "STATUS_TEMP" ahi vas a tener el codigo para poner dentro. Mira la diferencia entre el codigo de entrada y el de salida.
- El codigo de guardar el STATUS y W es lo primero y lo ultimo que tenes que hacer, NADA puede ir antes de eso como tenes vos tus BCF
- No podes hacer un loop dentro de una interrupcion, en realidad si """"podes""" pero no es una buena practica, y necesita de unas buensa limitaciones. Y me refiero al loop que hace el "GOTO pta", es preferible poner a 1 un bit de algun registro y luego en tu programa principal te fijas si esta en uno y ahi si queres esperas todo lo que quieras. Aunque decia que "podes" en tu programa es aplicable asi que podes hacerlo, pero tenelo en cuenta para otros programas
- No actives las interrupciones DENTRO de las interrupciones, me refiero a GIE, por el mismo tema que puse al principio,
- En la interrupcion apagas el motor ( pero no sabes si estaba en marcha o no.. ) y luego lo pones en marcha de nuevo!, por que pondrias en marcha el ascensor si nadie toco un boton o no estaba marchando antes el motor!
- Aca no se como es que manejan la puerta realmente, no vi nada que encienda y apague un motor de una puerta como para que el sensor se dispare. O lo hacen externamente con un boton, el tema esta tambien que cuando llegan a un piso si algun otro tiene presionado la tecla no hay nada que abra la puerta. Si usan un pulsador detendrian la marcha del motor en cualquier punto y no en un piso.
- Temporizacion de la puerta?
Inicio:
- Consejo, primero configura todo y luego habilita las interrupciones, habilitar las interrupciones es el ultimo paso.
Parar:
- Podrias haber usado CLRF, para poner un 0 en el registro de PISO y POSCABINA
Pisos:
- Intenta primero apagar el motor y luego cambiar la direccion en el apagado, y cambiar la direccion y encender el motor en el encendido
- Al final que haces un CLRF PISO, tampoco posee sentido, ya que cuando lo usas apenas entras le asignas un valor, esa instruccion esta por demas.
Puerta:
Lo demas esta bien, hay cosas que se "podrian" haber ahorrado, es decir hay instrucciones de mas en algunas partes pero sigue estando bien. Como ves el mayor problema lo tenes en la interrupcion
Por cierto, muy bien comentado el codigo, esta perfecto asi.