www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik unterschiede beim setzen von registerinhalten


Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe folgendes problem:

ich weis nicht was der unterschied zwischen diesen 2 befehlen ist bzw 
wie unterschiedlich sich diese verhalten...gibt es überhaupt 
unterschiede?

beispiel 1:

c-quelltextausschnitt:

DDRA = 0xff;     //port a als ausgang
PORTA = 0x04;    //ein bit in port a auf 1 setzen


beispiel 2:

c-quelltextausschnitt:

DDRA = 0xff;     //port a als ausgang
PORTA |0 (1 << 2);  //ein bit in port a auf 1 setzen

was ist der unterschied zwischen den zwei beispielen?
welche methode verwendet man während des eines programms um am ausgang 
eine veränderung vorzunehmen?

was bedeutet eigentlich bei avr studio in der simulation bei den ports 
PIN?
es gibt ja DDR (data direction register) und PORT (ein/ausgänge). aber 
was ist PIN?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich empfehle die Lektüre 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Ansonsten:
- |0 gibt es meines Wissens nicht.
- PIN ist das EIngangsregister

Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-quelltextausschnitt:

DDRA = 0xff;     //port a als ausgang
PORTA = 0x04;    //ein bit in port a auf 1 setzen


beispiel 2:

c-quelltextausschnitt:

DDRA = 0xff;     //port a als ausgang
PORTA |= (1 << 2);  //ein bit in port a auf 1 setzen


so muss es heissen...da hat sich ein tippfehler eingeschlichen bei dem 
|=....

ich lese und arbeite mit dem gcc tutorial...aber genau dabei kommt diese 
frage zu den unterschieden bei mir auf...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pille1990 wrote:
> DDRA = 0xff;     //port a als ausgang
> PORTA = 0x04;    //ein bit in port a auf 1 setzen

Setzt PORTA.2=1 und alle anderen Bits von PORTA auf 0

> beispiel 2:
>
> DDRA = 0xff;     //port a als ausgang
> PORTA |= (1 << 2);  //ein bit in port a auf 1 setzen

Setzt Bit 2 von PORTA auf 1

Johann

Autor: Philipp D. (thejoker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mit port ist eben der ganze port gemeint, mit PIND6 z.b. kannst du 
ganz gezielt ein einzelnes bit setzten oder abfragen. bsp:
 sbis PORTA, PINA1 
Dazu braucht man die zwei verschiedenen ausdrücke.
PINA0 ist also der name des 0-ten bits im register PORTA

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> PORTA = 0x04;    //ein bit in port a auf 1 setzen

Weist dem kompletten PORTA auf das Bitmuster 0000 0100 (enspricht 0x04 
in hexadezimal) zu. D.h. nach der Anweisung ist auf dem Port A nur das 
3. Bit high, alle anderen sind low.

> PORTA |= (1 << 2);  //ein bit in port a auf 1 setzen

Zuerst einmal: mit (1 << 2) wird eine 1 zwei Bits nach links geschoben, 
was wieder dem Bitmuster 0000 0100 (= 0x04) ergibt.

|= ist eine Kurzschreibweise für:
PORTA = PORTA | (1 << 2);

Es wird also der aktuelle Zustand (Bitmuster) gelesen und dann mit dem 
Bitmuster 0000 0100 bitweise verodert ( | ). Anschließend wird dieses 
Ergebnis wieder auf den Port zurückgeschrieben.
Als Resultat ist das 3. Bit auf dem Port gesetzt (high), ohne den 
Zustand der anderen Bits verändert zu haben.

Marcel

Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die ganzen antworten....vor allem marcels beitrag war sehr 
hilfreich...

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.