unsigned char genere_value8(unsigned short int addr) { return ( 3 | (((addr>>8)&1)<<3)); } unsigned char genere_value8_2(unsigned short int addr) { return ( 3 | (((addr&0x100))>>5)); } unsigned short int genere_value16(unsigned short int addr) { return ( ((3 | (((addr>>8)&1)<<3))<<8) | (addr&0xff) ); } unsigned short int genere_value16_2(unsigned short int addr) { return ( ((3 | (((addr&0x100)>>5)<<8))) | (addr&0xff)); } // the setup routine runs once when you press reset: void setup() { } // the loop routine runs over and over again forever: void loop() { unsigned short int add=0; add= PINB; add|= (PINB<<8); add=(genere_value8(add)); PORTB=add>>8; PORTB=add&0xff; add= PINB; add|= (PINB<<8); add=(genere_value16(add)); PORTB=add>>8; PORTB=add&0xff; add= PINB; add|= (PINB<<8); add=(genere_value16_2(add)); PORTB=add>>8; PORTB=add&0xff; }