Mein Problem ist das nach dem auslösen des Interrupts über einen Taster nicht zurück in die main() Funktion gesprungen wird bzw. das Programm irgendwo hängen bleibt. Oder habe ich da einen Denkfehler? Idee des ganzen war eine LED blinken zu lassen und über betätigen des Tasters die Zeit zwischen dem blinken der LED zu verringern.
1 | |
2 | 1 #include<msp430.h> |
3 | 2 |
4 | 3 /*//////////////////////////////////////////////////////////////////////////////////////////// |
5 | 4 * |
6 | 5 * MSP-EXP430G2 |
7 | 6 * |
8 | 7 * 1 |iVCC |GND 20 |
9 | 8 * 2 |RED |XIN 19 |
10 | 9 * 3 |TxD |XOUT 18 |
11 | 10 * 4 |RxD |TEST 17 |
12 | 11 * 5 |S2 |S1 RST 16 |
13 | 12 * 6 | | 14 |
14 | 13 * 7 | |GREEN 14 |
15 | 14 * 8 | | 13 |
16 | 15 * 9 | | 12 |
17 | 16 * 10 | | 11 |
18 | 17 * |
19 | 47 *///////////////////////////////////////////////////////////////////////////////////////////// |
20 | 48 |
21 | 49 |
22 | 50 #define LEDRED BIT0 |
23 | 51 #define LEDGREEN BIT6 |
24 | 52 #define BUTTON BIT3 |
25 | 53 #define DEBOUNCE_MS 50 |
26 | 54 |
27 | 55 //*************************************** |
28 | 56 void delay_ms(unsigned int ms){ |
29 | 57 while(ms--){ |
30 | 58 __delay_cycles(10000); |
31 | 59 } |
32 | 60 } |
33 | 61 //*************************************** |
34 | 62 char button_pressed(void){ |
35 | 63 if((P1IN & BUTTON) == 0){ |
36 | 64 delay_ms(DEBOUNCE_MS); |
37 | 65 if ((P1IN & BUTTON) == 0) return 1; |
38 | 66 }} |
39 | 67 return 0; |
40 | 68 } |
41 | 69 //*************************************** |
42 | 70 |
43 | 71 |
44 | 72 unsigned int faktor = 1; |
45 | 73 |
46 | 74 int main(void){ |
47 | 75 |
48 | 76 WDTCTL = WDTPW + WDTHOLD; |
49 | 77 |
50 | 78 P1DIR |= LEDRED; |
51 | 79 P1OUT |= BUTTON; |
52 | 80 P1DIR &= ~BUTTON; |
53 | 81 P1IE |= BUTTON; |
54 | 82 P1IFG &= ~BUTTON; |
55 | 83 P1REN |= BUTTON; |
56 | 84 __enable_interrupt(); |
57 | 85 |
58 | 86 while(1){ |
59 | 87 delay_ms(1000/faktor); |
60 | 88 P1OUT ^= LEDRED; |
61 | 89 } |
62 | 90 |
63 | 91 } |
64 | 92 |
65 | 93 void __attribute__ ((interrupt(PORT1_VECTOR))) watchdog_timer (void){ |
66 | 94 if(button_pressed()){ |
67 | 95 faktor+=1; |
68 | 96 P1IFG &= ~BUTTON; |
69 | 97 } |
70 | 98 } |