Buenas.
De primeras te recomiendo que para programar te crees una biblioteca propia de subrutinas para, por ejemplo, cambiarte de banco sin tener que mirar el datasheet y ver si era de una forma o de otra. A parte de que te simplificaría mucho el codigo a la hora de mirarlo.
No es lo mismo poner:
bsf STATUS,RP0
bcf STATUS,RP1
Que:
Banco1
Verdad?
Bueno, yo el único que he usado ha sido el pic16F876 pero seran muy similares.
CREO que lo que quieres hacer es:
1. Sensor en polea.
2. Señal de entrada al PIC para detectar movimiento ya sea por 1 o por 0.
3. Señal de salida del PIC a un led para indicar que se mueve la polea o no.
La verdad es que no me he enterado de nada de tu mensaje, esto lo acabo de deducir. Repite el enunciado paso por paso y mejor.
Lo que tendrías que hacer es meter esa señal en el PIC por una de sus patillas y actuar en consecuencia para, por ejemplo, encender un LED.
Para comprobar la variación vas bien encaminada, puedes hacerlo con unos bucles con BTFSS y BTFSC. ¿para que quieres echar mano de los FLAGS?
¿Sabes lo que hacen esas dos instrucciones?
- BTFSC: Chequea un bit del registro indicado y salta la siguiente instrucción si es un cero.
- BTFSS: Chequea un bit del registro indicado y salta la siguiente instrucción si es un uno.
Por lo tanto, si tienes un receptor en la patilla RB0, mismamente, lee directamente el puerto con el comando.
bucle: btfsc PORTB,0 ; Si es cero salta a Bucle, si es 1 va a ACTIVAR
goto ACTIVAR
goto bucle
ACTIVAR: LO QUE QUIERAS QUE HAGA
Después de eso tendrías que irte a otro bucle que detectara cuándo para la maquina para apagar el LED o transmisor, que sería con el mismo metodo.
Ese es el método que estabas utilizando peeeeeeeero, que siempre hay peros, de ese modo el PIC consume mucha mas energía que usando INTERRUPCIONES y poniéndolo en modo SLEEP.
De todas maneras eso ya es meterse en otro "fregao". No es difícil pero habría que explicar unas pocas cosas. Si con eso te vale, adelante.
Otra cosa que deberías ponerle es un verificador de REBOTES. En el caso de los interruptores y periféricos siempre puede haber riesgo de ruidos, me explico. En un conmutador o interruptor al conexionarlo siempre hay un pequeño rebote de milisegundos que oscila entre 0 y 1 varias veces por lo que podria apagarse y encenderse el led repetidamente, parpadear y no saber muy bien que hacer.
Por ello te recomiendo que lo compruebes. Carga en W un 01 y hazle la funcion OR con PORTB (iorlw PORTB). Creo que era asi, con ello, uno de los FLAGS te alertara de que son iguales y le preguntas al flag con BTFSS si esta a uno. Haces un retardo de 20 milisegundos y vuelves a preguntar. Despues de eso ya puedes encender o apagar el led que te indique encendido o apagado.
Te hago un indice:
1- Configura puertos
2- Leer entrada de señal.
3- Comprobar 2 veces que esta a 1 con un retardo de 20MS entre medias.
4- Actuar para activar.
3- Leer entrada de señal.
5- Comprobar 2 veces que esta a 1 con un retardo de 20MS entre medias.
6- Actuar para desactivar.
7- Goto al punto 2.
Un saludo.