Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt Disable
Reinhard
15.07.2005, 07:35
Guten Tag,
ich nutze in einem Mega8 INT0 und INT1. Nun möchte ich den INT1 zu bestimmten Zeiten sperren. Dazu gibt es ja den Befehl Disable. Funktioniert auch, d.h. der Interrupt wird nicht ausgeführt. Soweit ok. Nun muß ich ja INT1 mal wieder freigeben. Jetzt wird aber sofort ein INT1 ausgeführt, unabhängig ob der Eingang geschaltet ist. Offensichtlich merkt sich der Kontroller den aufgelaufenen INT1 während der Disable Zeit. Das möchte ich aber nicht! Alle INT1's sollen während der Disable Zeit ignoriert werden.
Wie kann ich das realisieren??
Vielen Dank
Reinhard
Ja, du mußt vor dem re-enablen den entsprechenden aaa-IF löschen.
Der Event am Pin und der Interrupt sind zwei paar Schuhe.
Reinhard
15.07.2005, 08:34
Ja, sowas in der Richtung habe ich schon vermutet.
Aber.. wie mache ich das??
Reinhard
Das Register GIFR ist zuständig
Das Bit INT0 ist 64 = &H40
Das Bit INT1 ist 128 = &H80
Also:
GIFR = GIFR AND &HBF löschen INT0
GIFR = GIFR AND &H7F löschen INT1
Ssuper!!
Vielen Dank für die extrem schnelle Hilfe.
Reinhard
Reinhard
15.07.2005, 11:58
Ergänzung:
Zum Löschen muss lt. Datenblatt eine 1 ins GIFR geschrieben werden.
Also:
GIFR = GIFR OR &H80 => löschen INT1
Reinhard
Beim Zeus, du hast recht, lt. Datasheet ist das so, hoffentlich hört Reinhard noch zu.
(aber ehrlich gesagt, sehr logisch klingt die Erläuterung nicht. Offenbar bewirkt das Setzen durche eine Flanke und das Setzen durchs Programm genau das Gegenteil. eigentlich strange)
Reinhard
15.07.2005, 12:30
<...hoffentlich hört Reinhard noch zu
Ja, ich habs ja selbst geschrieben! Jetzt funktioniert es auch so wie es soll.
Das Ganze nennt sich dann Dialektik :D
Gruß
Reinhard
Ja, ich habs ja selbst geschrieben!
Ui, bei mir setzt offenbar schon die Demenz ein. :oops:
Na, hauptsache es klappt
Hi PicNick,
ich hab da auch noch ne Frage zum löschen des Int1.
Wenn du das folgendermaßen machst
GIFR 10011001
& 10000000
==========
10000000
dann löscht du doch die restlichen Bits des GIFR auch. Wie löscht man denn wirklich nur BIT 7 und 8?
Gruß
Baui
&HBF = NOT &H40
&H7F = NOT &H80
GIFR = GIFR AND &HBF löschen INT0
x1xxxxxx GIFR
10111111 &HBF
x0xxxxxx
GIFR = GIFR OR &H40 setzen INT0
x0xxxxxx GIFR
01000000 &H40
x1xxxxxx
GIFR = GIFR AND &H7F löschen INT1
1xxxxxxx GIFR
01111111 &H7F
0xxxxxxx
GIFR = GIFR OR &H80 setzen INT1
0xxxxxxx GIFR
10000000 &H80
1xxxxxxx
klaro ?
Hi Picnick,
jo is jetzt klar vielen dank für deine antwort.
gruß
baui
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.