.
Mm.. no me queda muy claro cómo es el funcionamiento de los pulsadores. Pero más allá de eso, hay algunas líneas que "retocar" el en programa (espero no te lo tomes a mal, son con intención de ayudar):
1- La directiva ORG indica en qué lugar de la memoria de programa va a ir lo que hay por debajo de ella. En este caso has hecho lo correcto al poner ORG 0X00, ya que desde ahí empieza a leer el PIC. Pero debés tener en cuenta que en la posición 0X04 de la memoria (en este caso lo ocupa la línea CLRF TRISB) se encuentra el vector de interrupción. Es decir que ahí va a ir el uC cuando ocurra una interrupción. Es por eso que no se acostumbra iniciar el código en la línea 0X00, sino poner
ORG 0x00
GOTO inicio
ORG 0x05
inicio
... ; ACÁ EMPIEZA EL PROGRAMA
Para saltarse el vector. En caso de querer usar un programa con interrupciones, habría que poner
ORG 0x00
GOTO inicio
ORG 0x04
GOTO rutina_de_interrupcion
inicio
... ; ACÁ EMPIEZA EL PROGRAMA
...
rutina_de_interrupcion
... ; ACÁ SE DESARROLLA LA INTERRUPCION
2- La línea
"bsf SensorMarcha; configura la linea de entrada RA0"no está bien ubicada. El compilador reemplaza la etiqueta SensorMarcha por PORTA,1. Es decir, estás poniendo
"bsf PORTA,1; configura la linea de entrada RA0"lo que es incorrecto, porque el registro PORTA está en el banco 0.
3- (Esto es una cuestión de elegancia más que de funcionamiento). En vez de poner las líneas
clrw
movwf PORTB Podrías poner
clrf PORTB
Hace lo mismo, pero ahorrás una línea.
4- Esta es la razón por la que el programa se ejecuta una sola vez. Antes de la etiqueta DEMORA falta poner un salto hacia la etiqueta Sensar, porque una vez que el uC llega a la instrucción
movwf PORTB (justo antes de DEMORA), la siguiente instrucción que ejecuta es
movlw .117 ; 1 set numero de repeticion (B). Entonces llega a la rutina de retardo y luego termina en la directiva END, y de ahí no ejecuta nada más.
Espero que te hayan servido mis comentarios. Por cualquier otra duda, volvé a preguntar.

Saludos.