Hallo,
ich beschäftige mich seit kurzem mit dem TI MSP430. Dazu habe ich mir
ein Launchpad gekauft und versuche mich gerade mit einem kleinem
Programm, das über Interrupts gesteuert LED's ansteuert.
Leider wird die globale Variable wahl zwar in der Routine erhöht,
allerdings ist sie beim nächsten Einsprung in die ISR wieder den Wert 0.
Ich sehe da keine Ursache, wer weiß eine Lösung.
gruß
Korbinian
1 | #include "msp430.h"
|
2 | unsigned char wahl; /* global variable */
|
3 |
|
4 | #pragma vector = TIMERA1_VECTOR
|
5 | __interrupt void TIMERA_OVF(void)
|
6 | {
|
7 | TACTL = 0x02E0; /* Timer counts to 0xFFFF, Divider 8, INT disabled , INTFLAG disabled */
|
8 | if(wahl < 0x80)
|
9 | {
|
10 | P1OUT ^= BIT0;
|
11 | }
|
12 | else if (wahl >= 0x80)
|
13 | {
|
14 | P1OUT ^= BIT6;
|
15 | }
|
16 | else if (wahl == 0xFF)
|
17 | {
|
18 | wahl = 0;
|
19 | }
|
20 | wahl++;
|
21 | __delay_cycles(10000);
|
22 | TACTL = 0x02E2; // Timer counts to 0xFFFF, Divider 8, INT enabled , INTFLAG disabled
|
23 | }
|
24 |
|
25 | int main( void )
|
26 | {
|
27 | P1DIR = 0xFF; /* PORT1 direction: output */
|
28 | P1OUT = 0x00; /* Init PORT1 */
|
29 | __enable_interrupt(); /* enable global interrupt */
|
30 | TACTL = 0x02E2; /* Timer counts to 0xFFFF, Divider 8, INT enabled , INTFLAG disabled */
|
31 | for(;;)
|
32 | {
|
33 | /* do nothing */
|
34 | }
|
35 | }
|