Chris schrieb:
> Ja Interrupt war das Stichwort .Ich hatte einen Timer interrupt drin
> .Wieso der allerdings nicht richtig ist weiß ich auch gerade nicht .
Dann lerne.
> TIMSK = 0b00000001; // 0b00000001, Timer-Overflow
Das, schreibst du niemals wieder so.
Sondern immer so
TIMSK = ( 1 << TOIE0 );
Denn:
Während das Bit für den Timer Overflow beim Mega8 in der Tat das Bit 0
ist, ist es beim Mega162 an der Bitposition 1, wie uns ein Blick ins
m162-Datenblatt, Seite 102, verrät! Du hast nicht den Overflow Interrupt
eingeschaltet, sondern den Output Compare Interrupt für den Timer 0
(OCIE0). Und da du keinen Handler dafür hast, kommt der Default zum Zug,
der .... den Prozessor resettet.
Schreibst du as Einschalten des Interrupts so wie du das geschrieben
hast, musst du dich darum kümmern, dass das TOIE0 Bit beim m162 an einer
anderen Stelle sitzt, als beim m8.
Schreibst du es auf die bessere Art mit Bitnamen, dann kümmert sich der
Compiler darum.
Und im Zweifelsfall ist es immer besser, wenn sich der Compiler um etwas
kümmert. Denn der übersieht nichts und macht auch (zumindest in der
Beziehung) keinen Fehler. Du musst nur den Prozessor umstellen und für
den neuen Prozessor neu compilieren und schon wird auch das richtige Bit
gesetzt.