El pin RB0 tiene las siguientes capacidades:
Para TRISB.0 = 0
RB0 data output.
Para TRISB.0 = 1
PORTB<0> data input ; weak pull-up when RBPU bit is cleared.
AN10 A/D Input Channel 10 and Comparator C1+ input. Default input configuration on POR.
C1INA Comparator 1 Input A.
INT0 External Interrupt 0 input.
Indistinto del TRISB.0
FLT0 Enhanced PWM Fault input for ECCPx.
Vemos que tenes que ese pin para cuando TRISB.0 esta en 1, puede funcionar con varios modulos. Entre ellos hay 2 que son analogicos como el AN10/C1INA, ademas como vas a ver tenes que en la descripcion del AN10, como Default la entrada es ANALOGICA y lo necesitamos digital. Entonces para asegurarnos debemos:
- Pasarlo a entrada ( esto ocurre en el POR pero nos aseguramos siempre en caso de reset)
- Pasarlo a digital ( Ponemos a 0 los bits del ANCON1 correspondiente de esos pines que serian los bits 0 al 2 )
Con este ultimo punto, te aseguras que el modulo del comparador/ADC no funcionen, ya que necesitan que sean analogicas las entradsa
- Asegurarse de que el PWM del ( ECCP ) se encuentre apagado. Esto con el POR se encuentra ya de por si deshabilitado en el arranque.
entonces.... Solo necesitas agregar:
------------------------------------------------------
Estas confundido, los PIC16 tiene 2 formas de acceso a memoria, ACCESS y BANKED.
Si usas instrucciones asi ( como los pic16 ):
el compilador sobre entiende que es ACCESS, en ACCESS el mapeado de la RAM es de 0x00 a 0x5F (banco 0 unicamente), es decir siempre que uses ACCESS podes acceder al banco 0 desde las direcciones 0x00 al 0x5F, y tambien a los SFR que se ubican desde 0x60 a 0xFF, observa que no es necesario cambiar de bancos, los SFR se encuentran en una parte del banco 15, pero se puede acceder a los mismos sin necesidad de cambiar de banco para nada.
La otra opcion es usar BANKED, ejemplo ADDWF 0x10, W, BANKED, este hace caso al banco que vos seleccions poniendo en el BSR ( con el MOLVB )
Para que se entienda mejor voy a hacer un ejemplo y los comentarios te van a decir desde que direccion de memoria se toman los datos, para que veas la diferencia de ACCESS/BANKED:
MOVLB 0x00 ;Banco 0
ADDWF 0x30, W, ACCESS ; Por ser ACCESS y la direccion RAM 0x30, suma lo que hay en 0x030 (banco 0) con W
ADDWF 0x30, W ; Lo mismo que el anterior, por cuestioenes de compatibilidad es lo mismo que la instruccion anterior
ADDWF 0xA3, W, ACCESS ; Ahora la direccion es 0xA3 y es superior a 0x60, por ende accede a los SFR (banco 15) y el resultado es sumar el registro PIE3 (0xFA3) y W
ADDWF 0xA3, W, BANKED ; En este caso al usar BANKED hace uso del valor de banco que le dimos por lo que suma el contenido de la direccion de memoria 0x0A3 + W
MOVLB 0x01 ; Banco 1
ADDWF 0x30, W, ACCESS ; Suma el contenido de 0x030 a W
ADDWF 0xA3, W, ACCESS ; Suma el contenido de 0xFA3 (PIE3) a W
ADDWF 0xA3, W, BANKED ; Suma el contenido de 0x1A3 a W
Si observas el codigo anterior, sin usar bancos tenes de 0x00 a 0x5F lugares para guardar tus cosas y usar las mas comunes, y podes acceder a todos los SFR sin cambiar de banco.
Ademas luego podes usar el BANKED para acceder por completo todo el banco. Si seleccionas el banco 1 al comienzo, podrias tener de 0x100 a 0x1FF ( 256 valores ) + de 0x00 a 0x5F (96) posiciones de RAM sin siquiera cambiar de banco, lo cual para un programa en ASM seguramente sea suficiente.