That's great but, at 9600 baud it will be in this routine for 26.5 milliseconds. That's OK if you can afford it...