PIC Micro Controller C Routine Math / Functions / Conversions Function

Set bit x

by Scott Dattalo

void set_bit(unsigned char *bit_array, char bit_position, char new_state)
{


  if(new_state)
    bit_array[bit_position >> 3] |= ( 1 << (bit_position & 7) );
  else
    bit_array[bit_position >> 3] &= ~(1 << (bit_position & 7));

}

By Michael Rigby Jones

By butchering the routine a bit to make it less general i.e. removing the bit_array pointer and by breaking down the maths into separate chunks I managed to get this down to 38 words, at the cost of a couple of temp variables.
void set_bit(unsigned char bit_position, unsigned char new_state)
{
        unsigned char bitmask;
        unsigned char byteptr;

        byteptr = bit_position >> 3;
        bitmask = 1 << (bit_position & 7);

        if(new_state)
        {
                bitarray[byteptr] |= bitmask;
        }
        else
        {
                bitarray[byteptr] &= ~bitmask;
        }
}