Christoph O. wrote:
> ich würde gerne, nachdem mein Timer0-Interrupt 250x ausgeführt wurde,
> diesen Interrupt kurz ausschalten, um die gesammelten Daten zu
> verarbeiten.
>
> Doch leider klappt das so nicht:
>
1 | > ADC_counter++;
|
2 | > if (ADC_counter == 251 ) cli();
|
3 | >
|
Wenn das innerhalb der ISR steht, kann das nicht funktionieren, da die
Hardware erstens beim Sprung in den Interrupt-Vektor sowieso automatisch
das I-Bit löscht (also ein cli() macht, weshalb Dein cli() gar keinen
Effekt hat) und zweitens dieses Bit beim Rücksprung ins Hauptprogramm
genauso automatisch wieder setzt (also ein sei() macht).
> Geht so etwas denn gar nicht? Später möchte ich den Interrupt einfach
> wieder über sei() anschalten.
Warum versuchst Du dann, die Bearbeitung aller Interrupts zu sperren
(was so aus o.g. Gründen nicht geht) und sperrst den Interrupt nicht
lokal? Dafür hat schließlich jeder Interrupt sein lokales Freigabebit.