[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]
Codigo:
#include "16C84.h" // Fichero de símbolos y etiquetas.
#use delay (clock=5000000) // Define frecuencia del oscilador.
#fuses RC,NOWDT,NOPROTECT
#byte PORTB = 0x06 // Se definen los puertos y bits a utilizar.
#byte PORTA = 0x05
#bit RA4 = 0x05.4
static int cont; /* Variable global para contar interrupciones. */
#INT_RTCC // Interrupción por overflow de TMR0.
trata()
{
cont++;
}
main()
{
setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_256); // TMR0 con reloj interno y prescaler de 256.
enable_interrupts (INT_RTCC); // Habilita interrupción por TMR0.
enable_interrupts (GLOBAL); // Habilita interrupciones globales.
set_tris_B (0); // PORTB como salidas.
PORTB=0;
cont=0;
while (RA4) {}; // Espera hasta que se pulse la tecla.
PORTB=0b00000011; // Empieza encendiendo L0 y L1.
for (;;)
{
if (cont==2) // Si se ha entrado dos veces en la interrupción
{ // se desplaza el contenido de PORTB dos bits
PORTB<<=2; // a la izquierda (asegurando que no se pierde
if (PORTB==0x00) PORTB=0x03; // la información) y se inicializa la cuenta
cont=0; // a cero.
}
}
}