Hallo!
Ich habe früher auch ein bischen Assembler programmiert und hätte
folgende Vorschläge (die nich unbedingt stimmen müssen - kannst
probieren):
1.) schreib in den nicht erwendeten ISRs nicht direkt reti! mach zum
beispiel ein "unterprogramm" das unused_isr oder so heißt, schreib
dort ein reti rein und gib das bei den nicht verwendeten interrupts
an!
2.) deine interrupttabelle ist falsch! schau dir im datenblatt die
interruptvektortabelle GENAU an! unter program adress steht, das reset
auf 000 liegt, der nächste auf 002, der nächste auf 004! bei dir liegen
die interruptroutinen auf 000,001,002,003....
also mach entweder in der tabelle überall ein nop dazwischen oder
schreib vor jeden ISRaufruf jeweils 0x002 oder 0x004 hin - damit die
auf der richtigen adresse liegen! kannst aber beruhigt sein, den fehler
machen viele beim mega16!!
also besser die interruptvektortabelle aus und es sollte gehn!
mfg andi