Hallo,
die Ports werden immer byteweise angesprochen, das bedeutet, immer 8
Pins auf ein Mal!
Ein Port heißt beim MSP430 immer Pa.b
z.B. P1.2 für Port 1, Pin 2.
Du kannst z.B. Bit 2 nur setzen, wenn du den ganzen Port neu setzt.
Nachdem du ja nur einen Pin der 8 setzen willst, musst du die anderen
wieder so setzen, wie sie vorher waren, also die Werigkeit des Pins zu
dem aktuellen Stand dazuodern.
Ausführlicher geschrieben passiert da Folgendes:
1 | P1OUT = P1OUT | 0x04; //setze Port1.2 auf high
|
Der Port ist binär codiert, jedes Bit hat eine Wertigkeit:
Bit0 0x01
Bit1 0x02
Bit2 0x04
Bit3 0x08
Bit4 0x10
Bit5 0x20
Bit6 0x40
Bit7 0x80
Rücksetzen (clearen) des Bits erfolgt dann logischerweise mit einer
Undierung mit der invertierten Werigkeit des Pins:
1 | P1OUT = P1OUT & ~0x04; //setze Port1.2 auf low
|
Wichtig ist, dass der Pin überhaupt als Ausgang konfiguriert ist, sonst
kommt kein Strom raus, das macht man mit dem data direction register:
1 | P1DIR = P1DIR | 0x01; // Set P1.0 to output direction
|
Rücksetzen geht entsprechend mit UND und der invertierten Pinwertigkeit.
Ich nehme an, P1.0 ist dein LED-Pin, dann konfigurierst du Port1.0 als
Ausgang
1 | P1DIR = P1DIR | 0x01; // Set P1.0 to output direction
|
und setzt dann den Pegel entweder low:
1 | P1OUT = P1OUT & ~0x01; //setze Port1.0 auf low
|
oder high:
1 | P1OUT = P1OUT | 0x01; //setze Port1.0 auf high
|
Welches KOmmando dabei die LED ein und welches sie ausschaltet, hängt
dann davon ab, ob die LED leuchtet, wenn am Pin Vcc anliegt oder ob sie
leuchtet, wenn Gnd anliegt, das wiederum hängt nur davon ab, ob die LED
vom Pin aus gegen Plus oder Minus deiner Schaltung geschaltet ist, wenn
du dir unsicher bist, kannst ja beide Versionen ausprobieren.
Aber Vorsicht, du musst den Prozessor auf jeden Fall sinnvoll
beschäftigen, sonst siehst du die LED eventuell garnicht aufleuchten,
weil er kurz nach dem Setzen des Ports abstürzt.
Probier also mal irgend so was:
1 | int main{void}
|
2 | {
|
3 | P1DIR = P1DIR | 0x01; //Port1.0 ist jetzt Ausgang
|
4 | P1OUT = P1OUT & ~0x01; //setze Port1.0 auf low
|
5 | for(;;) {} //warte hier bis in alle Ewigkeit
|
6 | return 0;
|
7 | }
|
Wenns nicht leuchtet, versuch auf high zu setzen. Wenns dann noch nicht
Leuchtet, stimmt wahrscheinlich der Port nicht, also entweder P1OUT ist
nicht 1, sondern z.B. P2OUT, oder 0x01 ist falsch, weil die LED nicht an
Bit0 des Ports hängt, sondern z.B. an Bit3, dann muss es 0x08 heißen.
Ich hoffe, das war genug Starthilfe.
Viele Grüße,
Peter