you are reading in a single ascii character with your hserin, not a decimal number. For example if you send 0 you are receiving the binary value of the ascii character "0", not 0.
Change your hserin to:
hserin [dec num]
Also you should loop your code otherwise it only runs once.
Code:
ENABLEHSERVO2
ENABLEHSERIAL
SetHSerial H38400,H8DATABITS,HNOPARITY,H1STOPBITS
num var byte
main
hserin [dec num]
hservo [p0\num]
goto main
Note that as of Studio 2.0 you no longer need to use the ENABLEHSERVO,ENABLEHSERVO2 or ENABLEHSERIAL compile time directives. It won't hurt anything if you do but they are now not needed.
Same problem with hserin on your second program.
Note if you are sending binary values then 0 to 255 is too small to really do anything with hservo. The range of HSERVO on the ARC32 is +-30000. You average servo can use from about +-12000 of that. So if you only send a binary value between 0 and 255 you could hardly see any movement.
If you want to send binary values in the correct range you need to send 2 bytes:
Code:
ENABLEHSERVO2
ENABLEHSERIAL
SetHSerial H38400,H8DATABITS,HNOPARITY,H1STOPBITS
num var wordmain
hserin [num.byte1,num.byte0]
hservo [p0\num]
goto main
This code is setup for big endian data. Send the high byte and then the low byte as binary data.