1. Die Warteschleife geht so nicht, siehe auch Warteschleife.
2. Es muss heissen if (...&& ...), siehe auch Bitweise vs._Logische Operatoren.
3. Konvertieren musst du je nachdem, was du schickst . "255" ist etwas anderes als 255. Ersteres sind 3 oder 4 Byte (4, falls noch ein Endezeichen): 0x32, 0x35, 0x35, 0x00, letzteres ist 0xff. Welche Konvertierungs-Funktionen es gibt, findest du in deiner Doku zur avr-libc (WIN_AVR/doc/avr.libs oder so) oder im Net.