Forum: Mikrocontroller und Digitale Elektronik Anfängerfehler IAR + MSP430F449


von Daniel (Gast)


Lesenswert?

Hallo,

momentan versuche ich LED-Lichter zu programmieren. Allerdings gibt IAR 
mir den Fehler, dass in der Funktion P1_ISR in der Zeile
1
if ((P1IFG & FREIGABE) > 0)

eine Klammer ")" fehlt. In einem anderen Programm funktioniert diese 
Abfrage einwandfrei. Ich weiß nicht, welche Informationen ihr noch 
braucht (totaler Anfänger mit µC-Programmierung), aber hier mal der 
Code:
1
#include  <msp430x44x.h>
2
3
#define FREIGABE  0x01;
4
#define TASTER    0x02;
5
6
void xTASTER(void);
7
8
unsigned int AV = 0;
9
//unsigned char i = 0;
10
11
void main(void)
12
{
13
  WDTCTL = WDTPW + WDTHOLD; //WDT aus
14
  P1DIR = 0x00; //init
15
  P1SEL = 0x00; //komplett als I/O
16
  P1OUT = 0x00; //alle P1_OUT-Bits = 0
17
  P1IE |= FREIGABE; //Taster Freigabe für Interrupt aktivieren
18
  P6DIR = 0xFF; //komplett als Ausgang
19
  P1OUT = 0x00; //init
20
  
21
  _EINT(); //GIE setzen
22
  
23
  while(1) //warte bis sich was tut
24
  {
25
    _NOP();
26
  }
27
  
28
}
29
30
void xTASTER(void)
31
{
32
  AV = P6OUT;
33
  if((AV & 0x01) > 0)
34
  {
35
    AV >>= 1;
36
    AV &= ~(0x01);
37
  }
38
  else
39
  {
40
    AV = 1;
41
  }
42
  
43
  P6OUT = AV;
44
}
45
46
#pragma vector=PORT1_VECTOR
47
__interrupt void P1_ISR()
48
{
49
  if ((P1IFG & FREIGABE) > 0)
50
  {
51
    P1IE |= TASTER;
52
    P6OUT = 1;
53
    P1IFG &= ~FREIGABE;
54
  }
55
  else
56
  {
57
    xTASTER();
58
    P1IFG &= ~TASTER;
59
  }
60
}

PS: Ich denke, der Code ist so einfach, dass er nicht vieler Kommentare 
bedarf.

Vielen Dank,
Daniel

von Slava G. (slava)


Lesenswert?

Ich bin auch ein anfänger.

Kanst du mir dan sagen wie du angefangen hast?

von Hans (Gast)


Lesenswert?

Slava Gromov schrieb:
> Kanst du mir dan sagen wie du angefangen hast?

LOL

von Daniel (Gast)


Lesenswert?

Slava Gromov schrieb:
> Kanst du mir dan sagen wie du angefangen hast?

Wie meinen?

von Slava G. (slava)


Lesenswert?

Genau!

von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

Daniel schrieb:
> #define FREIGABE  0x01;

durch das #define macht er dir aus
1
if ((P1IFG & FREIGABE) > 0)

ein
1
if ((P1IFG & 0x01;) > 0)

wobei das Semikolon echt störend ist ;-)

von Daniel (Gast)


Lesenswert?

Thomas Klima schrieb:
> wobei das Semikolon echt störend ist ;-)

Ah, du Gott!!! Super! Vielen Dank... :-)

von Daniel (Gast)


Lesenswert?

Gleich noch eine Frage hinterher.
Wenn ich jetzt die Simulation anwerfe und das Bit 0 vom Port 1 setze, 
sollte er ja aus unserer tollen Schleife
1
 while(1) //warte bis sich was tut
2
  {
3
    _NOP();
4
  }

in das P1_ISR springen, oder nicht? Tuts leider nicht.

von Daniel (Gast)


Lesenswert?

ERLEDIGT. :-)

von Daniel (Gast)


Lesenswert?

Nächste Frage... Der Interrupt vom zweite Bit (Bit1) des ersten Ports 
wird eigentlich erst aktiviert, wenn das erste Bit (Bit0) gesetzt wurde. 
Wenn ich aber ins Register schaue, wird es trotzdem im IFG gesetzt. :-( 
Also bevor ich Bit0 überhaupt berührt habe.

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
Noch kein Account? Hier anmelden.