Interrupt bei steigender und fallender Flanke möglich?

OP #366765
Lesenswert?
• ▲
▼
Hi Leute,
ich habe folgende Interrupt routine
1
ISR(INT0_vect)  //Signal on ext. Interrupt
2
{
3
   Tog_Bit(CH2OUT);    
4
   if (!(MCUCR & (1<<ISC00)))    // if rising edge enabled
5
  MCUCR |= (1<<ISC00);    // then delete rising edge bit
6
   else
7
  MCUCR &= (1<<ISC00);    // else set rising edge bit
8
}

Ich möchte, das der Ausgang sowohl bei steigender als auch bei
fallender Flanke wechselt. Leider wechselt der nur einmal nach dem
Starten und danach passiert nichts mehr.
Darf ich das MCUCR Register innerhalb eines Interrupt nicht wechslen,
oder hab ich da nen Denkfehler?

mfg
  Werner
OP #366766
Lesenswert?
• ▲
▼
hier nochmal der Code richtig formatiert ;-)
1
ISR(INT0_vect)  //Signal on ext. Interrupt
2
{
3
   Tog_Bit(CH2OUT);
4
   if (!(MCUCR & (1<<ISC00)))           // if rising edge enabled
5
      MCUCR |= (1<<ISC00);              // then delete rising edge bit
6
   else
7
      MCUCR &= (1<<ISC00);              // else set rising edge bit
8
}
OP #366769
Lesenswert?
• ▲
▼
War wohl ein wenig spät für mich...
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben
  ich werde beim löschen immer &= ~(1<<bit) schreiben

Danke Roland
Gast #366771
Lesenswert?
• ▲
▼
Genau. Und zusätzlich (vorausgesetzt die Möglichkeit besteht): Wenn Du
anstelle des 90S2313 nen Tiny2313 nimmst (pinkompatibel), brauchst Du
die Umschalterei evtl. gar nicht zu machen, weil die externen
Interrupts da auch auf Reaktion auf 'any logical change'
programmierbar sind (also die Konfiguration der ISC0x-Bits, wo beim
90S2313 'reserved' im Datenblatt steht). Dann reagieren sie auf jede
Flanke.
Gast #366772
Lesenswert?
• ▲
▼
@Reiner
das mit dem ^= kannte ich noch nicht. Ist aber (hoffentlich) besser zu
merken als das andere...
@johnny.m
is für privat und von den 90S2313 hab ich noch nen paar zuhause.
Ansonsten ist das mit dem Tiny bestimmt eleganter.

Besten Dank für die Unterstützung

Werner
#366773
Lesenswert?
• ▲
▼
> das mit dem ^= kannte ich noch nicht.

Das macht aber genau genommen, ganz was anderes.
Das toggelt den einen Pin:
War er vorher auf 1, dann wird er auf 0 gesetzt
War er vorher auf 0, dann wird er auf 1 gesetzt

Da du toggeln möchtest, ist das das Werkzeug deiner
Wahl. Das befreit dich aber nicht davon, dir zu merken,
wie man ein Bit (egal ob am Port oder in einer Variablen)
gezielt auf 1 bzw. auf 0 setzt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.