Googleando encontré un comentario que hizo un usuario en el grupo del rtc_argentina con un gran dolor de cabeza a evitar con el uso de la librería del LCD xlcd.h, el cual lo sintetizo a continuación:
Por más que integremos el archivo a la carpeta del proyecto con la directiva #include "xlcd.h" o desde la carpeta del árbol del proyecto, en la carpeta headers files,
al hacer el #include <xc.h> estamos también incluyendo varios archivos más.
este archivo <xc.h> tiene dentro el #include <htc.h> y este archivo a su vez tiene un #include <pic18.h>.
Dentro del archivo <pic18.h>. están estas otras directivas de preprocesado:
#if defined _PLIB
#include <plib.h>
#endif
Con lo cual también se incluye al archivo plib.h el cual tiene dentro la directiva #include <xlcd.h>
Todo este trabalengua hace que el compilador utilice el archivo original <xlcd.h> sin tomar en cuenta el que tenemos "xlcd.h" en la carpeta del proyecto, no importando la forma en la que se haya declarado posteriormente el #include "xlcd.h", esto porque el #include <xc.h> esta primero que el include local #include "xlcd.h" de la carpeta del proyecto. Y por más que cambiemos de puerto B a puerto D no se reflejarán los cambios.-
Las soluciones son:
Solución 1: Editar directamente el archivo original xlcd.h, en la carpeta C:\Microchip\xc8\v1.12\include\plib (solución peligrosa porque cambiaríamos la librería en uso por otros proyectos. Hacer un backup)
Solución 2: En todos los archivos anteriormente mencionados cambiar
#include <pic18.h>
por #include "pic18.h " (solución peligrosa porque cambiaríamos la librería en uso por otros proyectos. hacer un backup)
Solución 3: hacer una copia local de la librería xlcd.h con otro nombre para evitar confusión #include "xlcd_portd.h" y renombrar todos los #defines para que sean diferentes a los de la librería original.-
por ejemplo DATA_PORT cambiarlo por DATA_Puerto
Así por más que se la incluya a la original, los defines que surtirán efecto serán los renombrados.- (solución poco elegante. pero solución al fin)
Solución 4:
agregar en nuestra librería local las directivas de preprocesado que quiten las definiciones que trae la librería xlcd standard así nuestra librería las puede redefinir:
#if defined DATA_PORT
#undef DATA_PORT
#endif
#if defined TRIS_DATA_PORT
#undef TRIS_DATA_PORT
#endif
#if defined BIT8
#undef BIT8
#endif
#if defined UPPER
#undef UPPER
#endif
#if defined LINE_0
#undef LINE_0
#endif
#if defined NEXT_LINE
#undef NEXT_LINE
#endif
#if defined RW_PIN
#undef RW_PIN
#endif
#if defined TRIS_RW
#undef TRIS_RW
#endif
#if defined RS_PIN
#undef RS_PIN
#endif
#if defined TRIS_RS
#undef TRIS_RS
#endif
#if defined E_PIN
#undef E_PIN
#endif
#if defined TRIS_E
#undef TRIS_E
#endif
#if defined DON
#undef DON
#endif
#if defined DOFF
#undef DOFF
#endif
#if defined CURSOR_ON
#undef CURSOR_ON
#endif
#if defined CURSOR_OFF
#undef CURSOR_OFF
#endif
#if defined BLINK_ON
#undef BLINK_ON
#endif
#if defined BLINK_OFF
#undef BLINK_OFF
#endif
#if defined SHIFT_CUR_LEFT
#undef SHIFT_CUR_LEFT
#endif
#if defined SHIFT_CUR_RIGHT
#undef SHIFT_CUR_RIGHT
#endif
#if defined SHIFT_DISP_LEFT
#undef SHIFT_DISP_LEFT
#endif
#if defined SHIFT_DISP_RIGHT
#undef SHIFT_DISP_RIGHT
#endif
#if defined FOUR_BIT
#undef FOUR_BIT
#endif
#if defined EIGHT_BIT
#undef EIGHT_BIT
#endif
#if defined LINE_5X7
#undef LINE_5X7
#endif
#if defined LINE_5X10
#undef LINE_5X10
#endif
#if defined LINES_5X7
#undef LINES_5X7
#endif
#if defined PARAM_SCLASS
#undef PARAM_SCLASS
#endif
solución 5:
agregar al prinicipio de nuestro archivo main.c las siguientes dos directivas include:
#include <pic18f4550.h>
#include "xlcd.h" // lo agregamos primero para que el include standard <xlcd.h> no pise nuestro "xlcd.h" modificado.
Esta es la solución menos laboriosa.
modificado: agregué solución 5.