mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Binäre Werte zusammenfügen Atmega88


Autor: marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jungs

brauche mal wieder euere Hilfe und zwar zu folgenden Problem:

An den pins D1 D2 D3 D4 eines Atmega8 liegt z.b die Binäre information 
1001 .

Ich frage nun  die 4 pin nacheinander ab und habe dann 4 bits Variabeln 
zb. var1 var2 var3 var4.

Wie kann ich nun die 4 Variabeln zusammenfügen , daß der inhalt 1001 
ergibt.

wäre sehr nett wenn jemand mir helfen kann oder eine andre Methode 
vorschlägt

PS: Ich schreibe in C

MfG

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitmanipulation ist das, was du brauchst...

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
marco schrieb:

> Ich frage nun  die 4 pin nacheinander ab und habe dann 4 bits Variabeln
> zb. var1 var2 var3 var4.

Warum nicht den ganzen Port einlesen ? Dann hast Du Dein Byte.
Die überzähligen einfach verUNDen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char myValue;
myValue = (PIND > 1) & 0x1F;

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oups...
unsigned char myValue;
myValue = (PIND >> 1) & 0x0F;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
marco schrieb:
> Wie kann ich nun die 4 Variabeln zusammenfügen , daß der inhalt 1001
> ergibt.
Wobei die Reihenfolge nicht ganz unwichtig ist. Wenn dein Wort z.B. so 
aussieht:
>> An den pins D1 D2 D3 D4 eines Atmega8 liegt die Binäre information 1100
Dann ist blöderweise die Bitreihenfolge vertauscht, am Port liegt dann 
nämlich der Wert xxx0011x an, und das ist (eigentlich) die falsche 
Reihenfolge... :-o

Gewöhn dir besser an, die Bits immer absteigend zu nummerieren, denn so 
ist auch die Wertigkeit in einem binären Wort: das MSB ist links, das 
LSB rechts...

Autor: marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jungs
Danke für die Hilfe, nun kommt das nächste Problem.

#Ich möchte aus PIND6 ,PIND7, PINB0 und PINB1 wieder eine 4 bit variale 
machen.wobei PIND6 das niedrigste bit ist.
Beispiel

PINB1--> 1

PINB0 --> 1

PIND7--> 0

PIND6--> 1


Wert= 1101

kann mir jemnad kurz eine Zeile schreiben wie das geht.Ich habe es 
allein leider nicht hingekriegt

Danke im Voraus

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Vorne anfangen.

Und dazu das hier:

Lothar Miller schrieb:
> Bitmanipulation ist das, was du brauchst...

Da musst du durch.

Oliver

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.