You have a loop that is constantly being executed except for the 500 pause. You Tx then instantly Rx with no time for a response to be sent.

Well that was my thinking but obviously there is more to it than I first thought.

try

Serin RX, 2, 500,MainMenu,cereal

serin will wait 500 msecs waiting for data to come in. cereal you have as a word it only needs to be a byte.