kann man so den int0 und int1 kurzfristig sperren?
danke.
mfg
ISR(INT0_vect)
{
GIMSK &= ~((1<<INT0) | (1<<INT1));
encoder_li = encoder_li+1;
print_wert_li();
if(encoder_li >= enc_wert)
{
print_ausgabe();
}
GIMSK |= (1<<INT0) | (1<<INT1);
}
Kann man wohl schon, aber warum? Während der ISR sind interrupts eh deaktiviert. Was vielleicht eher dem gewünschten Ergebniss nahekommt wäre die IRQ-Flags vor dem Verlassen nochmal zu löschen:
1 | GIFR=_BV(INTF1)|_BV(INTF0); |
Dein Hauptproblem ist aber eher das vermurkste Design. ISRs sollten möglichst kurz gehalten werden, print_wert_li() und print_ausgabe() hören sich aber eher nach langsamen, grossen Brocken an. Besser: in der ISR nur ein Flag setzen, Ausgabe dann in der Main-Schleife.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.