Você está na página 1de 74

COMPILADORES EN C PARA PICS

Autores: Gabriel Gonzlez, Gianluca Salamida, Florencia


Molla, Benjamn Cub
Ctedra: Informtica I
Curso: 1R5 1er ao ingeniera electrnica
Universidad Tecnolgica Nacional Facultad regional de
crdoba

UTN FRC

Compiladores En C Para PICs Para Pics

Integrantes
Gabriel Gonzlez
Gianluca Salamida
Florencia Molla
Benjamn Cub

Profesor: Fernndez, Vctor Luis

Legajo
70123
71640
69477
70572

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Contenido
Introduccin ........................................................................................................................... 6
MPLAB C18 .......................................................................................................................... 8
Caractersticas .................................................................................................................... 8
Qu es MPLAB C18 C? ...................................................................................................... 8
Requerimientos de instalacin para C18 ........................................................................... 9
Creacin de un nuevo proyecto Pasos .......................................................................... 10
Creacin de un nuevo programa ...................................................................................... 12
Flujo de ejecucin en C18................................................................................................. 13
Ejemplos de aplicacin en MPLAB C18 ............................................................................ 15
MPLAB C24 y C32 ............................................................................................................. 21
PICC (Hi-Tech) ....................................................................................................................... 22
Instalacin y configuracin............................................................................................... 22
Realizacin de un nuevo proyecto en MPLAB utilizando el compilador PICC-Lite ...... 23
Simulacin ........................................................................................................................ 27
Utilizacin de Interrupciones ........................................................................................... 29
MikroC .................................................................................................................................. 30
Caractersticas principales del MikroC ............................................................................. 30
TIPOS DE DATOS EN MIKROC ........................................................................................... 31
Variables y constantes...................................................................................................... 31
Reglas para nombrar .................................................................................................... 32
Declaracin de variables .............................................................................................. 32
Declaracin de constantes ........................................................................................... 33
Definir los nuevos tipos de datos ................................................................................. 33
mbito de variables y constantes ................................................................................ 33
Clases de almacenamiento ........................................................................................... 33
Operadores ....................................................................................................................... 34
Operadores aritmticos................................................................................................ 34
Operadores de asignacin ............................................................................................ 34
Operadores de incremento y decremento ................................................................... 34
Operadores relacionales .............................................................................................. 35

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Operadores lgicos....................................................................................................... 35
Operadores de manejo de bits ..................................................................................... 35
Conversin de tipo de datos ........................................................................................ 35
Estructuras de control ...................................................................................................... 36
Operador condicional if-else ........................................................................................ 36
Operador Switch........................................................................................................... 36
Bucles ............................................................................................................................... 36
Bucle While................................................................................................................... 36
Bucle For ....................................................................................................................... 36
Bucle Do-while.............................................................................................................. 36
Sentencias de salto ........................................................................................................... 37
Sentencia Break ............................................................................................................ 37
Sentencia continue ....................................................................................................... 37
Sentencia goto .............................................................................................................. 37
Tipos de datos avanzados................................................................................................. 37
Matrices ........................................................................................................................ 37
Matrices bidimensionales ............................................................................................ 37
Punteros ....................................................................................................................... 37
Estructuras.................................................................................................................... 38
Funciones.......................................................................................................................... 38
Funcin principal .......................................................................................................... 38
Valor devuelto .............................................................................................................. 38
Declarar prototipos de funciones ................................................................................. 38
Llamar una funcin ....................................................................................................... 39
Caractersticas principales del preprocesador ................................................................. 39
Directivas del prepocesador ......................................................................................... 39
Mikroc PRO para PIC......................................................................................................... 40
Acceso a los registros de funciones especiales (SFR) ................................................... 40
Acceso a los bits individuales ....................................................................................... 40
Tipo sbit ........................................................................................................................ 41
Tipo bit.......................................................................................................................... 41
Insertar codigo asm en C .............................................................................................. 41
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Funcin de interrupcin ............................................................................................... 42


Libreras ........................................................................................................................ 42
Programar los PIC utilizando Mikroc PRO para PIC .......................................................... 44
Instalar MikroC PRO para PIC ....................................................................................... 44
Caractersticas principales ............................................................................................ 45
Manejar los proyectos .................................................................................................. 45
Proyect manager (administrador del proyecto) ........................................................... 45
Proyect settings (configuracin de proyectos)............................................................. 45
Librera managing (editor de libreras) ......................................................................... 47
Editar y compilar programas ........................................................................................ 47
Depurar el programa .................................................................................................... 48
Puntos de ruptura (breakpoints) .................................................................................. 48
Ventana watch values .................................................................................................. 49
Stopwatch (cronometro) .............................................................................................. 49
Programar el microcontrolador.................................................................................... 49
Otras herramientas del compilador ............................................................................. 50
CC5x ...................................................................................................................................... 51
Caractersticas CC5X ......................................................................................................... 51
Otras caractersticas ..................................................................................................... 52
Instalacin de CC5X .......................................................................................................... 53
Requisitos del sistema .................................................................................................. 53
Instalacin .................................................................................................................... 53
Programacin en C le ofrece las siguientes ventajas: ...................................................... 55
Small Device C Compiler (SDCC) ........................................................................................... 59
Instalacin del software necesario ................................................................................... 59
Comentario del cdigo fuente...................................................................................... 62
Compilacin del programa ............................................................................................... 63
Simulacin del programa.............................................................................................. 63
Cmo funciona el depurador........................................................................................ 66
Turbo C ................................................................................................................................. 67
Modelos de memoria. Ventajas y desventajas. ............................................................... 68
El programa TCINST .......................................................................................................... 69
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Caractersticas tcnicas, ventajas y desventajas de C con Turbo C .................................. 70


Ventajas de C ................................................................................................................ 70
Caractersticas tcnicas de C con Turbo C. ................................................................... 70
Conclusin ............................................................................................................................ 71
Referencias ........................................................................................................................... 73

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Introduccin
En el principio de los tiempos de los Microprocesadores la nica forma que haba de
programarlos era utilizando el Cdigo Mquina en el cual la unidad central de proceso o CPU
procesaba instrucciones que venan definidas por un conjunto de unos y ceros de 8, 16, 32 o ms
bits. Cada combinacin diferente de bits, tiene para el micro un significado distinto, y le indicar a
ste que realice una tarea determinada. Sin embargo, este tipo de programacin resultaba poco
inteligible para el ser humano, porque se tenan que manejar constantemente conjuntos de unos
y ceros sin ningn significado aparente. Por este motivo se desarroll el lenguaje Ensamblador,
que consista en asignar a cada combinacin de bits un conjunto de pocas letras (denominado
mnemnico) que representaba mejor el significado de la operacin o instruccin que se le indica al
microprocesador.
Cuando se compila un programa en Ensamblador, el compilador de Ensamblador realiza
automticamente la traduccin de los mnemnicos a Cdigo Mquina (conjunto de bits), que es el
nico lenguaje que entiende la CPU.
Durante mucho tiempo el ensamblador ha sido el lenguaje utilizado de manera casi
mayoritaria para programar microcontroladores. Sin embargo, este lenguaje implementa el
conjunto de instrucciones que cada microcontrolador en concreto entiende, por lo que es
totalmente dependiente del hardware, sin que pueda hacerse transportable a otros
microcontroladores de una manera fcil. Esto quiere decir que el Ensamblador no constituye
realmente un lenguaje de programacin estndar, capaz de permitir el transportar un programa
diseado para un microcontrolador a otro que tenga un conjunto de instrucciones diferente.
La programacin en lenguaje de alto nivel permite la creacin de programas
independientemente de la plataforma utilizada, ya estemos hablando de microprocesadores o
microcontroladores. Adems hay que tener en cuenta que los microcontroladores evolucionaron a
partir de los microprocesadores y no al revs, los microcontroladores aparecieron en la industria
por la necesidad de tener sistemas programados embebidos. Algunos de estos lenguajes de alto
nivel son el BASIC, FORTRAN, PASCAL y C; este ltimo adems de permitir la programacin desde
un nivel cercano al programador (alto nivel), tambin brinda la posibilidad de controlar aspectos
ms cercanos al hardware (bajo nivel), como la manipulacin directa de bits y bytes, por lo que se
considera que es un lenguaje de nivel medio, ms que de alto nivel, est ya sera una razn para
destacar el compilador de C.
Cuando hablamos del compilador en C, hablamos de un lenguaje que dispone de un
conjunto de operadores, datos y comandos que le confieren, al mismo tiempo, potencia y facilidad
de programacin, lo que permite un tiempo de desarrollo de programas mucho menor que con el
lenguaje Ensamblador. Adems, con el lenguaje C se asegura la portabilidad entre diferentes
plataformas hardware o software, lo que quiere decir, por ejemplo, que un algoritmo
implementado en C en una plataforma con Linux puede ser adaptado, prcticamente sin
modificaciones, a un PIC. Esto permite el aprovechamiento de numerosos algoritmos que se
encuentran ya disponibles para otras plataformas diferentes a los PIC. El Ensamblador, por el
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

contrario, es fuertemente dependiente del hardware, por lo que no permite su adaptacin de una
plataforma a otra distinta.
Por otro lado, a la hora del desarrollo de programas estructurados el lenguaje C permite
desarrollar programas estructurados en funciones, bloques o procedimientos, lo que proporciona
una compartimentacin del cdigo.
La utilizacin del lenguaje C supone una alternativa muy interesante por su rapidez,
facilidad, y portabilidad, principalmente, a la hora de ser utilizados para desarrollar un programa
para un Microcontroladores.
Cuando hablamos de compiladores para Microcontroladores, la oferta de compiladores de
C para PIC es muy numerosa, a la hora de elegir entre uno u otro es necesario tener en cuenta los
siguientes factores:
o
o
o

Optimizacin del cdigo generado.


Dispositivos para los que el compilador es capaz de generar cdigo.
Biblioteca de funciones pre compiladas y directivas de las que disponen, un
compilador que disponga ya de muchas funciones listas para usarse ahorra mucho
trabajo al programador.
Posibilidades adicionales, como insercin de cdigo Ensamblador, depuracin, precio,
etc.

Se desarrollarn varios de los compiladores ms utilizados, ya que de estos se basan sus


variantes.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

MPLAB C18
El C18-MPLAB Compiler, es un compilador profesional de C para PIC18 MCU, y una
poderosa herramienta compatible con ANSI para la familia PIC18 de PICmicro de 8-bit MCU.
MPLAB C es una aplicacin de consola para Windows de 32-bit que sirve como un IDE (Integrated
Development Environment) de MPLAB.

Caractersticas
o
o
o
o

o
o
o
o
o
o
o

Compatibilidad con ANSI 89.


Integracin con el MPLAB IDE para el fcil manejo de proyectos y el debug a nivel de
fuentes.
Generacin de mdulos de objetos reubicables para mejorar la reutilizacin de cdigo.
Compatibilidad con mdulos de objetos generados por el ensamblador MPASM,
permitiendo completa libertad para mezclar lenguaje ensamblador y programacin en C
en un proyecto.
Acceso de lectura / escritura transparente a la memoria externa.
Un fuerte apoyo para el montaje en lnea cuando es absolutamente necesario un control
total.
Eficiente cdigo generador con optimizacin multi-nivel.
Soporte extensivo de libreras, incluyendo PWM, SPI, I2C, UART, USART, libreras de string
manipulation y math libraries.
Control completo del nivel de usuario sobre datos y localizacin de memoria.
Soporta tanto un small (16-bit pointers) como un large (24-bit pointers) modelo de
memoria para el uso eficiente de memoria.
MPLIB permite la fcil inclusin de libreras y para las libreras creadas por usuarios.

Qu es MPLAB C18 C?
El cdigo es escrito utilizando notacin ANSI C estndar. El cdigo fuente es compilado en
bloques de cdigo de programa que luego son enlazados con otros bloques de cdigo y datos, y
finalmente son ubicados en las regiones de memoria del microcontrolador PIC18xxxx. Este proceso
se denomina construccin", y se ejecuta muchas veces en el desarrollo del programa a medida
que se escribe el cdigo, se prueba y se depura. Este proceso se puede hacer ms inteligente
mediante el uso del make" que invoca al compilador slo para los archivos de cdigo fuente de C
en los proyectos que han cambiado desde la ltima depuracin.
o
o
o
o

Esta optimizado para la arquitectura de los PIC18


Posee las funciones estndar del lenguaje C- Permite la inclusin de lenguaje ensamblador
Soporta interrupciones.
Contiene libreras para comunicaciones SPI, I2C, USART y perifricos externos como LCD
inteligentes

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC
o
o

Compiladores En C Para PICs Para Pics

Como utiliza el MPLAB, el entorno de programacin es similar al que se ha trabajado en


assembler.
Versin Demo gratuita.
ENSAMBLADOR
Programacin de bajo nivel.

Utilizado para optimizar rutinas en


tiempo y espacio.

C
Programacin de alto nivel.
Utilizado para descripcin de
algoritmos.

Programa ms corto.
Requiere conocer a detalle la
arquitectura interna del microcontrolador, el set
de instrucciones, los registros y su
funcionamiento interno.
No es portable, debido a que depende
dela estructura interna del microcontrolador.
No posee estructura ni control de
tipos, por lo cual, el programador debe cuidar
por s mismo de proveer una estructura
adecuada a su programa y controlar los tipos de
datos.
El mantenimiento del cdigo (revisin,
modificacin, ampliacin) es ms complejo.
Mayor velocidad

Programa de mayor extensin.


Permite combinar ciertas
caractersticas de bajo nivel del ensamblador y
otras ventajas ofrecidas por los lenguajes de alto
nivel.
Es portable, es decir, se puede
ejecutar con mnimas modificaciones en otro
microcontrolador de diferente arquitectura.
Proporciona estructura, abstraccin y
control de tipos de datos.

Es ms rpido y eficiente que otros


lenguajes de alto nivel para programar (C++,
Basic, Python, etc.)
Los programas en C son ms fciles de
mantener (revisar, modificar, ampliar).
Existen muchsimas libreras
libremente disponibles para el uso de cualquier
programador, lo cual facilita el desarrollo de una
aplicacin.
Menor velocidad

Requerimientos de instalacin para C18


Microchip sugiere usar MPLAB C18 y MPLAB IDE bajo las siguientes condiciones:
o
o

Procesador Intel Pentium clase PC ejecutado en un sistema operativo Microsoft


Windows de 32 bits (Windows 2000, Windows XP Home o Windows XP Professional)
Aproximadamente 250 MB de espacio en disco duro

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

UTN FRC

Compiladores En C Para PICs Para Pics

Creacin de un nuevo proyecto Pasos


1. Seleccione Project>Project Wizard para crear
un nuevo proyecto. Cuando aparezca la
ventana de bienvenida, haga click en
Siguiente.

2. Seleccione el dispositivo que desea usar


mediante el men desplegable, haga click en
Siguiente.

3. Seleccione como Active Toolsuite el


lenguaje de trabajo Microchip C18
Toolsuite. Seleccione el dispositivo que
desea usar mediante el men desplegable,
haga click en Siguiente.
Luego haga click sobre cada una de las
herramientas del lenguaje que se encuentran
debajo de
Toolsuite Contents y verifique que cada una
tenga asociada una ubicacin ejecutable:
o

MPASM Assembler:
C:\mcc18\mpasm\MPASMWIN.exe

MPLAB C18 C Compiler:

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

10

UTN FRC

Compiladores En C Para PICs Para Pics

C:\mcc18\bin\mcc18.exe
o

MPLINK Object Linker:


C:\mcc18\bin\MPLink.exe

MPLIB Librarian:
C:\mcc18\bin\MPLib.exe

Haga click en Siguiente.


4. Digite el nombre del proyecto y busque con el
botn Browse la carpeta donde ser
guardado. Haga click en siguiente para
continuar.

5. Adicione archivos de cdigo fuente ya


existentes a su proyecto con el botn Add>>.
Si an no los ha creado podr adicionarlos
ms adelante.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

11

UTN FRC

Compiladores En C Para PICs Para Pics

6. Finalmente, aparece una ventana que resume


los parmetros con los que fu creado el
proyecto. Verifique que el dispositivo a usar, el
toolsuite y la ubicacin del proyecto sean los
correctos. Use <Atrs para regresar a un
cuadro de dilogo anterior o Finalizar para
crear el nuevo proyecto.

Creacin de un nuevo programa


o

Se crea un nuevo cdigo fuente (con extensin .c) y se asigna a la carpeta Source
files que hace parte del proyecto que acaba de crear.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

12

UTN FRC

Compiladores En C Para PICs Para Pics

Construya el proyecto haciendo click en Project>Build All o en el cono


equivalente.

Configuracin del modelo de


memoria:
Cuando se usan libreras
estndar incluyendo stdio.h, se debe
seleccionar el modelo de cdigo
extenso para el proyecto.

Flujo de ejecucin en C18


El programa comienza en la funcin main, desde la cual es posible llamar a otras funciones.
Cada funcin debe estar formada por la cabecera de la funcin, compuesta por el nombre
de la misma y la lista de argumentos (si los hubiese), la declaracin de las variables a utilizar y la
secuencia de sentencias a ejecutar.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

13

UTN FRC

Compiladores En C Para PICs Para Pics

Ejemplo:
declaraciones globalesmain( ) {
variables locales
bloque
}

funcion1( ) {
variables locales
bloque
}

1. Se incluye la librera del PIC a usar:


#include <p18F4550.h>
2. Luego se configuran los fuses del microcontrolador. Osea la configuracin de oscilador,
watch-dog, Brown-out reset, power-on reset, proteccin del cdigo, etc. La sintaxis sera:
#pragma config Nombre delfuse=estado.
#pragma config MCLRE=OFF, PBADEN=OFF
3. Definicin de variables globales, son las que se utilizaran en el programa principal y
funciones del proyecto.
int variableA, variableB
4. Cdigo del programa:
main{
}

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

14

UTN FRC

Compiladores En C Para PICs Para Pics

Ejemplos de aplicacin en MPLAB C18


Control de un led mediante un pulsador

#include <p18f2550.h>

#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2


#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON

void main(void){
ADCON1=0x0F;//Todos entrada/salida digitales.TRISA=0xFF; //Todos como entrada.TRISB=0X00;

//Todos como salida.-

PORTB=0x00; //Leds apagados.while(1){


if(PORTAbits.RA0==1){ // testeamos RB0.
LATB=0x00;

// Si est en 1 Apagamos led

}
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

15

UTN FRC

Compiladores En C Para PICs Para Pics

else{
LATB=0x0F;

// Si est en 0 Encendemos leds.

}
}
}

Led titilando

#include <p18f2550.h>
#include <delays.h>

#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2


#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON

unsigned char i;//Para contar 0 titilaciones.-

void main(void){
ADCON1=0x0F;//Todos entrada/salida digitales.TRISA=0xFF; //Todos como entrada.GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

16

UTN FRC
TRISB=0X00;

Compiladores En C Para PICs Para Pics


//Todos como salida.-

LATB=0x00; //Leds apagados.while(1){


if(PORTAbits.RA0==1){
LATB=0x00;
}
else{
for(i=1;i<=10;++i){//Titila 10 veces
LATB=0x0F;
Delay10KTCYx(30);//Demora 300ms
LATB=0x00;
Delay10KTCYx(30);//Demora 300ms
}
}
}
}

Leds secuenciales

/* ** Archivo con definicion de registros y bits del microcontrolador elegido */


#include <p18f2550.h>
/* ** Configuracion de los Fuses del microcontrolador ** */
#pragma config FOSC = XT_XT, FCMEN = OFF, IESO = OFF, CPUDIV = OSC1_PLL2
#pragma config PWRT = ON, BOR = OFF, BORV = 0, WDT = OFF, WDTPS = 32768
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

17

UTN FRC

Compiladores En C Para PICs Para Pics

#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = OFF
#pragma config STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTRB = OFF

unsigned char k;

/* Variable utilizada para realizar efecto */

void main(void){
ADCON1=0x0F; /* Todos entradas/salidas digitales */
TRISA=0xFF;

/* Todos como entradas */

TRISB=0xF0;

/* Nible bajo como salida */

LATB=0x00;

/* Todos los leds apagados */

while(1){

/* Bucle infinito */

if(PORTAbits.RA0==1){ /* Se testea estado del pulsador */


LATB=0x00;

/* Si esta en 1 logico apagamos leds */

}else{
LATB=0x01;

/* Encendemos primer Led

*/
for(k=1;k<=4;k++){

/* Rota 4 veces */

Delay10KTCYx(30);

/* Demora 300ms */

LATB=(PORTB<<1);

/* Rotamos Led encendido */

}
}
}
}

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

18

UTN FRC

Compiladores En C Para PICs Para Pics

Control de varios display, multiplexin de la seal.

#include <p18f2550.h>
#include <delays.h>

#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF, CPUDIV = OSC1_PLL2


#pragma config PWRT = ON,BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = ON,CP1 = ON,CP2 = ON
#pragma config CPB = ON,CPD = ON
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON
#pragma config WRTB = ON,WRTC = ON,WRTD = ON
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON
#pragma config EBTRB = ON

#define UnidadBit LATAbits.RA0


#define DecenaBit LATAbits.RA1
#define CentenaBit LATAbits.RA2

unsigned char i, Unidad, Decena, Centena;


const rom unsigned char Display7Seg[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0xFF, 0x6F};
void Visualizacion (void);

void main(void){
ADCON1=0x0F;//Todos entrada/salida digitales.-

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

19

UTN FRC

Compiladores En C Para PICs Para Pics

TRISA=0xF0; //Todos como entrada.TRISB=0X00;

//Todos como salida.-

LATA=0x00;
Unidad=0;
Decena=0;
Centena=0;

while(1){
Visualizacion();
++Unidad;
if(Unidad==10){
Unidad=0;
++Decena;
if(Decena==10){
Decena=0;
++Centena;
}
}
}
}
void Visualizacion (void){
for(i=1;i<=20;++i){
LATB=Display7Seg[Unidad];
UnidadBit=1;

//Enciendo Display Unidad.-

Delay1KTCYx(5); //Demora de 5 ms (XT=4MHz)


UnidadBit=0;
LATB=Display7Seg[Decena];
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

20

UTN FRC

Compiladores En C Para PICs Para Pics


DecenaBit=1;
Delay1KTCYx(5);
DecenaBit=0;
LATB=Display7Seg[Centena];
CentenaBit=1;
Delay1KTCYx(5);
CentenaBit=0; //Apago Display Centena.-

}
}

MPLAB C24 y C32


Variantes del MPLAB C18, cuya principal diferencia es que el compilador MPLAB C18 es
utilizado para PICs de 18 bits, mientras que el C24 es compatible hasta PICs de 24 bits y el C32
hasta 32 bits.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

21

UTN FRC

Compiladores En C Para PICs Para Pics

PICC (Hi-Tech)
Hi-Tech PICC es un compilador de alto rendimiento para las familias 10/12/14/16/17 de
Microchip, el mismo que implementa en forma completa ISO/ANSI C (excepto recursin de
funciones); adems, maneja varios tipos de variables, incluso las de punto flotante de 24 bits e
IEEE de 32 bits. Este compilador genera un cdigo altamente optimizado, brindando al
programador capacidades solamente limitadas por las caractersticas del microcontrolador. Entre
las caractersticas ms importantes se pueden destacar:
o
o
o
o
o
o
o
o
o

Confiabilidad probada.
Manejo automtico de pginas y bancos de memoria.
Mltiples niveles de optimizacin2 en cdigo C.
Optimizacin en ensamblador.
Libreras estndar de ANSI C.
Inclusin de lenguaje ensamblador entre cdigo C.
Ilimitado nmero de archivos fuente.
Compatible con MPLAB IDE, MPLAB ICD y otras herramientas de desarrollo.
Compatible con varias plataformas: Windows, Linux, Unix, Mac OS X, S Solaris.

Instalacin y configuracin
Al realizar la instalacin del compilador PICC-Lite es aconsejable seguir la configuracin por
defecto del instalador, sobre todo cuando no se tiene mucha experiencia. Despus de haber
instalado el compilador, lo primero que se debe comprobar es el correcto enlace entre los dos
programas.
Dentro de la ventana Set Languaje Tool Locations se debe asegurar de que sea para
PICC Asembler, PICC Compiler y PICC Linker el archivo PICL.EXE est correctamente
direccionado (Por lo general dentro de Raz:\Archivos de programa\HI-TECH Software\ PICCLite\9.50\BIN\), en caso contrario, utilizar la herramienta de configuracin Configure MPLAB en
el men del programas o ejecutar el archivo MPLABConfig.EXE que se encuentra dentro de la
carpeta BIN en el directorio de instalacin del compilador.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

22

UTN FRC

Compiladores En C Para PICs Para Pics

Realizacin de un nuevo proyecto en MPLAB utilizando el compilador PICC-Lite


1. Quizs la forma ms eficiente de comenzar un nuevo proyecto es mediante el asistente de
proyectos Project Wizard.

2. A continuacin se debe elegir el microprocesador con el cual se va a trabajar (Se debe


tener en cuenta las limitaciones que presenta esta versin gratuita del compilador, es
decir, se deben elegir nicamente los microcontroladores soportados).
3. El siguiente paso es elegir el lenguaje de programacin, en este caso, HI-TECH PICC
Toolsuite.

4. Una vez realizado esto, ingresar el nombre del proyecto y elegir la carpeta en la cual
se grabarn los archivos.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

23

UTN FRC

5.

Compiladores En C Para PICs Para Pics

Opcionalmente, se pueden incluir archivos en nuestro proyecto, tales como: libreras


personalizadas, archivos de cabecera, etc.

6. Finalmente, se presenta un resumen de la configuracin del proyecto.


7. Despus de terminar de configurar el asistente de proyectos, creamos un nuevo archivo
y para poder compilar el proyecto, se requiere mnimo el lazo principal (main) del lenguaje
ANSI C.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

24

UTN FRC

Compiladores En C Para PICs Para Pics

8. A continuacin se debe guardar el archivo con la extensin .c, dentro de la carpeta en la


cual se inici el proyecto.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

25

UTN FRC

Compiladores En C Para PICs Para Pics

9. Finalmente, se debe incluir el archivo recin guardado dentro de los archivos fuente
del proyecto (click derecho en Source Files).

10. A partir de ahora, se puede compilar, simular, etc., el proyecto. Si la compilacin ha sido
exitosa, se presentar un resumen de consumo de memoria en la ventana de salid

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

26

UTN FRC

Compiladores En C Para PICs Para Pics

Simulacin
Una de las caractersticas ms importantes al utilizar el compilador PICC dentro del
entorno de MPLAB, es el empleo del simulador con todas sus capacidades. En la figura se muestra
el entorno de simulacin de un programa demostrativo (no tiene aplicacin) sencillo que realiza
un conteo cada 500ms, as como una salida que oscila con el mismo periodo. A continuacin se
puede observar el cdigo de este programa.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

27

UTN FRC

Compiladores En C Para PICs Para Pics

Como se observa en el
programa, ste incorpora un
archivo de retardos demoras.c, el
mismo que se detalla a
continuacin.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

28

UTN FRC

Compiladores En C Para PICs Para Pics

Utilizacin de Interrupciones
El compilador PICC maneja las interrupciones mediante la funcin interrupt , la misma que
opera de manera diferente a las dems funciones, ya que respalda registros importantes al
ingresar a la interrupcin y los restituye al salir de la misma.
Cabe destacar que dentro de la funcin interrupcin solamente se pueden utilizar
variables globales.
Para los microcontroladores de la familia media el encabezado de la funcin interrupcin
siempre es void interrupt tc_int(void).
A continuacin se muestra parte del cdigo de un programa que utiliza interrupciones del
Timer0 y Timer2.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

29

UTN FRC

Compiladores En C Para PICs Para Pics

MikroC
Caractersticas principales del MikroC
Este lenguaje es muy similar al C estndar, no obstante en determinados aspectos difiere
del ANSI estndar en algunas caractersticas. Algunas de estas diferencias se refieren a las mejoras,
destinadas a facilitar la programacin de los microcontroladores PIC, mientras que las dems son
la consecuencia de la limitacin de la arquitectura del hardware de los PIC.
o

Fases de compilacin

El proceso de compilacin consiste en varios pasos y se ejecuta automticamente por el


compilador.
El archivo fuente contiene el cdigo en mikroC que usted escribe para programar el
microcontrolador. El preprocesador se utiliza automticamente por el compilador al iniciarse el
proceso de la compilacin. El compilador busca las directivas del preprocesador (que siempre
empiezan por #) dentro del cdigo y modifica el cdigo fuente de acuerdo con las directivas. En
esta fase se llevan a cabo inclusin de archivos, definicin de constantes y macros etc, lo que
facilita el proceso.
El analizador sintctico (parser) elimina toda la informacin intil del cdigo (comentarios,
espacios en blanco). Luego, el compilador traduce el cdigo a un archivo binario denominado
archivo .mcl. El enlazador (linker) recupera toda la informacin requerida para ejecutar el
programa de los archivos externos y la agrupa en un solo archivo (.dbg). Adems, un proyecto
puede contener ms de un archivo fuente y el programador puede utilizar funciones predefinidas
y agrupadas dentro de los archivos denominados libreras. Por ltimo, el generador .hex produce
un archivo .hex. Es el archivo que se va a cargar en el microcontrolador.
El proceso entero de la compilacin que incluye todos los pasos anteriormente descritos
se le denomina building.
o

Estructura del programa

La idea principal de escribir un programa en C es de romper un problema mayor en


varios trozos ms pequeos. Supongamos que es necesario escribir un programa para el
microcontrolador para medir la temperatura y visualizar los resultados en un LCD. El proceso de
medicin se realiza por un sensor que convierte temperatura en voltaje. El microcontrolador
utiliza el convertidor A/D para convertir este voltaje (valor analgico) en un nmero (valor digital)
que luego se enva al LCD por medio de varios conductores. En consecuencia, el programa se
divide en cuatro partes, de las que cada una corresponde a una accin especfica:
1.

Activar y configurar el convertidor A/D incorporado;

2.

Medir el valor analgico;

3.

Calcular temperatura; y

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

30

UTN FRC
4.

Compiladores En C Para PICs Para Pics

Enviar los datos en el formato apropiado al LCD;

Los lenguajes de programacin de alto nivel como es C le permiten solucionar este


problema con facilidad al escribir cuatro funciones que se ejecutarn cclicamente sin parar.
La idea general es de dividir el problema en varios trozos, de los que cada uno se puede
escribir como una sola funcin. Todos los programas escritos en mikroC contienen por lo menos
una funcin llamada main() que encierra entre llaves {} las sentencias a ser ejecutadas. Esto es la
primera funcin a ser ejecutada al iniciarse la ejecucin de programa. Las otras funciones se
pueden llamar dentro de la funcin main.

TIPOS DE DATOS EN MIKROC


Hay varios tipos de datos que se pueden utilizar en el lenguaje de programacin mikroC
dependiendo del tamao de dato y del rango de valores.

Al aadir un prefijo (calificador) a cualquier tipo de dato entero o carcter, el rango de sus
posibles valores cambia as como el nmero de los bytes de memoria necesarios. Por defecto, los
datos de tipo int son con signo, mientras que los de tipo char son sin signo. El calificador signed
(con signo) indica que el dato puede ser positivo o negativo. El prefijo unsigned indica que el dato
puede ser slo positivo. Note que el prefijo es opcional.

Variables y constantes
Una variable es un objeto nombrado capaz de contener un dato que puede ser modificado
durante la ejecucin de programa. En C, las variables tienen tipo, que significa que es necesario
especificar el tipo de dato que se le asigna a una variable (int, float etc.).

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

31

UTN FRC

Compiladores En C Para PICs Para Pics

Una constante tiene las mismas caractersticas que una variable excepto el hecho de que
su valor asignado no puede ser cambiado durante la ejecucin de programa. A diferencia de las
variables, las constantes se almacenan en la memoria Flash del microcontrolador para guardar el
mayor espacio posible de memoria RAM. El compilador las reconoce por el nombre y el prefijo
const. En mikroC, el compilador reconoce automticamente el tipo de dato de una constante, as
que no es necesario especificar el tipo adicionalmente.

Reglas para nombrar


En mikroC, los identificadores pueden ser tan largos como quiera. Sin embargo, hay varias
restricciones:
Los identificadores pueden incluir cualquiera de los caracteres alfabticos A-Z (a-z), los
dgitos 0-9 y el carcter subrayado '_'. El compilador es sensible a la diferencia entre minsculas y
maysculas. Los nombres de funciones y variables se escriben con frecuencia con minsculas,
mientras que los nombres de constantes se escriben con maysculas.
Los identificadores no pueden empezar con un dgito. Los identificadores no pueden
coincidir con las palabras clave del lenguaje mikroC, porque son las palabras reservadas del
compilador.
El compilador mikroC reconoce 33 palabras clave:

Declaracin de variables
Cada variable debe ser declarada antes de ser utilizada en el programa. Como las variables
se almacenan en la memoria RAM, es necesario reservar el espacio para ellas (uno, dos o ms
bytes). El programa maneja las variables con los nombres asignados. El compilador las reconoce
como nmeros en la memoria RAM sin conocer su tamao y formato. Para mejorar la legibilidad
de cdigo, las variables se declaran con frecuencia al principio de las funciones.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

32

UTN FRC

Compiladores En C Para PICs Para Pics

Declaracin de constantes
Similar a las variables, las constantes deben ser declaradas antes de ser utilizadas en el
programa. En mikroC, no es obligatorio especificar el tipo de constante al declararla. Por otra
parte, las constantes deben ser inicializadas a la vez que se declaran. El compilador reconoce las
constantes por su prefijo const utilizado en la declaracin.
Las constantes de enumeracin son un tipo especial de constantes enteras que hace un
programa ms comprensible al asignar los nmeros ordinales a las constantes. Por defecto, el
valor 0 se asigna automticamente a la primera constante entre llaves, el valor 1 a la segunda, el
valor 2 a la tercera etc.

Definir los nuevos tipos de datos


La palabra clave typedef le permite crear con facilidad los nuevos tipos de datos.

mbito de variables y constantes


Una variable o una constante es reconocida por el compilador en base de su identificador.
Un identificador tiene significado si el compilador lo puede reconocer. El mbito de una variable o
una constante es el rango de programa en el que su identificador tiene significado. El mbito es
determinado por el lugar en el que se declara una variable o una constante. Intentar acceder a una
variable o una constante fuera de su mbito resulta en un error. Una variable o una constante es
invisible fuera de su mbito. Todas las variables y constantes que pensamos utilizar en un
programa deben ser declaradas anteriormente en el cdigo. Las variables y constantes pueden ser
globales o locales. Una variable global se declara en el cdigo fuente, fuera de todas las funciones,
mientras que una variable local se declara dentro del cuerpo de la funcin o dentro de un bloque
anidado en una funcin.
A las variables globales se les puede acceder de cualquiera parte en el cdigo, an dentro
de las funciones con tal de que sean declaradas. El mbito de una variable global est limitado por
el fin del archivo fuente en el que ha sido declarado.
El mbito de variables locales est limitado por el bloque encerrado entre llaves {} en el
que han sido declaradas.

Clases de almacenamiento
Las clases de almacenamiento se utilizan para definir el mbito y la vida de variables,
constantes y funciones dentro de un programa. En mikroC se pueden utilizar diferentes clases de
almacenamiento:
o

Auto: es una clase de almacenamiento por defecto para las variables locales,
as que se utiliza raramente. Se utiliza para definir que una variable local tiene
duracin local. La clase de almacenamiento auto no se puede utilizar con
variables globales.
Static: es una clase de almacenamiento por defecto para las variables globales.
Especifica que una variable es visible dentro del archivo. A las variables locales

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

33

UTN FRC

Compiladores En C Para PICs Para Pics


declaradas con el prefijo static se les puede acceder dentro del archivo fuente
(o sea se comportan como variables globales).
Extern: la palabra clave extern se utiliza cuando el programa est compuesto
por diferentes archivos fuente. Esto le permite utilizar una variable, una
constante o una funcin declarada en otro archivo. Por supuesto, para
compilar y enlazar este archivo correctamente, el mismo debe ser incluido en
su proyecto.

Operadores
Operadores aritmticos
Los operadores aritmticos se utilizan en las operaciones aritmticas y siempre devuelven
resultados numricos. Hay dos tipos de operadores, los unitarios y los binarios. A diferencia de las
operaciones unitarias que se realizan sobre un operando, las operaciones binarias se realizan
sobre dos operandos.

Operadores de asignacin

Operadores de incremento y decremento

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

34

UTN FRC

Compiladores En C Para PICs Para Pics

Operadores relacionales

Operadores lgicos

Operadores de manejo de bits

Conversin de tipo de datos


Si dos operandos de tipo diferente se utilizan en una operacin aritmtica, el tipo de
operando de la prioridad ms baja se convierte automticamente en el tipo de operando de la
prioridad ms alta. Los tipos de datos principales se colocan segn el siguiente orden jerrquico:
char<int<long<float/double
La autoconversin se realiza asimismo en las operaciones de asignacin. El resultado de la
expresin de la derecha del operador de la asignacin siempre se convierte en el tipo de la
variable de la izquierda del operador. Si el resultado es de tipo de la prioridad ms alta, se descarta
o se redondea para coincidir con el tipo de la variable. Al convertir un dato real en un entero,
siempre se descartan los nmeros que siguen al punto decimal.
Para realizar una conversin explcita, antes de escribir una expresin o una variable hay
que especificar el tipo de resultado de operacin entre parntesis.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

35

UTN FRC

Compiladores En C Para PICs Para Pics

Estructuras de control
Operador condicional if-else
El operador if se puede utilizar solo o asociado al operador else (if-else).
El operador if-else se puede sustituir por el operador condicional '?:'

Operador Switch
A diferencia de la sentencia if-else que selecciona entre dos opciones en el programa, el
operador switch permite elegir entre varias opciones.
La operacin switch se ejecuta de la siguiente manera: primero se ejecuta el selector y se
compara con la constante1. Si coinciden, las sentencias que pertenecen a ese bloque se ejecutan
hasta llegar a la palabra clave break o hasta el final de la operacin switch. Si no coinciden, el
selector se compara con la constante2. Si coinciden, las sentencias que pertenecen a ese bloque se
ejecutan hasta llegar a la palabra clave break etc. Si el selector no coincide con ninguna constante,
se ejecutarn las operaciones que siguen al operador default.

Bucles
Bucle While
Los comandos se ejecutan repetidamente (el programa se queda en el bucle) hasta que la
expresin llegue a ser falsa. Si la expresin es falsa en la entrada del bucle, entonces el bucle no se
ejecutar y el programa continuar desde el fin del bucle while.
Un tipo especial del bucle de programa es un bucle infinito. Se forma si la condicin sigue
sin cambios dentro del bucle. La ejecucin es simple en este caso ya que el resultado entre llaves
es siempre verdadero (1=verdadero), lo que significa que el programa se queda en el mismo bucle.

Bucle For
La ejecucin de esta secuencia de programa es similar al bucle while, salvo que en este
caso el proceso de especificar el valor inicial (inicializacin) se realice en la declaracin. La
expresin_ inicial especifica la variable inicial del bucle, que ms tarde se compara con la
expresin_ de_condicin antes de entrar al bucle. Las operaciones dentro del bucle se ejecutan
repetidamente y despus de cada iteracin el valor de la expresin_inicial se incrementa de
acuerdo con la regla cambiar_expresin. La iteracin contina hasta que la
expresin_de_condicin llegue a ser falsa.

Bucle Do-while
La expresin cambiar_condicin se ejecuta al final del bucle, que significa que operacin se
ejecuta como mnimo una vez sin reparar en que si la condicin es verdadera o falsa. Si el
resultado es distinto de 0 (verdadero), el procedimiento se repite.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

36

UTN FRC

Compiladores En C Para PICs Para Pics

Sentencias de salto
Sentencia Break
La sentencia break se puede utilizar dentro de cualquier bucle (while, for, do while) y en
las sentencias switch tambin. En stas la sentencia break se utiliza para salir de las sentencias
switch si la condicin case es verdadera.

Sentencia continue
La sentencia continue colocada dentro de un bucle se utiliza para saltar una iteracin. A
diferencia de la sentencia break, el programa se queda dentro del bucle y las iteraciones
continan.

Sentencia goto
La sentencia goto le permite hacer un salto absoluto al otro punto en el programa. Esta
caracterstica se debe utilizar con precaucin ya que su ejecucin puede causar un salto
incondicional sin hacer caso a todos los tipos de limitaciones de anidacin. El punto destino es
identificado por una etiqueta, utilizada como un argumento para la sentencia goto. Una etiqueta
consiste en un identificador vlido seguido por un colon (:).

Tipos de datos avanzados


Matrices
Una matriz es una lista de elementos del mismo tipo colocados en localidades de memoria
contiguas. Cada elemento es referenciado por un ndice. Para declarar una matriz, es necesario
especificar el tipo de sus elementos (denominado tipo de matriz), su nombre y el nmero de sus
elementos encerrados entre corchetes. Todos los elementos de una matriz tienen el mismo tipo.
Los elementos de una matriz se identifican por su posicin. En C, el ndice va desde 0 (el
primer elemento de una matriz) a N-1 (N es el nmero de elementos contenidos en una matriz). El
compilador tiene que saber cuntas localidades de memoria debe alojar al declarar una matriz.
El tamao de una matiz no puede ser una variable.

Matrices bidimensionales
Una matriz bidimensional se declara al especificar el tipo de dato de matriz, el nombre de
matriz y el tamao de cada dimensin.
En la declaracin de esta matriz nmero_de_filas y nmero_de_columnas representan el
nmero de filas y columnas en las que consiste una tabla, respectivamente.

Punteros
Un puntero es una variable destinada a recibir una direccin. Un puntero apunta a una
localidad de memoria, referenciada por una direccin. En C, la direccin de un objeto se puede
obtener por medio un operador unitario &. Para acceder al contenido de la memoria en una
direccin especfica (tambin llamado objeto apuntado), se utiliza un operador de indireccin (*).

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

37

UTN FRC

Compiladores En C Para PICs Para Pics

Estructuras
No obstante, al utilizar este mtodo todos los elementos deben ser del mismo tipo. Al
utilizar estructuras, es posible agrupar diferentes tipos de variables bajo el mismo nombre. Las
variables dentro de una estructura se le denominan los miembros de la estructura.

Funciones
Funcin principal
La funcin principal main() es una funcin particular puesto que es la que se ejecuta al
iniciar el programa. Adems, el programa termina una vez completada la ejecucin de esta
funcin. El compilador reconoce automticamente esta funcin y no es posible llamarla por otra
funcin.
Cada funcin debe ser declarada apropiadamente para poder interpretarla correctamente
durante el proceso de compilacin. La declaracin contiene los siguientes elementos:
o
o
o

Tipo de resultado (valor devuelto): tipo de dato del valor devuelto.


Nombre de funcin: es un identificador que hace posible llamar a una funcin.
Declaracin de parmetros se parece a la declaracin de variable regular (por
ejemplo: float x). Cada parmetro consiste en una variable, constante, puntero o
matriz, precedidos por la etiqueta de tipo de dato. Se utilizan para pasar la
informacin a la funcin al llamarla. Los parmetros diferentes estn delimitados
por comas.
Cuerpo de funcin: bloque de sentencias dentro de llaves.

Valor devuelto
Una funcin puede devolver un valor (esto no es obligatorio) por medio de la palabra clave
return. Al llegar a return, la funcin evala un valor (puede ser una expresin) y lo devuelve a la
lnea de programa desde la que fue llamada.

Declarar prototipos de funciones


Para avisar al compilador de la presencia de las funciones adicionales, se requiere declarar
los prototipos de funciones en el principio de programa antes de la funcin main(). Un prototipo
de funcin est compuesto por:
1.

tipo de resultado

2.

nombre de funcin

3.

tipos de parmetros

4.

un punto y coma (;)

El prototipo de la funcin main no necesita ser declarado.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

38

UTN FRC

Compiladores En C Para PICs Para Pics

Llamar una funcin


Mientras una funcin es definida y su prototipo declarado, se puede utilizar en culquier
parte de programa. Sin embargo, como la funcin main es 'raiz' del programa, no puede ser
llamada de ninguna parte de programa. Para ejecutar una funcin, es necesario escribir su nombre
y los parmetros asociados.

Caractersticas principales del preprocesador


El preprocesador es un programa que procesa el cdigo antes de que pase por el
compilador. Funciona bajo el control de las lneas de comando del preprocesador denominadas
directivas. Las directivas del preprocesador se colocan en el cdigo fuente, normalmente en el
principio del archivo. Antes de pasar por el compilador, el cdigo fuente se examina por el
preprocesador que detecta y ejecuta todas las directivas del preprocesador. Las directivas del
preprocesador siguen a una regla de la sintaxis especial, empiezan por un smbolo # y no
requieren ningn punto y coma al final (;).

Directivas del prepocesador

Las directivas del preprocesador se pueden dividir en tres categoras:


o
o
o

Definiciones de macro.
Inclusiones de archivos.
Control de compilacin.

Directivas del preprocesador para definir macros


Por medio de los macros es posible definir las constantes y ejecutar funciones bsicas. Una
sustitucin de macro es un proceso en el que un identificador del programa se sustituye por una
cadena predefinida. El preprocesador sustituye cada ocurrencia del identificador en el cdigo
fuente por una cadena. Despus de la sustitucin, el cdigo ser compilado normalmente.
Esto significa que el cdigo sustituido debe respetar la sintaxis del mikroC. La accin se
realiza por medio de la directiva '#define'.
Por medio de la directiva #undef es posible quitar una definicin de nombre de macro. As
se especifica que la substitucin que se ha definido anteriormente ya no va ocurrir en el siguiente
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

39

UTN FRC

Compiladores En C Para PICs Para Pics

cdigo. Esto es til cuando se quiere restringir la definicin slo a una parte particular del
programa.

Inclusion de archivos
La directiva de preprocesador #include copia un archivo especfico en el cdigo fuente. El
cdigo incluido debe observar la sintaxis de C para ser compilado correctamente.
Hay dos formas de escribir estas directivas. En el primer ejemplo, slo el nombre de
archivo se especifica, as que el preprocesador lo buscar dentro del archivo include. En el
segundo ejemplo, se especifica la ruta entera, as que el archivo estar directamente incluido (este
mtodo es ms rpido).
#include <nombre_de_archivo>
#include "C:\Ruta\nombre_de_archivo.h"

// Se especifica slo el nombre del archivo


// Se especifica la localidad
// exacta del archivo

Mikroc PRO para PIC


Acceso a los registros de funciones especiales (SFR)
Como todos los microcontroladores, los de familia PIC tienen los registros de funciones
especiales (SFR). Para programar un PIC, es necesario acceder a estos registros (para leerlos o
escribir en ellos). Al utilizar el compilador mikroC PRO for PIC es posible de acceder a cualquier SFR
del microcontrolador de cualquier parte del cdigo (los SFR se consideran como variables globales)
sin necesidad de declararlo anteriormente. Los registros de funciones especiales se definen en un
archivo externo e incluido dentro del compilador (archivo .def). Este archivo contiene todos los
SFR del microcontrolador PIC a programar.
TRISB = 0; // todos los pines del puerto PORTB se configuran como salidas
PORTB = 0; // todos los pines del PORTB se ponen a 0

Acceso a los bits individuales


El compilador mikroC PRO for PIC le permite acceder a los bits individuales de variables de
8 bits por su nombre o su posicin en byte.
INTCON.B0 = 0; // Poner a 0 el bit 0 del registro INTCON
ADCON0.F5 = 1; // Poner a 1 el bit 5 del registo ADCON0
INTCON.GIE = 0; // Poner a 0 el bit de interrupcin global (GIE)
Para acceder a un bit individual, se puede utilizar '.FX' as como '.BX' (X es un entero entre
0 y 7 que representa la posicin de bit).

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

40

UTN FRC

Compiladores En C Para PICs Para Pics

Tipo sbit
Si quiere declarar una variable que corresponde a un bit de un SFR, hay que utilizar el tipo
sbit. Una variable de tipo sbit se comporta como un puntero y se debe declarar como una variable
global:
sbit Botn_PARADA at PORTA.B7; // Botn_PARADA est definido
...
void main() {
PORTA.B7
...
Botn_PARADA

// Cualquier modificacin de Botn_PARADA afectar a


// Cualquier modificacin de PORTA.B7 afectar a

}
En este ejemplo, El Botn_PARADA es una variable declarada por el usuario, mientras que
PORTA.B7 (bit 7 del puerto PORTA) ser automticamente reconocido por el compilador.

Tipo bit
El compilador mikroC PRO for PIC proporciona un tipo de datos bit que se puede utilizar
para declarar variables. No se puede utilizar en las listas de argumentos, punteros y los valores
devueltos de funciones. Adems, no es posible declarar e inicializar una variable de tipo bit en la
misma lnea. El compilador determina el bit en uno de los registros disponibles para almacenar las
variables.
bit bf;

// Variable de tipo bit vlida

bit *ptr; // Varibale de tipo bit invlida.


// No hay punteros a una variable de tipo bit
bit bg = 0; // ERROR ; declaracin con inicializacin no est permitida
bit bg;
bg = 0;

// Declaracin e inicializacin vlidas

Insertar codigo asm en C


A veces el proceso de escribir un programa en C requiere las partes del cdigo escritas en
ensamblador. Esto permite ejecutar las partes complicadas del programa de una forma definida
con precisin en un perodo de tiempo exacto. Por ejemplo, cuando se necesita que los pulsos
muy cortos (de unos microsegundos) aparezcan peridicamente en un pin del microcontrolador.
En tales casos la solucin ms simple sera utilizar el cdigo ensamblador en la parte del programa
que controla la duracin de pulsos.
Una o ms instrucciones en ensamblador estn insertadas en el programa escrito en C,
utilizando el comando asm:
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

41

UTN FRC

Compiladores En C Para PICs Para Pics

asm
{
instrucciones en ensamblador
...
}
Los cdigos escritos en ensamblador pueden utilizar constantes y variables anteriormente
definidos en C. Por supuesto, como el programa entero est escrito en C, sus reglas se aplican al
declarar estas constantes y variables.

Funcin de interrupcin
Una interrupcin detiene la ejecucin normal de un programa para ejecutar las
operaciones especficas. Una lista de sentencias a ejecutar debe estar escrita dentro de una
funcin particular denominada interrupt(). La sintaxis de una interrupcin en mikroC se parece a lo
siguiente:
void interrupt() {
cnt++ ;

// Al producirse una interrupcin


// la cnt se incrementa en 1

PIR1.TMR1IF = 0; // Poner a 0 el bit TMR1IF


}
A diferencia de las funciones estndar, no es necesario declarar el prototipo de la funcin
interrupt(). Adems, como la ejecucin de esta funcin no forma parte de la ejecucin de
programa regular, no se debe llamar de ninguna parte de programa (se ejecutar
automticamente dependiendo de las condiciones que el usuario ha definido en el programa). En
el siguiente captulo vamos a dar una clara explicacin de la ejecucin y definicin de subrutinas
de interrupcin.

Libreras
Las funciones 'Delay_ms', 'LCD_out', 'LCD_cmd', etc; estn definidas en las libreras
contenidas en el compilador mikroC.
Una librera representa un cdigo compilado, anteriormente escrito en mikroC, que
contiene un conjunto de variables y funciones. Cada librera tiene un propsito especfico. Por
ejemplo, la librera LCD contiene funciones de visualizacin de la pantalla LCD, mientras que
C_math proporciona algunas funciones matemticas.
Antes de utilizar alguna de ellas en el programa, es necesario comunicrselo al compilador
al marcarlas en la lista de las libreras del compilador existentes. Si el compilador encuentra una

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

42

UTN FRC

Compiladores En C Para PICs Para Pics

funcin desconocida durante la ejecucin de programa, primero va a buscar su declaracin en las


libreras marcadas.
El compilador mikroC incluye tres tipos de libreras:

Libreras ANSI C estndar:

Libreras miscelneas:

Libreras para el hardware:

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

43

UTN FRC

Compiladores En C Para PICs Para Pics

Programar los PIC utilizando Mikroc PRO para PIC


Aparte de todas las caractersticas comunes de cualquier IDE, MikroC PRO para PIC
contiene las informaciones de arquitectura de los microcontroladores PIC (registros, mdulos de
memoria, funcionamiento de circuitos particulares etc.) para compilar y generar un archivo legible
por un microcontrolador PIC. Adems, incluye las herramientas especficas para programar los
microcontroladores PIC.
El proceso de crear y ejecutar un proyecto contiene los siguientes pasos:
o

Crear un proyecto (nombre de proyecto, configuracin de proyecto, dependencias entre


archivos)

Editar un programa

Compilar el programa y correccin de errores

Depurar (ejecutar el programa paso a paso para asegurarse de que se ejecutan las
operaciones deseadas).

Programar un microcontrolador (cargar el archivo .hex generado por el compilador en el


microcontrolador utilizando el programador PICflash).

Instalar MikroC PRO para PIC


Antes que nada, usted debe instalar el compilador (con su IDE) en la PC. La instalacin del
MikroC PRO para PIC es similar a la instalacin de cualquier programa en Windows. Todo el
procedimiento se lleva a cabo por medio de los wizards (asistentes de instalacin).

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

44

UTN FRC

Compiladores En C Para PICs Para Pics

Caractersticas principales

Manejar los proyectos


Antes de empezar a escribir el cdigo, se debe crear un proyecto. Un programa escrito en
el compilador MikroC PRO para PIC no es un archivo fuente autnomo, sino que forma parte de un
proyecto que incluye un cdigo hex, un cdigo ensamblador, cabecera y otros archivos. Algunos
de ellos se requieren para compilar el programa, mientras que otros se crean durante el proceso
de compilacin. Un archivo con extensin .mcppi le permite abrir cualquiera de estos proyectos.
Para crear un proyecto, basta con seleccionar la opcin Project/New Project, y un wizard
aparecer automticamente.

Proyect manager (administrador del proyecto)


Una vez creado el proyecto, es posible manejar todos los archivos que contiene al utilizar
la ventana Project Manager. Basta con pulsar con el botn derecho del ratn sobre una carpeta y
seleccionar la opcin que necesita para su proyecto.

Proyect settings (configuracin de proyectos)


Al compilar un proyecto, el compilador genera el archivo .hex que se cargar en el
microcontrolador. Estos archivos sern diferentes lo que depende del tipo del microcontrolador
as como del propsito de la compilacin. Por esta razn es necesario ajustar algunos parmetros
de proyectos utilizando la ventana Project Settings.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

45

UTN FRC

Compiladores En C Para PICs Para Pics

Device (dispositivo):
Al seleccionar el tipo de microcontrolador a utilizar permite al compilador extraer
el archivo de definicin (archivo .def) asociado. El archivo de definicin de un
microcontrolador contiene las informaciones especficas de sus registros SFR, de sus
direcciones de memoria y algunas variables de programacin especficas a ese tipo del
microcontrolador. Es obligatorio crear un archivo .hex compatible.
Oscillator (oscilador):
Se debe especificar la velocidad de operacin del microcontrolador. Por
supuesto, este valor depende del oscilador utilizado. El compilador la necesita para
compilar rutinas, lo que requiere informacin del tiempo (por ejemplo, la funcin
Delay_ms). Ms tarde, el programador necesitar esta informacin tambin. La
velocidad de operacin se configura de modo que permita al oscilador interno del
microcontrolador funcionar a una frecuencia seleccionada.
Build/Debugger Type:
Todo el proceso de compilar (building) est compuesto por anlisis
sintctico (parsing), compilar, enlazar (linking) y generar los archivos .hex. El tipo
de compilacin le permite ajustar el modo de compilacin. Dependiendo del modo
seleccionado, difieren los archivos generados a cargar en el microcontrolador.
Release:
Al elegir esta opcin, el compilador no puede afectar ms a la ejecucin de
programa despus de la compilacin. El programa a cargar en el microcontrolador
no ser modificado de ninguna manera.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

46

UTN FRC

Compiladores En C Para PICs Para Pics

ICD debug:
Al elegir esta opcin, una vez completado el proceso de la compilacin y
cargado el programa en la memoria del microcontrolador, el compilador se queda
conectado al microcontrolador por medio del cable USB y el programador, y
todava puede afectar a su funcionamiento. El archivo .hex generado contiene los
datos adicionales que permiten el funcionamiento del depurador. Una
herramienta denominada mikroICD (Depurador en circuito - In Circuit Debugger)
permite ejecutar el programa paso a paso y proporcionar un acceso al contenido
actual de todos los registros de un microcontrolador real.
El simulador no utiliza los dispositivos reales para simular el funcionamiento del
microcontrolador, as que algunas operaciones no pueden ser reproducidas (por ejemplo,
interrupcin). De todos modos, resulta ms rpido depurar un programa por medio de un
simulador. Adems, no se requiere ningn dispositivo destino.

Librera managing (editor de libreras)


El compilador tiene que conocer todas las dependencias de su archivo fuente en MikroC
para compilarlo apropiadamente. Por ejemplo, si las libreras forman parte de su proyecto, debe
especificar cules de ellas se utilizan.
Las libreras contienen un gran nmero de funciones listas para ser utilizadas. Las libreras
en MikroC proporcionan muchas facilidades para escribir programas para los microcontroladores
PIC. Al marcar una librera, se aade automticamente al proyecto y se enlaza durante el proceso
de la compilacin. As, no necesita incluir las libreras manualmente en sus archivos del cdigo
fuente por medio de la directiva del preprocesador #include.

Editar y compilar programas


Code editor (editor de cdigos)
El proceso de editar programas se debe realizar dentro de la ventana principal del IDE
denominada Code Editor. Al escribir el programa no se debe olvidar de los comentarios. Los
comentarios son muy importantes para depurar y mejorar el programa. Adems, aunque el
compilador no tenga las restricciones de formateo, siempre debe seguir a las mismas reglas de
editar.

Code explorer (explorador del cdigo)


La ventana Code Explorer le permite localizar funciones y procedimientos dentro de los
programas largos. Por ejemplo, si se busca una funcin utilizada en el programa, basta con pulsar
dos veces sobre su nombre en esta ventana, y el cursor estar automticamente posicionado en la
lnea apropiada en el programa.

Compilar y solucionar los errores


Para compilar el cdigo, se debe pulsar sobre la opcin Build en el men Project. En
realidad, el proyecto entero se ha compilado, y si la compilacin se ha realizado con xito, se
generarn los archivos de salida (asm, .hex etc.). Una compilacin se ha realizado con xito si no se
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

47

UTN FRC

Compiladores En C Para PICs Para Pics

ha encontrado ningn error. Durante el proceso de compilacin se generan muchos mensajes que
se visualizan en la ventana Messages. Estos mensajes consisten en informacin, advertencia y
errores. Cada error encontrado se asocia con su lnea de programa y su descripcin.
Como un error en el cdigo puede generar mucho ms errores, simplemente se debe
intentar solucionar el primer error en la lista y despus recompilar el programa. En otras palabras,
es recomendable solucionar los errores uno a uno.

Depurar el programa
La depuracin es un paso muy importante ya que permite probar el programa despus de
una compilacin realizada con xito, o solucionar los errores descubiertos mientras se ejecuta el
programa. Como ya hemos visto, hay dos modos de depurar: un depurador software que simula el
funcionamiento del microcontrolador (modo por defecto) y depurador hardware (mikroICD) que
lee directamente el contenido de la memoria del microcontrolador. El procedimiento de
depuracin es el mismo sin reparar en el modo elegido. En caso de elegir la opcin ICD debug, hay
que cargar el programa en el microcontrolador antes de depurarlo.
Para iniciar la depuracin, se debe pulsar sobre la opcin Start debugger del men Run. El
editor del cdigo ser ligeramente modificado automticamente y aparecer una ventana
denominada Watch Values. El principio de depuracin se basa en ejecutar el programa paso a paso
y monitorear el contenido de los registros y los valores de las variables. De este modo, es posible
comprobar el resultado de un clculo y ver si algo inesperado ha ocurrido. Al ejecutar el programa
paso a paso, se podr localizar los problemas con facilidad.

Comandos de depuracin
Hay varios comandos disponibles para depurar el cdigo:
o

Step Into: Ejecuta una sola instruccin. Cuando la instruccin es una llamada a una rutina,
el depurador har un salto a la rutina y se detendr despus de ejecutar la primera
instruccin dentro de la rutina.

Step Over: Se ejecuta una sola instruccin. Cuando la instruccin es una llamada a una
rutina, el depurador no har un salto a la rutina, sino que se ejecutar toda la rutina. El
depurador se detiene a la primera instruccin despus de la llamada a la rutina.

Run To Cursor: El programa se ejecuta hasta la lnea en la que se encuentre el cursor.

Step out: Se ejecutan las dems instrucciones dentro de la rutina. El depurador se detiene
inmediatamente al salir de la rutina.

Puntos de ruptura (breakpoints)


Los puntos de ruptura hacen el proceso de depurar los programas de una manera ms
eficiente, puesto que permiten ejecutar el programa a toda velocidad y detenerlo
automticamente en una lnea especfica (punto de ruptura). Eso resulta muy til, permitindole
comprobar slo las partes crticas del programa y no perder el tiempo probando todo el programa
lnea a lnea. Para aadir o quitar un punto de ruptura basta con pulsar sobre la lnea apropiada en
el lado izquierdo del editor del cdigo, o presionar [F5]. Una pequea ventana denominada
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

48

UTN FRC

Compiladores En C Para PICs Para Pics

Breakpoints muestra dnde estn los puntos de ruptura. Las lneas designadas como puntos de
ruptura estn marcadas en rojo.
La lnea que se est ejecutando actualmente est marcada en azul. Es posible leer el
contenido de registros y variables seleccionados en la ventana Watch Values en cualquier
momento. Para ejecutar la parte de programa desde la lnea en la que est el cursor hasta el punto
de ruptura, utilice el comando Run/Pause Debugger.

Ventana watch values


El depurador software y hardware tienen la misma funcin de monitorear el estado de los
registros durante la ejecucin del programa. La diferencia es que el depurador software simula
ejecucin de programa en una PC, mientras que el depurador ICD (depurador hardware) utiliza un
microcontrolador real. Cualquier cambio de estado lgico de los pines se indica en el registro
(puerto) apropiado. Como la ventana Watch Values permite monitorear el estado de todos los
registros, resulta fcil comprobar si un pin est a cero o a uno. La ltima modificacin est
marcada en rojo en la ventana Watch Values. Esto le permite localizar la modificacin en la lista de
variables y registros durante el proceso de la depuracin.

Stopwatch (cronometro)
Para saber cunto tiempo tarda un microcontrolador en ejecutar una parte del programa,
se debe seleccionar la opcin Run/View Stopwatch. El tiempo que tarda un comando (step into,
step over, run/pause etc.) en ejecutarse por el depurador se mide automticamente y se visualiza
en la ventana Stopwatch. Por ejemplo, se mide tiempo para ejecutar un programa, tiempo para
ejecutar el ltimo paso etc.

Programar el microcontrolador
Si se han solucionado todos los errores en el cdigo y el programa est listo para ser
utilizado, el siguiente paso es cargarlo en el microcontrolador. El programador PICflash se utiliza
para este propsito. Es una herramienta diseada para programar todos los tipos de
microcontroladores PIC. Est compuesto por dos partes:
o

La parte hardware se utiliza para introducir un cdigo hexadecimal (el programa a ser
cargado en el microcontrolador) y para programar el microcontrolador por medio de
niveles de voltaje especficos. Durante el proceso de la programacin, un nuevo programa
se escribe en la memoria flash del microcontrolador, mientras que el programa anterior se
borra automticamente.

La parte de software se encarga de enviar el programa (archivo .hex) a la parte hardware


del programador por medio de un cable USB. A la interfaz de usuario de este software se
le puede acceder desde IDE al pulsar sobre la opcin mE_Programmer del men Tools o al
pulsar [F11]. Por consiguiente, es posible modificar algunas configuraciones del
programador y controlar el funcionamiento de la parte hardware (Cargar, Escribir,
Verificar).

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

49

UTN FRC

Compiladores En C Para PICs Para Pics

Otras herramientas del compilador


El compilador MikroC PRO para PIC proporciona herramientas que en gran medida
simplifican el proceso de escribir el programa. Todas estas herramientas se encuentran en el men
Tools.

Terminal usart
El terminal USART representa una sustitucin para la estndar Windows Hyper Terminal.
Se puede utilizar para controlar el funcionamiento del microcontrolador que utiliza la
comunicacin USART. Tales microcontroladores estn incorporados en un dispositivo destino y
conectados al conector RS232 de la PC por medio de un cable serial.
La ventana USART terminal dispone de opciones para configurar la comunicacin serial y
visualizar los datos enviados/ recibidos.

Editor EEPROM
Al seleccionar la opcin EEPROM Editor del men Tools, aparecer una ventana como se
muestra en la siguiente figura. As es cmo funciona la memoria EEPROM del microcontrolador. Si
se quiere cambiar su contenido despus de cargar el programa en el microcontrolador, sta es la
forma correcta de hacerlo. El nuevo contenido es un dato de un tipo especfico (char, int o
double), primero se debe seleccionar, introducir el valor en el campo Edit Value y pulsar sobre
Edit. Luego, pulsar sobre el botn Save para guardarlo como un documento con extensin .hex. Si
la opcin Use EEPROM in Project est activa, los datos se cargarn automticamente en el
microcontrolador durante el proceso de la programacin.

Ventana ASCII CHART


Si necesita representar numricamente un carcter ASCII, se debe seleccionar la opcin
ASCII chart del men Tools. Aparecer una tabla. Cada tecla de teclado est asociada con un
cdigo (cdigo ASCII). Como se puede ver, los caracteres que representan los nmeros tienen
valores diferentes. Por esta razn, la instruccin de programa para visualizar el nmero 7 en un
LCD no visualizar este nmero, sino el equivalente a la instruccin BEL. Si enva el mismo nmero
en forma de un carcter a un LCD, obtendr el resultado esperado - nmero 7. Por consiguiente, si
quiere visualizar un nmero sin convertirlo en un carcter apropiado, es necesario aadir el
nmero 48 a cada dgito en el que consiste el nmero a visualizar.

Editor de siete segmentos


Un editor de siete segmentos le permite determinar con facilidad el nmero a poner en un
puerto de salida con el propsito de visualizar un smbolo deseado. Por supuesto, se da por
entendido que los pines del puerto deben estar conectados a los segmentos del visualizador de
manera apropiada. Basta con colocar el cursor en cualquier segmento del visualizador y pulsar
sobre l. Se visualizar inmediatamente el nmero a introducir en el programa.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

50

UTN FRC

Compiladores En C Para PICs Para Pics

CC5x
El cc5x est diseado para generar el cdigo de manera optimizada, es decir, que
automticamente compacta el cdigo al mnimo. Es posible escribir cdigo que se compila a una
sola instruccin con sintaxis de C. este compilador se encargara de traducir el cdigo en C a
lenguaje maquina generando un programa equivalente que el microcontrolador sea capaz de
interpretar.

Caractersticas CC5X
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o

Variables locales y globales de 8, 16, 24, y 32 bits, ms variables de bit.


Reutilizacin eficiente del espacio de variables locales
Genera cdigo apretado y optimizado
Produce archivos: binarios, ensamblador, list, COD, de error, de salida de funciones
variables
Actualiza automticamente los bits de seleccin de pagina
Actualiza automticamente los bis de seleccin del banco
Aumenta y compacta el soporte de operaciones con bits incluyendo funcione de
bits
Punto flotante y fijo de hasta 32 bits
Libreras de matemticas que incluyen sin(), log(), sqrt(), etc.
Soporta el estndar C para datos de constantes contrastantes y cadenas en
programa de memoria(const).
Almacenamiento automtico de datos de 2x8 bits comprimidos en cada cdigo de
palabra si es posible.
Permite modelos de punteros 8 y 16 bits, mezclados en la misma aplicacin
Punteros a RAM y/o ROM
El compilador puede escoger automticamente el tamao del apuntador
Llamada a nivel extendida utilizada GOTO en lugar de CALL
Inserta LINKS a subrutinas escondidas
Genera acceso a todas las instrucciones de ensamblador mediante sus
correspondientes declaraciones en C
Ensamblado entre lneas
Tablas
Soporte de interrupciones integrado
Configuracin del PIC en el cdigo fuente.

Al igual que otros compiladores del lenguaje C, para microcontroladores, no sigue con
exactitud la norma ANSI C. por ello, a continuacin se explican algunos elementos necesarios para
comprender correctamente la manera de realizar programas en l.
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

51

UTN FRC

Compiladores En C Para PICs Para Pics

Permite la asignacin de direcciones de las memorias pasiva (ROM) y activa (RAM), a los
punteros
Permite la utilizacin de instrucciones en lenguaje ensamblador dentro de los programas
escritor en lenguaje C
Permite la utilizacin de instrucciones de configuracin de los microcontroladores PIC
dentro de los programas escritos en lenguaje C

Otras caractersticas
Las bibliotecas son de espacio compacto y significativo, se puede guardar en comparacin
con el conjunto de bibliotecas de punto flotante de Microchip.
Actualizaciones gratuitas se pueden descargar en la misma pgina que contiene el
programa de instalacin inicial de su licencia.
Es multitarea: soporte utilizando mquinas de estado disponible. Muchos sistemas
altamente fiables y complejas se construyen utilizando mquinas de estado, por ejemplo, en las
telecomunicaciones. Un RTOS normal puede imponer retardos de respuesta impredecibles. Las
mquinas de estado son predecibles, rpidas y permite que el retardo mximo se calcule. Por lo
tanto, tratando con mquinas de estado y descubrir cmo usted puede utilizar microPIC que le
permitir realizar trabajos complejos de control, en tiempo real, es decir, sin retardos.
Cdigo compacto y eficiente uso de memoria RAM son las caractersticas sobresalientes
de CC5X. El compilador ha sido y sigue siendo lder en la generacin de cdigo compacto. Las
variables de hasta 32 bits es compatible, incluyendo variables de bit y funciones bits. CC5X es
adecuado para aplicaciones en tiempo real que requieren un fuerte control del cdigo
generado. El cdigo puede ser inspeccionado en el archivo de ensamblaje integral producido.
En comparacin con otros compiladores de C, los ahorros de cdigo son de 20 a 30%. Por
ejemplo, el programa ping.c encuentra en el sitio Internet de Microchip se redujo de 2.170 a 1.699
instrucciones al portarlo a CC5X. Eso es un ahorro de 471 instrucciones.
CC5X fue diseado para permitir el uso muy eficiente del cdigo y de la memoria RAM con
espacio limitado, con la facilidad de programacin C en lugar de montaje.
En cuanto a la escritura de aplicaciones de alto rendimiento, CC5X es una opcin muy
viable, ya que cuenta con compacidad similar o mejor que la asamblea. Desafortunadamente CC5X
no es hasta el nivel ANSI C, por lo que debe estar preparado para simplificar expresiones
complejas en las declaraciones que se pueden compilar a cdigo eficiente.

Los archivos generados:


o
o
o
o

Archivo Hex: para la programacin de chips


Archivo de Asamblea: para la inspeccin, o la entrada de montadores
Lista de archivos: para la inspeccin
Archivo DQO: para su uso por MPLAB, depuradores y simuladores

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

52

UTN FRC
o
o
o
o
o

Compiladores En C Para PICs Para Pics

Archivos de error: lista de advertencias y errores


Funcin esquema: para la inspeccin de la estructura llamada
Archivo de la Variable: para la inspeccin de direcciones variables
Archivo de salida del compilador: resumen de cdigo y el uso de memoria RAM
Archivo de salida del preprocesador: para la inspeccin de origen despus de pre
procesamiento

Instalacin de CC5X
Requisitos del sistema
El compilador CC5X utiliza 32 bits de procesamiento (aplicacin de consola) y se ejecuta en
mquinas compatibles con PC utilizando Microsoft Windows. El programa de instalacin se ejecuta
en Windows. Se necesita alrededor de 3-5 MB de espacio libre en disco para completar la
instalacin.

Instalacin
Se necesita un archivo de licencia para instalar una edicin del compilador. Este archivo se
debe almacenar preferiblemente en la misma carpeta que el programa de instalacin. De lo
contrario el archivo de licencia tiene que ser ubicado durante el proceso de instalacin.

CC5X est listo para compilar archivos de C despus de la instalacin. Archivos de


origen de encabezado y C tienen que ser creados y editados por las herramientas
separadas (no incluidas). Adems, los archivos CC5X se pueden eliminar sin ningn
procedimiento de desinstalacin.
Por otro lado, CC5X (ediciones Win32) admite nombres de archivo largos. Tambin
es posible utilizar espacios en los nombres de archivo e incluir los nombres de directorio.
La alternativa a los nombres largos es el formato corto truncado. La forma
truncada es decidida por el sistema de archivos. La mejor estimacin consiste en los 6
primeros caracteres del nombre largo, ms ~ 1. El ltimo nmero puede ser diferente (~ 2)
si los 6 primeros caracteres son iguales a otro nombre en el mismo directorio.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

53

UTN FRC

Compiladores En C Para PICs Para Pics

La tabla muestra las diferencias entre las ediciones del compilador. Los precios
estn expresados en euros.
Versin
EXTENDIDO
STANDARD
GRATIS
Licencia de usuario
450
250
individual
Licencia personal (Nota 3)
320
160
Licencia adicional (Nota 2)
320
160
Asciende a un viejo
220
160
licencia CC5X
Perodo libre de
12 meses
12 meses
actualizacin completa
Actualizacin parcial extra
12 meses
12 meses
periodo (Nota 1)
Soporte
S
S
El tamao del cdigo
S
S
S
completo
Leanslice multitarea
S
Apoyo Linker (MPLINK)
S
S
S
PIC10 / 12/14/16
S
S
S
PIC17 / 18
Optimizacin completa
S
S
Limited
Enhanced ncleo 12 bits
S
S
Enhanced ncleo de 14
S
S
Limited
bits
8 variables enteras bits
S
S
S
16 variables enteras bits
S
S
S
24 variables enteras bits
S
S
32 variables enteras bits
S
S
De punto flotante de 16
S
S
bits
De punto flotante de 24
S
S
S
bits
Punto flotante de 32 bits
S
S
8 bits punto decimal fijo
S
S
16 bits punto decimal fijo
S
S
24 bits punto decimal fijo
S
S
32 bits punto decimal fijo
S
S
La arquitectura PIC es eficiente en comparacin con el enfoque carga / almacenamiento
utilizado por muchos otros microcontroladores y microprocesadores. Sin embargo, la actualizacin
poco a poco y la pgina representan un desafo para el programador al escribir cdigo de
aplicacin PIC. El compilador CC5X ofrece la actualizacin automtica de estos bits, mediante la
optimizacin avanzada para ahorrar espacio de cdigo en comparacin con simples
implementaciones del compilador.
Las variables locales son compatibles. El compilador CC5X realiza una compresin segura
mediante la comprobacin del alcance de las variables y la reutilizacin de las ubicaciones de RAM
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

54

UTN FRC

Compiladores En C Para PICs Para Pics

cuando sea posible. Por tanto, el espacio de memoria RAM limitada se utiliza de manera
eficiente. Soporte de interrupcin puede ser complicado. El compilador CC5X permite a cada
declaracin a ser escrito en cdigo C. El compilador CC5X puede ampliar el nivel de
llamadas restricciones mediante el uso de declaraciones GOTO cuando sea posible. Esta
caracterstica es casi necesario para los dispositivos de ncleo 12 bits que tienen slo 2 niveles de
llamada.
Todos los dispositivos de gama media (PIC10 / PIC12 / PIC14 / PIC16) son compatibles a
travs de archivos de cabecera. Las capacidades de montaje en lnea permite a las rutinas de
montaje existentes que se incluirn en nuevas aplicaciones C.

Programacin en C le ofrece las siguientes ventajas:


o
o
o
o
o

El cdigo fuente de normalizacin: C es un estndar de cdigo fuente.


El desarrollo de programas ms rpido: C es compacto y expresar la lgica de la
aplicacin ms claro que el montaje, con menos errores
Mejora de la legibilidad: C permite que se entienda mejor la aplicacin.
Documentacin ms sencilla: C permite menos cdigo fuente con una mejor
atencin a los detalles de la aplicacin
Mantenimiento simplificado: el compilador puede hacer gran parte de la
reanudacin, cuando la renovacin y ampliacin de la aplicacin. Cdigo Asamblea
puede requerir mucho ms trabajo.
Cdigo de porttiles: cdigo C puede ser portado a otros dispositivos con
modificaciones mnimas.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

55

UTN FRC

Compiladores En C Para PICs Para Pics


Ejemplo de un programa realizado en CC5X

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

56

UTN FRC

Compiladores En C Para PICs Para Pics

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

57

UTN FRC

Compiladores En C Para PICs Para Pics

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

58

UTN FRC

Compiladores En C Para PICs Para Pics

Small Device C Compiler (SDCC)


SDCC es un compilador Open Source distribuido bajo licencia GPL que compila cdigo en
lenguaje C para los siguientes Microcontroladores: Intel 8051, Maxim 80DS390, Zilog Z80,
Motorola 68HC08 y los PIC16 y PIC18 de Microchips.
SDCC fue escrito por Sandeep Dutta y puesto en libertad bajo una licencia
GPL licencia. Desde su lanzamiento inicial se han producido numerosas correcciones de errores y
mejoras. En diciembre de 1999, el cdigo fue trasladado a SourceForge donde todos los "usuarios
volvieron desarrolladores" puede acceder al mismo rbol fuente. SDCC se actualiza
constantemente con todos los usuarios y desarrolladores de entrada.
Qu se necesita antes de empezar la instalacin del SDCC? Una computadora, y un deseo
de calcular. El mtodo preferido de instalacin es compilar SDCC de la fuente usando GNU
gcc. Para Windows algunas distribuciones binarias precompilados estn disponibles para su
conveniencia.
Es un compilador multiplataforma, por lo que lo podemos instalar en Windows, Linux y
MAC. En este caso vamos a ver su instalacin y uso en Windows con los Microcontroladores PIC.

Instalacin del software necesario


La instalacin es como cualquier programa de Windows, se nos muestra un asistente
segn se muestra en la figura de abajo:

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

59

UTN FRC

Compiladores En C Para PICs Para Pics

Dejaremos todas las opciones que vienen por defecto e iremos pulsando en Next hasta
finalizar la instalacin.

Para comprobar si la instalacin se ha realizado correctamente abre una terminal (smbolo


del Sistema) y escribe:
sdccv
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

60

UTN FRC

Compiladores En C Para PICs Para Pics

Si todo ha ido bien te mostrar la versin del compilador instalado.


Adems deberemos instalar gputils que es una coleccin de herramientas de Microchips
para microcontroladores PIC. Incluye las siguientes aplicaciones: gpasm, gplink y gplib. Tambin es
Open Source y se distribuye bajo licencia GNU.
La forma que el usuario tiene de interactuar con el compilador SDCC es por medio de
comandos a travs del smbolo del sistema, por lo que necesitaremos tambin un editor de texto
para escribir el cdigo fuente de nuestros programas, podis utilizar cualquiera, incluso el bloc de
notas de Windows incluso se puede usar NotePad++.
Para ver cmo interactan estas herramientas entre s, mira el diagrama anterior.
Como veis en el diagrama, al final del proceso tendremos tres archivos, el .hex es el que
utilizaremos para cargarlo en el PIC por medio de un programador para PIC, el .cod es un fichero
que sirve para simular nuestro cdigo con un simulador para PIC de cdigo abierto llamado GPsim,
este software est disponible tanto para Linux como para Windows
Y el .cof nos sirve para simular los programas con Proteus
Pues bien, sabiendo ya los programas que necesitamos y teniendo el esquema de cmo
interactan entre ellos, vamos a ver un ejemplo completo y su posterior simulacin con proteus.
El ejemplo que vamos a ver es el clsico parpadeo de un led, para ello vamos a utilizar el
pic 16f877.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

61

UTN FRC

Compiladores En C Para PICs Para Pics

Comentario del cdigo fuente


#include <pic16f877.h>
El cdigo empieza como cualquier programa en C incluyendo los archivos de cabecera por
medio de la directiva #include, en nuestro ejemplo incluiremos el archivo pic16f877.h donde estn
definidos los identificadores de los registros del PIC seleccionado. Como veis est dentro de los
smbolos <>, esto es para indicarle al compilador que busque el archivo en el directorio definido
por defecto. En este caso este archivo est en: C:\Archivos de programa\SDCC\include\pic.
Es decir que los archivos de cabecera estn separados en dos carpetas diferentes: para los
micros pic14 que son los que empiezan por 16fXXX y para los pic16 que son todos los que
empiezan por 18fXXX, en este ltimo caso se encuentran en C:\Archivos de
programa\SDCC\include\pic16. Es interesante, por no decir imprescindible editar estos archivos
para ver su contenido y saber el nombre de los identificadores que corresponde con cada registro
del PIC, para poder llamarlos en nuestros programas y poder operar con ellos. Otro documento
que conviene tener a mano es el datasheet del pic.
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_ON
&_LVP_ON
& _CPD_OFF & _WRT_ENABLE_ON & _DEBUG_OFF &
_CP_OFF;
Palabra de configuracin del PIC, en ella configuramos datos como el tipo de cristal
utilizado, activacin o no del perro guardin (WDT), etc. Por si alguien no lo sabe, esto se puede
hacer en el propio cdigo fuente, como es el caso, hacerlo por medio del software del
programador del PIC que utilicemos para cargar el archivo .hex a nuestro Pic.
void delay_ms(long ms)
Esta es una simple funcin para producir un retardo, no es muy precisa pero nos basta
para obtener el efecto de parpadeo del led.
void main()
Como cualquier programa en C, la funcin main es la funcin principal del programa y
contiene las siguientes instrucciones:
o

o
o
o
o

TRISB1 = 0; con esta instruccin defino el PIN RB1 del pic como salida los dems quedan
como entradas que es el valor que tienen por defecto. El nombre del identificador TRISB1
est definido en el archivo de cabecera, por eso es importante editarlo para saberlo.
RB1=0; con esta instruccin pongo a 0 el registro RB1 del pic. El identificador RB1 tambin
est definido en el archivo de cabecera pic16f877.h
delay_ms (250); llamo a la funcin de retardo y le paso como parmetro el valor de 250.
RB1=1; pongo a 1 la patilla RB1 del pic.
delay_ms (250); vuelvo a llamar a la funcin de retardo, para crear el efecto de parpadeo.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

62

UTN FRC

Compiladores En C Para PICs Para Pics

Una vez escrito el cdigo fuente de nuestro programa lo guardamos en la carpeta que
queramos con extensin .c.

Compilacin del programa


Ahora llega el momento de compilar, para ello abrimos una terminal y nos vamos al
directorio donde hemos guardado nuestro cdigo fuente. Una vez hecho esto ejecutamos las
siguientes instrucciones en la terminal:
Primero esta: sdcc -mpic14 -p16f877 --debug -I -c parpadeo_Led.c

Y despus esta otra: sdcc -mpic14 -p16f877 --debug -Wl-c -Wl-m -I -oparpadeo_Led.hex
parpadeo_Led.o

Este montn de opciones que puede parecer complicado en realidad es muy fcil de
utilizar. Para futuros ejemplos lo nico que tienes que cambiar es lo siguiente:
-mpic14 si el pic es de la familia 16fXXX. Lo cambias por mpic16 si el pic pertenece a la
familia18fXXX.
p16f877 lo cambias por el nombre del dispositivo que utilices.
parpadeo_Led.c, parpadeo_led.hex y parpadeo_Led.o sustituye el nombre de estos
archivos por el nombre que t quieras darle a tus programas.
Si el proceso de compilacin ha sido correcto, SDCC nos habr generado entre otros los
siguientes archivos:
parpadeo_led.hex, parpadeo_Led.cod y parpadeo_Led.cof
Como vamos a simular el ejemplo con Proteus de esos tres archivos solo nos interesa el
que termina con extensin .cof

Simulacin del programa


Para simular nuestro ejemplo compilado con SDCC en Proteus primero tenemos que
configurarlo:
En el men de Proteus seleccionamos Source y hacemos clic sobre Define Code
Generation Tools.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

63

UTN FRC

Compiladores En C Para PICs Para Pics

Y aadimos SDCC a la lista de compiladores, ahora aadimos nuestro cdigo fuente, para
ello vamos al men de Proteus y seleccionamos Source Add/Remove Source files
Y aadimos nuestro archivo parpadeo_Led.c
Por ltimo nos queda crear el esquema del circuito en Proteus y cargar en el Pic el archivo
parpadeo_Led.cof
Despus de esto guardamos el circuito de Proteus en la misma carpeta donde hemos
guardado el ejemplo.
Y ya solo nos queda ejecutar el circuito en modo run paso a paso, segn se muestra en la
figura de abajo:

Qu ventajas e inconvenientes tiene el uso de este compilador?


Bajo nuestro punto, la mayor ventaja es que se trata de un compilador Open Source, esto
no solo quiere decir que sea gratis, sino que dispones del cdigo fuente del compilador con lo que
puedes editarlo y modificarlo si quieres.
Otra ventaja que le veo es que es multiplataforma, funciona en Linux, Unix, Mac y
Windows por lo que no te obliga a utilizar un sistema operativo en concreto.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

64

UTN FRC

Compiladores En C Para PICs Para Pics

Tambin al ser un proyecto libre hay un montn de libreras y ejemplos tambin bajo la
misma licencia (GPL), por ejemplo el proyecto Pingino utiliza este compilador, si tu quisieras
podras hacer un proyecto derivado de l y nadie te llamar pirata por hacerlo.
El lenguaje C que utiliza SDCC cumple ms con el estndar ANSI C que otros compiladores
como CCS. Por ejemplo SDCC admite la recursin de funciones y CCS no.
La desventaja principal de este compilador con respecto a otros comerciales como CCS
mikroC es que es un producto en desarrollo, por lo que ser menos fiable que estos. Adems casi
todos los compiladores comerciales disponen de funciones precompiladas que hacen muy fcil la
utilizacin de los recursos del PIC, con SDCC muchas de estas libreras estn todava en desarrollo.
Con respecto al IDE aunque para Linux existe Piklab, para Windows no hay todava
ninguno que funcione bien, se sabe de un nuevo IDE pero est todava en una versin alpha por lo
que est bastante incompleto todava y con errores.
Como se dijo anterior mente Las plataformas compatibles son, Linux - x86, Microsoft
Windows - 86, Microsoft Windows - x86_64 y Mac OS X son las primarias, los llamados
plataformas "apoyo oficial".
SDCC compila de forma nativa en Linux y Mac OS X utilizando gcc. De Windows liberacin
y captura compilaciones son hechas por compilacin cruzada para mingw32 en un host Linux.
Windows 9x / NT / 2000 / XP / Vista / 7/8 usuarios les recomienda utilizar Cygwin(IDE) o
pueden probar el no soportado Microsoft Visual C ++ crear scripts.
Para el SDCC de fondo utiliza un esquema de asignacin de registro mundial que debe ser
adecuado para otro 8 bits MCU. El optimizador mirilla utiliza un mecanismo de sustitucin basado
en normas, que es independiente MCU tipos de datos soportados son:
type
bool
char
short
int
long
float

pointer

width
1 bit
8 bits, 1 byte
16 bits, 2
bytes
16 bits, 2
bytes
32 bits, 4
bytes
4 bytes IEEE
754

default
unsigned
signed
signed

signed range
-128, +127
-32.768, +32.767

unsigned range
0, 1
0, +255
0, +65.535

signed

-32.768, +32.767

0, +65.535

signed

-2.147.483.648,
+2.147.483.647

0,
+4.294.967.295
1.175494351E38,
3.402823466E+38

1, 2, 3 or 4
bytes

generic

signed

El compilador tambin permite cdigo ensamblador en lnea para ser embebido en


cualquier lugar de una funcin. Adems, las rutinas desarrolladas en asamblea tambin se pueden
llamar. SDCC tambin proporciona una opcin (--cyclomatic) que informe a la complejidad relativa

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

65

UTN FRC

Compiladores En C Para PICs Para Pics

de una funcin. Estas funciones se pueden optimizarse an ms, o la mano codificados en


asamblea si es necesario. SDCC tambin viene con una fuente compaera depurador nivel
SDCDB. El depurador utiliza actualmente ucSim, un simulador de cdigo abierto libre para 8051 y
otros micro-controladores.
SDCC no es slo un compilador, sino una coleccin de herramientas por varios
desarrolladores. Estos incluyen enlazadores, ensambladores, simuladores y otros
componentes. He aqu un resumen de algunos de los componentes.
SDCC se distribuye con un depurador de nivel de fuente. El depurador utiliza una interfaz
de lnea de comandos, el repertorio de comandos del depurador se ha mantenido lo ms cercano
a gdb(el depurador GNU) como sea posible. La configuracin y el proceso de construccin es parte
de la instalacin del compilador estndar, que tambin construye e instala el depurador en el
directorio de destino especificado en la configuracin. El depurador permite depurar tanto en la
fuente de C y al nivel de fuente ASM.

Cmo funciona el depurador


Cuando se especifica la opcin --debug el compilador genera informacin de smbolos
adicional algunos de los cuales se ponen en la fuente ensamblador y algunos se ponen en el
archivo .adb. A continuacin, el enlazador crea el archivo .cdb de los archivos .adb individuales con
la informacin de direccin de los smbolos. El depurador lee la informacin simblica generada
por el compilador y la informacin de direccin generada por el enlazador. Utiliza el simulador
(S51 de Daniel) para ejecutar el programa, la ejecucin del programa es controlado por el
depurador. Cuando se emite una orden para el depurador, que se traduce en comandos
apropiados para el simulador. (Actualmente SDCDM slo se conecta al simulador pero newcdb en
http://ec2drv.sf.net/ es un esfuerzo para conectar directamente con el hardware.)
Todos los paquetes utilizados en este sistema compilador son de cdigo
abierto y gratuito; cdigo fuente de todos los sub-paquetes (pre-procesador, ensambladores,
enlazadores etc.) se distribuye con el paquete. . Esta documentacin se mantiene el uso de un
procesador de texto de cdigo abierto (LYX)
Este programa es software libre; puedes redistribuirlo y / o modificarlo bajo los trminos de la
Licencia Pblica General GNU segn lo publicado por la Fundacin para el Software Libre; ya sea la
versin 2, o (a su eleccin) cualquier versin posterior. Este programa se distribuye con la
esperanza de que sea til, pero SIN NINGUNA GARANTA; ni siquiera la garanta implcita de
COMERCIALIZACIN o IDONEIDAD PARA UN PROPSITO PARTICULAR.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

66

UTN FRC

Compiladores En C Para PICs Para Pics

Turbo C
Turbo C es un entorno de desarrollo integrado y compilador desarrollado por Borland para
programar en lenguaje C.
Un entorno de desarrollo integrado (en ingls: IDE), es una aplicacin informtica que
proporciona servicios integrales para facilitarle al desarrollador o programador el desarrollo de
software. Normalmente, un IDE consiste de un editor de cdigo fuente, herramientas de
construccin automticas y un depurador.
Un compilador es un programa informtico que traduce un programa escrito en
un lenguaje de programacin a otro lenguaje de programacin. Usualmente el segundo lenguaje
es lenguaje de mquina, pero tambin puede ser un cdigo intermedio o simplemente texto. Este
proceso de traduccin se conoce como compilacin.
Su primera versin es de 1987, a la que siguieron las versiones 1.5 y 2.0, de 1989. Fue el
compilador ms popular para desarrollar en C, se le considera el primero.
Turbo C tiene dos modos separados de operacin. El primero que querr usar ciertamente
como comienzo para programar, es su entorno integrado de desarrollo. En este entorno se puede
controlar la edicin, compilacin y ejecucin usando pocas pulsaciones y mens fciles de
utilizar. El otro modo de operacin utiliza el mtodo tradicional, segn el cual se usa primero un
editor para crear el archivo, y despus compilarlo, enlazarlo y ejecutarlo manualmente. Este modo
se llama mtodo de lnea de rdenes.
Algo importante de Turbo C es que solo tiene 43 palabras claves (32 definidas por el
estndar ANSI y 11 que aadi Borland para permitir usar mejor algunos aspectos especiales del
entorno PC).
El lenguaje C da al programador lo que el programador quiere: pocas restricciones, pocas
quejas, cdigo rpido y eficacia. El programador, utilizando este compilador, podr producir
programas tan eficaces como los codificados en ensamblador.
Turbo C es el compilador ms rpido disponible, este realiza manipulaciones especiales
llamadas optimizaciones al cdigo que genera. La optimizacin de cdigo est todava en el mundo
de la magia. Borland consigue algunas optimizaciones geniales.
Turbo C es similar a Turbo Pascal. Aunque algunos de sus nombres son iguales, las
sentencias y condiciones son virtualmente las mismas, pero las de Turbo C son ms flexibles,
eficaces y potentes.
Algo malo de Turbo C es la no comprobacin automtica de tipos de datos. Este
compilador sigue la regla: el programador es el rey: Turbo C har lo que le diga que haga incluso lo
que no puede funcionar, ejemplo: puede llamar a una funcin que tomara argumentos enteros
como argumentos en punto flotantes, provocando mal funcionamiento, pero no dar aviso
GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA
MOLLA;BENJAMN CUB

67

UTN FRC

Compiladores En C Para PICs Para Pics

TurboC es sensible al tamao. Esto significa que tratar a las letras maysculas como
caracteres separados. Por ejemplo los nombres de las variables contador, CONTADOR y Contador
representaran tres formas diferentes de la misma variable.
Todos los programas de Turbo C tienen una funcin main(), que marca el punto en el que
comienza la ejecucin del programa. Un programa debe declarar todas las variables antes de
usarlas

Modelos de memoria. Ventajas y desventajas.


Para que un programa acceda a la memoria fuera del segmento en que reside debe utilizar
una direccin de 32 bits. Sin embargo, s la memoria accedida est en el segmento del programa,
entonces ste slo necesita una direccin de 16 bits. De lo anterior, un programa puede necesitar
acceder a cdigo, datos o ambos en cada una de las formas anteriores. Otra compilacin es que el
direccionamiento de 32 bits es mucho ms lento que el de 16. As es deseable usar direccionamiento
de 16 bits cuando es posible. Aunque siempre se puede usar el de 32 bits, esto provoca la ejecucin
muy lenta y solo debera usarse como ltimo recurso.
Por otra parte, un programa puede necesitar acceder a cdigo, datos o ambas cosas en cada
una de estas formas. Otra complicacin es que el direccionamiento de 32 bits es mucho ms lento
que el direccionamiento de 16 bits. Por consiguiente es deseable utilizar, siempre que sea posible,
direccionamiento de 32 bits. Esto es, aunque es posible utilizar siempre direccionamiento de 32 bits,
se producen programas extremadamente lentos y se debe utilizar, slo, como ltimo recurso.
Como consecuencia, Turbo C define seis modelos diferentes de memoria de los cuales se
puede escoger para compilar segn l el programa.
Modelo

Descripcin

Pequeito (Tiny)

Todas las direcciones son de 16 bits de longitud. Y todo el


cdigo y los datos deben encajar en un segmento de 64K. Se puede
usar para producir archivos .COM.

Pequeo (Small)

Cdigo y datos tienen segmentos separados. Todas las


direcciones son de 16 bit de longitud bueno para la mayora de las
aplicaciones

Medio (Medium)

El cdigo puede usar segmentos mltiples y requiere


direcciones de 32 bits. Los datos tienen un segmento y usan
direcciones de 16 bits. Adecuado para programas largos que no
tienen muchos datos.

Compacto
(Compact)

Grande (Large)

Complemento del modelo medio: los datos pueden usar


segmentos mltiples. El cdigo tiene un segmento y usa direcciones
de 16 bits. Adecuado para programa de tamao medio con una
cantidad de datos.
Cdigo y datos pueden usar segmentos mltiples y
requieren direcciones de 32 bits. Ningn elemento puede exceder

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

68

UTN FRC

Compiladores En C Para PICs Para Pics


de 64K. Adecuado para aplicaciones grandes. Pero funcionar
lentamente.

Enorme (Huge)

Como el modelo grande, excepto que los elementos de


datos sencillos pueden superar los 64K, funciona el ms lento que
ninguno.

Generalmente el modelo pequeo por defecto del Turbo C es suficiente para la mayora de
las tareas de programacin.

El programa TCINST
Turbo C puede controlar muchas opciones que afectan a la forma de compilar y enlazar los
programas.
Turbo C incluye la opcin Tcinst, que se usa para establecer diversos atributos y
especificaciones por defecto del entorno integrado de Turbo C
Cuando comienza la ejecucin del programa, se ver un men que contiene los siguientes
elementos:
o
o
o
o
o

Compile: Seleccionar La Opcin Compile, Nos Permite Definir Un Archivo Primario Por
Defecto.
Project: En La Opcin Project Se Puede Definir Un Nombre De Proyecto. Tambin Permite
Establecer El Estado De Las Caractersticas Relacionadas Con El Proyecto Por Defecto.
Options: La Seleccin De Options Permite Establecer Los Diferentes Parmetros De
Entorno, Enlazador Y Compilador.
Debug: La Opcin Debug Permite Determinar Cmo Funciona El Depurador Incorporado.
Permite visualizar los mensajes de error de compilacin y enlace.
Optimizacin: es la bsqueda y el hecho de mejorar el rendimiento del programa a partir
de determinados cambios lgicos. Algunas optimizaciones que hacen el cdigo ms
pequeo tambin lo hacen ms lento, otras hacen el cdigo ms rpido pero ms grande.
Por lo tanto, Turbo C permite decidir que consideraciones, velocidad o tamao, es ms
importante a travs de la opcin optimize for. Por defecto es tamao.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

69

UTN FRC

Compiladores En C Para PICs Para Pics

Caractersticas tcnicas, ventajas y desventajas de C con Turbo C


Ventajas de C
o
o
o
o

El Lenguaje C es poderoso y flexible, con rdenes, operaciones y biblioteca que se pueden


utilizar para escribir la mayora de los programas que ocurren en la computadora.
C se utiliza por programadores profesionales para desarrollar software en los modernos
sistemas de computadora.
Se puede utilizar c para desarrollar sistemas operativos, compiladores, sistemas de tiempo real
y aplicaciones de comunicaciones.
Un programa C puede ser escrito para un tipo de computadora y trasladase a otra con pocas o
ninguna modificacin - propiedad conocida como portabilidad. El hecho de que C sea portable
es importante, ya que la mayora de los modernos computadores tienen un compilador c. Una
vez que se aprende c no tiene que aprenderse un nuevo lenguaje cuando se escriba un
programa para otro tipo de computadora. No es necesario rescribir un problema para
ejecutarse en otra computadora.

C se caracteriza por su velocidad de ejecucin. En los primeros das de la informtica los


problemas de tiempo de ejecucin se resolvan escribiendo todo o una parte de una aplicacin en
lenguaje ensamblador. Debido a que existen muchos programas escritos en c, se han creado
numerosas bibliotecas c para programadores profesionales que soportan gran variedad de
aplicaciones. Existen bibliotecas del lenguaje c que soportan aplicaciones de bases de datos,
grficos, edicin de texto, comunicaciones, etc.

Caractersticas tcnicas de C con Turbo C.


Hay numerosas caractersticas que diferencian a c de otros lenguajes y lo hacen eficiente y
potente a la vez.
o

o
o

Una nueva sintaxis para declarar funciones. Una declaracin de funcin puede aadir una
descripcin de los argumentos de la funcin. Esta informacin adicional sirve para que los
compiladores detecten ms fcilmente los errores causados por argumentos que no coinciden.
Procesador ms sofisticado.
Una nueva definicin de la biblioteca que acompaa a C. Entre otras funciones se incluyen:
acceso al sistema operativo (por ejemplo, lectura y escrituras de archivos), entrada y salida
con formato, asignacin dinmica de memoria, manejo de cadenas de caracteres.
Una coleccin de cabeceras estndar que proporciona acceso uniforme a las declaraciones de
funciones y tipos de datos.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

70

UTN FRC

Compiladores En C Para PICs Para Pics

Conclusin
Como se nombr anteriormente a la hora de elegir entre un compilador C u otro es
necesario tener en cuenta ciertos factores, como por ejemplo:
o
o
o
o
o
o
o

Compatibilidad de plataformas
Dispositivos para los que el compilador es capaz de generar cdigo.
Depuracin
Optimizacin del cdigo generado.
Biblioteca de funciones pre compiladas para ahorrar trabajo al programador.
Precio
Complejidad a la hora de utilizarlo

Comenzando por la compatibilidad, podemos divisar que, a excepcin de TurboC y CC5X,


los dems compiladores son muy verstiles a la hora de cambiar de plataformas, ya que los
mismos compiladores corren en Windows (Algunos todava no se encuentran adaptados a
actualizaciones recientes como es Windows 10), Linux y Mac OS, que son las principales
plataformas del mercado. TurboC y CC5X solo son compatibles con Windows.
El segundo punto a tener en cuenta trata sobre los dispositivos para los que el compilador
es capaz de generar cdigo. Es decir, en el momento que se quiere utilizar un compilador para
abastecer las diferentes gamas de PICs, cuales son los compiladores que tienen un abanico ms
amplio. Hay que destacar que los que producen un cdigo ms optimizado son MPLAB-C18 y
MPLAB-C32 ya que para eso los desarrolladores de los compiladores son los que fabrican los PIC,
gracias a esto los primeros en aprovechar los recursos Hardware son ellos, sin embargo bajo
nuestro punto de vista no son compiladores populares para el que empieza en la programacin de
estos dispositivos. Adems hay que tener un compilador para cada gama de Microcontroladores.
En consecuencia, destacaremos a los compiladores PiCC Hi-tech, TurboC, Cc5x, Ssdc y
Mikroc que son compiladores C que incluyen un soporte para un abanico de gamas ms amplio,
desarrollados para poder ser utilizados en ms de una.
El depurador es una herramienta que tienen todos los compiladores nombrados hasta el
momento, esta herramienta simula el programa creado y lo examina para encontrar errores y de
esta manera facilitar al programador el obtener un cdigo optimizado. En este caso, los siete
compiladores presentados se encuentran con un buen depurador.
Una de las caractersticas ms importantes, es la optimizacin del cdigo, ya que es el
mtodo que determina los valores de las variables que intervienen en el proceso para que el
resultado que le llegue al PIC sea el mejor posible.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

71

UTN FRC

Compiladores En C Para PICs Para Pics

Si bien los siete compiladores presentados se destacan por su optimizacin del cdigo,
MPLAB-C18 y MPLAB-C32 son lo que producen un cdigo ms optimizado ya que aprovechan de
la mejor manera los recursos Hardware.
Sin embargo el CC5X tambin se destaca entre estos siete, esto se debe a que en
comparacin con los otros compiladores de C, los ahorros de cdigo son de 20 % a 30 %;
generando as un cdigo compacto y optimizado lo que, adems, facilita el eficiente uso de
memoria RAM. Las libreras son todo el conjunto de funciones, macros y constantes que el
lenguaje tiene para que puedas escribir programas, facilitndole as al programador la escritura de
los mismos.
En este aspecto, todos los compiladores van a la par y tienen diversidad muy amplia, a
excepcin del SDCC ya que es un proyecto que sigue avanzando y muchas de estas libreras estn
todava en desarrollo. Sin embargo lo que no tiene se puede crear, ya que te permite crear nuevas
libreras.
Lo que nos lleva a tratar con la complejidad a la hora de utilizar cada compilador que, si
bien depende de la capacidad de cada uno para adaptarse a este lenguaje, las herramientas de
apoyo que te brinda cada compilador para facilitar este aprendizaje es un determinante para
tomar la decisin de cual utilizar. Esto se debe a que al ser ms demandados generan una oferta y
demanda, acompaado de compaas que buscan abastecer esa demanda, buscando la forma de
facilitarle el aprendizaje a quien se encuentra interesado en programar con un compilador C.
Teniendo en cuenta que los compiladores que se encuentran bajo una demanda mayor, son los
que pueden ser utilizados en un abanico ms amplio de gamas de microcontroladores, los
compiladores destacados, en este aspecto, son TurboC y MikroC.
Por ltimo, las ltimas caractersticas para tener en cuenta a la hora de elegir que
compilador C va a ser mejor para uno a la hora de involucrarse en la programacin de
microprocesadores PIC, son el precio y el fin que se le va a dar.
Si el objetivo de adquirir un compilador C es para un uso ms avanzado, teniendo en
cuenta que uno ya est involucrado en el tema y tiene el conocimiento para hacerlo, recurrir a un
compilador pago ser la mejor opcin, lo que nos lleva a la conclusin de que el Compilador CC5X
ser la mejor opcin a elegir por el soporte para un abanico de gamas amplio y por la relacin
calidad-precio del mismo.
Por otro lado, si uno busca empezar a involucrarse con uso de un compilador c para
emplearlo en microprocesadores PIC, que brinde las herramientas que le facilite el aprendizaje de
este lenguaje y que a la vez cumpla con el soporte para un abanico de gamas amplio. Teniendo en
cuenta que el precio de este compilador si ser un determinante, nos lleva a la conclusin de que
la mejor opcin ser TurboC ya que es una versin gratuita y es un compilador que se destaca en
los dems aspectos.

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

72

UTN FRC

Compiladores En C Para PICs Para Pics

Referencias

Compiladores : Principios, tcnicas y herramientas - Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey
D. - Addison Wesley Iberoamericana
Compiladores: Conceptos Fundamentales - Teufel, Bernad ; Schmidt, Stephanie.; Teufel,
Thomas - Addison-Wesley Iberoamericana
Curso de programacin con Turbo C++ - Joyanes Aguilar, Luis Editorial McGraw-Hill
Programacin en Turbo C Herbert Schildt Editorial Borland
http://www.academia.edu/9409091/Qu%C3%A9_es_MPLAB_C18_C
http://www.aquihayapuntes.com/curso-pic32.html?start=1
http://www.microchip.com/forums/f3.aspx
http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/tutorial-mplab-c18desde-0/
http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=SW006011#dtDoc
umentation
http://www.microchip.com/pagehandler/en_us/devtools/mplabxc/
http://www.todopic.com.ar/foros/index.php?topic=30016.0;wap2
http://tecbolivia.com/index.php/articulos-y-tutoriales-microcontroladores/59-tutorial-de-pic32
http://www.microchip.com/pagehandler/en-us/devtools/devtoolsmain/home.html
http://www.farnell.com/
http://www.mikroe.com/chapters/view/80/capitulo-2-programacion-de-losmicrocontroladores/
http://es.wikipedia.org/wiki/Turbo_C/
http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/manual-de-hi-techpic16/
http://es.wikipedia.org/wiki/Compilador/
http://www.zator.com/compiladoresC.htm
http://es.wikipedia.org/wiki/Ambiente_de_desarrollo_integrado/
http://www.bknd.com/cc5x/
http://www.iqrf.org/weben/downloads.php?id=88
http://www.ele.uva.es/~jesman/BigSeti/ftp/Cajon_Desastre/Instalacion/SETI_2/Compilador%20
CC5X%20C/
http://sdcc.sourceforge.net/
http://www.aquihayapuntes.com/sdcc-small-devicec-compiler-en-windows.html
http://www.cpcmania.com/Docs/Programming/Intr
oduccion_a_la_programacion_en_SDCC_Compiland
o_y_probando_un_Hola_mundo.htm

GABRIEL GONZALEZ;GIANLUCA SALAMIDA;FLORENCIA


MOLLA;BENJAMN CUB

73

Você também pode gostar