Se configura el timer_0 del PIC18F2550 para que salte la interrupción por desbordamiento cada 500ms. Y cada 500ms se invierte el valor del PIN_C6, para que parpadee el LED que tiene conectado.
Código fuente: timer0.c
tiempo = (cont_máx – cont_mín)*Prescaler*4*Tosc
cont_máx = 255+1 (8 bits) ó 65535+1 (16 bits).
cont_mín = TMR0 en el momento del desbordamiento. Si en la subrutina de interrupción no se le da ningún valor, empieza contando desde cero.
En nuestro ejemplo: tiempo = (65535+1 – 18661) * 128 * 4 * (1/48MHz) = 500ms
Registros para configurar la interrupción:
INTCONbits.GIE: Habilita las interrupciones.
INTCONbits.PEIE: Habilita las interrupciones periféricas (todas son periféricas, menos las externas, port B).
INTCONbits.TMR0IE: Habilita la interrupción del timer0.
INTCONbits.TMR0IF: Flag o bandera del timer0, que se pone a uno cuando salta la interrupción por desbordamiento del timer0.
Registros para configurar el timer0:
T0CONbits.TMR0ON: Habilita el timer0.
T0CONbits.T08BIT: Contador de 8 bits (desborda a 255+1) o de 16 bits (desborda a 65535+1), la interrupción salta al reiniciar.
T0CONbits.T0CS: Cuenta los pulsos del reloj interno (48MHz) o de una fuente externa.
T0CONbits.T0SE: Cuenta los flancos de subida o de bajada.
T0CONbits.PSA: Se le asigna un valor al prescaler.
T0CONbits.T0PS: Prescaler.