Hallo,
also die Idee mit dem Wikibeitrag fände ich sehr gut, ich denke das viele Anfänger immer über die gleichen Probleme stolpern.
Ich habe zwar ein Buch 'Programmieren der AVR - Risc mit Bascom-AVR' von Claus Kühnel, das ist auch nicht schlecht aber solche Probleme und Fragen werden darin überhaupt nicht behandelt.
Vieleicht kennst Du ein Buch das speziell die Mega8,16 und 32 behandelt.
Mit dem Datasheet in englischer Sprache komme ich oft nicht zurecht.
Hier mal den Code, ich habe dabei noch das LCD Display getestet. Es geht mir aber hauptsächlich um die Timer0 generierte Zeit.
Den Wert von Variable A habe ich aus dem Buch von Herrn Kühnel.
T=256*prescaler/Fosc
rein rechnerisch komme ich auf einen Wert 1/Interrupt = 122, mit diesem wert zähle ich dann bis auf eine Minute.
Ich mußte den Wert aber auf 126 setzen damit ich annähernd auf eine Sekunde komme.

Code:
$regfile = "M16def.dat"                                     ' specify the used micro
'$crystal = 8000000                                          ' used crystal frequency
$baud = 9200                                                ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
'$sim




Const On = 1
Const Off = 0

Dim A As Word
Dim C As Word

Config Portd = Input
Portd = 255
Config Portc = Output
Portc = 255

Config Timer0 = Timer , Prescale = 256
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Lcdbus = 4
Config Debounce = 50
Taster Alias Portd.0
Anzeige Alias Portb.2
A = 0
C = 0


On Timer0 Timer0_isr

Enable Timer0
Enable Interrupts



Do

   If C = 60 Then
   Toggle Portc.1
   End If
   Wait 1
   Debounce Pind.0 , 0 , Anzeige_aus , Sub
   Cls
   Lcd "Guten Tag"
   Locate 2 , 1
   Lcd C
   Toggle Portc.0
   Wait 1
Loop


Anzeige_aus:
  If Anzeige = On Then
   Anzeige = Off
   Else
   Anzeige = On
   End If
Return


Timer0_isr:
   Incr A
   If A = 126 Then
   Incr C
   End If
   If A > 126 Then
   A = 0
   End If
   If C > 59 Then
   C = 0
   End If
Return
Also nach der Formel müßte alle 8,192ms ein Interrupt ausgelöst werden, demnach müßte ich nach 122 interrupst eine Sekunde haben.
Vieleicht mache ich da auch einen gedanklichen Fehler, aber der es so aus als wenn der Controller zu schnell liefe. Deshalb habe ich dann auf 126 geändert, in diesem fall habe ich eine Abweichung von 0,5 Sek. Wenn ich nun aber hochrechne auf einige Stunden, dann ist die Abweichung natürlich inakzeptabel.
Gruß Harald