Veo que en tu código para cambiar de bancos tocas los registros RP0 y RP1.
Lo que voy a proponerte ahora es otra cosa para que no tengas que estar escribiendo eso también. Imagínate que cada vez que quieras cambiar de banco no tuvieras que pensar... mmm en cual había que poner un "1" en RP0 o en RP1?...
Pues bien. Puedes hacer lo siguiente:
Código:
Banco0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
Banco1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
Banco2 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
Banco3 macro
bsf STATUS,RP0
bsf STATUS,RP1
endm
padigital macro ;Para el correcto funcionamiento de esta macro es
movlw 06 ;necesario que antes se esté posicionado en el banco 1.
movwf ADCON1
endm
Con esto, estas creando unas macros y te servirán para no tener que escribir tanto en el código cada vez que quieras cambiar de banco. Será menos tedioso programar en ASM.
Estas macros lo que hacen es sustituir en el código donde pongas "Banco0" por lo que pone ahí. No es como una subrutina o función a la cual llamas y realizas un salto de PC para ejecutarla. Con esto directamente le mandas a el compilador que sustituya "Banco 0" por "bcf STATUS,RP0 / bcf STATUS,RP1".
Esto puedes guardarlo en la misma carpeta donde vayas a compilar tu programa y llámalo "macros.inc" por ejemplo. Luego, para incluirlo en tu programa, en vez de ponerlo abajo, ponlo arriba, encima de la declaración de variables, debajo de la configuración del PIC.
Código
list p=16f876, f=INHX8M, r=hex include "p16f876.inc" include "macros.inc" CONDIR equ 20 CONCAR equ 21 org 0
Pruébalo. Espero que te sirva.
Un saludo.