Varias cosas en el codigo:
Reset
ORG 0x00 ;AQUI COMIENZA NUESTRO PROGRAMA
GOTO Inicio ;SALTO A INICIO DE MI PROGRAMA
ORG 0X05
No se pone el ORG 0x05 el mismo linker se encarga de ponerlo donde debe, en otros PICs como la flia PIC18 los GOTO ocupan 2 espacios de memoria, Y si un ORG 0x08 , GOTO xxx, y luego ORG 0x09 es un error. Por ahi mejor asegurarse que si entra a la interrupcion se salga es deicr:
Reset
ORG 0x00 ;AQUI COMIENZA NUESTRO PROGRAMA
GOTO Inicio ;SALTO A INICIO DE MI PROGRAMA
ORG 0X04
RETURN
---------------------------
Esta parte es un error de concepto:
BSF STATUS, RP0 ;NOS CAMBIAMOS AL BANCO 1, DONDE ESA TRISB
CLRF PORTB
BCF STATUS, RP0
Estas cambiando el registro TRIS, pero como el opcode no puede tener Todos los bits, al usarse el valor PORTB o TRISB tienen el mismo resultado, y funciona igual, pero deberias tener en claro que realmente lo que estas haciendo y que deberias hacer es:
BSF STATUS, RP0 ;NOS CAMBIAMOS AL BANCO 1, DONDE ESA TRISB
CLRF TRISB
BCF STATUS, RP0
------------------------------------------------------
Como dijo Pinolillo, mejor tener 2 variables, una llamada decena y otra unidad. El
"multiplexado" es encender un display ej. unidades con su numero, luego de un tiempito apagarlo encender el otro ( decenas con su numero), esperar un ratito y apagarlo. Esto se repite, y que debe ser rapido para que el ojo humano no lo note. Demasiado rapido significaria que se va a ver con un brillo disminuido, demasiado lento y vas a ver el efecto de que uno se apaga. Entonces te propongo un programa:
MAIN
CALL INCREMENTA_CONTADOR
CALL MULTIPLEXADO
CALL DELAY
GOTO MAIN
Y tendrias que hacer cada uno de esos:
Delay es de 10ms, aca tenes para generarlos:
http://www.piclist.com/techref/piclist/codegen/delay.htmMultiplexado es como te lo dije, pasa una ves, apaga los comunes de los displays, pone el valor de unidades (con la tabla como tenes realizado), y enciende el comun del display unidad, luego en la otra vuelta apaga los comunes, pone el valor de las decenas, y enciende la decena. Si pasa otra ves se repite lo anterior, podrias leer el valor del comun de la decena o de la unidad con BTFSS para saber cual es el turno de quien.
Incrementa_contador, es distinto, en nuestro loop tenemos un delay de 20ms, pero para llegar a 24 son casi medio segundo, demasiado rapido para el ojo, lo que podemos hacer es jugar con ese delay, usamos un registro mas y mantenemos la cuenta de cuantas veces entro, supongamos que cada medio segundo quiero que entre, entonces debere contar 25, cuando entra 25 veces recien ahi ejecuto mi codigo y pongo a 0 el contador para que entre de nuevo, que es el codigo? es incrementar unidades, ver si llego a 10, si llego a 10 debo ponerlo en 0 e incrementar la decena, si decena llego a 3 debo poner a 0 la decena.
-------------------------------------------------
Eso es todo, tu programa separado en 3 partes casi independientes, para que te guies.