mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bei Interrupt, eine Zählvariable aus hauptprogramm behalten


Autor: Christian Ries (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,


ich sitze schon länger an einem Problem was eigentlich gar nicht schwer
ist, dachte ich zumindest.

mC: atmega8

Im Hauptprogramm habe ich eine Schleife in der ich den Status des D
Ports ändere. Ich schalte in jedem Schritt einen Pin aus und den Rest
an.
Nun ist es wirklich wichtig, für das Programm und mich, das ich die
LaufID (0-7) behalte wenn ein Interrupt eintritt.
Zur Zeit liefert er mir immer eine 7.

Wird der Programmablauf nicht sofort beendet wenn ein Interrupt
eintrifft?

Ich habe als Idee, einfach in der INT-Routine eine globale Variable mit
der ID beschrieben um diese dann später, bei Bedarf zu verwenden. Aber
wie es scheint wird vor der INT-Routine immer die For-Schleife bis zum
Ende durchlaufen.

Ich hoffe meine Ausführungen waren verständlich.

Ich hoffe auf Hilfe, denn ich weiß nicht weiter.


Mit freundlichen Grüßen
Christian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hoffe meine Ausführungen waren verständlich

Zumindest für mich: Nein

Poste doch mal ein möglichst komplettes, kleines
Program. Dann kennen wir uns mglw. besser aus.

Autor: Christian Ries (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Zumindest für mich: Nein

Hab ich mir gedacht.

Was kleines, nicht zwingend lauffähig.


volatile  int _lauf;

SIGNAL (SIG_OVERFLOW0)
{
  pin = _lauf;
}
// pin ist immer 7!

main(...) {

while(1) {

   // diesen Wert brauch ich!!!
   // _lauf
   for( _lauf=0; _lauf<7; _lauf++ ) {
  PORTD = port_addr[_lauf];
  _delay_ms(2);
   }

}

}


Hilft das?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht wirklich.

Das funktioniert so, wie du dir das vorstellst.
Ich fürchte das ist irgendwas anderes in deinem Pgm faul.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Was kleines, nicht zwingend lauffähig."

Stimmt, ist ja noch nicht mal compilierbar.


Naja, ist ja Deine Entscheidung, ob Dir jemand helfen können soll.


Peter

Autor: Ronny F. (ronny)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,ich bemüh mal meine Kristallkugel....

Wie/wo ist den pin definiert?Meinst du vielleicht PIND?Und hast du den
Timer+Überlauf-Interrupt+globale Interrupts überhaupt aktiviert?

Und,NEIN,das Programm wird beim auftreten eines Interrupts nich sofort
beendet.Es wird für die Dauer des Interrupts unterbrochen,dann gehts
normal weiter.Und wenn alles sauber programmiert ist,bemerkt das
Hauptprogramm davon überhaupt nix,ausser das vielleicht neue Werte in
einigen globalen (volatile!) Variablen stehen.

Nebenbei:

Es sollte auch ohne volatile funktionieren,da du im Interrupt _lauf
nicht veränderst.Ist aber gute Praxis globale Variablen die in
Interrupts genutzt werden so zu deklarieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.