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"?
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
Mmm, ich hab ehrlich gesagt immer noch nicht verstanden was los ist.
Kannst du den Quellcode nochmal ohne die auskommentierten Stellen posten? Und als formatierten Text, damit man da durchsieht? Und solche While-Schleifen usw. in der ISR macht man niemals nicht, überhaupt nicht und unter keinen Umständen ;)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.