Forum: Mikrocontroller und Digitale Elektronik MSP430 Ports


von Thomas S. (lak333)


Lesenswert?

Hi!

Also ich fange gerade mit dem MSP430F449 an. Das mit der Port definition 
ist mir ein bisschen schleierhaft. Wollte an Port 6.0 ein Rechteck mit 
Softwareschleife erzeugen. Hat soweit geklappt aber bin mir nicht sicher 
ob das mit dem direction Register richtig verstanden habe.

P6DIR |= 0x01;    // Set P6.0 to output direction
was bedeutet der senkrechte strich vor dem =, wie wird dieser erzeugt?

Müsste ich nicht schreiben

P6.0DIR = 0x01; //Set P6.0 to output direction
P6.0DIR = 0x00; //Set P6.0 to input direction

Ich möchte nur einen Portpin als I/O definieren und nicht den ganzen 
Port 6!

von reflection (Gast)


Lesenswert?

Wenn Du nur einen Portpin definieren möchtest ist

P6DIR |= 0x01;

das Richtige ;o)

Das | zeichen nennt sich Pipe und geht bei mir mit AltGR+7

Das heisst P6DIR OR 0x01;

Wenn Du x OR 0 machst, hat das keine Auswirkungen. Dort wo in x eine 0 
stand steht immer noch eine 0, da wo eine 1 stand steht immer noch ne 1.

Wenn Du x OR 1 machst, passiert nix wenn das Bit bereits 1 ist, wenn es 
aber 0 ist, wird es zu 1, denn 0 OR 1 = 1 (Wahrheitstabelle)

Der Befehl setzt also unabhängig vom Zustand von P6.1-6.7 den Port 6.0 
auf DIR = 1

Gruss

von Tobias Korrmann (Gast)


Lesenswert?

Du sprichst doch damit die Portpin einzeln an.

Des Weiteren must du den Portpin auf ausgang schalten, wie du es schon 
getan hast und nur den Pegel von High auf low schalten.

Wenn du den Pin auf input schaltest arbeitet er ja nicht mehr als 
Ausgang.

von Timo P. (latissimo)


Lesenswert?

Der Sinn von:
 |= (oder gleich) und:
 &= (und gleich)

ist folgender: Man kann ein Register (z.B P6DIR) an einzelnen Stellen 
verändern, die anderen Bits bleiben unangetastet. Wenn man am Anfang 
eines Programms genau weiß, dass z.B nur 4 Bits als Ausgang genutzt 
werden sollen, reicht folgende Zuweisung

P6DIR = 0x0F; // 00001111

wenn du jetzt aber weiter im Programm zusätzlich das Bit 4 auf 1 setzen 
willst, ohne dass du die anderen einsen wegmachst, dann:

P6DIR |= (1<<4); genauer heißt das:

   0000 1111
 | 0001 0000
 = 0001 1111

*Zusammenfassend :*
Bit setzen:  REGISTERNAME |=  (1<<bit);
Bit löschen: REGISTERNAME &=~ (1<<bit);

von fragender (Gast)


Lesenswert?


von Thomas Schwarzwälder (Gast)


Lesenswert?

Ahh, okay jetzt kommt Licht ins Dunkle!

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.