MSP430F1232 + Interrupt Port 1

Gast #990230
Hi Leute!

Ich möchte am Port 1 auf dem auch das JTAG interface verbaut ist eine 
Interrupt-abfrage machen.

Hab dafür auch den Code geschrieben und der funktioniert. Jedoch 
funktioniert er immer nur für einen Taster. Wenn ich jetzt im Interrupt 
2 Taster abfragen will dann spielt das ganze ding verrückt.

Ich versteh das nicht... kann das sein dass ich die Interrupts dann 
anders rücksetzen muss oder wie?


CODE:
//---------------------------------------------------------------------- 
---
  if((P1IFG & BIT6)){     //Abfrage auf Interruptflag an P1.6
    P1IE &= ~BIT6;

    //while(P1IN & BIT6);   //Warten bis Taster wieder losgelassen

    sChannel=1;       //Kanalauswahl

    //for(k=0;k<=3000;k++); //Entprellung
    P1IE |= BIT6;         //Interrupt wieder freigeben
  }
//---------------------------------------------------------------------- 
---
   if(P1IFG & BIT7){      //Abfrage auf Interruptflag an P1.7
    P1IE &= ~BIT7;        //Interrupt sperren (wegen Prellung)

    //while(P1IN & BIT7);   //Warten bis Taster wieder losgelassen

    if(P2IE & BIT0)       //T1 (bett) für Start des 
Nulldurchgangsinterrupt
      P2IE &= ~BIT0;
    else
      P2IE |= BIT0;

    //for(k=0;k<=3000;k++); //Entprellung
    P1IE |= BIT7;         //Interrupt wieder freigeben
  }

  P1IFG &= ~BIT6;         //Interrupt T2 löschen
  P1IFG &= ~BIT7;         //Interrupt T1 löschen


Wieso soll das nicht funktionieren?

Hab auch das flag schon in der IF schleife rückgesetzt. das bringt auch 
nichts!!!

Bitte um hilfe!

mfg, geri
>P1IE &= ~BIT7;        //Interrupt sperren (wegen Prellung)
>P1IE |= BIT7;         //Interrupt wieder freigeben
Ist unnötig da im Interrupt alle Interrupts eh deaktiviert sind.

>Jedoch funktioniert er immer nur für einen Taster.
D.h. das 2. Flag wird nicht gesetzt oder nicht bearbeitet, oder...?

>Wenn ich jetzt im Interrupt 2 Taster abfragen will dann spielt das ganze
>ding verrückt.
Was bedeutet "verrückt"?
Gast
es lösen beide taster einen interrupt aus. Sie sind auf falling edge 
geschalten, was mit den tastern übereinstimmt.

Komischerweiße kommt der interrupt an bit7 nur dann wenn ich drücke und 
löst die richtige aktion aus.

Der taster an bit6 löst interrupt aus, jedoch müsste ich am taster 
bleiben um die aktion auszuführen.. wie kann das sein?

die taster sind komplett gleich aufgebaut alle auf falling edge 
geschaltet...

ich versteh das nicht!

mfg, geri
Gast
Hallo,

das kann mit der Prellzeit der Taster zu tun haben, Bit7 hat vom 
Auslösen des Interrups an mehr Zeit, bis die while Schleife kommt, kann 
diese also umgehen, wenn der Taster gerade in diesem Moment prellt. Das 
kann von Taster zu Taster variieren aber auch sehr reproduzierbar 
aussehen.

Solche Sachen macht man halt auch nicht im Interrupt, und wenn, dann 
entprellt man die Taster.

Viele Grüße,

Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.