# ¿CCS vs C18? ¿Por qué el CSS más que el C18?



## Meta (Ago 10, 2008)

CCS vs C18

¿Cuál es el mejor y por qué?

Me gustaría ver sus comentarios respecto a esto, encima los dos de pago. Menos mal que los ASM son gratuitos.

He instalado el C18 y no se ejecutarlo, sólo entro en la dirección C:\MCC18\bin y veo todos los exe pero solo funciona con CMD.

¿C18 es así?


----------



## tiopepe123 (Ago 11, 2008)

Pero Meta que no estabas liado con una de 32 y ahora es una menor de 18...

Yo cuando empece, solo habia el hi-tech y ccs y basic, descarte el basic al no ser un sistema estructurado y poco elegante y me pase al C.

Primero probe el de hitech y el lio fue monumental, no sabia por donde empezar, se tenia que programar casi todo.

Despues me pase al CCs y en pocas horas ya andaba la cosa.
El C18 no lo he probado pero supongo que se integra como los otros.

Defines el lenguaje cuando creas el proyecto, sino mira bien el menu project y me entenderas.


----------



## THE ONE ANDRES (Abr 13, 2010)

Hola, estoy programando un 16f84 en Multisim en lenguaje C... tienes alguna idea de como deberia estructurar el codigo? conosco de C, pero no se como hacerlo en multisim...

Saludos


----------



## jjfonsecaz (Abr 14, 2010)

Pues yo voto por C18 en forma muy personal.

Pero creo que es mejor CCS, ¿Por que la contradiccion?
Pues a mi en lo personal me gusta el C18 por el simple hecho de que lo hizo microchip y por lo tanto esta perfectamente integrado con todas sus herramientas. Aparte de toda la documentacion por parte del fabricante para el uso de sus librerias libres.

Pero he de considerar que CCS es mejor, por el hecho de poder programar no solo la familia 18 si no tambien la familia 16. Es bastante mas practico(Pude hacer una aplicacion USB sin saber nada de este protocolo con unas cuantas funciones) y tiene muchas librerias muy utiles. Tiene su propio entorno de programacion y es compatible con MPLAB. 

En cuanto a lo del uso de C18, si es asi lo que pasa es que esta integrado a MPLAB por lo cual tienes que crear un proyecto con la suite de C18 en el MPLAB. Ya ahi editas como si fuera en C. Al principio se siente extraño ya que estas acostumbrado a usar el ASM ahi, pero te terminas acostumbrando.

Saludos


----------



## ByAxel (Abr 14, 2010)

THE ONE ANDRES dijo:


> Hola, estoy programando un 16f84 en Multisim en lenguaje C... tienes alguna idea de como deberia estructurar el codigo? conosco de C, pero no se como hacerlo en multisim...
> 
> Saludos



Tengo el Multisim 11 y la programación en C está basada en el compilador de Hi-Tech,
por lo que deberías buscar info al respecto pero no es muy difícil ya que maneja el estándar ANSI-C


----------



## Gregory (Abr 14, 2010)

ami pensar programar en c18 es mucho mejor, debido a que no toda la vida vamos a estar programando pics de 8bit, algun dia tendremos la ansiedad por dar el salto a programar un dspic o un pics de la serie 24 o  32 y a este nivel los compiladores de microchip(c30,c32) no tienen enemigos, entonces al dominar c18 no sera muy dificil dominar dichos compiladores.....en conclusion c18 es el camino


----------



## THE ONE ANDRES (Abr 14, 2010)

Hola todos...

Compáñero Carlos Alexis, te comento que en mi busqueda de programar el 16F84 con Multisim en C, me tope con este manual del compilador que usa el Multisim ya que al parecer no se le puede agregar otro, o si?

Saludes a todos y aca les dejo mi primer aporte como integrante de esta comunidad "User Guide PICC lite compiler ANSI C"...

Exitos...


----------



## Eclip-se (Abr 15, 2010)

El mejor es C18 ya que se puede usar diferentes archivos para extructurar y ordenar el programa. Tambien se puede adicionar assembler facilmente. Y sobre todo el codigo generado es mas optimizado que al usar CCS.


----------



## ByAxel (Abr 15, 2010)

En efecto, el C18 es el más recomendable para hacer practicas profesionales. Incluso el compilador de Hi-tech es muy parecido, hasta el mismo microchip le hace hace propaganda.
Personalmente el entorno del Hi-Tech el IDE Hi-Tide es más agradable que el MPLAB y el código entre los dos es similar... pero es una lástima que no tenga mucha fama en el foro.


----------



## Meta (Abr 15, 2010)

Hay un tutorial hecho por aquí del C18 en español.

http://electronica-pic.blogspot.com/2009/07/manual-en-pdf-sobre-la-configuracion-y.html

Saludo.


----------



## Moyano Jonathan (Abr 15, 2010)

Yo hace mucho que uso CCS ...es con lo que empezé en el mundo de los PIC's...pero ahora quiero aprender a usar C18 y C30 para programar PIC18FXX y PIC24FXX asi también ( en un futuro ) los dsPIC


----------



## Meta (Abr 15, 2010)

Me llama la atención más los PIC32 que los dsPIC. Aún así encontré este tutorial del dsPIC en español.

http://ayudaelectronica.com/overview-mcu-alu-dspic-30f/#more-690

Saludo.


----------



## sshak9 (Jul 30, 2010)

En más de un lugar he leído que el que tiene mayor capacidad de compresión es el c18, así que para aplicaciones mas grandes, obviamente es mucho más recomendable. Yo también empezé con el CCS pero ya que yo estuve buen tiempo con el ASM me molestaba un poco el hecho de hacer una comunicación sin saber siquiera que registros utilizaba o al menos algo del protocolo de comunicación, así que el C18 fue el punto medio perfecto para mí .
Conclusión: empiecen con CCS y con algo de nivel pasen al C18.


----------



## willynovi (Jul 30, 2010)

yo uso C18, y lo del USB no me costó mucho, ni con el framework anterior ni con el actual, aunque el actual esta un poco mas simplificado.
Anteriromente programé en ASM, aunque no muchas aplicaciones, y empezar con C18 no me ha costado nada, ademas de que ya habia programado algo de C para aplicaciones en la PC.

Del CCS no puedo decir mucho, ya que no lo he visto.


----------



## Meta (Jul 30, 2010)

Hola:

La verdad que en CCS mucho lo ven como el mejor. Para mi, ya que el C18 aunque sea más engorroso según tengo entendido, tiene la ventaja que es de MPLAB con el resultado de usar todos los PIC sin problemas. Está bien el C32 porque quiero manejar los PIC32 algún día que son muy curiosos.

Ver manual C18.

Ver manual PIC32.

Saludo.


----------



## v17h0r (Dic 10, 2011)

El CCS, es un buen compilador pero el problema se da cuando se tiene que optimizar la memoria, 
Ejm:
Código CCS
   .................... output_high(PIN_B0);  pon a 1 la salida puerto B, pin 0 "B0"
código ASM generado por CCS
  0015:  BSF    03.5
  0016:  BCF    06.0
  0017:  BCF    03.5
  0018:  BSF    06.0 
a consumido cuatro lineas de memora ROM del PIC


Programando en ASM
   BSF   PORTB,0; Bit Set File
   eso seria todo para poner  1 la salida puerto B, pin 0 "B0"

Un poco mas complejo con cualquier copilador C sea este CCS, HI-TECH,

Código probado en CCS
#BYTE PORTB    = 0X06
#BIT B0            = PORTB.0

B0=0;
al compilar te genera
BSF   PORTB,0;

HI-TECH & C18 ya tiene creada ejem pic12f509.h donde esta declarada todas la variables del micro

NO se podría negar la calidad de las funciones que tiene CCS ya implementadas solo se las debe conocer y utilizar, pero como mencione anteriormente el consumo de memoria se duplica o triplica.
Dependiendo de la aplicación se deberá de tomar los corectivos necesarios.


----------



## movlwjps (Dic 10, 2011)

pues estas mal porque el ccs con output_high(PIN_B0) me genera solo una linea en asm, igual que el c18. lo que pasa es que tienes que poner #Use Fast_Io(B).


----------



## v17h0r (Dic 11, 2011)

Como tu dices *movlwjps*, no muchos conocen esa opción de "#Use Fast_Io(B)" y no la colocan en el código y les crea código extra, pero igual te genera código extra. 

Yo personalmente cuando programo mezclo Código C y Código ASM, en el proyecto que este realizando para optimiza recursos, no soy un experto en ASM, pero hay ciertas cosas donde con un pocas lineas en ASM la tienes como estructuras en tablas.

Te invito a que realices un código en C regularmente complejo, y compiles en CCS, Hi-tech, y compares códigos ASM resultantes, el consumo de ROM y RAM que te genera.

Mira este análisis que hace el amigo "SUKY" con su tema: "Comparando compiladores: C18, CCS y Hi-Tech PIC18"

Revisando la siguiente tabla de comparaciones que presenta CCS, en la sección 5, donde muestra algunas implementaciones, parecía exagerado la diferencia, así que mejor probar uno mismo:

Se compara CCS 4.108, C18 3.31 y Hi-tech 9.51.

Tamaño del archivo hex al usar printf:

C18:
Código:

#include <p18f4620.h>
#include <usart.h>
#include <stdio.h>
void main(){
	unsigned char Var=10;

	OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON &
			  USART_ASYNCH_MODE & USART_EIGHT_BIT &
			  USART_CONT_RX & USART_BRGH_HIGH ,129);
	printf("Variable=%u",Var);
	while(1);
}

Hi-Tech:
Código:

#include <pic18.h>
#include "usart.h"
#include <stdio.h>
#include "serial.h"
void main(){
	unsigned char Var=10;

	init_comms();
	printf("Variable=%u",Var);
	while(1);
}

CCS:
Código:

#include <18F4620.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

void main(){
	char Var=10;

	printf("Variable=%u",Var);
	while(1);
}


C18 3.31: 12372 bytes

CCS 4.108: 883 Bytes

Hi-Tech 9.51: 4649 Bytes

Velocidad de ejecución:

Código:

#include <p18f4620.h>

unsigned int uiCRC16(unsigned char value,unsigned int poly,unsigned int init_value){			

	unsigned int res;
	unsigned int i;

	res=value;
	res^=init_value;
	for(i=0;i<8;i++){
		if(res & 1){
			res>>= 1;
			res^=poly;
		}else{
			res>>= 1;
		}
	}
	return(res);
}

void main(){
	float a,b,c;
	unsigned int k;

	a=12569.458;
	b=8753.267;
	c=a*b;

	k=uiCRC16(0xAA,0xA6BC,0x00AA); 
	while(1);

}


C18:
Asignación 10 Ciclos. (Asignación del numero flotante a la variable)
Asignación 20 ciclos.-
Calculo 210 ciclos.- (Calculo de a*b)

Ejecución funcion 379 ciclos.-

CCS:
Asignación 8 ciclos.-
Asignación 8 ciclos.-
Calculo 133 ciclos.-

Ejecución funcion 204 ciclos.-

Hi-Tech

Asignación 7 ciclos.-
Asignación 7 ciclos.-
Calculo 425 ciclos.-

Ejecución funcion 153 ciclos.-



Código:

	k=0x1563;
	low=*((char *)&k);
	high=*((char *)&k+1);


CCS:

Código:

33:                	k=0x1563;
  0018    0E15     MOVLW 0x15
  001A    6E12     MOVWF 0x12, ACCESS
  001C    0E63     MOVLW 0x63
  001E    6E11     MOVWF 0x11, ACCESS
34:                	low=*((char *)&k);
  0020    6A16     CLRF 0x16, ACCESS
  0022    0E11     MOVLW 0x11
  0024    6EE9     MOVWF 0xfe9, ACCESS
  0026    C016     MOVFF 0x16, 0xfea
  002A    CFEF     MOVFF 0xfef, 0x13
35:                	high=*((char *)&k+1);
  002E    6A16     CLRF 0x16, ACCESS
  0030    0E11     MOVLW 0x11
  0032    6E15     MOVWF 0x15, ACCESS
  0034    0E01     MOVLW 0x1
  0036    2415     ADDWF 0x15, W, ACCESS
  0038    6E01     MOVWF 0x1, ACCESS
  003A    0E00     MOVLW 0
  003C    2016     ADDWFC 0x16, W, ACCESS
  003E    C001     MOVFF 0x1, 0xfe9
  0042    6EEA     MOVWF 0xfea, ACCESS
  0044    CFEF     MOVFF 0xfef, 0x14



// 24 ciclos.-


C18:
Código:

18:                	k=0x1563;
  0EBC    0E63     MOVLW 0x63
  0EBE    6EF3     MOVWF 0xff3, ACCESS
  0EC0    0E01     MOVLW 0x1
  0EC2    CFF3     MOVFF 0xff3, 0xfdb
  0EC4    FFDB     NOP
  0EC6    0E15     MOVLW 0x15
  0EC8    6EF3     MOVWF 0xff3, ACCESS
  0ECA    0E02     MOVLW 0x2
  0ECC    CFF3     MOVFF 0xff3, 0xfdb
  0ECE    FFDB     NOP
19:                	low=*((char *)&k);
  0ED0    0E01     MOVLW 0x1
  0ED2    50DB     MOVF 0xfdb, W, ACCESS
  0ED4    6EE7     MOVWF 0xfe7, ACCESS
  0ED6    0E03     MOVLW 0x3
  0ED8    CFE7     MOVFF 0xfe7, 0xfdb
  0EDA    FFDB     NOP
20:                	high=*((char *)&k+1);
  0EDC    0E02     MOVLW 0x2
  0EDE    50DB     MOVF 0xfdb, W, ACCESS
  0EE0    6EE7     MOVWF 0xfe7, ACCESS
  0EE2    0E04     MOVLW 0x4
  0EE4    CFE7     MOVFF 0xfe7, 0xfdb
  0EE6    FFDB     NOP


// 22 Ciclos

Hi-Tech
Código:

16:                	k=0x1563;
  15EE    0100     MOVLB 0
  15F0    0E63     MOVLW 0x63
  15F2    6FE0     MOVWF 0xe0, BANKED
  15F4    0E15     MOVLW 0x15
  15F6    6FE1     MOVWF 0xe1, BANKED
17:                	low=*((char *)&k);
  15F8    C0E0     MOVFF 0xe0, 0xf7f
  15FA    FF7F     NOP
18:                	high=*((char *)&k+1);
  15FC    C0E1     MOVFF 0xe1, 0xf7e
  15FE    FF7E     NOP


// 9 Ciclos.-


Código:

unsigned char Buffer[200],Buffer1[200],*Ptr,*Ptr1;

	Ptr=&Buffer[0];
	Ptr1=&Buffer1[0];
	for(k=0;k<200;k++){
		*Ptr1++=*Ptr++;
	}
	while(1);


CCS 7214 ciclos
C18 7025 ciclos
Hi-tech 5219 ciclos


----------



## v17h0r (Dic 11, 2011)

NO es hacer promoción a HI-TECH, pero por algo su costo http://www.microchipdirect.com/productsearch.aspx?Keywords=SW500006

La historia que tiene........

Los industrializados en los sistemas basados en uC, ya tienen establecidos sus funciones para sus interfaces.

Pero nosotros no tenemos el tiempo y la experiencia para crear estas funciones, pero CCS ya nos a facilitado muchas cosas con sus funciones, y en realidad lo que buscamos es que funcione, poco tiempo en su implementación y sea fácil de hacer.


----------



## dinoelectro (Dic 11, 2011)

si deseas optimizar memoria utiliza C18
si deseas sencillez utiliza CCS

ninguna herramienta es mejor que otra, el saber cuando y como utilizarlas es el asunto en el que debes centrarte.. yo empece trabajando con PIC CCS y se me hizo facil aprender C18 debido a que los dos compiladores son muy similares. 

_*"a pesar de aprendido C18 la mayoria de las aplicaciones las sigo programando en CCS si te molesta el consumo de memoria simplemente no utilices las librerias integradas y ya esta"*_


----------



## v17h0r (Dic 11, 2011)

Como mencione 


> Yo personalmente cuando programo mezclo Código C y Código ASM, en el proyecto que este realizando para optimiza recursos, no soy un experto en ASM, pero hay ciertas cosas donde con un pocas lineas en ASM la tienes como estructuras en tablas.



Yo también utilizo el CCS, me gusta su Wizard, te facilita mucho el configurar el micro. 
El HI-TECH, C18, un 40%, porque muchas veces cuando haces un proyecto y necesitas ayuda, encuentras códigos para ellos, pero el HI-TECH & uVision Keil para el 8051 al 100%.

Otra es que el HI-TECH, no tiene un IDE muy amigable, no encuentras variedad de ejemplos en la red. y CCS tiene muchos ejemplos en la red, propios de la empresa y un IDE muy amigable.


----------



## dannyy (Ene 27, 2012)

> El CCS, es un buen compilador pero el problema se da cuando se tiene que optimizar la memoria,
> Ejm:
> Código CCS
> .................... output_high(PIN_B0); pon a 1 la salida puerto B, pin 0 "B0"
> ...



por esta simple razón no uso el lenguaje C  
porque ocupa mas memoria de lo normal  y por ende tarda mas en ejecutar las instrucciones
y se vuelve menos eficiente y menos velos por lo que tienes que hacer instrucciones de mas,   algo que 
vuelve a nuestro proyectos menos complejos

yo uso el MPLAB con el assembler que abarca toda la gamma de microcontroladores que existen en el mercado
ademas acaba de sacar una nueva versión de MPLAB el "MPLAB X" que es mucho mejor y actualizado con los nuevos pic que salen al mercado desde los 12fxxx   hasta los 30fxxx y ds pics





> pues estas mal porque el ccs con output_high(PIN_B0) me genera solo una linea en asm, igual que el c18. lo que pasa es que tienes que poner #Use Fast_Io(B).



amigo, no creo que esa instrucción  "





> output_high(PIN_B0)


" sea el único que cree códigos e instrucciones en ASM con exageraciones
de ese tipo 

con el 





> #Use Fast_Io(B)


 solo arreglas una parte de las instrucciones pero no creo que arregle todas las instrucciones del programa
porque si arreglara toda las instrucciones entonces el codigo resultante  no seria tan grande


----------



## ralcesar (Ene 27, 2012)

Si tenes que manejar tiempos muy precisos o estás queriendo reducir el costo del producto empleando gamas bajas de ucontroladores nada le gana al ASM

Ahora si le podes meter un micro con el que no te quedas tan corto, o la aplicacion sea algo que no necesita gran precision la facilidad y el tiempo de desarrollo que te ahorras con el C es insuperable


----------



## Meta (Ene 27, 2012)

ralcesar dijo:


> Si tenes que manejar tiempos muy precisos o estás queriendo reducir el costo del producto empleando gamas bajas de ucontroladores nada le gana al ASM
> 
> Ahora si le podes meter un micro con el que no te quedas tan corto, o la aplicacion sea algo que no necesita gran precision la facilidad y el tiempo de desarrollo que te ahorras con el C es insuperable




Así es. Ya sabes. ASM para cosas pequeñas con los PIC16F, para C son más bien PIC18F y no pegarte media vida con el mismo proyecto.

El que me llama la  atención es el MPLAB X aún en beta y el C.


----------



## ars (Ene 27, 2012)

Meta dijo:


> El que me llama la  atención es el MPLAB X aún en beta y el C.


MPLAB x es solo un ide,. Ademas de que ya salio la primer version.
 No entiendo a que te referis con "y el C"


----------



## Meta (Ene 28, 2012)

Es verdad. 
Lo de la C fue error, me refiero a _Java el IDE.

Ahí ya programaremos todo.

En el fondo prefiero MPLAB X más bien el C18. Si se te queda corto la RAM o la memoria de programa consigan otro PIC18F más grande o simplemente no usen el C para los 16F que es más bien ASM. También aprender técnicas de optimización.

Un saludo.


----------



## v17h0r (Feb 4, 2012)

NO es tener el uC con mas ROM y RAM, es saber utilizar adecuadamente lo que tienes.

Para cualquier uC la potencia del ASM, es insuperable ya que estas manejando directamente al uC. para los PIC no es muy complejo ya que tiene un set de instrucciones reducido. sabiendo combinar C+ASM tienes un poder increíble en tus manos.


----------



## Meta (Feb 5, 2012)

v17h0r dijo:


> sabiendo combinar C+ASM tienes un poder increíble en tus manos.



Muy cierto, lo que muchos no hacen estas técnicas. Los que lo suelen hacer son gente qu eempezaron con ASM, luego se introdujeron al C. Más tarde se da cuenta que para tener un buen rendimiento en alguna parte de la programación meten el ASM en medio del C que te lo permite. Así el código será más eficiente con más rendimiento.


----------



## dannyy (Feb 9, 2012)

tienen mucha razón pero, discúlpenme si los molestos con este comentario 
yo creo que el lenguaje C se creo para personas aficionadas y principiantes 
y no veo programa alguno que no se pueda hacer en ASM  

 es como por ejemplo
en ASM tu estas dentro del pic y comandas paso por paso
mueves tu mismo los mecanismos internos
y en C le das a un desconocido que lo mueva por ti y es poco confiable

u otro ejemplo 
con assembler es como si tu hablaras ingles y tu mismo puedes hablarle
y con C primero le hablas a un traductor y el habla por ti y no sabes lo que le dice ¿eso no seria desconfianza? 
aparte, el tamaño si importa porque por mas que sea grande el tamaño de memoria de los 18f y ds pics
la eficiencia y garantia disminuye, lo que hace que nuestros proyectos se vean menos confiable y menos complejos y lo que uno busca es complejidad y no hacer por hacer
en vez de malgastar esa memoria podríamos emplearla en otras cualidades 

ademas si el C fuera tan fantastico como lo es el ASM, entonces porque microchip no desaparece el MPLAB y usan el C18 (ya que es un negocio redondo porque se paga)y adentro ya si quieren asen sus arreglos de asembler cuando necesiten presicion 
pero no!.  y como prueba  de esto es que lo mejoro con el MPLABX que tambien es assembler y para mucho mas componentes actuales 

ademas, creen que una tecnologia tan compleja va a ser asi de facil trabajarla

les pongo otro ejemplo
con el C, el que maneja ese lenguaje sabe que hay una instruccion o algo asi no me acuerdo bien porque ase mucho que no uso ese lenguaje( y digo todo esto porque yo use tambien el C ), sobre la lectura de la memoria eeprom externa y comunicacion serial
pero si el C tenia esa instrucción entonces hay  va la pregunta del millon

¿porque microchip implementa comunicacion I2C, serial y SPI?
si se supone que eso estaba controlado por el C
eso beneficia a los que programan en ASM y con eso el C pierde algo de interes
y ahora han implementado nuevas cosas a los pics como usb y otras cosas mas y  no ai  porgrama que no se pueda aser en ASM hay esta el ingenio de cada uno y recuerden no ir defrente a lo facil aique sufrirla para ser buenos programadores y no a ser presos del C ya que tiene limites

porque un programa en ASM es mas garantia que uno en C o Basic 

y reitero  disculpenme si ofendo a alguien con esto pero es la verdad, bueno mi verdad y ojala y no gane enemigos


----------



## dinoelectro (Feb 9, 2012)

estoy muy de acuerdo con dannyy.. todo lo que ha dicho es verdad; sin embargo creo que no esta por demas tener una herramienta alternativa para programar microcontroladores; sobre todo porque la mayoria proyectos no necesitan gran capacidad de control y ahorro de memoria... si el lenguaje C te facilita las cosas.. por que no utilizarlo??

dejo una cita; del espanol lope de vega que  viene bastante bien para este tema: "en este incierto mundo nada es cierto o es mentira; todo depende del color del cristal con el que atraves lo miras...:


----------



## Meta (Feb 10, 2012)

Hola:







Se sabe que C tienes ciertas limitaciones al menos en el campo de CCS frente a C18. Uno de ellos es que cuando sacan un PIC nuevo, el CCS puede tardar un año en hacer una librería para que funcione alguna función de los bancos de memoria.

¿Qué hacer?

Introduces etiquetas y códigos de ASM puro y duro del PIC para que logres funcionarlo. En cuanto al C18, también se puede hacer, la idea real en este caso es ahorrar algo de memoria y sobre todo tener más rendimiento en algunas partes del programa.

La ventaja del C es muy parecido a otros C estandar de otros microcontroladores, hay de todo tipo, desde que aprendas con uno, al introducirte a otra marca o o la misma pero en otra familia que la estructura interna es diferente.

Si ya cuesta adaptar un lenguaje ASM a otro PIC, hacerlo con AVR no es posible, en cambio si usas el C tiene más posibilidades y en menos tiempo.

ASM más eficacia menos eficiente en tiempo.

C lo contrario.

Mezcla de C y ASM un término intermedio.

Para hacer proyectos pequeños como este vídeo para eso está el ASM.





Si en temas de USB 2.0, (USB 3.0 en el posible futuro) o pantallas táctiles a color con menús, se recomienda C. En ASM te puedes pegar media vida.

Quiero hacer un Sistema Operativo a lo Linux solo con ASM. La verdad que ASM se usas para algunas cosas. Gran parte está hecho en C y la mayoría de los programas en C. Si usamos un Microprocesador i7 para hacer nuestras aplicaciones de encender y apagar Led, el ASM para este micro es totalmente compleja y no te vale para los demás como el Pentium IV por poner un ejemplo y eso que es del mismo fabricante.

¿Por qué se usa el C?

Para ahorra tiempo. En temas de microcontroladores se usa mucho el ASM porque es sencillo, para mi no tanto.

¿Por qué no usan C para todas las aplicaciones de Windows hoy en día?
Se suelen usar en temas de Driver, la mayoría es en C o lenguajes de alto nivel, y otros demasiado alto como Java y .NET.

En temas de PIC, lo mejor es empezar con ASM, luego C y así combinas las dos cosas. Si tienes problemas de espacio de memoria, a obien, compra otro PIC de mayor capacidad, o aprende a optimizar a tope tu propio código a toda costa, de paso tendrás mejor rendimiento y menos cuelgues.

Los PIC32 por su gran complejidad, Microchip prefiere que usemos y nos centremos en C, por algo será.

Lo más que me sorprende, le dio al fabricante sacar PIC32 de 28 a 40 pines y que se puede robar más facilmente en la protoboard, cosa que antes no era así. Poco a poro triunfa.

https://www.forosdeelectronica.com/f24/pic32-28-40-pines-69636/

Entre ASM y C a escala mundial, preferiblemente el C ya que se usa para casi todo, hasta programas CustomFirmware, consolas de código cerrado y mil cosas más. No aprender ASM diferentes por cada micro diferentes. ¿Alguna idea cuantas márcas hay de microcontroladores, sin contar microprocesadores y FPGA?



ARM
Atmel
Cypress
Digi
Diodes
Ember
Energy Micro
Fairchildsemi
FreeScale
FTDIchip
Fujitsu
Hitachi
Holtek
IDT
Infineon
Intersil
JMicron
LSI
Maxim-IC
Micrel
Microchip
Microsemi
National
NEC
Nuvoton
Oki
On Semi
Parallax
Philips
Picaxe
Rabbit
Renesas
Rohm
Samsung
Semtech
Silabs
STMicroelectronics
TI
Toshiba
Winbond USA
Xmos
En resumen, si te dedicas a programar PIC, es bueno el ASM, luego el C, después la combinación. La gente de hoy en día, cada vez más veo que prefieren el C. En mi caso cada vez deseo más el C, por ahora estoy con el ASM a cañón. El C por el tema que te ahorras muchísimo tiempo, haces proyectos mucho más complejo en poco tiempo y ser capaz de hacerlo, frente al ASM que te pegas media vida. 

Un saludo.


----------



## Basalto (Feb 10, 2012)

Yo utilizo el C18 por 4 razones:
1-. Cuando sacan al mercado un PIC, las librerias las integran casi de inmediato.
2-. Parecido a C32, por lo que quiero ponerme con el dentro de poco.
3-. Aprovechamiento de recursos tanto de RAM como de memoria de programa.
y para mi la principal razon:
4-. Todos los ejermplos que tiene microchip estan en este lenguaje, por lo que cuando me puse a utilizar el MIWI solo tenia que modificar lineas y no pasar todo a otro lenguaje.

Parece que hay mucha gente que aqui utiliza c18, me estraña ya que no vi muchas ejemplos colgados en el foro con este lenguaje. 
Un saludo


----------



## Meta (Feb 10, 2012)

Basalto dijo:


> [...]
> 
> Parece que hay mucha gente que aqui utiliza c18, me estraña ya que no vi muchas ejemplos colgados en el foro con este lenguaje.
> Un saludo



Exactamente he notado eso desde hace tiempo.

Recuerdo que aquí y en pekín se usaba mucho el CCS. Ahora le están dando el C18 que aunque dicen que es algo inferior al CCS no se en qué, la ventaja que es de Microchip y tiene todo de entrada, en cuanto al CCS tarda mucho más tiempo.

Si vas a estudiar a la universidad o ciclo frmativo usarás el ASM si o si porque debes aprender com funciona un PIC por dentro.

Saludo.


----------



## dannyy (Feb 11, 2012)

bueno ya!, estoy convencido y quisiera aprender el C ,como dicen "en esta vida hay que aprender de todo para sobrevivir" pero cual seria mejor el c18, el ccs, el mikroC, o el basic,el mikrobasic,proton,pic basic pro,o el niple porfavor cual seria el mejor y que sea gratuito 

de todos los mencionados e encontrado gratuitamente pero el c18 y todas las series(10f,12f,16f,18f,33f,ds pics)no se si sera gratuito creo que es un programa por cada series de pics alguien me lo puede decir por favor 

meta tu que sabes bien de esto me lo dirías por favor me seria de gran ayuda gracias
porque escuche que hay el c10/12/16, el c18 y el c30 pero creo que ai mas
sera gratuita el programa?



cual es mejor o mejor dicho cual tiene mejor rendimiento o cual aprovecha mejor la memoria rom y ram 
el basic(proton,pic basic pro,mikro basic,etc) o el c(ccs,mikroc,etc)
otra pregunta si no fuera tanta amolestia 


> ARM
> Atmel
> Cypress
> Digi
> ...


el C dices que puede programar todos estos pics no?
y el basic como el programa "proton" puede hacerlo tambien?


----------



## Meta (Feb 11, 2012)

Hola:

No lo se todo, te diré algo.

De los compiladores no es mejor uno ni otro, lo mismo para los lenguajes de programación, sólo usas el mejor que se adapte a tus necesidades o simplemente por el más que te gusta.

En mi caso prefiero el C18, ya que me enteré, el CCS no es un C estandar y más cosas que no favorece, el Mikro C, tiene las librerías bien cerrada, te quita libertad. El C18, no se que pasó, antes todo el mundo usaba el CCS y ahora le dieron por meterse al C18 si usas el PIC18F.

El lenguaje más recomendable de alto nivel es el C a nivel mundial, porque lo verás por todas partes, no significa que sea el mejor. Hay más ejemplos del C incluidos libros. El ASM ya es diferente por cada marca y familia, te volverías loco. El más optimizado a máquina del nivel alto es el C, siempre lo ha sido, Basic y demás son mucho más alto nivel, incluso má fácil que C. C tiene mucha más ventajas en la mayoría de las cosas, otras no tantas.

Recoomendable a escala mundial es C, si te centras en los PIC aprendes ASM al menos por el aire primero para que sepa de que va este mundo realmente, este es un buen libro para empezar www.pic16f84a.org

Usted decide.

Un cordial saludo.


----------



## Moyano Jonathan (Feb 11, 2012)

> En mi caso prefiero el C18, ya que me enteré, el CCS no es un C estandar y más cosas que no favorece, el Mikro C, tiene las librerías bien cerrada, te quita libertad. El C18, no se que pasó, antes todo el mundo usaba el CCS y ahora le dieron por meterse al C18 si usas el PIC18F.



El problema meta no es que se haya dejado de usar CCS ..es más en donde realizo mis estudios los profesores que tienen empresas de desarrollo usan CCS para los productos que venden ...no por que sea más fiable o mejor...sino por que es más sencillo de aprender que C18 en algunos aspectos, tiene muchas funciones precompiladas que hace que trabajar con CCS sea más cómodo para desarrollar.

Ahora que pasa...Microchip tiene todas sus librerías desarrolladas en C18,C30,C32,etc. Entonces hay que aprender C18 para poder empezar a entender como funcionan sus ejemplos y librerías...esto nos trae grandes ventajas como por ejemplo:

Tenemos que desarrollar un menú de control para una máquina industrial que usa un controlador en base a tecnología de microchip usando un panel TFT touch.

Microchip tiene librerías desarrolladas para dichos menúes..como así también para las pantallas TFT. Entonces si aprendemos el lenguaje desarrollado por ellos podemos acceder al uso de sus librerías sin mayores inconvenientes acotando los tiempos de desarrollo.

En fin cada uno adapta el uso de los compiladores a sus necesidades..no creo fervientemente que uno sea mejor que otro.


----------



## dannyy (Feb 11, 2012)

pero el c18 se paga? o es gratuito asi como el c32 y demas


----------



## Basalto (Feb 11, 2012)

El normal se paga http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014, pero puedes bajarte la versión de evaluación o la LITE. No se lo que te permiten hacer. Un saludo


----------



## Moyano Jonathan (Feb 12, 2012)

> pero el c18 se paga? o es gratuito asi como el c32 y demas



Todas las versiones tienen la versión demo por 60 días. Dentro del periodo de prueba podés usar el compilador de manera completa con todas las opciones de optimización. Luego del periodo de prueba podés usar el compilador pero sin las optimizaciones ...ahora como dicen más arriba...la versión lite o student te sirve para empezar.


----------



## Meta (Feb 12, 2012)

dannyy dijo:


> pero el c18 se paga? o es gratuito asi como el c32 y demas



Hola:

No te preocupes en ello. Sólo cómpralo. En caso de querer tenerlo, pídeselo a un amigo que pagó por él o cómpraselo barato. Eso si, cuando se actualicen, hay qu epagar las novedades si son notables. Subversiones para corregir errores y añadir más PIC son gratuitas. Hay muchas alternativas para conseguir el C18 o el C32 sin pagar, por ejemplo los 60 días de pruebas. Hay más aún que muchos sabemos y no hace falta nombrarlo por aquí, es el que le gusta a casi tod@ el mundo.


En lo que dijo Moyano, entonces es bueno C18 por si das el salto a C32, una empresa donde vivo, usan el PIC32 desde hace 4 años. Lo que me llama la atención, es que por fin pusieron PIC32 de 28 y 40 pines con USB 2.0 y todo, es de agradecer porque s epuede poner en la protoboard, eso si, si quieres potencia de 32 bits real o manejo de 32 bits de puertos, ya son PIC32 de 60, 80 y 100 pines. Por ahora, losdel foro no les interesa mucho aprender PIC32 de 28 y 40 pines como los de 16F886/887 y 18F4550/2550. Cuando empeice haber más información, ya será otro cantar.

https://www.forosdeelectronica.com/f24/pic32-28-40-pines-69636/

Entonces mejor aprender C18, más motivo tengo. De todas maneras, el C18 va a cambiar con el tiempo para que sea más cómodo que ahora. ¿Cuándo?

Moyano, gracias por la información.

Saludo.


----------



## Basalto (Feb 12, 2012)

Meta dijo:


> Hola:
> 
> No te preocupes en ello. Sólo cómpralo. En caso de querer tenerlo, pídeselo a un amigo que pagó por él o cómpraselo barato. Eso si, cuando se actualicen, hay qu epagar las novedades si son notables. Subversiones para corregir errores y añadir más PIC son gratuitas. Hay muchas alternativas para conseguir el C18 o el C32 sin pagar, por ejemplo los 60 días de pruebas. Hay más aún que muchos sabemos y no hace falta nombrarlo por aquí, es el que le gusta a casi tod@ el mundo.
> 
> ...



Hola. yo quiero aprender a utilizar los PIC32. Pero lo que dices que en el foro no interesa, es por que para la mayoría de los proyectos que desarrollamos, nos sobra con el pic18 o con el pic24. El día que a alguno utilicé las librerías gráficas del PIC32 para implementar un LCD gráfico y cuelgue el código, y a la gente lo vea un solución atractiva, veras como la gente se pone a estudiarlo. Un saludo


----------



## Meta (Feb 12, 2012)

Basalto dijo:


> Hola. yo quiero aprender a utilizar los PIC32. Pero lo que dices que en el foro no interesa, es por que para la mayoría de los proyectos que desarrollamos, nos sobra con el pic18 o con el pic24. _*El día que a alguno utilicé las librerías gráficas del PIC32 para implementar un LCD gráfico y cuelgue el código, y a la gente lo vea un solución atractiva, veras como la gente se pone a estudiarlo.*_ Un saludo



Hola:

Ahí tienes la razón del mundo mi muy distinguido amigo, a parte de ello, faltan libros en español del PIC32, hay revistas españolas con tutoriales básicos del PIC32. Leí libros en Inglés con ejemplosincluidos, me han gustado los PIC32. La verdad es mejor usar C para ellos, así que practicar C18 primero es de lo mejorcito, si lo haces con PIC32 de repente, no pasa nada, es como aprender C en PC que es más potente aún.

Lo bueno que ya aparecen PIC de 28 y 40 pines como los 16F886/7 y los 18Fx550 para probar.

Aún falta más documentación y más gente que se animen, lo están haciendo pero lentamente, al menos lo hacen y sobre todo ya hay Web qu eanima.

http://www.aquihayapuntes.com

Un saludo.


----------



## dannyy (Feb 12, 2012)

> Lo bueno que ya aparecen PIC de 28 y 40 pines como los 16F886/7 y los 18Fx550 para probar.



disculpen mi ignorancia pero los 16F886/7 y los 18Fx550 son ds pic's? acaso  son los PIC32 en 28 y 40 pines
o son pics comunes como los de la famila 16f y 18f


----------



## Meta (Feb 12, 2012)

Hola:

Los dsPIC son microcontroladores de 16 bits.
Los PIC16F y PIC18F son de 8 bits, uno de media gama y el otro de gama alta.
Los PIC16F1 son de gama media mejorada con 14 nuevas instrucciones del asm.
Los PIC32 son de 32 bits, normalmente son de 60, 80 y 100 pines, ahora el fabricante les dio por hacerlos de 28 y 40 pines para vender más me imagino.

Saludo.


----------



## dannyy (Feb 14, 2012)

amigos me anime por el basic estoy usando el proton que fue bien fácil aprenderlo

pero quiero insertar assembler y no puedo

este es el código
DEVICE = 16f628A
XTAL   = 20					

ALL_DIGITAL true   ;Pongo todo a digital

Dim led As Byte  ;variable "led"

TRISB = 0        ;pongo como salida 

inicio:
    @movlw   b'00000001' ;cargo W con el byte
    @movwf   led            ;lo mando a la variable "led"
    @movf    led,W          ;mando el contenido de la variable "led" a W
    @movwf   PORTB    ;mando a visualizar el contenido de la variable "led" a PORTB
    goto     inicio             ;cierro en un bucle infinito

me sale error y no comprendo bien
por favor alguien que me ayude


----------



## Moyano Jonathan (Feb 14, 2012)

> amigos me anime por el basic estoy usando el proton que fue bien fácil aprenderlo



Disculpá pero el hilo no habla de lo que estás planteando ..tendrías que buscar un hilo más acorde para no desvirtuar.

Un saludo !


----------



## javierdavid2006 (Feb 21, 2012)

Hola a todos, tengo una problema, he instalado mplab c18, pero no se ni como se abre el programa, lo tengo instalado en esta ruta de la computadora, C:\Program Files\MCC18, pero no se creo ningun acceso directo, aunque hay un monton de archivos dentro a los que les di enter y nada.

Ayuda. o es que que tengo que tener instalado MpLab 8.50 y el c18 es una expansion de este. 

Muchas gracias a todos quienes respondan.

Javier - Ecuador


----------



## Meta (Feb 21, 2012)

*¿CCS vs C18? ¿Por qué el CSS más que el C18?*


----------



## v17h0r (Abr 1, 2012)

Javier

El mplabC18 es un copilador no tiene IDE propio, este se une al MPLAB como su IDE de trabjo, una forma fácil de hacer un proyecto con C18 o en general es:

(RESUMEN SIMPLISTA)
Abre el MPLAB. menu: Project->Project Wizard (este te ayudara a configurar tu proyecto)
Step One: selecciona el PIC que utilizas en Devices:
Step Two; el lenguaje de compilación en tu caso: C18
Step Three: carpeta, donde se ubicara el proyecto
Step Four: si tienes algunos archivos pre-creado, si no tienes continua
Sunnary: finalizar y empezar a desarrollar tu código del proyecto


----------



## Meta (Abr 1, 2012)

Buena explicación.

Más aún lo prefiero por esta noticia, ehejeejeje. Microchip se está poniendo las pilas.

https://www.forosdeelectronica.com/f37/microchip-simplifica-linea-compiladores-c-72735/

Saludo.


----------



## pandemonium (Abr 5, 2012)

Hola a todos los foreros. Leyendo todo el hilo me encantaría con el respeto de todos los lectores intentar aclarar ciertas cosas que quizá están generando confusiones:

1. Al hablar de "C" se habla como tal del lenguaje de programación mas no de las herramientas existentes para programar haciendo uso de dicho lenguaje. Para eso se definen unos estándares siendo el caso para el Lenguaje C la definición de ANSI C89, ANSI C99 y la última lanzada en 2011 ANSI C11. Obviamente un estándar posterior significa mejoras respecto al estándar anterior. De ahí el hecho de que ciertas herramientas (compiladores) se acerquen o no a un estándar en cuestión. Por eso herramientas como C18 o Hitech C se destacan por acercarse  a un estándar ANSI. En el caso de hitech C en sus últimas versiones PRO cumplen con el estándar ANSI C99 al igual que SDCC(GNU Compiler), el C18 se acerca bastante al ANSI C89, y el CCS C no tiene filiación por ningún estándar. El lenguaje se creó en los Laboratorios Bell para facilitar la creación de Sistemas Operativos principalmente ya que el desarrollo de estos sistemas en lenguaje ensamblador no sólo imposibilitaría el desarrollo del mismo por el tiempo empleado sino también por los costos operativos. Así que en terminos generales el lenguaje que se inventó con el fin ya mencionado ha sido tan versátil que no solamente ha servido para la creación de Sistemas Operativos sino también para la creación de aplicaciones, GUI (Graphic User Interfaces), La escritura de protocolos de comunicación entre muchos de ellos mencionar al TCP/IP (la columna vertebral de Internet) y en el caso de nosotros el desarrollo de software embebido. Por eso no creo de ninguna manera que sea un lenguaje para principiantes. De hecho los programas más importantes aún al día de hoy dentro de su núcleo contienen extensas líneas de código C compilado.

2. Cuando se menciona a MPLAB o MPLABX se está haciendo referencia a un IDE (Integrated Development Environment) que significa "Entorno de Desarrollo Integrado" y a grandes rasgos no es más que un editor con un set de herramientas y plugins que nos facilitan el tema de edición de un programa sin importar el compilador y el lenguaje utilizado. De aqui aclarar que si por ejemplo usamos MPLABX y este tiene plugins para enlazadar compiladores para lenguajes como Pascal, C, Java, lo podriamos usar indistintamente de las herramientas de codificación a las que hagamos referencia.

3. El desarrollo de compiladores como C18, Hitech C, o CCS, se dió por la misma versatilidad ofrecida del lenguaje C. Pero esta versatilidad no se debe confundir con las capacidades de cada compilador, porque una cosa es la especificación del lenguaje y otra muy diferente es que en el desarrollo del compilador se tengan en cuenta todos los criterios en el estándar de dicho lenguaje. De ahí el paradigma del porque unos compiladores tienen ciertas cosas que otros no y del porque unos si cumplen con el estándar ANSI C como son C18, Hitech C, SDCC  y otros no como en el caso del CCS C. (Esto es para el caso de los microcontroladores PIC de Microchip)

4. Este punto es sobre el rendimiento. Con el desarrollo de los algoritmos para compiladores de hoy en día el tema del rendimiento en cuanto a código ensamblado resultante es más un tema de mercadeo que un tema técnico. Hago esta afirmación por la siguiente situación: Cuando se está escribiendo una aplicación en C para PC sobre plataformas Linux usando el compilador GCC, al hechar un vistazo al codigo ensamblado resultante, las lineas de ensamblador son en extremo cortas. Tan cortas que inclusive me atrevería a pensar que en algunos tramos de códigos hechos en C el ensamblado resultante resulta mas corto que como uno se lo imaginó en caso de haber querido codificar en ensamblador. Lo curioso de todo es que si compilamos en C++. ¡El resultado es identico!. En cuanto a los compiladores para sistemas embebidos siendo nuestro caso los PIC de Microchip, este rendimiento está condicionado por el factor $Dinero$. Por eso si compilamos con una versión PRO de Hitech C tendriamos enormes diferencias de rendimiento respecto a otros compiladores, ya que este usa un algoritmo especial llamado OCG (Omniscient Code Generation) que puede reducir el consumo hasta en un 50%. Por eso si quieres rendimiento debes pagar!!. Esta es otra de las razones por las que Microchip compró a Hitech Software.

5. La pelea de siempre: Si C o Ensamblador. Aunque el ensamblador nos da la posibilidad de crear en teoría código "más reducido", esto es demasiado relativo porque en el fondo es el desarrollador quien hace el código y es este quien puede hacerlo tan largo o tan corto como su mente en ese instante le de esa capacidad. Esto también se cumple para el lenguaje C. Pero hay algo que tiene el lenguaje C que no tiene ningún lenguaje ensamblador y es su Portabilidad. Imaginemonos teniendo que aprender ensamblador de Microchip, pero si la aplicación cambia a 8051 debemos aprender ensamblador para 8051. Que tal si depronto nos toca ARM, o Freescale, o AVR, y asi una cantidad ingestuosa de ensambladores sin incluir las arquitecturas de cada núcleo. Es ahí donde el C gana por goleada.

Para terminar: Estos comentarios los hago basandome en mi humilde experiencia. Empecé con ensamblador y duré asi 3 años. Pero cuando los programas se te van haciendo más y más complejos, con el tiempo estás pidiendo a gritos una herramienta que te saque del atolladero; siendo mi caso el lenguaje C el que me sacó (quisiera ver yo el código del protocolo USB o los sockets TCP/IP sólo en ensamblador). Cual es el mejor compilador para lenguaje C en micros PIC? Eso depende de la aplicación en sí y de su complejidad interna, y también del tiempo de desarrollo. Personalmente usé durante dos años CCS C pero tuve que migrar a C18 y a Hitech C. Cuales fueron las razones?. La inestabilidad de CCS C, su imposibilidad de linkar, su incapacidad para llamar a punteros de funciones y esas infernales actualizaciones que quitaban unos bugs y dejaban otros; entre otras cosas. 

Un cordial saludo a todos.


----------



## Meta (Abr 5, 2012)

Hola:

Llevo con el ASM desde el 2008 y sigo aprendiendo con él. Poco a poco en estos momentos estoy con el C del CCS porque el libro te lo explica con ese compilador. En realidad prefiero las cosas de los propios fabricantes de PIC. El ASM, cada vez lo entiendo un poco mejor, aún así no teng soltura. Me pego media vida en hacer algo grande y largo.







Me estoy pasando C lentamente sin avandonar el ASM. Lo bueno de tener algo de conocimiento sobre de ASM, es que puedes incrustar código de ASM dentro de C con sus correspondientes etiquetas.

En CCS, si sacan un PIC nuevo, no puedes acceder a ciertas funciones, a veces esperar un año para que lo hagan. Así que a insertar etiquetas para escribir ASM. En lo sinstitutos y universidades obligan a usar ASM, nada de C, exceptuando algunos casos. En el mio, sólo ASM desde empezar. Si queremos como optativa, escogemos el C.

Tienes razón en una cosa. Hay tantos ensambladores como tantos micros hay en el mercado. El C es un estandar que te abre las puertas para otras marcas demicros. En _este mismo tema _puse una lista de marcas, seguro que se me escapa algunas.






Bajo mi punto de vista. Es bueno meterte en ASM para entender bien los micros por dentro como el 16F84A y luego el C. El 16F84A tiene su propio libro en español y es de lo mejorcito.

www.pic16f84a.org

Estoy con otro libreo de ASM y C al mismo tiempo. No tenía ni la mejor idea de lo rápido que se trabaja C y fácil de entender otros uC así sin más, solo hay que aprenderse los nombres de los registros.

Hay ejemplos del PIC32 en ASM y casi me da algo, no entiendo ni papa. Los ejemplos que vienen tanto en C como en ASM, en la hojas de datos son en ASM.

otros sencillos con el C.

```
/*********************************************************************
 *
 *      Example Binky LEDs
 *
 *********************************************************************
 * FileName:        blinky_leds.c
 * Dependencies:    plib.h
 *
 * Processor:       PIC32MX
 *
 * Complier:        MPLAB C32
 *                  MPLAB IDE
 * Company:         Microchip Technology Inc.
 *
 * Software License Agreement
 *
 * The software supplied herewith by Microchip Technology Incorporated
 * (the “Company”) for its PIC32MX Microcontroller is intended
 * and supplied to you, the Company’s customer, for use solely and
 * exclusively on Microchip Microcontroller products.
 * The software is owned by the Company and/or its supplier, and is
 * protected under applicable copyright laws. All rights are reserved.
 * Any use in violation of the foregoing restrictions may subject the
 * user to criminal sanctions under applicable laws, as well as to
 * civil liability for the breach of the terms and conditions of this
 * license.
 *
 * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 *********************************************************************
 * $Id: blinky_leds.c 9390 2008-06-16 23:43:04Z rajbhartin $
 *
 * $Name:  $
 *********************************************************************
 * This program uses Exploer-16 to blink all of its LEDs at once.
 *
 * Platform:     Explorer-16 with PIC32MX PIM
 *
 ********************************************************************/
#include <plib.h>

// Configuration Bit settings
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8

#if defined (__32MX460F512L__) || defined (__32MX360F512L__) || defined (__32MX795F512L__)
#define SYS_FREQ (80000000L)
#elif defined (__32MX220F032D__) || defined (__32MX250F128D__)
#define SYS_FREQ (40000000L)
#endif

int main(void)
{
    int i;

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // Configure the device for maximum performance but do not change the PBDIV
    // Given the options, this function will change the flash wait states, RAM
    // wait state and enable prefetch cache but will not change the PBDIV.
    // The PBDIV value is already set via the pragma FPBDIV option above..
    SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);


    // Explorer16 LEDs are on lower 8-bits of PORTA and to use all LEDs, JTAG port must be disabled.
    mJTAGPortEnable(DEBUG_JTAGPORT_OFF);

    // Make all lower 8-bits of PORTA as output. Turn them off before changing
    // direction so that we don't have unexpected flashes
    mPORTAClearBits(BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
                             BIT_3 | BIT_2 | BIT_1 | BIT_0 );

    mPORTASetPinsDigitalOut( BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
                             BIT_3 | BIT_2 | BIT_1 | BIT_0 );

    // Now blink all LEDs ON/OFF forever.
    while(1)
    {
        mPORTAToggleBits(BIT_7 | BIT_6 | BIT_5 | BIT_5 | BIT_4 | \
                             BIT_3 | BIT_2 | BIT_1 | BIT_0 );

        // Insert some delay
        i = 1024*1024*10;
        while(i--);
    }
}
```


```
/*********************************************************************
 *
 *      PIC32MX PORT API Example Code
 *
 *********************************************************************
 * FileName:        ports_basic.c
 * Dependencies:    plib.h, attribs.h
 *
 * Processor:       PIC32MX
 *
 * Complier:        MPLAB C32
 *                  MPLAB IDE
 * Company:         Microchip Technology Inc.
 *
 * Software License Agreement
 *
 * The software supplied herewith by Microchip Technology Incorporated
 * (the “Company”) for its PIC32MX Microcontroller is intended
 * and supplied to you, the Company’s customer, for use solely and
 * exclusively on Microchip Microcontroller products.
 * The software is owned by the Company and/or its supplier, and is
 * protected under applicable copyright laws. All rights are reserved.
 * Any use in violation of the foregoing restrictions may subject the
 * user to criminal sanctions under applicable laws, as well as to
 * civil liability for the breach of the terms and conditions of this
 * license.
 *
 * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 *********************************************************************
 * $Id: ports_basic.c 9390 2008-06-16 23:43:04Z rajbhartin $
 *
 * $Name:  $
 *********************************************************************
 * The purpose of this example code is to demonstrate the PIC32MX
 * peripheral library macros and functions supporting IOPORT
 * module and its various features.
 *
 * Platform:     PIC32MX Starter Kit
 *
 * Features demonstrated:
 *      - Port pin configurations
 *      - Output Pin toggle
 *      - Interrupt on Change Notice
 *        - Weak pullups
 *      - Interrupt configuration
 *      - ISR syntax
 *
 * Description:
 *    This example blinks LED D1 (PORTD.RD0) when SW1 (PORTD.RD6)
 *  is pressed, causing a Change Notice interrupt.
 *  occurs.
 *
 * Oscillator Configuration Bit Settings:
 *         - Oscillator Selection Bits =     Primary Osc w/PLL (XT+HS+EC+PLL)
 *        - Primary Oscillator Config =     HS osc mode
 *        - PLL Input Divider            =    2x Divider
 *        - PLL Multiplier            =    18x Multiplier
 *
 * Notes:
 *        - To clear a mis-match condition, always read the port first,
 *          then clear CNIF interrupt flag.
 *
 *        - PIC32MX Starter Kit Led and Sw assignments:
 *          LED1 is on PORTD.RD0
 *          LED2 is on PORTD.RD1
 *          LED3 is on PORTD.RD2
 *          SW1 is on PORTD.RD6, Change Notice (CN15)
 *          SW2 is on PORTD.RD7, Change Notice (CN16)
 *          SW2 is on PORTD.RD13, Change Notice (CN19)
 *
 *        - No resistor pullups are provided for SW1..SW3.  PORTD internal
 *          pullups should be enabled.
 *
 ********************************************************************/
#include <plib.h>

// Configuration Bit settings
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1



#define CONFIG          (CN_ON | CN_IDLE_CON)
#define PINS            (CN15_ENABLE)
#define PULLUPS         (CN15_PULLUP_ENABLE)
#define INTERRUPT       (CHANGE_INT_ON | CHANGE_INT_PRI_2)
#define SYS_FREQ         (80000000L)


int main(void)
{
    unsigned int temp;

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //STEP 1. Configure cache, wait states and peripheral bus clock
    // Configure the device for maximum performance but do not change the PBDIV
    // Given the options, this function will change the flash wait states, RAM
    // wait state and enable prefetch cache but will not change the PBDIV.
    // The PBDIV value is already set via the pragma FPBDIV option above..
    SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 2. configure the port registers
    PORTSetPinsDigitalOut(IOPORT_D, BIT_0);
    PORTSetPinsDigitalIn(IOPORT_D, BIT_6);

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 3. initialize the port pin states = outputs low
    mPORTDClearBits(BIT_0);

    // Note: It is recommended to disable vector interrupts prior to
    // configuring the change notice module, if they are enabled.
    // The user must read one or more IOPORTs to clear the IO pin
    // change notice mismatch condition, then clear the change notice
    // interrupt flag before re-enabling the vector interrupts.

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 4. enable change notice, enable discrete pins and weak pullups
    mCNOpen(CONFIG, PINS, PULLUPS);

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 5. read port(s) to clear mismatch on change notice pins
    temp = mPORTDRead();

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 6. clear change notice interrupt flag
    ConfigIntCN(INTERRUPT);

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 7. enable multi-vector interrupts
    INTEnableSystemMultiVectoredInt();


   while(1)
   {
       // .. add things to do
   };

}
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // STEP 8. configure the CN interrupt handler
void __ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void)
{
    unsigned int temp;

    // clear the mismatch condition
    temp = mPORTDRead();

    // clear the interrupt flag
    mCNClearIntFlag();

    // .. things to do .. toggle the led
    mPORTDToggleBits(BIT_0);
}
```

Hay ejemplos de USB 2.0 en ASM y C. Mejor no mires el de ASM que te entra depreción.

En cuanto a los compiladores, preferiblemente prefiero el C18. Parece ser que Microchip se está poniendo las pilas, según estas noticias.

CCS no tiene compilador para PIC32 en estos momentos. Así qu epor el C32 o otros µC que más te guste.

El ANSI 11 ojalá se estanderice con el tiempo para los C de Microchip, no me van los antiestandar.

Total, hay que aceptar con lo que hay, incluido MikroC.

Saludo.


----------



## v17h0r (Abr 8, 2012)

Al saber que C es un lenguaje considerado de alto, medio y bajo nivel. Nosotros nos ponemos los limites de cuan complejo sera el proyecto y si utilizamos código ASM en el mismo.

Yo programe algunos proyectos en ASM para el 8051 que es muy pesado y complejo; luego pase al BASCOM un lenguaje basic me facilito la vida; pero finalmente termine con el uVision de KEIL.

El lenguaje C, se utiliza como un compilador fijo para todos los uC(microcontrolador). Programo en C, C++, C#, JAVA y VB.NET, para PC; y, C y ASM para uC; recomendaría a los que se inician en el lenguaje C para uC, que practique haciendo programas sencillos para PC, se podría utilizar el Dev C++ http://www.bloodshed.net/devcpp.html, un compilador con IDE fácil de usar u otro programa, ya que al iniciarse en la programación los errores de tipo lógico son los más comunes y difíciles de identificar, con diagramas de algoritmos para su estructuración, al adquirir destrezas en la programación para PC se hace fácil la migración a un lenguaje C especifico para uC como puede ser el MC18, Hitech C o CCS.


----------



## Meta (Abr 8, 2012)

Hola:

Mi consejo es aprender ASM primero algo, así sabes de que va el PIC paso a paso y tienes más control sobre él, sobre todo los tiempos.

Luego al C, no te molestas en cambiar bancos de memorias ni nada de eso, código más corto, más fácil y cómodo, más modular, etc.........


----------

