Hola miguel!!
Le pegue una mirada rapida a tu codigo y al hardware, y al parecer vas por buen camino. Solo te diria q coloques un transistor entre los catodos de los leds y la patita del puerto q los controla, porq podes llegar a quemar ese pin.
Con respecto al codigo, si es posible, comentalo un poco mas (sobretodo el significado de las variables) asi lo puedo analizar y ver donde esta el problema.
Te cuento un poco q hace mi codigo. Tengo una matriz (en asm podrias implementarlo con una tabla), que contiene los valores q se van a cargar en cada capa (en tu caso necesitarias dos bytes ya q usas dos puertos en cada capa). Entonces en la interrupcion del timer multiplexo. Tengo una variable CAPA q me dice que capa estoy mostrando actualmente (1, 2, 3 o 4), entonces en la interrupcion apago todo, y cargo en el puerto que controla la capa el valor 01H, y lo roto CAPAS-1 veces a la izquierda. Y procedo a cargar en los dos puertos los valores q corresponden del arreglo (o tabla). Al llegar a la ultima capa, hacemos CAPA=1. De este modo el timer va a quedar constantemente multiplexando las capas y cargando el valor q le corresponde a cada una.
Espero q se entienda la explicacion, saludos!!!