O sea vos sos libre de elegir el compilador que creas conveniente. Me explico con un ejemplo simple el porque te sugiero este compilador.
Los mas conocidos son: XC8 ( Microchip), CCS y Mikro C, pienso que los 2 mas usados con XC8/CCS
XC8 por su parte proporciona el soporte para TODOS los micros y no solo algunos, asi que esto no te limita a nada. Usando MPLAB X podes incluso probar el programa ( simularlo ) en el mismo IDE, sin necesidad de usar algun otro simulador. Y generador de FUSES de forma visual.
Voy a hacer una comparativa para que veas cual es la diferencia.
Alternar un Led:
#include <xc.h>
// Aca los FUSES
void main(void)
{
TRISA = 0xFF; // Asi para cuando te referis a un registro completo, y abajo para cuando te referis a algun bit
TRISBbits.RB0 = 0; // Lo mismo que hacer BCF TRISB,0 , observa que no nos importa los bancos cuando manejamos C
while(1)
{
PORTBbits.RB0 = 1;
__delay_ms(500)
PORTBbits.RB0 = 0;
__delay_ms(500);
}
}
Tal ves le falte configurar algun otro registro para que funcione realmente, pero es aproximado. Observa que es muy parecido a lo que harias con ASM. Te manejas con los registros.
El include de xc.h luego resuelve para el PIC que tengas configurado en tu proyecto, asi que con solo incluir ese es valido para todos.
Veamos ahora lo mismo con CCS y que funcione IGUAL.
#include <16f877a.h>
#USE FAST_IO(B)
// Aca los FUSES
void main(void)
{
set_tris_a(0xFF);
set_tris_b(0xFE);
while(1)
{
output_high(PIN_B0);
delay_ms(500);
output_low(PIN_B0);
delay_ms(500);
}
}
CCS esta preparado para abstraerte del Hardware como ya comentaron, no tocas nunca los registros, la idea es que JAMAS lo hagas.
el USE FAST_IO (especifico de CCS) hace que los output_low/output_high/input funcionen igual que leer el bit unicamente. Sino al no poner eso CCS si usas la funcion input para leer el estado de un pin de salida por ejemplo terminas cambiando los TRIS tambien.
Ventajas de CCS... Supongamos que tenes que realizar una UART, en XC8 debes modificar todos los registros, bits a bits. en CCS usas:
#USE RS232(baud=9600,xmit=PIN_B0, rcv=PIN_B1)
Ya con eso podes usar funciones como printf, imprimir flotantes ( numeros con decimales), letras (string), enteros, etc sin hacer nada, en cambio XC8 es mucho mas complicado ya que vas a tener que hacerte las funciones vos mismo, de la misma forma que lo pensabas cuando lo hacias en ASM. Ej: Si tengo un numero de 0 a 255 (123) y lo debo pasar a ASCII, en XC8 necesito crear una funcion que me lo pase a BCD, luego sumarle '0' y poner en un array terminado en '\0' asi es considerado un string "123".
Ademas en CCS si los pines definidos pertenece a algun modulo UART, utiliza el modulo, si no lo son, entonces crea una UART por software. Lo mismo es con I2C/SPI, todo así de fácil se crea.
----------------
Por mi, considero que CCS es C, pero no funciona como cualquier compilador que siga los estándar , por ejemplo vos necesitas agregar esos USE a TODOS los archivos .c, lo cual es absurdo, pero de esa forma se maneja CCS. Para cuando necesites crear proyectos con varios archivos .c, esto lleva a malas costumbres de programacion, una cosa que nunca habia entendido es porque usan include con archivos .c cuando unicamente deberian hacerlo con los .h, y esta es una razones de ello, Y me encontre con gente que cree que esta bien porque nunca tocaron algun otro compilador C.
------------------------------------------
Finalizando:
Si tu idea es crear un proyecto simple, rapido y facil, anda por CCS, solo vas a necesitar el manual y acostumbrarte a las funciones. (Prefiero el plugin de CCS para MPLAB, ya que el IDE de CCS es MALO)
Si tu idea es algo un poco mas grande, considero XC8 por no haber otra alternativa (mejor seria con: con un mejor IDE, y optimizaciones gratis). Pero es suficiente
