Ich hab ein Datenwort(4Bits) bei dem die Reihenfolge nicht stimmt, wie kann ich in C am einfachsten( 1 Befehl??) die Reihenfolge ändern: ursprüngliche --> neue Reihenfolge --> Reihenfolge 0 Bit (LSB) --> 3 Bit (MSB) 1 Bit --> 2 Bit 2 Bit --> 1 Bit 3 Bit (MSB) --> 0 Bit (LSB)
Hi, ich hatte mal ein ähnliches Problem (nur mit 8Bit). Ich hatte auch gedacht, dass man dies irgendwie elegant lösen könnte, aber leider muss man es wirklich per Hand machen :-( Bis dann, Ingo.
Hab das jetzt so gelöst, weiß wer was besseres?? PDR8=Datenregister, man kann nur auf das gesamte Register zugreifen /**********DIP Schalter einlesen********************/ /* Code0=Port 8 Bit 4 Code1=Port 8 Bit 3 Code2=Port 1 Bit 2 Code3=Port 1 Bit 1 */ short dip_read() { byte buffer,dip; dip=0x00; buffer=(((~PDR8)&0x10)>>4); //Code0 auf Pos3 schieben dip = dip|buffer; buffer=(((~PDR8)&0x08)>>2); //Code1 auf Pos2 schieben dip = dip|buffer; buffer=((~PDR1)&0x04); //Code2 auf Pos1 schieben dip = dip|buffer; buffer=(((~PDR1)&0x02)<<2);//Code3 auf Pos0 schieben dip = dip|buffer; return (dip+0x11); } /***************End of dip_read()*******************/
Wie wäre es damit? Geht schneller als Schieben, und liest nur einmal. short dip_read() { byte buffer,dip; dip=0x00; buffer=(~PDR); if (buffer&0x08) dip |=0x01; if (buffer&0x04) dip |=0x02; if (buffer&0x02) dip |=0x04; if (buffer&0x01) dip |=0x08; return (dip+0x11); // warum? } Gruß, Rudolf. Rudolf Sosnowsky +++ LC Design EPSON Technology Partner Internet http://www.LC-Design.de
gute idee, muss es nur etwas anders machen weil ich eben 2 Daten Register hab PDR8 und PDR1, aber grundsätzlich net schlecht, das return(dip+0x11) hab ich nur weil der dipschalter net von 0-10 "ausgeben" soll sondern halt von 11 -21
Das Zusammenstückeln von Bits von verschiedenen Ports funktioniert bei mir so: type = 0; type = PIND & 0x0C; /* upper 2 bits */ type |= ((PINC & 0x30) >> 4); /* lower 2 bits */ type ^= 0x0f; /* flip bits */ Gruß, Rudolf. Rudolf Sosnowsky +++ LC Design EPSON Technology Partner Internet http://www.LC-Design.de
dank dir: hab das jetzt endgültig so gelöst: byte dip; dip=0x00; if ((~PDR8)&0x10) dip |=0x01; if ((~PDR8)&0x08) dip |=0x02; if ((~PDR1)&0x04) dip |=0x04; if ((~PDR1)&0x02) dip |=0x08; return (dip+0x11); schaut net so schlecht aus oder ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.