Spiegeln eines Bits

Gast #894896
Lesenswert?

Hallo,
es wurde schon einige mal darüber geschreiben wie man ein Byte Spiegeln 
kann.
Ich stehe gerade vor dem Problem das ich beim Layout bin und einen 
ganzen Bus Spiegeln müsste (was viel Platzt auf der Platiene brauchen 
würde).
Bei mir ist aber immer nur maximal 1Bit des Bytes gesetzt also
0000 0001 wird zu 1000 0000
0000 0010 wird zu 0100 0000 usw.

Gibt es hier eine bessere Lösung als durch eine for Schleife?
Ist hier ein Switch angebracht?
Oder sollte ich das Layout doch so machen das es Logisch passt?

Ach so es ist ein Atmega32

Gruß
Gast #894915
Lesenswert?

> 256 Byte im Code frei? Tabelle.
ich bräuchte ja nur 8 Werte, mit einem:

uint8_t neuwert, altwert;
uint8_t tabelle[] = {0x00, 0x80, 0x40, ....};

neuwert = tabelle[altwert];

würde ich ja viel mehr verbrauchen als ich benötige...
Werte wie 0000 0011 kommen bei mir ja nicht vor. Es ist immer nur 1 Bit 
gesetzt.
Gast #894937
Lesenswert?

>Sicher sinnvoller. Aber ist dir klar, dass diese Operation auf AVRs auch
>bloss eine Schleife ist?
ja es gibt ja nur einen einfachen rechts und links shift. Aber das ist 
nicht so schlimm die paar ca 16 Takte hab ich Zeit.

Oder gibt es wohlmöglich noch eine bessere Möglichkeit?
für neue Infos bin ich immer offen.
#894954
Lesenswert?

Ich sehe nicht so ganz, wie du mit "PORTC = (0x80>>i);" das spiegeln 
realisieren willst. Du kannst für i ja nicht direkt den Ausgangswert 
einsetzen. Du müsstest i erstmal ermitteln. Dann kannst du bei diesem 
"Ermitteln" auch gleich das Spiegeln erledigen. Z.B.:
1
neu = 0x80;
2
alt >>= 1;
3
while (alt) {
4
  neu >>= 1;
5
  alt >>= 1;
6
}
Gast #897191
Lesenswert?

Hallo,
danke nochmal für die Antworten, die haben mir schmal viel geholfen!!!

Ich hab nur noch eine Frage wie ihr es besser findet.
Laout so gestalten das das Programm einfacher (bzw. ersichtlicher) wird 
oder Layout einfacher gestalten (bessere Leitungsführung)?
Vielleicht noch dazu die Info das es keine (oder wenige) änderungen im 
Programm geben wird, wenn es einmal korrekt läuft ;)

Gruß
Gast #897232
Lesenswert?

Verstehe dein Problem nicht so ganz?
Ich weiß ja nicht, wie sehr du dich mit der Thematik auskennst, aber 
wenn du immer nur ein Bit ändern must bzw. auf deinem Bus immer nur ein 
Bit gesetzt ist, dann würde ich das einfach Programmtechnisch lösen!!!
Wie schon von anderen erwähnt bzw. von dir durch Shiften nach links bzw. 
nach rechts oder etwas anderes was deine Anforderungen abdeckt. Wo ist 
das Problem sich 8 Werte in einer Tabelle abzulegen?
Ein Tipp noch:
Rechnen würde ich untelassen da dies immer viel zu viel zeit in Anspruch 
nimmt. Aber das steht bei diesem Problem ja auser Frage! :=)
Also noch viel Erfolg!

LG...Kai

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren