Falsch verdrahtet...trotzdem was zu machen?? HILFE!

Gast #281457
Lesenswert?
• ▲
▼
Hallo, ich lese 16 Bit über die Ports C und F ein. Nur leider ist das
MSB an der Stelle PC0 und das LSB an der Stelle PF7. Was nun...??
(Platine ist schon fertig)
PC0 (MSB)
PC1 (MSB-1)
...
PC7 (MSB-7)
PF0 (MSB-8)
...
PF7 (LSB)
Wie kann ich die 16Bit trotzdem richtig einlesen?? Danke für HILFE!!!
Gast #281459
Lesenswert?
• ▲
▼
Bsp. (als Ergänzung zu dem was Mathias gesagt hat):

1 PORTC und PORTF in Software tauschen.
2 Dann für beide Bytes (C und F)
  21 CALL GetNibble
  22 Ergebnis zwischenspeichern
  23 Obere 4 Bit nach unten schieben
  24 CALL GetNibble
  25 Ergebnis 4 Bit nach oben schieben
  26 Zwischenergebnis einmaskieren (ODER mit zwischenErgebnis)

SUB GetNibble
  G1 Untere 4 Bit ausmaskieren (UND mit 0x0F)
  G2 Aus Look Up Tabelle mit 16 Einträgen das geswapte Nibble auslesen

Die Tabelle sieht dann so aus
uint8_t nibbleTab[] =
{
 0b00001111,
 0b00001110,
 ...
 0b00000001,
 0b00000000
};
Gast #281467
Lesenswert?
• ▲
▼
x = PINF;
y = 0xFF;
for(i=0;i<8;i++)
{
 if (x & (1<<i))) y &= ~(1<<(7-i));
}

nicht schön, könnte aber gehen, wobei in y gedrehte Varinte des PINF
steht... (stehen müsste)
Die Methode ist relativ langsam. Wenn man 8 Vergleiche hintereinander
schreibt, müsste schneller gehen...
Etwa so:
if (x & (1<<0)) y &= (1<<7);
if (x & (1<<1)) y &= (1<<6);
if (x & (1<<2)) y &= (1<<5);
if (x & (1<<3)) y &= (1<<4);
if (x & (1<<4)) y &= (1<<3);
if (x & (1<<5)) y &= (1<<2);
if (x & (1<<6)) y &= (1<<1);
if (x & (1<<7)) y &= (1<<0);

Dabei ersetzt der Compiler die (1<<n) durch Konstanten...

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.