he colocado esta linea, y da resultado, incluso, ya me lee más rápido.... 
gb: if (RC7 == 0) {input = Getch_s();}else{goto gb;}
y despues segun el caracter, actuo...
No son muy elegantes las estructuras con goto, en lugar de ello tenés las estructuras while y do-while. El ejemplo que mostrás arriba, hecho con while quedaría...
while (1) // loop infinito
{
if (RC7 == 0) input = Getch_s(); // si es una sola linea no son necesarias las llaves ( { } ) para determinar el bloque
}
nota: me quedaria estudiar la libreria mas a fondo y averiguar para introducir ese cambio directamente en la libreria. y por otra parte, descubir como recibir una cadena. pero me doy por satisfecho por el momento, porque gracias a ti, he aprendido a nejar un lcd y el rs232, en esta semana...
El cambio lo tendrías que introducir en la función getch_s(); Esta es la implementación de dicha función sin el cambio
unsigned char getch_s(void)
{
unsigned char contador = 7;
unsigned char letra = 0;
DelayReceivebit;
do
{
if (RxPin == 1) letra += 128;
letra = letra >> 1;
contador--;
DelaySendBit;
}
while (contador > 0);
DelaySendBit;
return letra;
}
Y creo que el cambio podría ser poner lo siguiente justo después de declarar las variables y justo antes de la línea "DelayReceivebit;"
while (RxPin == 1); // mientras que el pin este en 1 no hago nada y me quedo esperando
Con dicho cambio, la función getch_s() quedaría a la espera que llegue un caracter,
Por otra parte en la última versión que subí de la librería existe la función getst_s(), que justamente recibe una cadena de caracteres que termine con "CarrierResturn" que sería el caracter correspondiente al enter