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

inverter byte

elegante inversion.


/*------------------------------------------------------------------------------

                                        INVERSION DE BYTE 8 BIT, LSB ->  MSB

------------------------------------------------------------------------------*/
unsigned char mr;

unsigned char invertir_byte (mr) {

  mr = (mr & 0x0F) << 4 | (mr & 0xF0) >> 4;
  mr = (mr & 0x33) << 2 | (mr & 0xCC) >> 2;
  mr = (mr & 0x55) << 1 | (mr & 0xAA) >> 1;

return (mr);

}


Parents
  • #include <reg52.h>
     unsigned char bdata temp;
     sbit D0=temp^0;
     sbit D1=temp^1;
     sbit D2=temp^2;
     sbit D3=temp^3;
     sbit D4=temp^4;
     sbit D5=temp^5;
     sbit D6=temp^6;
     sbit D7=temp^7;
    
    unsigned char invertir_byte (unsigned char mr)
     {
     D7=mr&0x01;
     D6=mr&0x02;
     D5=mr&0x04;
     D4=mr&0x08;
     D3=mr&0x10;
     D2=mr&0x20;
     D1=mr&0x40;
     D0=mr&0x80;
     return (temp);
     }
    
    void main()
    {
    while(1)
      {
      P1=invertir_byte(0x33);
      }
    }
    


    Program Size: data=10.0 xdata=0 code=59
    cost 35 machine cycle.

Reply
  • #include <reg52.h>
     unsigned char bdata temp;
     sbit D0=temp^0;
     sbit D1=temp^1;
     sbit D2=temp^2;
     sbit D3=temp^3;
     sbit D4=temp^4;
     sbit D5=temp^5;
     sbit D6=temp^6;
     sbit D7=temp^7;
    
    unsigned char invertir_byte (unsigned char mr)
     {
     D7=mr&0x01;
     D6=mr&0x02;
     D5=mr&0x04;
     D4=mr&0x08;
     D3=mr&0x10;
     D2=mr&0x20;
     D1=mr&0x40;
     D0=mr&0x80;
     return (temp);
     }
    
    void main()
    {
    while(1)
      {
      P1=invertir_byte(0x33);
      }
    }
    


    Program Size: data=10.0 xdata=0 code=59
    cost 35 machine cycle.

Children
  • How fast/slow is this?

    unsigned char bdata src;
    sbit S0=src^0;
    sbit S1=src^1;
    sbit S2=src^2;
    sbit S3=src^3;
    sbit S4=src^4;
    sbit S5=src^5;
    sbit S6=src^6;
    sbit S7=src^7;
    
    unsigned char bdata dst;
    sbit D0=dst^0;
    sbit D1=dst^1;
    sbit D2=dst^2;
    sbit D3=dst^3;
    sbit D4=dst^4;
    sbit D5=dst^5;
    sbit D6=dst^6;
    sbit D7=dst^7;
    
    unsigned char invertir_byte (unsigned char mr)
    {
    src=mr;
    D0=S7;
    D1=S6;
    D2=S5;
    D3=S4;
    D4=S3;
    D5=S2;
    D6=S1;
    D7=S0;
    return(dst);
    }
    
    void main()
    {
    while(1)
      {
      P1=invertir_byte(0x33);
      }
    }
    

    Jon

  • #include <reg52.h>
    unsigned char bdata src;
    sbit S0=src^0;
    sbit S1=src^1;
    sbit S2=src^2;
    sbit S3=src^3;
    sbit S4=src^4;
    sbit S5=src^5;
    sbit S6=src^6;
    sbit S7=src^7;
    
    unsigned char bdata dst;
    sbit D0=dst^0;
    sbit D1=dst^1;
    sbit D2=dst^2;
    sbit D3=dst^3;
    sbit D4=dst^4;
    sbit D5=dst^5;
    sbit D6=dst^6;
    sbit D7=dst^7;
    
    unsigned char invertir_byte (unsigned char mr)
    {
    src=mr;
    D0=S7;
    D1=S6;
    D2=S5;
    D3=S4;
    D4=S3;
    D5=S2;
    D6=S1;
    D7=S0;
    return(dst);
    }
    
    void main()
    {
    while(1)
      {
      P1=invertir_byte(0x33);
      }
    }
    


    //cost 35 machine cycle

    //Program Size: data=11.0 xdata=0 code=61