- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: MSP430 Programm überspringt while-Schleife

  1. #1
    Neuer Benutzer
    Registriert seit
    30.01.2006
    Ort
    Berlin
    Beiträge
    3

    MSP430 Programm überspringt while-Schleife

    Anzeige

    Powerstation Test
    Hallo,

    da ich von Assembler keine Ahnung habe, programmiere ich meinen MSP430F449 in C. Bis zur LCD-Ausgabe klappt auch alles, aber dann ...
    Der µC soll, wenn am Port P6.5 high anliegt einfach die angeführte while -Schleife durchlaufen. Das tut er jedoch nicht sondern springt einfach zur nächsten Funktion. Was übersehe ich denn hier?

    while ((P6IN & BIT5)==1) //Abfrage ob P6.5 (essung R0) ein
    {
    char zeile1[16]="Sensorwiderstand";
    P6SEL=0x04; //Nutzung P6.2 für ADC
    ADC12CTL0 |= ENC+ADC12SC; //anfangen und Konvertierung durchführen
    wait (4000); //500 µs warten
    R_0 = (ADC12MEM2/I_S); //Berechnung Widerstand
    sprintf(zeile2,"%.1f",R_0); //Floatwert R_0 in string zeile 2 mit einer Nachkommastelle
    strcat(zeile1, zeile2); //string zeile2 an zeile1 angehängt
    lcd_puts(zeile1); //Ausgabe der Strings
    wait (300000);
    }

    Die Pins sind übrigens wie folgt initialisiert:

    P6DIR=0x00; //P6.0, P6.1 und P6.2 Eingänge ADC12, P6.3, P6.5 und P6.7 Eingänge Wahlschalter

    P6SEL=0x07; //P6.0, P6.1 und P6.2 als A/D-Wandler nutzen, Rest als GPIO

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Kollege !
    (P6IN & BIT5)
    liefert, wenn das Bit gesetzt ist, 0x20 ( normales AND von zwei bytes)
    Keinesfall kommt da == 1) dabei raus, also nix "while"

    Du kannst entweder sagen
    while ((P6IN & BIT5)==BIT5)
    oder
    while (P6IN & BIT5)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Was du haben willst, ist nicht

    while ((P6IN & BIT5)==1)

    sondern vermutlich

    while (P6IN & BIT5)

    was gleichbedeutend ist mit

    while ((P6IN & BIT5) =! 0)

    P6IN & BIT5 ist wohl 0 oder 0x20
    Disclaimer: none. Sue me.

  4. #4
    Neuer Benutzer
    Registriert seit
    30.01.2006
    Ort
    Berlin
    Beiträge
    3

    Funktioniert

    Danke für eure Hilfe. Mit ((P6IN & BIT5)==BIT5) geht die Software in die while-Schleife.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad