This will be a time slicing thingy. You could use a Timer interrupt to scan the Keyboard (look for SCAN_ONCE in my routine) + Usart interrupt for RX.

OR simply USART RX interrupt.