Ya he resuelto el problema
.
Yo como todos pensaba que se trataba de un problema de ruido, por eso he estado poniendo condensadores por todas partes.
Ayer repasé todo de nuevo para ver si se me ocurría algo nuevo. El programa estaba bien, lo utilizo siempre para comprobar que todo está bien conectado, solo que esta vez lo modifique para que las salidas fueran PORTB. Lo grabé de nuevo, y me di cuenta que el programa que utilizo (QEL Micropro), en el apartado FUSES tenía activado LVP. Por tanto me activaba las resistencias de pull-up de PORTB.
Lo desactivé, y todo funciona de maravilla. Lo cierto es que el programa fallaba cuando tocaba encima de PORTB. Esto, me deja algunas dudas:
-He leído en la documentación de Microchip que estas resistencias de deshabilitan al hacer PORTB un puerto de salida, pero está claro que el programador las activaba, y eran la causa del problema.
- Por que funcionaba con la pila de 9V.
Siento no haber planteado bien el problema desde el principio.
Gracias a todos por la ayuda.