I use a loop in the main program to receive nonstop data.
It usually can process around 19200bps of info with those CASE statements full of code.
I use to receive data also in the CASE statements, because some commands need 1 to 50 bytes of data.
C = HRSIN
IF C <> $FF THEN
;do something if it is not a start command character ( $FF )
CMND = HRSIN
for z = 1 to 50
i[z] = HRSIN
do something with that array.