das Ergebnis bei dir ist auch nur logisch, eine Dezimale 1 entspricht 0b0000000_1_, wenn du jetzt nach rechts schiebst, fällt die 1 ins Nirvana und alles steht wieder auf 0

was du brauchst wäre in dem Fall 0b_1_0000000 -> 0x80 -> (128>>n)

ich geb dir mal ein beispiel für ein Lauflicht, bei dem man einfach die LED direkt manipuliert und nicht erst übern Counter geht!

Code:
#define LEFT 1
#define RIGHT 2
...
PORTB = 1;
unsigned char direction  = LEFT;
while(1)
{
   if(PORTB == 0x80) direction = RIGHT;
   else if (PORTB == 0x01) direction = LEFT;
   else {
       if(direction == RIGHT) PORTB = (PORTB>>1);
       if(direction == LEFT) PORTB = (PORTB<<1);
       'PAUSE' // es gibt in der delay.h eine wait_ms(long) funktion mit der du millisekundenlange Pausen einbauen kannst, würde ich bei mehr Erfahrung durch eine timergesteuerte Variable ersetzen!
   }
}
so haste n Knight-Rider-Licht