Zitat Zitat von claudia1989
wie sollte die zuweisung aussehen für uint16_t var?
Genauso. Was in den oberen 8 Bits passiert wäre unerheblich, denn in der Zuweisung an PORTD steckt ein impliziter Cast nach uint8_t. Da fallen diese oberen 8 Bits dann eh einfach weg.

Zitat Zitat von claudia1989
PORTD = (PORTD & 0b11110011) | (uint8_t ((var<<2) & 0b00001100));
PORTD = (PORTD & 0b11110011) | (uint8_t(var<<2) & 0b00001100);
PORTD = (PORTD & 0b11110011) | ((var<<2) & 0b0000000000001100);//oder &0x000C;
Würde aber auch alles funktionieren (von der falschen Schreibweise beim Typ-Cast mal abgesehen).