[8051] zwei Interrupts überschneiden sich

Gast #794750
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!
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
Gast
Hi,

eine Frage noch:

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

Bernhard
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.