Hola gente!
Soy novato en esto de los AVR, pero aquí les dejo un ejemplo de interrupción de timer1.
Se trata de un ejemplo sencillo con display de 7seg de ánodo común, un pulsador como control, un led como testigo y el Mega 8.
El ejemplo consiste en contar del 0 al 9 cada segundo (aproximadamente)... Primero se inicializa en 0 y espera la orden de inicio del pulsador, luego empieza el conteo y al llegar a 9 comienza otra vez, si se vuelve a presionar el pulsador, regresa a cero y espera por una nueva orden de inicio.
El cálculo del tiempo de interrupción es así: Xtal = 4Mhz, Prescale = 64, timer 1 = 16 bits (65535)
64/4000000 = 0.000016; 0.000016*65535 = 1.04856 seg. Al menos eso dice la teoría

Este es el código:
' Prueba de Interrupciones de Timer
' Trabaja con el circuito TimerInt2 de Proteus
' Display en Pb
' Control en Pd.1
' Testigo en Pd.0
'$sim
$crystal = 4000000
Config Portb = Output
Config Timer1 = Timer , Prescale = 64
Enable Interrupts
On Timer1 Refres
Ddrd.0 = 1 ' d0 como salida
Portd.0 = 1
Ddrd.1 = 0 ' d1 como entrada
Portd.1 = 1
Disp Alias Portb
Ctrl Alias Pind.1
Test Alias Portd.0
Dim Aux As Byte
Inicio:
Disable Timer1
Disp = &H40 'Presenta 0 en el display
Set Test 'Apaga el led
Waitms 250 'No es necesario, solo para estabilización y antirebote además del debounce
Aux = 0
Bitwait Ctrl , Reset 'Espera a que se presione el pulsador
Reset Test 'Prende el led
Enable Timer1
Do
Debounce Ctrl , 0 , Inicio 'Si se presiona el pusldador, salta a Inicio
Loop
Refres:
Incr Aux
If Aux = 10 Then
Aux = 0
End If
Disp = Lookup(aux , Tabla) 'Busca en la tabla el dato en la posición Aux y lo presenta en el Display
Return
Tabla:
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H00 , &H10
Saludos!