First I haven't used this chip and Second I'm not a great C programmer, but I'm a little confused by your if(shift_left(write_value,1,0))// Shift in MSB first part of the program. Would it not be easier to do void out_74595(unsigned char shift_data) { =09unsigned char bitcount,bitmask; =09 =09bitmask=3D1<>=3D1;=09 //Next data bit =09} =09 =09 latchport^=3D1<