Te explico. La UART es un modulo de transmision serial. Vas a ir recibiendo bit a bit los datos. Cuando llegaron 8, ya podes leer lo que llego.
A vos lo que te llegan son caracteres, pensalo como si fueran letras. Esas letras tiene un valor decimal.
Si recibis:
"Hola"
Entonces recibis 4 datos ( de 8 bits cada uno ), el primero es una 'H', luego una 'o', luego una 'l', luego una 'a'. ¿ Como haces para poner una letra dentro de un registro de 8 bits ?, Si lo unico que podria representar 8bits son numeros de 0 a 255?.
Es ahi donde uno usa una tabla de codificacion ASCII (busca Tabla ASCII en google), esta tabla dice que si vos recibis un numero 72 decimal o 0x48 en hexadecimal, en realidad te enviaron una 'H'.
Entonces a tu UART estarian llegando los valores ( en hexadecimal):
0x48, 0x6f, 0x6c, 0x61
Lo mismo ocurre con tu numero, si el modulo te envia "72" vos recibis 2 datos, el '7' y el '2', es decir primero llega
0x37 y luego 0x32.
El getc, va a tomar solo el 1ro de esos datos. Y lo va a poner en "valor", siguiendo el ejemplo en el que llega un "72".
Llega el '7' en valor se guardaria el numero 0x37 (55 en decimal),
calculas th con el valor 55,
55 * 200 = a mucho
Encima th es un numero de 8bits ( int ), por lo cual no va a poder almacenar ese resultado, ya que su rango es de 0 a 255.
tl ya te da mal. Otro donde si restas 0, es imposible que guardes 20000, donde solo puede entra como maximo 255
Imprime cualquier cosa en el LCD Y pregunta si recibio otro dato. Lo cual si, recibio el 0x32 del '2', o en decimal el 50.
Termina ocurriendo todo lo demas.
Lo que vos tendrias que buscar hacer es tomar los datos de la UART, restarles 0x30 ( ya que 0x30 es '0' ). Una ves restado verificar que sea un numero, es decir que no supere los 9. Ya con esto hay que ubicar cual es la decena y las unidades.
Si siempre se envian 2 datos. Sabemos que el primero son las decenas, asi que multiplicamos ese numero por 10 y guardamos en una variable ( valor ).
Antes de proceder a hacer otros calculos, espermos las unidades,, restamos 0x30, comprobamos que NO sea mayor a 9, y sumamos eso a la variable (valor ).
Ahi lo que hicimos fue con el primer dato convertirlo a 70, y el segundo dato en 2, asi que la suma quedaria en un numero decimal que es 72.
Ya ahi podes operar con ese dato, obviamente usando al menos int16, en ves de int.