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); }
#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.
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