Zustand Port-Pins in Dezimalzahl wandeln

Gast #1701695
Lesenswert?
• ▲
▼
Hallo,

ich habe da mal eine Frage. Angenommen ich habe eine Reihe von 
Dip-Schaltern an meinem Atmega angeschlossen und will nun in C diese 
Pins benutzten um eine Zahl zu bestimmen, mit der ich dann rechnen kann. 
Binär oder Dezimal ist ja jetzt erstmal egal. Dann würde ich 
normalerweise hingehen und den Zustand meines Ports mit sowas wie

i = PinX & Maske;
irgendwas = irgendwasanderes * i;

auslesen. Ich nehme die Pins, die ich brauche, die anderen maskiere ich 
weg und kann dann mit meinen Dip-Schaltern eine binäre Zahl codieren, um 
damit zu rechnen. Wie mache ich das aber, wenn die Dipschalter über 
mehere Ports verteilt sind und ich eine zusammenhängenden Binärzahl 
will? Ich brauche also irgendwas in der Form von.

if (!(PINB &(1<<2)))
  {
  LSB von i;
  }
if (!(PINC &(1<<5)))
  {
  1. Bit von i;
  }
if (!(PIND &(1<<0)))
  {
  2. Bit von i;
  }

usw. Wie aber macht man sowas konkret und in elegant?

Gruß Tom
Gast #1701729
Lesenswert?
• ▲
▼
Hi
C is nicht, aber vielleicht ein Lösungsansatz:
Register 1 mit Portwert A belegen.
unwichtige Bits mit Und-Verknüpfung ausblenden (Masierung)
Bit in Position schieben
und register in Variable schreben
Nächsten Portwert laden
unwichtige Bits ausblenden
Auf Position schieben
Mit abgelegtem Wert verodern
usw.....
Gruß oldmax
#1702015
Lesenswert?
• ▲
▼
Servus,
>
> usw. Wie aber macht man sowas konkret und in elegant?
>

Sich vorher darueber Gedanken machen und nicht einfach drauflos 
loeten.

> Was für eine Enttäuschung.

was kann den C dafuer, dass du deine Schalter so konfus anklemmst, 
obwohl sie offensichtlich eine logische Einheit bilden sollen?
#1702074
Lesenswert?
• ▲
▼
Tom schrieb:
> Sowas geht nicht mit Bitoperationen in C?

Sicher gehts.
Aber es gibt nicht für jeden Fall von
"Hole dir aus 25 Variablen die Bits mit den Nummern x, y, z und schiebe 
alle gemeinsam in eine neue Variable" ein Spezialzeichen. Da würde die 
Tastatur schnell zu klein werden.

C stellt dir den Baukasten zur Verfügung. Der Bauskasten ist vollständig 
genug, dass man jede Operation daraus zusammenstellen kann.
So wie das bei Lego früher auch mal war: Ein überschaubarer Satz von 
Bausteinen mit denen man gebaut hat. Heute besteht Lego ja nur noch aus 
Spezialteilen für jeden möglichen Furz.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.