mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

momentan versuche ich LED-Lichter zu programmieren. Allerdings gibt IAR 
mir den Fehler, dass in der Funktion P1_ISR in der Zeile
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:
#include  <msp430x44x.h>

#define FREIGABE  0x01;
#define TASTER    0x02;

void xTASTER(void);

unsigned int AV = 0;
//unsigned char i = 0;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD; //WDT aus
  P1DIR = 0x00; //init
  P1SEL = 0x00; //komplett als I/O
  P1OUT = 0x00; //alle P1_OUT-Bits = 0
  P1IE |= FREIGABE; //Taster Freigabe für Interrupt aktivieren
  P6DIR = 0xFF; //komplett als Ausgang
  P1OUT = 0x00; //init
  
  _EINT(); //GIE setzen
  
  while(1) //warte bis sich was tut
  {
    _NOP();
  }
  
}

void xTASTER(void)
{
  AV = P6OUT;
  if((AV & 0x01) > 0)
  {
    AV >>= 1;
    AV &= ~(0x01);
  }
  else
  {
    AV = 1;
  }
  
  P6OUT = AV;
}

#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR()
{
  if ((P1IFG & FREIGABE) > 0)
  {
    P1IE |= TASTER;
    P6OUT = 1;
    P1IFG &= ~FREIGABE;
  }
  else
  {
    xTASTER();
    P1IFG &= ~TASTER;
  }
}

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

Vielen Dank,
Daniel

Autor: Slava Gromov (slava)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin auch ein anfänger.

Kanst du mir dan sagen wie du angefangen hast?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Slava Gromov schrieb:
> Kanst du mir dan sagen wie du angefangen hast?

LOL

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Slava Gromov schrieb:
> Kanst du mir dan sagen wie du angefangen hast?

Wie meinen?

Autor: Slava Gromov (slava)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau!

Autor: Thomas Klima (rlyeh_drifter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> #define FREIGABE  0x01;

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

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

wobei das Semikolon echt störend ist ;-)

Autor: Daniel (Gast)
Datum:

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

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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
 while(1) //warte bis sich was tut
  {
    _NOP();
  }

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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ERLEDIGT. :-)

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.