Saludos. Hace un tiempo yo tambien considere hacer una implementacion similar con un dsPIC30 y una LCD en el compilador de C de CCS. Y encontre algo que quiza este relacionado con su problema.
Tras de dar una cantidad interminable de vueltas encontre que el error no estaba en mi, y que realmente el PIC se negaba a lanzar los datos que yo queria por el puerto B, sin importar lo que hiciera. La verdadera causa, para mi sorpresa, era que el compilador de C estaba generando los opcodes incorrectos para el MCU. Simplemente quede impresionado: Encontre un error en el compilador!
Basicamente el error se trataba de que los opcodes contenian la direccion de puerto B que no eran las correctas (estaba desplazado como por 2 o 3 localidades), y que, a causa de ello, el puerto era practicamente imposible de usar con esa version del compilador.
Siempre pense que era un bug, y que en la proxima version estara resuelto, pero en vista que queria hacerlo de todas formas, cambie de plataforma y me cambie a un PIC menor para hacer lo mismo, obteniendo resultados favorables.
Su problema pudiera o no estar relacionado, pues los PIC24 y dsPIC30 son parientes cercanos. Aunque eso no es necesariamente cierto y solo sea un "error de dedo" por parte de los creadores del CCS para ese unico modelo en particular.
A lo mejor sirva de algo mi comentario. Quien quita ^_^
Saludos.