void __attribute__((__interrupt__)) _T2Interrupt(void) {
asm ("mov.w _contador,w1"); // cargamos la variable Contador en W1
asm ("mov.w #_vRAM,w2"); // cargamos el puntero de vRAM en W2
asm ("add.w w1,w2,w2"); // efectuamos desplazamiento en vRAM
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a R1
Latch5=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch0=1; // activamos el Latch que corresponde a R1
asm ("inc2.w w2,w2"); // siguiente word
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a R2
Latch0=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch1=1; // activamos el Latch que corresponde a R2
asm ("inc2.w w2,w2"); // siguiente word
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a G1
Latch1=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch2=1; // activamos el Latch que corresponde a G1
asm ("inc2.w w2,w2"); // siguiente word
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a G2
Latch2=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch3=1; // activamos el Latch que corresponde a G2
asm ("inc2.w w2,w2"); // siguiente word
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a B1
Latch3=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch4=1; // activamos el Latch que corresponde a B1
asm ("inc2.w w2,w2"); // siguiente word
asm ("mov.w [w2],w0"); // leemos la posición de memoria que corresponde a B2
Latch4=0; // desactivamos el Latch anterior
asm ("mov.w w0,PORTB"); // y la sacamos por el puerto
Latch5=1; // activamos el Latch que corresponde a B2
asm ("add.w w1,#12,w1"); // incrementamos el contador 12 bytes para siguiente lectura
asm ("mov.w #0x1200,w0"); // 0x1200 es la memoria de vídeo en bytes
asm ("sub.w w1,w0,w0"); // se resta del contador para comparar si ha llegado
asm ("bra nz, salir"); // si no es igual, saltamos a "salir"
asm ("clr.w w1"); // si ha llegado, la inicializamos a 0
asm ("salir:");
asm ("mov.w w1,_contador"); // volcamos sobre la variable el valor que corresponda
IFS0bits.T2IF = 0; /* Borra flag */
}