¿Necesito hacer uso de la interrupción del modulo USART?
Si es leer el boton y enviar, entonces no. Ni siquiera usaria la interrupcion del ADC.
No deberias poner el ADON en 0, no tiene sentido., tampoco estar habilitando a cada rato TXEN, tampoco tiene sentido. solamente poner a 1 GO_DONE y esperas con un while hasta que GO_DONE sea 0. Y listo, si detectas algo envias. Sino volves a leer.
Si no queres enviar y enviar cuando este presionado, podes enviar apenas se presiona, y luego esperar que se suelte para enviar la informacion que se soltaron todos los botones.
PD: Tal ves quieras cambiar los primeros valores de resistencia, asi aprovechas todo el rango del ADC.
Ejemplo R1 + R2 + R3 = 10K (aprox)
Asi Backwards da 2.5V si son 5V
Luego cuando presionas Forward que te de 4.2V, y left 3.4V suponete, dependera de los valores de las resistencias que puedan usarse.
Ya que como estan los valores de las resistencias tenes 2,5V en el primer boton, y luego en los demas botones el rango sea hace mucho mas pequeño para diferenciar entre uno u otro.