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


von Bernhard (Gast)


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!

von jack (Gast)


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?

von Peter D. (peda)


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

von Bernhard (Gast)


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

von jack (Gast)


Lesenswert?

Natürlich, die Rücksprungadresse wurde auf dem Stack abgelegt.

von Bernhard (Gast)


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

von Falk B. (falk)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.