Buenos días Skelton,
Ahora estás mezclando las dos formas de operación de la comunicación serial.
Decide cuál es la que vas a usar, por software o por hardware.
Si es por software entonces para transmitor usas: Serout [parametros]
Si es por hardware entonces usas: Hserout [parametros]
Ahora bien, si usas la comunicación serial por software entonces estás configurando equivocadamente. En la página 380 del manual de Proton, está una tabla de valores para configurar el baudrate de forma correcta. El valor de 9600 no es válido si lo que quieres es transmitir a 9600 baudios. Fíjate bien en la tabla y claramente dice que el baudrate 9600, con 8-bit y sin paridad; el valor es: 84 (No 9600 como tú lo estás colocando). Por lo tanto la intrucción sería:
Serout PORTC.6, 84, ["Temperatura: ", #temp," ",248,"C",10,13] 'El numero 248 es para mostrar el símbolo de grados
Otra cosa que necesitas declarar es el puerto RC.6 como salida, y al inicio colocarlo en nivel alto para que no te genere datos basura al inicio de la transmisión serial.
TRISC.6=0 'PUERTO C.6 como salida para la transmisión serial
High PORTC.6 'Iniciliaza el puerto RC.6 en alto para no generar basura en el pin de transmision
Con esto en mente, las siguientes declaraciones en tu código no son necesarias:
Declare HSERIAL_BAUD = 9600
Declare HSERIAL_RCSTA = %10010000 'Habilita RX '
Declare HSERIAL_TXSTA = %00100000 'Habilita TX'
Ahora bien, si usas la comunicación serial por hardware, es decir el USART interno del microcontrolador, entonces las declaraciones anteriores sí son necesarias. Aquí ya no necesitas declarar el puerto RC.6 como salida, sino dejarlo por default, ni tampoco necesitas poner el puerto en alto.
Para realizar la comunicación usando el USART, entonces usas:
Hserout ["Temperatura: ", #temp," ",248,"C",10,13] 'El numero 248 es para mostrar el símbolo de grados
En cuanto al teclado, la instrucción Inkey te devuelve un valor entre 0 y 15 cuando alguna tecla se ha presionado, y devuelve 16 si ninguna tecla se ha presionado. Por lo tanto en tu lógica de programación estás diciendo que si NO SE HA PRESIONADO ninguna tecla entonces envia el dato de forma serial. Según como conectes el teclado cada tecla tiene un número asignado por Inkey que no coincide con el valor impreso en la tecla. Muestra el valor de la tecla presionada usando el mismo puerto serial para que sepas que valor tiene asignado. Y luego así puedas realizar la operación adecuada.
Espero esto te sirva y te de mejor orientación.
elreypic.