Todas estas respuestas tienen problemas potenciales válidos, especialmente el punto de Leon de que los pines analógicos pueden ser complicados y el punto de W5VR acerca de que MCLR no está siendo elevado. Además, dependiendo de su chip, es posible que tenga que escribir en el registro LATB para la salida y leer el registro PORTB para la entrada. Los documentos sobre la diferencia entre LATB y PORTB son dudosos y en el pst he tenido que usar algunas pruebas y errores para que funcionen.
LATB es el seguro de salida del puerto B. Esto contendrá los valores más recientes que escribió en el pestillo. Bajo algunas condiciones (por ejemplo, su pin de salida está muy cargado) el valor real en ese pin puede bajar bastante. Esto puede causar una lectura errónea de PORTB, es decir, devolverá 0 cuando debería devolver 1. Por lo tanto, es más seguro leer LATB porque aún contendrá el valor 'correcto'.
@kellenjb: Debería poder ejecutar el programa sin quitar el cable ICSP, SI utiliza el modo de depuración en MPLAB. De lo contrario, si compila el proyecto como Release, deberá extraer el cable. Es posible que el modo de depuración no sea compatible con el programador de OP; funciona en mi Pickit2.