Para eso hay que leer el datasheet. Ese es el problema numero 1.
#define TFT_CS LATDbits.LATD0
#define TFT_RES LATDbits.LATD1
#define TFT_DC LATDbits.LATD2
LATDbits, quiere decir los bits del registro LATD. LATD0 es el bit0 y posee el mismo nombre que en el datasheet. Y corresponde al puerto D bit 0, o como en CCS PIN_D0
#define TRIS_CS TRISDbits.TRISD0
#define TRIS_RES TRISDbits.TRISD1
#define TRIS_DC TRISDbits.TRISD2
TRISDbits, O lo que es lo mismo que los bits del registro TRISD, TRISD0 corresponde al bit0 y posee el mismo nombre que en el datasheet. Equivalente arriba
La costumbre de abstraer a las personas que tiene CCS de lo que realmente se hace puede ser tanto beneficiosa como peligrosa. Ejemplo..
Ahi estarias seteando todo el registro TRISD. Ademas tenes que tener en cuenta de poner #use fast_io, por que si no CCS se encarga de modificar los TRIS a su voluntad dependiendo si se lee o se escribe un puerto.
Desconozco si CCS dispone ya de todos los registros definidos. Pero siempre que los vi, la persona debe realizarlo. Creo que es mucho mas simple el modo de XC8.
Respecto al LATx y PORTx son los registros de los Ports del micro. Uno para escribir el latch de salida y el otro para ver el estado del pin. Esto en CCS vos no lo ves.. ya que siempre haces:
En el cual CCS se encarga por detras de leer el registro PORTx, Y si haces un output_high(PIN_D0); lo hace automaticamente por el PORTx o LATx dependiendo del PIC.
Otra diferencia que podras ver es en las interrupciones, uno agrega codigo para borrar la bandera por si solo ( CCS ) mientras que en XC8 es uno el encargado de hacerlo.
A lo que voy... XC8 es lo mas parecido al datasheet posible. Vas a manejarte igual que lo que dice el datasheet. No va a hacer nada por detras tuyo. Las desventajas son evidentes al crear un codigo "rapido". Ya que CCS tiene funciones que te facilitan enormemente la vida. como su #use RS232, entre otros como los de LCD, etc. Pero ojo, esto no quiere decir que no se pueda hacer en XC8, se puede hacer tambien. Pero bueno si no se noto vas a ver que soy anti CCS, por esos motivos, no me gusta que hagan cosas que no se como funcionan. Quiero el codigo de lo que hace al frente mio, es decir tener realmente el control y saber que se esta haciendo. Por otra parte veo todos estos errores en gente que comienza a programar, y el comun es que comienzan con CCS, Siendo que con XC8 simplemente lees el
paso a paso del datasheet y configuraste cada modulo. Y aunque no lo creas tiene un paso a paso para todo modulo casi.
-------------------------
Volviendo al tema que me fui por otros lados. Te di el "equivalente", el #define deberia ser igual en CCS. Lo que hace el define.. es encontrar cualquier uso en el codigo y reemplazarlo ANTES de compilarlo. Para que sea un equivalente en CCS seria algo asi:
#define TFT_CS PIN_D0
#define TRIS_CS set_tris_d(get_tris_d()& ~( 1 << 0 ));
#define TFT_RES PIN_D1
#define TRIS_RES set_tris_d(get_tris_d()& ~( 1 << 1 ));
#define TFT_DC PIN_D2
#define TRIS_DC set_tris_d(get_tris_d()& ~( 1 << 2 ));
Y de querer cambiar el puerto deberias cambiar la letra de cada funcion. Sino la otra es "mapear" los TRIS y usar bit_clear o bit_set. (Aclaro, no se si es correcto la linea pero es lo unico que se me ocurre ).
Lo mapeas con #byte, suponete que PORTA esta en la direccion 0x05. Entonces:
Y ahora podes usar para activar RA2 :
Ahora pensalo para el tris y seria algo parecido a lo que tenes en XC8
Y otra cosa, estoy dele intentar compilarlo pero me manda este error en un prototipo de funcion, y yo no veo ninguno. No se que flasha el CCS pero capaz me equivoque yo asi que aca esta la linea
int RGBConvert(int red, int green, int blue);
El prototipo no tiene ningun error, tal ves puede ser un problema en otra parte del programa. Suele suceder que da errores en otro lado y por ahi es una llave o algun punto y coma en otro lado, etc.