Si es para PIC yo tambien recomendaria XC, puede tener algunas desventajas con respecto a CCS ( por ejemplo veo que en CCS hacer una UART por soft te lleva una linea ), pero XC es de microchip, eso quiere decir que los micros vas a ser soportados por el compilador si o si ( o esperando un poco de tiempo ). La principal diferencia con ASM es que ahora en ves de tener una hoja con las instrucciones / registros a tu lado , tendrias una hoja con las funciones de las API que uses ( si es que usas - peripherical library ) por ahi incluso liberandote de saber que registros se deben modificar.
Consejos para agarrarle la mano? es empezar de a poco xD e ir agregando conocimientos
En si lo que voy a pasar es C, el tutorial esta hecho para PC, pero aplica exactamente a un micro. Incluso podes crear un archivo en modelo que trae el MPLAB asi el armado resulta un poco mas facil.
Primero conocer los operadores ( la diferencia entre un = y un == , entre otras )
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2BAprender sobre las funciones/prototipos ( empezando por algo simple que no retornen nigun valor, luego pasandole valores y que retornen un valor, luego despues que aprendas punteros podes pasarlo por ahi)
Variables locales/globales, diferencias.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Uso_de_funcionesLoops ( for, while, do-while(diferencia con while), switch-case, if-else )
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_controlEso es lo mas simple, luego agregas Vectores (n dimensiones,comenzas con 1, tambien aprender sobre los indices que el primer elemento es el 0):
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/VectoresCon eso ya te podes meter a que son los "strings" o cadena de caracteres
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Cadenas_de_caracteresLuego podes empezar a ver el usar archivos cabeceras y otros archivos para poder hacer tus propios funciones y luego llamarlas desde tu programa principal.
Y recien ahi me meteria con punteros o estructuras. Punteros te va a resultar facil si entendes el uso de los registros FSR e INDF del micro (Acceso indirecto)
Creo que es el hilo por el cual iria para aprender C, no nombre variables por que en los post anteriores ya dijeron que mejor acostumbrarse usando uint8_t ( Unsigned y de 8 bit ) u otros (uint16_t e int16_t y tabmien para 32 bits). Es mas intuitivo que saber cuantos bits tiene un int.
Eso es C, realmente no recuerdo si me olvido algo, pero como todo cuando empezas todos sabemos que comenzamos prendiendo un led con un delay y luego vamos agregando.
Y entre eso y mirando otros codigos le vas a agarrar la mano rapidamente, una dirferencia con basic es que no comenzas con un IF y ENDIF sino que todo esta delimitado por llaves if(condicion){ }