Forum: Mikrocontroller und Digitale Elektronik TOV0 AT90CAN128


von gast (Gast)


Lesenswert?

Hallo Zusammen
ich fänge mit dem Mikrocontroller AT90CAN90128 an. ich habe mit dem 
Timer0, besonder mit dem TOV0-Flag. ich will jedesmal diesen TOV0-Flag 
in Interrupt löschen, aber es geht nicht und ich weisse nicht warum. ich 
habe 2 Falls.

1)Wenn ich die Funktionen sei() und cli() benutze , wird TOV0-Flag 
gesetzt aber das Interrupt wird nicht angerufen.

2) Wenn ich die Funktion sei() benutze, wird TOV0-Flag nie gesetzt aber 
das interrupt wird angerufen

Mein Ziel ist jedesmal TOV0-Flag in Interrupt loeschen können.

Ich brauche Ihr Hilfe

von Stefan E. (sternst)


Lesenswert?

> Mein Ziel ist jedesmal TOV0-Flag in Interrupt loeschen können.

Und warum?
Das Flag wird beim Ausführen des Interrupts von der Hardware automatisch 
gelöscht.

von gast (Gast)


Lesenswert?

Hallo
ich weisse , dass es möglich TOVO-Flag software zu lösen und ich will 
auch software loeschen. ich glaube das Problem kommt von sei() oder 
cli(). ich weiss nicht wie diese Funktion funktionniert

von Stefan E. (sternst)


Lesenswert?

gast schrieb:

> ich weisse , dass es möglich TOVO-Flag software zu lösen und ich will
> auch software loeschen.

Nein. Du kannst das Flag im Overflow-Interrupt nicht per Software 
löschen, weil es zu diesem Zeitpunkt bereits durch die Hardware gelöscht 
wurde.

Erklär doch mal, warum du das Flag unbedingt im Interrupt per Software 
löschen willst. Es gibt keine Notwendigkeit dafür, und ich kann mir auch 
sonst keinen Grund vorstellen, warum man das tun wollte (außer 
vielleicht am Ende eines sehr langen Interrupts).

PS: Natürlich ist das Löschen im Interrupt nicht grundsätzlich nicht 
möglich. Wenn das Flag erneut gesetzt wurde, kannst du es natürlich auch 
im Interrupt wieder per Software zurücksetzen.

von gast (Gast)


Lesenswert?

Hallo
nehmen wir, wir wollen 2 Timer benutzen und für jeder Timer eine 
bestimmte Funktion ausführen.
das heißt fur timer0 wenn TOV0-Flag gesetzt funktion a anrufen
          für Timer1 wenn TOV1-Flag gesetzt funktion b anrufen und die 
beide in Interrupt

von Stefan E. (sternst)


Lesenswert?

Dann ist der Overflow-Interrupt von Timer 0 die Funktion A, und der 
Overflow-Interrupt von Timer 1 ist die Funktion B. Ich verstehe also 
immer noch nicht, was genau das Problem ist.

von gast (Gast)


Lesenswert?

wenn der overflow timer0 gesetzt ist, wird in interrupt funktion A 
angerufen
wenn der overflow timer1 gesetzt ist, wird in interrupt funktion B 
angerufen

von Stefan E. (sternst)


Lesenswert?

In welchem Interrupt überhaupt?

von gast (Gast)


Lesenswert?

#include <avr/io.h>
#include <avr/signal.h>
#include <inttypes.h>
#include <avr/interrupt.h>



ISR (TIMER0_OVF_vect)
{

}

von Stefan E. (sternst)


Lesenswert?

Dieser Interrupt ist die Funktion A.

1
ISR (TIMER0_OVF_vect)
2
{
3
   // Code A
4
}
5
6
ISR (TIMER1_OVF_vect)
7
{
8
   // Code B
9
}

Oder wenn du unbedingt Funktionen aufrufen willst:
1
ISR (TIMER0_OVF_vect)
2
{
3
   FunktionA();
4
}
5
6
ISR (TIMER1_OVF_vect)
7
{
8
   FunktionB();
9
}

von gast (Gast)


Lesenswert?

Hallo,
das wüsste ich nicht. ich bin neue bei AVR. danke für Ihr Hilfe es hat 
mein Problem gelöst.
Schoner Sonntag

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.