Bits umtauschen (spiegeln)

Gast #4800022
Es weihnachtet wieder einmal und ich habe mein 16x10 LED Display 
vorgekramt.
ATmega128
es werden 2x8Bit (PortA linke hälfte, PORTC rechte hälfte)) breit pro 
Zeile dargestellt und das alles 10x (PORTD mit 74HCT42 0-9 
decodiert)nach unten widerholt.(PORTD=10->alles aus)
Seinerzeit(tm) hatte ich das mit den Fastavr-"Compiler" (ähnlich BASCOM) 
zusammengebastelt und ging eigentlich auch ganz gut.
Durch eine damalige Unachtsamkeit beim Routing sind jedoch alle Portbits 
vom PORTA und PORTC vertauscht.
aus PA.0->PA.7 wurde PA.7->PA.0 usw. schnief

Ich habe das damals softwaremäßig so gelöst:
1
Function umkehr(n As Byte) As Byte
2
Local m As Byte
3
m = 0
4
If n.0 Then : Set m.7 : End If
5
If n.1 Then : Set m.6 : End If
6
If n.2 Then : Set m.5 : End If
7
If n.3 Then : Set m.4 : End If
8
If n.4 Then : Set m.3 : End If
9
If n.5 Then : Set m.2 : End If
10
If n.6 Then : Set m.1 : End If
11
If n.7 Then : Set m.0 : End If
12
Return m
13
End Function

Ich bin nun dabei ,das ganze nach C zu portieren, weil ich dieses 
FASTAVR nicht mehr finde hust, stehe aber vor dem gleichen 
Hardwareproblem, denn hier hat sich ja nichts geändert.

Geht das in C etwas eleganter zu lösen?

Danke
Axelr.
Angehängte Dateien:
Gast #4800045
Danke soweit, kann jetzt weiter testen!
(ich hatte die Sufu verwendet, dachte ich - hmmm)

Aber: das die "__builtin_avr_insert_bits" die Reihenfolge tauscht: 
da´rauf muss man erstmal kommen...

um nur einige Möglichkeiten für alle aufzuzeigen
http://www.avrfreaks.net/forum/nibble-rotate-how
Gruß
Axel und vielen Dank
1
    result <<= 1;
2
    if (n & 1)
3
    result |= 1;
1
    result <<= 1;
2
    result |= n & 1;
1
b = __builtin_avr_insert_bits(0x01234567,a,0);
1
Dim Inbyte As Byte
2
Dim Outbyte As Byte
3

4
Dim I As Byte
5
Dim J As Byte
6

7
I = 0
8
J = 7
9

10
Do
11
   Outbyte.i = Inbyte.j
12
   Decr J
13
   Incr I
14
Loop Until J < 0

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.