Also, UDh ast Befehl mal nur als Byte deklariert (DIM as byte), da kannste kein neuntes Bit und auch kein achtes auslesen, weil das in die Variable nicht rein passt.
Du kannst die UART auch in 9n1 laufen lassen, für bestimmte Bus-Systeme wird das gerne verwendet um zu unterscheiden ob Daten oder Adressen übermittelt werden. Dafür gibts dann ein Register in der UART, wo die jeweiligen Bit dann drinn stehen, das nennt sich UCSRB, bzw. daraus das Bit RXB8.
Das läuft dann in etwa so (Pseudocode):

dim befehl as word at &Ha0
dim highbyte as byte at &Ha1 overlay
dim lowbyte as byte at &ha0 overlay

isr:
highbyte = ucsrb and &B00000001
lowbyte = udr
return
end

und schon haste 9 Bit in ner Wordvariable also 0 bis 512 als Datenwert.
Aber 2 Byte sind das natürlich nicht, was ja die fragestellung war.

Da geht das dann ähnlich, du brauchst dann nur ne Möglichkeit
zu erkennen welches das erte Byte ist. das geht dann über

a) ein Protokoll mit nem bestimmten Startbyte oder Endbyte oder 8.Bit, dann sinds also 3 Byte die rüber müssen bzw. einmal 9Bit, einmal 8 Bit
b) einer Pause zwischen den übertragenen Werten, wo dann ein Timer ablaufen kann und zurücksetzt.

bei a währs dann in etwa so:

dim tempbyte as byte

ISR:
tempbyte = ucsrb and &B00000001
if tempbyte=1 then
highbyte= udr
else
lowbyte = udr
endif

end
es wird also unterschieden ob bit 8 gesetzt, dann ists das highbyte der wordvariable oder eben nicht, dann ists der lowbyte der vasriable

klar, dass für die aktion die USART auf 9n1 konfiguriert werden muss.