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)
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
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.
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.
Danke für eure Hilfe. Mit ((P6IN & BIT5)==BIT5) geht die Software in die while-Schleife.
Lesezeichen