Hallo, ich habbe folgendes Problem : Mein Programm springt nicht in die ISR wenn ich eine positive Flanke an P2.6 anlege. void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT // Einstellungen für P2.6 als Interrupt Quelle CLR(P2SEL,BIT6); // P2.6 XIN deaktivieren SET(P2DIR,BIT6); // P2.6 = Input CLR(P2IES,BIT6); // P2.6 Interrupt bei steigender Flanke SET(P2IE,BIT6); // P2.6 Interrupt enable SET(P2REN,BIT6); // Pullup/pulldown resistor enabled CLR(P2OUT,BIT6); // Eingang an 0 Potential ziehen LED_ON; while(1) { } } #pragma vector=PORT2_VECTOR __interrupt void Port_2(void) { if(P2IFG & BIT6) { LED_OFF; CLR(P2IFG,BIT6); } } CLR und SET sind makros die zum setzen und löschen von bits verwendet werden. LED_ON schaltel eine led ein und LED_OFF schaltet sie wieder aus
Hi, die bei der direction genannten BITx gelten danach als Ausgänge. So zumindest bei meinem G2553 :) Hast du das Interrupt flag gesetzt? __enable_interrupt(); Da hatte ich auch lange rumgesucht, ist es nicht aktiv, werden keine steuerbaren Interrupts aufgerufen obwohl sie anliegen. Ansonsten musst du halt mal debuggen und schauen ob die Interrupts hängenbleiben in dem dazugehörigen Register. Grüße Christian
can you please attach your working code,I am confused when you SET the P2 BIT 6 to make it input? Shouldn't it be CLR. IF you have this working code then please attach here, also I have issue know what is this statement: __enable_interrupt (); may I know why this statement is needed. regards sushil singh chauhan NUS Singapore
Ein Beispiel
1 | #include <msp430g2553.h> |
2 | |
3 | #define LED_GREEN BIT6
|
4 | #define TASTE_S2 BIT3
|
5 | |
6 | int main(void) { |
7 | |
8 | WDTCTL = WDTPW + WDTHOLD; // WDT stoppen |
9 | |
10 | BCSCTL1 = CALBC1_1MHZ; // Sytemtakt |
11 | DCOCTL = CALDCO_1MHZ; |
12 | |
13 | P1SEL |= LED_GREEN; // LED zeigt PWM |
14 | P1DIR |= LED_GREEN; |
15 | |
16 | P1REN |= TASTE_S2; // Pull einschalten |
17 | P1OUT |= TASTE_S2; |
18 | |
19 | P1IES |= TASTE_S2; // fallende Flanke |
20 | P1IFG &= ~TASTE_S2; // pending Intr löschen |
21 | P1IE |= TASTE_S2; // enable Intr für Taste |
22 | |
23 | TACCR0 = 1000; // Frequenz einstellen |
24 | TACCR1 = 100; // Tastverhältnis 1 : 3 |
25 | TACCTL1 = OUTMOD2 | OUTMOD1 | OUTMOD0; // TAO.1 im Mode 7 |
26 | TACTL = TASSEL1 | MC0 | TACLR; // Timer einstellen und löschen |
27 | |
28 | _BIS_SR(LPM1_bits + GIE); // low power und Intr enabled |
29 | |
30 | }
|
31 | |
32 | |
33 | // Port 1 interrupt service routine
|
34 | #pragma vector=PORT1_VECTOR
|
35 | __interrupt void Port_1(void) { |
36 | |
37 | P1IFG &= ~TASTE_S2; // pending Intr löschen |
38 | TACCR1 = (TACCR1 > 100) ? 100 : 900; // Tastverhältnis ändern |
39 | |
40 | }
|
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.