Gleicher Interrupt - unterschiedlicher Code ausführen

Gast #344894
Lesenswert?

Guten Abend,

ich steige gerade in die AVR Assembler Programmierung ein.
Nun stehe ich vor einem logischem Problem(?).
Ich benutzer einen Timer(Timer0) im Mega8. Sobald dieser läuft wird ein
Interrupt ausgelöst. Soweit sogut. Das funktioniert auch.

Ich möchte diesen Timer öfters im Programm benutzen, jedoch jedesmal
für einen anderen Zweck und somit soll auch jedesmal ein anderer Code
ausgeführt werden.

Ist dieses irgendwie möglich? Bin noch ein echt blutiger Anfänger ....

 Danke für evtl. Tips und Antworten im Vorraus.

 Viele Grüße

   David
#344897
Lesenswert?

Hallo!
Du nimmst einfach eine Variable und weißt der einen bestimmten Wert zu,
an Hand dessen deine Software erkennt was sie im Interrupt machen soll.
Im Interrupt machst du dann eine Abfrage rein, die den Wert in besagter
Variable nimmt und dann die entsprechende Funktion ausführt.


mfg
Gast #344898
Lesenswert?

Ein Register ist vielleicht nicht so sinnvoll, es sei denn du suchst dir
eins aus welches beim Interrupt nicht geändert wird. Eine Variable oder
gezielt ein Speicherbyte wären da sinnvoller. Musst nur aufpassen dass
deine ISR nicht zu lang wird sonst überholen sich ggf die Interupte.

bye

Frank
Gast #344900
Lesenswert?

> Musst nur aufpassen dass
> deine ISR nicht zu lang wird sonst überholen sich ggf die Interupte.

Du kannst ein paar Flags machen, die jeweils anzeigen, wenn ein
bestimmter Interrupt ausgelöst wurde. Nun kannst du das Program den
Rest der Zeit in einer Endlosschleife laufen lassen, wo jeweils geprüft
wird, ob eines der Flags gesetzt ist - wenn ja, wird die jeweilige
Aktion ausgeführt.
Gast #344901
Lesenswert?

Der Vorschlag mit dem Funktionspointer ist sicherlich am saubersten.Du
definierst dir einen Pointer auf eine Funktion vom Typ:

void MeineIntFunc(void)

Dann kannst du MeinIntFunc() ganz normal aus deinem Interrupt
aufrufen.Soll ein andere Funktion aufgerufen werden,kannst du dem
Pointer einfach die neue Addresse zuweisen.

Nur nicht vergessen den Pointer VOR sei() auf eine Funktion zu setzen
und drauf achten das die Funktionen nicht zuuuu lang werden ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren