This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Change MSB and LSB

Because of Layout I had connected P1.0 to LCD.7, P1.1 to LCD.6 ... P1.7 to LCD.0! Now I have to convert the sending and incoming data. MSB has to become LSB.
Is their a esay way to do this?

Thanks a lot

Parents
  • I would be tempted to try something like the following (I can't try it now because I am at a location without access to my Keil toolchain).

    static unsigned char bdata src_byte;
    static unsigned char bdata dst_byte;
    
    static sbit src_bit0 = src_byte ^ 0;
    static sbit src_bit1 = src_byte ^ 1;
    static sbit src_bit2 = src_byte ^ 2;
    static sbit src_bit3 = src_byte ^ 3;
    static sbit src_bit4 = src_byte ^ 4;
    static sbit src_bit5 = src_byte ^ 5;
    static sbit src_bit6 = src_byte ^ 6;
    static sbit src_bit7 = src_byte ^ 7;
    
    static sbit dst_bit0 = dst_byte ^ 0;
    static sbit dst_bit1 = dst_byte ^ 1;
    static sbit dst_bit2 = dst_byte ^ 2;
    static sbit dst_bit3 = dst_byte ^ 3;
    static sbit dst_bit4 = dst_byte ^ 4;
    static sbit dst_bit5 = dst_byte ^ 5;
    static sbit dst_bit6 = dst_byte ^ 6;
    static sbit dst_bit7 = dst_byte ^ 7;
    
    unsigned char reverse_bits(unsigned char b)
    {
        src_byte = b;
    
        dst_bit0 = src_bit7;
        dst_bit1 = src_bit6;
        dst_bit2 = src_bit5;
        dst_bit3 = src_bit4;
        dst_bit4 = src_bit3;
        dst_bit5 = src_bit2;
        dst_bit6 = src_bit1;
        dst_bit7 = src_bit0;
    
        return dst_byte;
    }
    I wouldn't be surprised if the bit copying boiled down to a sequence of:
        MOV C,src_bit7
        MOV dst_bit0,C
        ; ...

Reply
  • I would be tempted to try something like the following (I can't try it now because I am at a location without access to my Keil toolchain).

    static unsigned char bdata src_byte;
    static unsigned char bdata dst_byte;
    
    static sbit src_bit0 = src_byte ^ 0;
    static sbit src_bit1 = src_byte ^ 1;
    static sbit src_bit2 = src_byte ^ 2;
    static sbit src_bit3 = src_byte ^ 3;
    static sbit src_bit4 = src_byte ^ 4;
    static sbit src_bit5 = src_byte ^ 5;
    static sbit src_bit6 = src_byte ^ 6;
    static sbit src_bit7 = src_byte ^ 7;
    
    static sbit dst_bit0 = dst_byte ^ 0;
    static sbit dst_bit1 = dst_byte ^ 1;
    static sbit dst_bit2 = dst_byte ^ 2;
    static sbit dst_bit3 = dst_byte ^ 3;
    static sbit dst_bit4 = dst_byte ^ 4;
    static sbit dst_bit5 = dst_byte ^ 5;
    static sbit dst_bit6 = dst_byte ^ 6;
    static sbit dst_bit7 = dst_byte ^ 7;
    
    unsigned char reverse_bits(unsigned char b)
    {
        src_byte = b;
    
        dst_bit0 = src_bit7;
        dst_bit1 = src_bit6;
        dst_bit2 = src_bit5;
        dst_bit3 = src_bit4;
        dst_bit4 = src_bit3;
        dst_bit5 = src_bit2;
        dst_bit6 = src_bit1;
        dst_bit7 = src_bit0;
    
        return dst_byte;
    }
    I wouldn't be surprised if the bit copying boiled down to a sequence of:
        MOV C,src_bit7
        MOV dst_bit0,C
        ; ...

Children
No data