www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Ports


Autor: Thomas Schwarzwälder (lak333)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: reflection (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Korrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Thomas Schwarzwälder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh, okay jetzt kommt Licht ins Dunkle!

Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.