Hola, cómo andás???
el código está mal en un simple punto...
Leyendo creí que estaba bien, pero no...
Me he tomado el trabajo de armar un circuito en proteus y simular tu code...
para la próxima sube también tu esquemático o el archivo del proteus, pues puedes tener algún problema allí en lugar de en el programa
Tu pones en los fuses MCLR por lo tanto al simular debes poner a positivo(+) el pin 4 correspondiente a RA5/MCLR y nunca mejor llamada así, ya que aunque la usas como MCLR, sigue siendo RA5...
Luego en tu programa preguntas por el puerto a de la siguiente forma:
a=input_a(); //almaceno el valor del puerto aEsta instrucción te lee el 1 lógico de RA5... ergo, cuando tu piensas que introduces 1,2,4,8,16 en realidad el pic lee 21h,22h,24h,28h,30h
La soluciones más rápidas:
1) usar los valores 21h,22h,24h,28h = 33,34,36,40,48
2) usar una máscara sobre el puerto a para tomar sólo los bits que te interesan
3) preguntar bit por bit en lugar de leer el puerto A completo.
Saludos...