PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MSP430 Programm überspringt while-Schleife



isix
30.01.2006, 12:31
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

PicNick
30.01.2006, 12:59
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)

SprinterSB
30.01.2006, 13:03
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

isix
01.02.2006, 09:10
Danke für eure Hilfe. Mit ((P6IN & BIT5)==BIT5) geht die Software in die while-Schleife.