Hallo Zusammen, ich habe ein kleines Programm mit dem Launchpad geschrieben, welches soweit auch funktioniert. Wenn ich allerdings die Debug-Session beende und den µC "Standalone" betreiben möchte funktioniert es nicht mehr, so als ob das Programm weg wäre. Muss ich das Programm erst irgendwie dauerhaft in den µC schreiben? Und wenn ja, wie? Kann mir da jemand helfen? Vielen Dank. Hier noch mein Quelltext:
1 | #include "msp430x20x2.h" |
2 | |
3 | #define NUMBER_OF_BURSTS 16
|
4 | |
5 | #define IR_LED BIT0
|
6 | #define LED_2 BIT6
|
7 | #define LED_DIR P1DIR
|
8 | #define LED_OUT P1OUT
|
9 | |
10 | #define BUTTON_1 BIT3
|
11 | #define BUTTON_2 BIT4
|
12 | #define BUTTON_OUT P1OUT
|
13 | #define BUTTON_REN P1REN
|
14 | #define BUTTON_IN P1IN
|
15 | #define BUTTON_DIR P1DIR
|
16 | #define BUTTON_IE P1IE
|
17 | #define BUTTON_IES P1IES
|
18 | #define BUTTON_IFG P1IFG
|
19 | |
20 | void SendBursts(void) |
21 | {
|
22 | unsigned char i=0; |
23 | for (i=0; i < NUMBER_OF_BURSTS*2; i++) |
24 | {
|
25 | __delay_cycles(2); |
26 | LED_OUT ^= IR_LED; |
27 | }
|
28 | LED_OUT &=~ IR_LED; |
29 | }
|
30 | |
31 | void SendImmediateShutter (void) |
32 | {
|
33 | SendBursts(); |
34 | __delay_cycles(8000); |
35 | SendBursts(); |
36 | }
|
37 | |
38 | void Send2sDelayedShutter (void) |
39 | {
|
40 | SendBursts(); |
41 | __delay_cycles(5600); |
42 | SendBursts(); |
43 | }
|
44 | |
45 | void InitializeButton(void) // Configure Push Button |
46 | {
|
47 | BUTTON_DIR &= ~(BUTTON_1 + BUTTON_2); |
48 | BUTTON_OUT |= (BUTTON_1 + BUTTON_2); |
49 | BUTTON_REN |= (BUTTON_1 + BUTTON_2); |
50 | BUTTON_IES |= (BUTTON_1 + BUTTON_2); |
51 | BUTTON_IFG &= ~(BUTTON_1 + BUTTON_2); |
52 | BUTTON_IE |= (BUTTON_1 + BUTTON_2); |
53 | }
|
54 | |
55 | void InitIrLed(void) |
56 | {
|
57 | LED_DIR |= (IR_LED + LED_2); //set IR_PORT as output |
58 | LED_OUT &=~ (IR_LED + LED_2); //ir_led off |
59 | }
|
60 | |
61 | #pragma vector=PORT1_VECTOR
|
62 | __interrupt void PORT1_ISR(void) |
63 | {
|
64 | BUTTON_IE &= ~(BUTTON_1 + BUTTON_2); /* Debounce */ |
65 | WDTCTL = WDT_ADLY_250; |
66 | IFG1 &= ~WDTIFG; /* clear interrupt flag */ |
67 | IE1 |= WDTIE; |
68 | if (BUTTON_IFG == BUTTON_1) SendImmediateShutter(); |
69 | if (BUTTON_IFG == BUTTON_2) Send2sDelayedShutter(); |
70 | BUTTON_IFG = 0; |
71 | }
|
72 | |
73 | #pragma vector=WDT_VECTOR
|
74 | __interrupt void WDT_ISR(void) |
75 | {
|
76 | IE1 &= ~WDTIE; /* disable interrupt */ |
77 | IFG1 &= ~WDTIFG; /* clear interrupt flag */ |
78 | WDTCTL = WDTPW + WDTHOLD; /* put WDT back in hold state */ |
79 | BUTTON_IE |= (BUTTON_1 + BUTTON_2); /* Debouncing complete */ |
80 | }
|
81 | |
82 | void main () |
83 | {
|
84 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
85 | InitIrLed(); //init led |
86 | InitializeButton(); //init_buttons |
87 | __enable_interrupt(); // Enable interrupts. |
88 | while(1) |
89 | {
|
90 | |
91 | }
|
92 | }
|