les comento que hice un programa super básico por software y o sorpresa el ya no esta mas el brillo tenue en todos los segmentos solo queda la sombra del numero que esta mostrando en el otro displays. la secuencia la realice yo realizando el multiplexado de forma manual osea enciendo displays 1 uno mando datos tiempo apago displays 1 tiempo prendo displays 2 mando datos tiempo apago displays 2 tiempo y reinicia.
esto confirma que la electrónica esta bien cableada y el problema es de software.
Exactamente, pero necesitaba el diagrama para guiarme. No se si explicartelo en ASM o no. Tu problema se encuentra aca:
incf _np_disp_nro,1 ;visualizar datos en displays cátodo común
movf _np_disp_nro,w
xorlw .9
btfsc status,z
clrf _np_disp_nro
movf _np_disp_nro,w
xorlw .1
btfsc status,z
goto inte_t08_d1
movf _np_disp_nro,w
; Quite la comprobacion de 2 al 7
xorlw .8
btfsc status,z
goto inte_t08_d8
inte_t08_ini
call dy2_disp_7_seg_01 ;llamada a rutina dy2_disp_7_seg_01
inte_t08_d1
bcf portb,3 ;apagar el display 8
call dy2_disp_7_seg_01 ;llamada a rutina dy2_disp_7_seg_01
movf plocal_uni,w ;mostrar el valor del registro plocal_uni
movwf _np_disp_valor
call dy3_disp_7_seg_01 ;llamada a rutina dy3_disp_7_seg_01
bsf porta,1 ;encender el display 1
goto inte_t08_salir
;QUITE LOS DISPLAYS DEL 2 AL 7 para que sea mas simple de ver
inte_t08_d8
bcf portb,2 ;apagar el display 7
call dy2_disp_7_seg_01 ;llamada a rutina dy2_disp_7_seg_01
movf horas_dec,w ;mostrar el valor del registro horas_dec
movwf _np_disp_valor
call dy3_disp_7_seg_01 ;llamada a rutina dy3_disp_7_seg_01
bsf portb,3 ;encender el display 8
goto inte_t08_salir
inte_t08_salir
inte_t09
goto inte_t0_salir
El tema es asi, cuando esta realizado el programa en nipple, vos tenes una variable llamada "_np_disp_nro" que deberia ir de 1 a 9, ocurre que comienza por 0, cuando es 0 pone a 0 las salidas del 4511 PERO no desactiva ningun led. a diferencia de cuando es 1,2,3,4,etc hasta 8. Entonces, cuando llega al display 8 muestra el dato, entra a la interrupcion(TMR0) y como es 9 lo pone a 0 en ves de 1, por lo cual al ponerlo a 0 pone a 0 el PORTB7:4 el cual hace que se muestre un 0 por el 4511, sale de la interrupcion,hasta entrar de nuevo se mantiene un 0 encendido, y al entrar de nuevo recien ahi apaga el display. y muestra el valor correspondiente al display numero 1.
Ese es tu problema. No se si es cosa de nipple o una mala implementacion tuya dentro de la interrupcion. Pero conociendo cual es el problema creo que podrias solucionarlo facilmente, en el ASM tomaria solo 1 instruccion hacerlo pero en nipple no se.. Lamentablemente no te puedo ser de mas ayuda.