Pues yo creo que el problema debe de estar en la segunda parte de código que he pegado, el valor de tiempo solo influye el umbral que pongas, da igual que pase 0.9 ms o 1.2 será un cero, hasta que no pasen más de 1.7 no lo considerara un uno, así que recibir recibe bien los 16 unos o ceros del envio del mando. Lo que hace que cada vez que cambia el RB0, mira si es cero (flanco de bajada) y si lo es mira el valor de tictac para saltar a almacenar_cero, almacenar_uno, o a condición de inicio (que no hace nada) o a error si el pulso es muy bajo, y luego resetea tictac y este sigue incrementandose en pasos de 0.1 ms por el camino de subir_tic hasta que ocurre el siguiente flanco de bajada, está parte creo que funciona correctamente.
La rutina de convertir un registro de 8 bits a decimal tb funciona bien, si caro el 245 en binario en w y le doy a convertir me saca bien el valor en decimal en centenas decenas y unidades por el lcd, así que esta parte está bien.
La verdad que no tengo ni idea de por donde se va esa unidad, he comprobado unos siete botones del mando y en todos hace lo mismo, no sé será cualquier cosa que no veo, pero vamos tampoco tiene mucha importancia ya que la solución es fácil, es casi más por saber que esta fallando, mañana le dare otro repaso. Saludos.