The 8051 family of microcontrollers has a very useful assembly instruction RRC. This instruction rotates carry into the MSB of the given register, shifts that register right by 1, and carry becomes equal to what used to be the LSB of the register.
bit NewCarry; unsigned char Data; NewCarry = Data & 0x01; Data = (Data >> 1); if (Carry){ Data = (Data | 0x80); } Carry = NewCarry;
If you are interested in shifting and rolling by means of calls to assembly language subroutines from Keil C, you may find this interesting: http://www.programmersheaven.com/zone5/cat27/31937.htm Enjoy.