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
> 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.
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
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.
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
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.
wenn der overflow timer0 gesetzt ist, wird in interrupt funktion A angerufen wenn der overflow timer1 gesetzt ist, wird in interrupt funktion B angerufen
#include <avr/io.h> #include <avr/signal.h> #include <inttypes.h> #include <avr/interrupt.h> ISR (TIMER0_OVF_vect) { }
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.