Este trozo de código que pongo correspondía a un 16F877,por lo que no se si serán correctas las direcciones de memoria asignadas a los puertos.Aun así te tiene que valer igual,poniéndolas bien en el caso de que estén mal,claro.
[BR]#include "16C84.h" // Fichero de símbolos y etiquetas.[BR]#use delay (clock=5000000) // Define frecuencia del oscilador.[BR]#fuses RC,NOWDT,NOPROTECT[BR][BR]#byte PORTB = 0x06 // Se definen los puertos y bits a utilizar.[BR]#byte PORTA = 0x05[BR]#bit RA4 = 0x05.4[BR][BR]static int cont; /* Variable global para contar interrupciones. */[BR][BR]#INT_RTCC // Interrupción por overflow de TMR0.[BR]trata()[BR]{[BR] cont++;[BR]}[BR][BR]main()[BR]{[BR] setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_256); // TMR0 con reloj interno y prescaler de 256.[BR] enable_interrupts (INT_RTCC); // Habilita interrupción por TMR0.[BR] enable_interrupts (GLOBAL); // Habilita interrupciones globales.[BR][BR] set_tris_B (0); // PORTB como salidas.[BR] PORTB=0;[BR] cont=0;[BR][BR] while (RA4) {}; // Espera hasta que se pulse la tecla.[BR] PORTB=0b00000011; // Empieza encendiendo L0 y L1.[BR][BR] for (;;)[BR] {[BR] if (cont==2) // Si se ha entrado dos veces en la interrupción[BR] { // se desplaza el contenido de PORTB dos bits[BR] PORTB<<=2; // a la izquierda (asegurando que no se pierde[BR] if (PORTB==0x00) PORTB=0x03; // la información) y se inicializa la cuenta[BR] cont=0; // a cero.[BR] }[BR] }[BR]}[BR][BR]