PIC C << Schiebeoperator soll "1" statt "0" nachschieben

OP #1043456
Lesenswert?

Hallo zusammen,

ein wirklich sehr tolles Forum hier.

Leider hab ich für mein Problem keine Lösung gefunden,
deshalb Frage ich mal.


Ich programmiere ein 18F2550 in C, und habe folgendes Problem:

Ich möchte mit dem Schiebeoperator  << oder >> "1"en statt "0"en 
nachschieben.

Oder eine "Rotierfunktion" für meine binären Werte,
wäre auch toll.

Das ganze soll in C passieren!


Danke und Gruß
Chris
#1043468
Lesenswert?

Hi,
ne billig Varainte wäre sowas hier:

unsigned char rotateLeft(unsigned char x , unsigned char *byte)
{
   while(x > 0)
   {
     *byte = (*byte << 1) + 0x01;
      x--;
   }
   return *byte;
}


unsigned char rotateRight(unsigned char x , unsigned char *byte)
{
   while(x > 0)
   {
     *byte = (*byte >> 1) + 0x80;
      x--;
   }
   return *byte;
}

Gruß
Gast #1043602
Lesenswert?

Welchen C-Compiler verwendest Du denn?
Der von CCS hat für diesen Zweck die eingebauten Funktionen "shift_left" 
und "rotate_left". Die "_right"-Variante gibt es auch jeweils.

Hat natürlich den Nachteil, daß es nicht kompatibel ist.
#1043629
Lesenswert?

Rotieren funktioniert am einfachsten mit Hilfe des Inline Assemblers, da 
in Assembler das Schieben bei den PIC's sowieso mit Rotationsbefehlen 
realisiert wird.

Ansonsten mit dem Rechtsschieben von Signed-Variablen aufpassen, an 
dieser Stelle ist der C18 nicht ganz ANSI-konform! Normalerweise werden 
beim Rechtsschieben vorzeichenrichtig Nullen oder Einsen in die Variable 
geschoben, der C18 schiebt grundsätzlich Nullen auch in die 
Signed-Variablen.

Tschau Sven!

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