www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [8051] zwei Interrupts überschneiden sich


Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich sitz hier schon seit ein paar Stunden herum und wälze Datenblätter 
um die praktische Anwendung von Interrupts zu kapieren.
Meine Aufgabenstellung:

Ich hab hier einen Temperaturfühler,der auf einem interruptfähigen I/O 
Pin des 80C552 angeschlossen wird. Wenn der Temperaturfühler eine 
negative Flanke liefert,dann soll ein Interrupt ausgelöst werden. Beim 
Interrupt springe ich dann auf die Interrupt Vektoradresse und dort soll 
dann eine Messung durchgeführt werden(also wie lange die Portleitung auf 
Null ist). Aus dieser Zeit kann ich dann auf den jeweiligen 
Temperaturwert zurückrechnen.
Desweiteren soll aber auch über einen Timer eine Uhr programmiert 
werden,die immer im Hintergrund läuft.

Mein Problem:

Wenn ich zum Beispiel für die Realisierung der Uhr den Timer 1 im 16 Bit 
Modus betreibe,dann zählt ja der von 0 - 65536 und dann wird ein 
Interrupt ausgeführt,oder?

Desweiteren hab ich auch noch einen Temperaturfühler,mit dem ich die 
aktuelle Umgebungstemperatur messen möchte. Je nach Temperatur dauert 
die Messung zwischen 50ms und 380ms.
Das heißt jedes Mal wenn ich mit der Messung der Temperatur anfange,dann 
wird durch den höherwertigen Interrupt der Uhr(die Uhr sollte ja auch 
nicht falsch gehen) die aktuelle Messung unterbrochen und ich bekäme nie 
einen Messwert...

Sehe ich das richtig,oder bin ich da auf einem Holzweg?
Mir raucht mittlerweile schon der Kopf.

Danke!

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sehe ich das richtig,oder bin ich da auf einem Holzweg?

Nach der Unterbrechung durch die Uhr wird die Messung weitergeführt,
wo ist das Problem?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard wrote:

> Das heißt jedes Mal wenn ich mit der Messung der Temperatur anfange,dann
> wird durch den höherwertigen Interrupt der Uhr(die Uhr sollte ja auch
> nicht falsch gehen) die aktuelle Messung unterbrochen und ich bekäme nie
> einen Messwert...

Unterbrechen und Abbrechen sind 2 völlig verschiedene Dinge.

Ein Interrupt unterbricht, macht sein Ding und dann gehts weiter.

Ist der Meßinterrupt wichtiger, gibst Du ihm eben die höhere Priorität, 
dann kann er den Uhreninterrupt unterbrechen.

Und dem Uhreninterrupt ists wurscht, wenn er mal 100µs später behandelt 
wird, der Timer läuft ja weiter.


Peter

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

eine Frage noch:

Wenn der Interrupt abgehandelt ist,wird dann automatisch wieder dort hin 
gesprungen wo die Unterbrechung durch den Interrupt war?

Bernhard

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich, die Rücksprungadresse wurde auf dem Stack abgelegt.

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also wenn da so ist,dann sollte die Aufgabenstellung eigentlich mit ein 
bisschen Denkarbeit mehr oder weniger zu lösen sein.

Ich danke euch!

Endlich kann ich mit dem Projekt anfangen :)

Bernhard

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.