Hola a todos. Yo hace mas de 10 años uso CCS y Hitech PICC, de hecho enseño en varias universidades microcontroladores PIC entre otros y uso CCS. Por motivos laborales me he tenido que forzar a cambiar a PICC y me he dado cuenta que esta mucho mas maduro que CCS. Incluso con un simple ejemplo de código tipo "blink-a-led" de 3 leds se ve que realmente es necesario tener a la mano el datasheet del micro en cuestion dado que CCS asume muchas cosas e inicializa registros no como indica el datasheet. Es decir nos simplifica la vida pero al portar el codigo a otro compilador nos la complica.
Ejemplo en CCS, para 12F683. Leds en pines GP2, GP4 y GP5. Versión 4.120
#include <12f683.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR
#use delay(clock=8000000)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
void main() {
setup_oscillator(OSC_8MHZ);
//setup_adc_ports(NO_ANALOGS);
//setup_comparator(NC_NC);
//set_tris_a(0x00);
while(1) {
output_low(GP2);output_low(GP4);output_low(GP5);
delay_ms(100);
output_high(GP2);output_high(GP4);output_high(GP5);
delay_ms(100);
}
}
En el ejemplo anterior lo correcto seria compilar con las lineas que estan comentarizadas, ya que este micro tiene algunos pines para funciones analogas al reset. Para configurarlas digitales hay que descomentarizar las lineas, sin embargo al inicializar configura los registros ANSEL, TRISIO y CMCON0 a nuestro beneficio.
Ahora la version en PICC Pro 9.81
#include <htc.h>
__CONFIG(0x3FC4);
#define _XTAL_FREQ 8000000
void main() {
OSCCON=0b01110001; // Oscilador interno 8MHz
OSCTUNE=0;
//ANSEL=0; //Desactiva entradas analogas
//CMCON0=0x07; //Desactiva comparador analogo
TRISIO=0; //Configura solo outputs
while(1) {
GP2=0;GP4=0;GP5=0;
__delay_ms(100);
GP2=1;GP4=1;GP5=1;
__delay_ms(100);
}
}
En este caso si mantienen los comentarios el programa solo hace el blink del led que al reset es digital(GP5), los análogos obviamente no. Hay que descomentarizar las lineas.
Conclusión, con PICC tendremos un código mucho mas fiel al funcionamiento del micro lo que obliga a que tengamos a mano el datasheet.
Me costo darme cuenta de este error que no es un bug, es un error de programación en que incurrimos al confiar mucho en el CCS.
Yo por mi parte de ahora en adelante solo enseñare verdaderos compiladores ANSI C en mis clase, nunca mas pasarse al lado oscuro de la fuerza del CCS.