MSP430 Interruotroutine wiederholen bis Taster losgelassen wird

Gast #999593
Lesenswert?
• ▲
▼
Hallo,

ich verwende einen MSP430F2272 und möchte Taster via Interruot abfragen.

Nun habe ich es soweit hinbekommen, daß der Interrupt erkannt und meine 
Routine durchlaufen wird. Nur soll die Interruptroutine solange 
durchlaufen werden bis der Taster wieder losgelassen wurde.
Momentan habe ich es nur so hinbekommen, daß die Routine nur einmal 
durchläuft und der Taster dann von neuem neu gedrückt werden muß.

Im Tutorial 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts) 
habe ich gelesen, daß es auch anders geht. Nämlich daß ein erneutes 
Abfragen möglich ist.
Ist es also möglich die Interruptroutine wieder und wieder ablaufen zu 
lassen, solange der Taster gedrückt bleibt?
Gast #999626
Lesenswert?
• ▲
▼
Es handelt sich dabei um ein Warnsystem.

Soll heißen, so lange der Taster aktiv ist, soll eine LED (Bsp.) 
leuchten, sobald der Taster inaktiv (losgelassen) ist, soll die LED 
wieder aus gehen.

Hast du mir einen guten Link zum Thema Timerinterrupt? Dann könnte ich 
mir das lange suchen bis ich gute Infos habe sparen ;-)

Aber es müßte doch auch mit dem normalen Interrupt funktionieren, oder?
Gast #999681
Lesenswert?
• ▲
▼
Also irgendwie will das nicht...mein Code sieht aktuell so aus:
1
...
2
 if (P2IFG &  BIT1) // P2.1 caused the interrupt?
3
  {
4
  P1OUT = 0x00; //alle LEDs an
5
  wait (); //Unterprogramm Zeit warten
6
  P2IFG &= ~ BIT1; //Reset P2.0 interrupt flag
7
  }
8
...
Und damit lösche ich am Ende das Interruptflag.
Da ist es aber egal, was für einen Zusatnd der Taster hat.
Und ich muß ihn zuerst loslassen und wieder neu drücken, damit der 
Interrupt wieder gesetzt wird.
Persönliche Seite #999702
Lesenswert?
• ▲
▼
leider hab ich beim msp auch keinen plan davon.. kenn nur avrs...

hier mal im pseudo C
1
void Timer_ISR_Fkt(void)
2
{
3
   if(taster}
4
      LEDan();
5
   else
6
      LEDaus();
7
}
8

9
int main (void)
10
{
11
   Timer_Init(); //So einstellen das der Timer alle x ms einen IRQ auslöst
12

13
   while(1)
14
   {};
15

16
  return 0;
17
}

aber es gibt ja
http://www.mikrocontroller.net/articles/MSP430_Codebeispiele
Gast #1001354
Lesenswert?
• ▲
▼
Tag,

nachdem ich also am Samstag etwas gefrustet für dieses Wochenende damit 
aufgehört habe, stellt sich mir heute die Frage, wenn ich mit dem 
Interrupt auf eine negative Flanke reagieren (abfragen) kann, dann 
sollte das doch genauso auch auf die positive Flanke gehen?!

Also negative = Taster drücken, negative = Taster loslassen
#1001381
Lesenswert?
• ▲
▼
Jochen wrote:
> nachdem ich also am Samstag etwas gefrustet für dieses Wochenende damit
> aufgehört habe

Du liest wohl nicht gerne Antworten?

Also nochmal ganz ausführlich:
1
Interrupthandler
2
{
3
  do{
4
    tue etwas 
5
  }while( Taste gedrückt );
6
}

Fertig ist die Laube.


Peter
#1001843
Lesenswert?
• ▲
▼
Naja, wenn du auch was völlig anderes programmierst, als wir dir hier 
raten, dann wird´s nicht klappen.

Wenn du nur das P2IFG Register abfragst, kannst du den aktuellen Zustand 
des Tasters ja nicht rausbekommen, denn da steht lediglich drin, von 
welchem der 8 Port-Pins der Interrupt ausgelöst wurde. Du musst schon 
das P2IN Register pollen, um zu schauen, ob der Taster noch gedrückt ist 
oder nicht.
1
if (P2IFG &  BIT1) // P2.1 caused the interrupt?
2
{
3
P1OUT = 0x00; //alle LEDs an
4

5
wait (); //Unterprogramm Zeit warten
6

7
while(P2IN & BIT1); //Wenn Taster High-Aktiv ist, warten, bis losgelassen
8

9
P1OUT = 0xFF; //LEDs aus?
10

11
P2IFG &= ~ BIT1; //Reset P2.0 interrupt flag ----> Was jetzt? P2.0 oder 2.1 ???
12

13
}

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.