mega32 interrupt zählt doppelt

Gast #1008534
Lesenswert?
• ▲
▼
Hallo,
ich habe folgendes Problem:
Ich programmiere in Assembler einen mega32.An Int0
ligt ein Signal an,zum Testen ein Schalter.Habe soweit alles fertig,Wenn 
ich den Interrupt mit dem Schalter auslöse,springt das Programm an die 
richtige Stelle (Interruptroutine) und erhöht dort nur ein 
Register.Danach gehts zurück in den Sleep modus.Das Problem,er erhöht 
das Register immer genau
doppelt,also 1 mal auslösen registerinhalt 2 usw.
Prellen kann nicht sein,in der Interruptroutine lass ich ihn erstmal 
eine halbe sekunde nichts tun.
Also die Routine sieht so aus:
call Pause
inc Zaehler
reti

Das Register wird auch garantiert nicht noch wo anders benutzt.
Wäre schön,wenn mir das mal jemand erklären könnte.
gruss
Andy
Gast #1008552
Lesenswert?
• ▲
▼
Hallo,
ich hab schon öfters was mit Interrupts gemacht,aber auf anderen avrs.
Das Interruptflag hab ich noch nie gelöscht und die Sachen klappen 
einwandfrei.
Ist das was besonderes bei diesem avr so oder allgemein.
gruss
Andy
Persönliche Seite #1008556
Lesenswert?
• ▲
▼
Das Interuptflag wird gelöscht sobald die Interruptroutine aufgerufen 
wird.
Das ist auf jedem AVR so.
Wenn aber WÄHREND du in der interruptroutine bist der Interrupt nochmal 
auftritt wird es nochmal gesezt und die ISR nach verlassen erneut 
aufgerufen.

Ist ja normal auch okay, nur in diesem Fall produziert das prellen des 
Tasters halt eine zweiten Interrupt...

So in etwa:

Druck der Taste --> ISR wird aufgerufen --> Flag gelöscht
Taste Prellt (mehrmals) --> Flag wird wieder gesezt
warten
warten
warten
ISR verlassen
Da Flag gesezt wird die ISR ein weiteres mal aufgerufen (jezt ist das 
Prellen vorbei)--> Flag wird gelöscht
warten
warten
warten
ISR verlassen

warten auf nächsten Tastendruck.
Resultat: Variable wurde 2 mal erhöht..)
#1008558
Lesenswert?
• ▲
▼
Andy wrote:
> Hallo,
> ich hab schon öfters was mit Interrupts gemacht,aber auf anderen avrs.
> Das Interruptflag hab ich noch nie gelöscht und die Sachen klappen
> einwandfrei.
> Ist das was besonderes bei diesem avr so oder allgemein.
> gruss
Das ist bei allen AVRs so (und vermutlich nicht nur da)! Wenn das 
Interrupt-Flag sofort nach dem automatischen Löschen (durch den Aufruf 
des Interrupt Handlers) durch das Prellen wieder gesetzt wird, dann 
kannst Du ne Stunde warten und trotzdem wird sofort nach Verlassen des 
Interrupt Handlers dieser erneut aufgerufen.
Gast #1008567
Lesenswert?
• ▲
▼
Hallo,
danke für die antworten.
Und ich sitz hier den halben Sonntag und wundere mich.
Die Schaltung hägt im Moment an meinem Gaszaehler und zählt impulse.
In 2 Tagen kann ich das Programm ändern und testen.

gruss
Andy

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.