Forum: Mikrocontroller und Digitale Elektronik Interrupt aus und einschalten


von Kurt B. (Gast)


Lesenswert?

Ich möchte meine Taste entprellen. Darf ich das so machen? Ihrgendwie 
ruft er diesen Interrupt doch zwei mal auf.
1
.org 0x000
2
rjmp RESET
3
rjmp E_Start ; $001 External Interrupt Request 0
4
...
5
rjmp InRS232 ; $012 USART Rx Complete
6
...
7
8
RESET:
9
rjmp RESET
10
11
12
E_Start:
13
rcall Taste
14
reti
15
16
Taste:
17
cli
18
...
19
...
20
...
21
sei
22
ret

Ich habe auch ein Interrupt $012 USART Rx Complete dieser geht nach dem 
Tasten drücken nicht mehr.

von Daniel V. (danvet)


Lesenswert?

Bevor jetzt ein grosser Aufschrei kommt, bitte lies diesen Artikel:
http://www.mikrocontroller.net/articles/Entprellung

von Kurt B. (Gast)


Lesenswert?

Ja das hatte ich schon gelesen. Doch geht es mir nicht nur um das 
entprellen sondern das ich jegliche Interrups sperre solang ich in der 
Routine Taste bin.

Nur geht danach der Rx Complete Interrupt nicht mehr wobei der External 
Interrupt Request 0 Interrupt geht.

Rx Complete Interrupt ruft auch Taste auf.

Also Rufe ich über Rx Complete die Routine Taste auf so springt er 
auch in die Routine kommt auch wieder doch danach ist kein RX Complete 
mehr tätig.

Rufe ich die Routine über External Interrupt Request 0 fürhrt er die 
Routine Taste aus kommt auch wieder zurück, doch ist kein Rx Complete 
mehr tätig.

External Interrupt Request 0 geht immer.

von Thomas E. (thomase)


Lesenswert?

42.
Aus diesem Codefetzen ist ja nun wirklich nichts bis gar nichts zu 
erkennen.

mfg.

von Dietrich L. (dietrichl)


Lesenswert?

Thomas Eckmann schrieb:
> Aus diesem Codefetzen ist ja nun wirklich nichts bis gar nichts zu
> erkennen.

...und gerade bei Interrupts ist der verwendete µC-Typ völlig unwichtig 
;-(

Gruß Dietrich

von Karl H. (kbuchegg)


Lesenswert?

Kurt B. schrieb

> Also Rufe ich über Rx Complete die Routine Taste auf so springt er
> auch in die Routine kommt auch wieder doch danach ist kein RX Complete
> mehr tätig.

Das Problem steckt irgendwo in den Codezeilen, die du nicht gezeigt hast

von Kurt B. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb
> Kurt B. schrieb:
>
>> Also Rufe ich über Rx Complete die Routine Taste auf so springt er
>> auch in die Routine kommt auch wieder doch danach ist kein RX Complete
>> mehr tätig.
>
> Das Problem steckt irgendwo in den Codezeilen, die du nicht gezeigt hast

Ok so werde ich mal in meinem Code schauen. Meine Frage war ja lediglich 
ob das erlaubt ist. In einem Iterruptaufruf den Interrupt auszuschalten 
und im Interrupt wieder ein zu schalten.

von Грясивый цомби (Gast)


Lesenswert?

>Ok so werde ich mal in meinem Code schauen. Meine Frage war ja lediglich
ob das erlaubt ist. In einem Iterruptaufruf den Interrupt auszuschalten
und im Interrupt wieder ein zu schalten.

So viele Fehler...
In einem Interrupt sind Interrupts sowieso gesperrt.
Nein, man sollte nicht in einem Interrupt interrupts nochmals enablen.
Nein. Es gibt keinen Tasteninterrupt. Das ist eine so elendiglich 
schlechte idee, dass man's einfach vergessen sollte.

von Грясивый цомби (Gast)


Lesenswert?

Ich muss mich korrigieren. Eigentlich ist alles falsch. Alles. Man fragt 
sicher nicht in einer Interrupt Routine eine Taste ab. Eine Taste laeuft 
ueber einen eigenen Timer-Entpreller und steht nachher als Boolean, oder 
als Byte zur verfuegung.

von yingyang (Gast)


Lesenswert?

Грясивый цомби schrieb:
> Nein. Es gibt keinen Tasteninterrupt. Das ist eine so elendiglich
> schlechte idee, dass man's einfach vergessen sollte.

Es muß auch schlechten Code geben, damit man den guten zu würdigen weis.

von Karl H. (kbuchegg)


Lesenswert?

Kurt B. schrieb:

> Ok so werde ich mal in meinem Code schauen. Meine Frage war ja lediglich
> ob das erlaubt ist.

Wer will dich daran hindern?
Der µC sicher nicht. Der führt einfach nur die Befehle aus. Der Rest ist 
ihm wurscht.
Ob es eine gute Idee ist, ist eine andere Frage. Aber die interessiert 
den µC wieder nicht.

von Lehrer (Gast)


Lesenswert?

Грясивый цомби schrieb:
> In einem Interrupt sind Interrupts sowieso gesperrt.

Stimmt nicht. Der Codeschnipsxel sieht nach 8051 aus, da kann im INT 
auch ein anderer ausgeführt werden.

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.