Datum: 04.07.2008 20:05
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);
}
Datum: 04.07.2008 20:26
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:
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.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel