Hab ich nicht "vergessen" sondern weggelassen
Hab ich nicht "vergessen" sondern weggelassen
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Vielen Dank Euch beiden, habe das Bsp von Marcus reinkopiert funzt bestens !!!
das Dumme dabei ist nur noch das ich nicht kapierewas da so passiert oder wie ich ein anderes (bestimmtes) Bitmuster auf diese Art und Weise durchlaufen lasse.
Natürlich ich teste jetzt nur auf einem STK500 mit den 8 LED. Es geht mir ums Verstehen der Sache, um später es in anderen Anwendungen (Lichtschlauch, o.ä. ) anzuwenden.
Ich hatte damals Ausbildungszeit leider einen Unfall, das war dann das Ende, so habe ich die Binäre Programmierung in C nicht mehr mitbekommen, nun möchte ich es selber noch nachholen, des Lernen wegens und der Interesse daran. Aber ich hatte beim Binären schon immer meine Probleme....
Na werde mich durchkämpfen...und viel hier lesen
Danke
Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Pardon.
@Gerhard:
Im Grunde ist es ziemlich einfach. Du hast im Register ein Bitmuster stehen: 76543210
Jeder der Zahlen steht für ein Bit das entweder 0 oder 1 sein kann. Wenn du jetzt darauf den Schiebe-Operator anwendest, passiert folgendes:
76543210 << 1 (einmal nach links schieben) wird zu 6543210_, wobei die "Fehlstelle" _ den Wert 0 hat. Der Schiebeoperator füllt in beide Richtungen immer mit Nullen auf.
Dementsprechend wird 76543210 >> 1 (einmal nach rechts schieben) wird zu _7654321
So, du wolltest das Muster nach links wandern lassen, bekommst also 6543210_. Um jetzt den Wert der ursprünglich in Bit 7 stand ganz ans Ende zu bekommen, sind folgende Schritte nötig:
1. Ausmaskieren von Bit 7: 76543210 & (1 << 7) entspricht 76543210 & 1000000 (Bitmaske!) und wird damit zu 7_________ (_ haben den Wert 0)
2. Verschieben der Maske nach rechts: 7_______ >> 7 wird zu _______7 (wie oben, die nachgerückten Bits haben den Wert 0)
3. Binäres Oder mit dem ursprünglichen Wert 6543210_: 6543210_ | _______7 wird zu 65432107. Damit ist alles einmal nach links gewandert und das Bit von Position sieben steht jetzt ganz rechts. Das funktioniert, weil überall wo ein Unterstrich stand, das Bit den Wert 0 hatte. X | 0 ist nur genau dann 1 wenn X den Wert 1 hat.
Hoffe das hilft etwas weiter.
mfG
Markus
Tiny ASURO Library: Thread und sf.net Seite
Hallo Markus !
ich möchte Dir ein grosses Dankeschön sagen für Deine Hilfe !!! Ich denke damit kann ich jetzt mir einiges beim Probieren erklärlicher machen.
Gruss und Dank
Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Lesezeichen