You are on page 1of 20

MANUAL DE USUARIO

DEL COMPILADOR PCW DE CCS

Escrito por Andrs Cnovas Lpez


Reeditado para formato PDF por Vctor Dorado
Arreglado por Evelio Granizo

NDICE
1.INTRODUCCIN...............................................................................................................

2.PROGRAMAS DE UTILIDAD ............................................................................................ 3


3.OPERADORES Y EXPRESIONES ..................................................................................... 10
4. DEFINICIN DE DATOS ............................................................................................... 14
5. SENTENCIAS DE CONTROL ............................................................................................ 16
6. DEFINICIN DE FUNCIN ............................................................................................ 17
7. FUNCIONES: PARMETROS POR VALOR Y POR REFERENCIA ............................ 18
8. EDICIN DE UN PROGRAMA EN C .............................................................................. 18
9. PROTOTIPO DE UNA FUNCIN .............................................................................. 18
10. ESTRUCTURA DE UN PROGRAMA EN C ................................................................... 19

1. INTRODUCCIN
Si se quiere realizar la programacin de los microcontroladores PIC en un lenguaje como
el C, es preciso utilizar un compilador de C.
Dicho compilador genera archivos en formato Intel-hexadedimal, que es el necesario para
programar (utilizando un programador de PIC) un microcontrolador de 6, 8, 18 40
patillas.
El compilador de C que se va a utilizar es el PCW de la casa CCS Inc. A su vez, el
compilador tiene un entorno de desarrollo integrado (IDE) que va a permitir desarrollar
todas y cada una de las fases que se compone un proyecto, desde la edicin hasta la
compilacin pasando por la depuracin de errores. La ltima fase, a excepcin de la
depuracin y retoques de hardware finales, ser programar el PIC.
Al igual que el compilador de Turbo C, ste "traduce" el cdigo C del archivo fuente (.C) a
lenguaje mquina para los microcontroladores PIC, generando as un archivo en formato
hexadecimal (.HEX). Adems de ste, tambin genera otros seis archivos.
2. PROGRAMAS DE UTILIDAD
SIO
SIO (Serial Input Output) es un simple programa "terminal no inteligente" que puede
ejecutarse desde el DOS para realizar entradas y salidas sobre un puerto serie. SIO es til
ya que muestra todos los caracteres entrantes, excepto los no imprimibles.
PICCHIPS
PICCHIPS es un programa de utilidad que lee la base de datos de un dispositivo. El
compilador utiliza esta base de datos para determinar las caractersticas especficas del
dispositivo durante la compilacin. Al ejecutar el programa sin ningn parmetro, listar
todos los dispositivos (PIC) disponibles. Si e especifica un dispositivo como parmetro
p.ej. pic16c84, es decir, se escribe picchips pic16c84, se obtiene informacin detallada
sobre este dispositivo. A modo de ejemplo y para el citado PIC se obtiene la siguiente
informacin:
PIC16C84-------------------------------------------------------------- Opcode:
14 bits, ROM: 1024, RAM: 36, I/O: 13 H/W: EEPROM(64) POR TIM0 TRIS
RAM: 0C-2F
Ports: [A:01234---] [B:01234567] [C:--------] [D:--------] [E:--------]
Fuses: LP: 0003/0000 XT: 0003/0001
HS: 0003/0002 RC: 0003/0003
NOWDT: 0004/0000 WDT: 0004/0004
NOPUT: 0008/0000 PUT: 0008/0008
PROTECT: 3FF0/0000 NOPROTECT: 3FF0/3FF0
ID is at 2000
Par Device value: 0084
C Device value: 84, C-Scratch at: 0C
3

CHIPEDIT
ChipEdit es una utilidad de Windows (slo para PCW) que permite editar la base de datos
de un dispositivo. Con esta utilidad se puede agregar dispositivos, modificarlos o
eliminarlos de la base de datos. Para agregar un dispositivo, seleccionar de la lista otro
equivalente, de caracterticas similares, y pulsar el botn ADD. Para editar o borrar un
dispositivo, seleccionarlo y pulsar el botn EDIT o DELETE.
CONVERT
PConvert es una utilidad de Windows (PCW slo) que permite realizar conversiones de un
tipo de datos a otros tipos. Por ejemplo, de decimal en Punto Flotante a Hexadecimal de 4
byte. La utilidad abre una ventana pequea para realizar las conversiones y puede
permanecer activa durante una sesin con PCW o con MPLAB. Esto puede ser til durante
el proceso de depuracin de un programa.
COMPILADORES
Los compiladores PCB, PCM, PCH son independientes. PCB es opcodes de 12-bit, PCM
es opcodes de 14-bits y PCH es para microcontroladores PIC opcodes de 16-bit. Los tres
compiladores tienen muchas similitudes. Estos compiladores estn especficamente
diseados para satisfacer las necesidades nicas de los microcontroladores PIC. Esto
permite a los desarrolladores que diseen rpidamente aplicaciones de software de una
manera ms legible y de alto nivel.
Cuando se compara con un compilador C ms tradicional, PCB, PCM, y PCH tienen
algunas limitaciones. Como un ejemplo de las limitaciones, la recursin de funciones no
est permitida. Esto es debido al hecho de que el PIC no tiene pila para empujar las
variables en la misma, y tambin debido a la forma en que los compiladores optimizan el
cdigo. Los compiladores pueden implementar con eficacia: las construcciones normales
de C, las operaciones de entrada/salida, y operaciones de bits. Todos los tipos normales de
datos C son compatibles junto con punteros a los arrays constantes, decimal de punto fijo,
y los arrays de bits.
Compilador PCW CCS
El compilador PCW CCS es una buena opcin para elegirlo como compilador de C para
programar Microcontroladores PIC.
Algunas de las caractersticas de este compilador son:

Al compilar genera un cdigo mquina muy compacto y eficiente.


Se integra perfectamente con MPLAB y otros simuladores/emuladores como
PROTEUS para el proceso de depuracin.
Incluye una biblioteca muy completa de funciones precompiladas para el acceso al
hardware de los dispositivos (entrada/salida, temporizaciones, conversor A/D,
transmisin RS-232,bus I2C.,etc.)
4

Incorpora drivers para dispositivos externos, tales como pantallas LCD, teclados
numricos, memorias EEPROM, conversores A/D, relojes en tiempo real, etc.(los
drivers son pequeos programas que sirven de interfaz entre los dispositivos hardware
y nuestro programa).
Permite insertar partes de cdigo directamente en Ensamblador, manteniendo otras
partes del programa en C.

Las caractersticas del lenguaje C para este compilador se muestran a continuacin:


El lenguaje C estndar es independiente de cualquier plataforma, sin embargo, para la
programacin de microcontroladores es necesario disponer de determinados comandos que
se refieran a partes especficas de su hardware, como: el acceso a memoria,
temporizadores, etc. Por este motivo, adems de los comandos, funciones y datos del
lenguaje ANSI C, el compilador PCW incluye bibliotecas que incorporan determinados
comandos que no son estndar, sino especficos para la familia de microcontroladores PIC.
stos son bsicamente de dos tipos: directivas del preprocesador y funciones
precompiladas, las cuales son diferentes para cada Compilador C, a continuacin se
describen:
a. Directivas del preprocesador. El compilador PCW dispone de 7 tipos bsicos de
directivas:
1. Directivas derivadas del estndar de C, que permiten, entre otras funciones,
un control bsico del cdigo y del flujo en el proceso de compilacin:
#DEFINE
#ELIF
#ELSE
#ENDIF
#ERROR
#IF
#IFDEF
#IFNDEF
#INCLUDE
#LIST
#NOLIST
#PRAGMA
#UNDEF
2. Directivas asociadas a las bibliotecas precompiladas, que proporcionan al
compilador informacin relacionada con estas bibliotecas:
#USE DELAY
#USE FAST_IO
#USE FIXED_IO
#USE I2C
#USE RS232
#USE STANDARD_IO
5

3. Directivas relacionadas con la especificacin del dispositivo, por un lado,


para definir los mapas de memoria y el juego de instrucciones, y por otro, incluir
informacin necesaria para la programacin del dispositivo en los archivos de
salida de la compilacin:
#DEVICE
#ID
#FUSES
#TYPE
4. Directivas de cualificacin de funciones, para identificar caractersticas
especiales de una funcin:
#INLINE
#INT_DEFAULT
#INT_GLOBAL
#INT_xxxxx
#SEPARATE
5. Directivas de control del compilador, para definir opciones referidas a la
compilacin del cdigo del programa:
#CASE
#OPT
#ORG
#PRIORITY
6. Directivas de control de la memoria del microcontrolador, para gestionar y
reservar el uso de determinadas zonas de memoria para variables:
#ASM
#BIT
#BYTE
#ENDASM
#LOCATE
#RESERVE
#ROM
#ZERO_RAM
7. Identificadores predefinidos. Todas las directivas citadas hasta ahora, son
comandos destinados a ser interpretados por el compilador, no por el
microcontrolador. Dentro del trmino genrico de directiva se incluyen, adems
de estos comandos, unas variables que contienen informacin sobre el proceso
de compilacin. Estas variables son lo que se denominan identificadores
predefinidos del compilador:
__DATE__
__DEVICE__
__PCB__
6

__PCH__
__PCM__
NOTA: En un programa, las directivas se reconocen fcilmente porque
comienzan por el smbolo #, mientras que los identificadores empiezan y
acaban por doble subrayado (__).
b. Funciones precompiladas. Existen funciones en C incluidas en el compilador
PCW para manejar los diferentes recursos del microcontrolador, desde el bus I2C
hasta el conversor A/D. Tambin, se puede facilitar considerablemente la tarea de
programacin, construyendo por nosotros mismos aquellas funciones que son de
utilizacin ms frecuente, como leer la entrada de un teclado o imprimir un
determinado mensaje en una pantalla LCD conectada como salida. El compilador
PCW dispone de 16 tipos de funciones:
1. Funciones de I/O serie RS232
GETC()
GETCH()
GETCHAR()
GETS(char *string)
PUTC()
PUTCHAR()
PUTS(string)
PRINTF([function],)
KBHIT()
SET_UART_SPEED(baud)
2. Funciones de I/O con el BUS I2C
I2C_POLL()
I2C_READ()
I2C_START()
I2C_STOP()
I2C_WRITE(byte)
3. Funciones de I/O DISCRETA
INPUT(pin)
OUTPUT_BIT(pin, value)
OUTPUT_FLOAT(pin)
OUTPUT_HIGH(pin)
OUTPUT_LOW(pin)
PORT_B_PULLUPS(flag)
SET_TRIS_X(value)
4. Funciones de RETARDOS
DELAY_CYCLES(count)
DELAY_MS(time)
DELAY_US(time)
7

5. Funciones de CONTROL del PROCESADOR


DISABLE_INTERRUPTS(level)
ENABLE_INTERRUPTS(level)
EXT_INT_EDGE(edge)
READ_BANK(bank, offset)
RESTART_CAUSE()
SLEEP()
WRITE_BANK(bank,offs)
6. CONTADORES/TEMPORIZADORES
i=GET_RTCC()
GET_TIMER0()
GET_TIMER1()
GET_TIMER2()
RESTART_WDT()
SET_RTCC(value)
SET_TIMER0(value)
SET_TIMER1(value)
SET_TIMER2(value)
SETUP_COUNTERS(rtcc_st)
SETUP_TIMER_1(mode)
SETUP_TIMER_2(mode,per)
7. Funciones de I/O PSP PARALELA
PSP_INPUT_FULL()
PSP_OUTPUT_FULL()
PSP_OVERFLOW()
SETUP_PSP(mode)
8. Funciones de I/O SPI A DOS HILOS
SETUP_SPI(mode)
SPI_DATA_IS_IN()
SPI_READ()
SPI_WRITE(value)
9. Funciones para el LCD
LCD_LOAD(buffer_poin)
LCD_SYMBOL(symbol,b7)
SETUP_LCD(mode,presc)
10. Funciones del C ESTNDAR
ABS(x)
ACOS(x)
ASIN(x)
ATAN(x)
ATOI(char *ptr)
ATOL(char *ptr)
f=CEIL(x)
8

f=EXP(x)
f=FLOOR(x)
ISALNUM(char)
ISALPHA(char)
ISDIGIT(char)
ISLOWER(char)
ISSPACE(char)
ISUPPER(char)
ISXDIGIT(char)
LABS(l)
LOG(x)
LOG10(x)
MEMCPY(dest, source, n)
MEMSET(dest, value, n)
SQRT(x)
11. Funciones de Manejo de Cadenas
STRICMP(char*s1,char*s2)
STRNCMP(char*s1,char*)
STRxxxx(char*s1,char)
STRCPY(dest, SRC)
c=TOLOWER(char)
c=TOUPPER(char)
12. Voltaje de Referencia VREF
SETUP_VREF(mode)
13. Funciones de ENTRADA A/D
SETUP_ADC(mode)
SETUP_ADC_PORTS(value)
SET_ADC_CHA NNEL(chan)
i=READ_ADC()
14. Funciones CCP
SETUP_CCP1(mode)
SETUP_CCP2(mode)
SETUP_COMPARATOR(mode)
SET_PWM1_DUTY(value)
SET_PWM2_DUTY(value)
15. Funciones para la EEPROM interna
READ_CALIBRATION(n)
READ_EEPROM(address)
WRITE_EEPROM(address,value)
16. Funciones de MANIPULACIN DE BITS
BIT_CLEAR(var,bit)
9

BIT_SET(var,bit)
BIT_TEST(var,bit)
ROTATE_LEFT(addr,byte)
ROTATE_RIGHT(addr,byte)
SHIFT_LEFT(addr,byte,val)
SHIFT_RIGHT(addr,byte,val)
SWAP(byte)

3. OPERADORES Y EXPRESIONES

Operadores de asignacin
Una expresin de asignacin tradicional es de la forma:
expr1 = expr1 operador expr2
Por ejemplo:
i=i+5
Esta expresin se puede representar por otra forma ms corta:
expr1 operador = expr2
Siguiendo con el mismo ejemplo:
i += 5
Es en las expresiones complejas, y no en una tan simple como la del ejemplo, donde se
puede apreciar la conveniencia de usar esta notacin. La siguiente tabla resume los
operadores de asignacin compuesta y su significado.
Operador
+=
-=
*=
/=
%=
<< =
>> =
&=
|=
^^=
~=

Descripcin
Asignacin de suma
Asignacin de resta
Asignacin de multiplicacin
Asignacin de divisin
Asignacin de resto de divisin
Asignacin de desplazamiento a la izquierda
Asignacin de desplazamiento a la derecha
Asignacin de AND de bits
Asignacin de OR de bits
Asignacin de OR exclusivo de bits
Asignacin de negacin de bits

10

Operadores aritmticos
Los operadores aritmticos se usan para realizar operaciones matemticas. Se listan en
la siguiente tabla:
Operador
+
*
/
%

Descripcin
Suma (enteros o reales)
Resta (enteros o reales)
Multiplicacin (enteros o reales)
Divisin (enteros o reales)
Cambio de signo en enteros o reales
Mdulo; resto de una divisin entera

Ejemplo
resul = var1 + var2
resul = var1 - var2
resul = var1 * var2
resul = var1 / var2
-var1
rango = n [A1] % 256

Operadores relacionales
Su misin es comparar dos operandos y dar un resultado entero: 1 (verdadero); 0
(falso). La siguiente tabla ilustra estos operadores:
Operador
<
>
<=
>=
==
!=

Descripcin
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Igual a
Distinto de

Operadores lgicos
Al igual que los operadores relacionales, stos devuelven 1 (verdadero), 0 (falso) tras la
evaluacin de sus operandos. La tabla siguiente ilustra estos operadores.
Operador
!
&&
||

Descripcin
NO lgico
Y lgico
O lgico

Operadores de manejo de bits


Estos operadores permiten actuar sobre los operandos a nivel de bits y slo pueden ser
de tipo entero (incluyendo el tipo char). Son los que siguen:
11

Operador
~
&
^^
|

Descripcin
Negacin de bits (complemento a 1)
Y de bits (AND)
O exclusivo de bits (EXOR)
O de bits (OR)

Operadores de incremento y decremento


Aunque estos operadores forman parte del grupo de operadores de asignacin, se ha
preferido separarlos en aras a una mayor claridad. Su comportamiento se asemeja a las
instrucciones de incremento incf f,d del ensamblador del controlador PIC 16x84 o inc
variable del Intel 8051.
Operador Descripcin
++
Incremento
-Decremento

Operadores de desplazamiento de bits


Los operadores de desplazamiento otorgan al C capacidad de control a bajo nivel
similar al lenguaje ensamblador. Estos operadores utilizan dos operandos enteros (tipo
int): el primero es el elemento a desplazar y el segundo, el nmero de posiciones de
bits que se desplaza. Se resmen en la siguiente tabla:
Operador Descripcin
>>
Desplazamiento a la derecha
<<
Desplazamiento a la izquierda

Operadores de direccin (&) e indireccin (*)


Los operadores & y * se utilizan para trabajar con punteros. El lenguaje C est muy
influenciado por el uso de punteros. Un puntero es una variable que contiene la
direccin de una variable o de una funcin, es decir, es una variable que apunta a otra
variable. Los punteros permiten la manipulacin indirecta de datos y cdigos. Se
dispone de dos operadores; vase la siguiente tabla:
Operador Descripcin
&
De direccin
*
De indireccin
12

El operador de direccin &, da la direccin de memoria de su operando. El resultado


es un puntero al objeto, esto es, a un tipo de datos. Por ejemplo, si se quiere guardar
en el puntero p la direccin de memoria de la variable entera contador, se debes hacer
lo siguiente:
p = &contador;

/* p apunta a la direccin de contador */

El operador de indireccin *, da el valor o contenido de la variable cuya direccin est


apuntada por el puntero.
p = &contador;
a = *p;

/* p apunta a la direccin de contador */


/* guarda en a el contenido de la var apuntada por p */

Expresiones
Constantes
123
Decimal
0123
Octal
0x123 Hex
0b010010 Binario
'x'
Carcter
'\010'
Carcter octal
'\x'
Carcter especial; x puede ser: n,t,b,r,f, ',d,v?
"abcdef" Cadena (el carcter nulo se agrega al final)

Identificadores
ABCDE Hasta 32 caracteres (no puede empezar con nmeros)
ID[X] Un subndice
ID[X][X] Mltiples subndices
ID.ID Referencia a una estructura o una unin
ID-->ID Referencia a una estructura o una unin

13

Expresiones en orden descendente de precedencia


(expr)
!expr
(type)expr
expr*expr
expr+expr
expr<<expr
expr<expr
expr==expr
expr&expr
expr^expr
expr | expr
expr&& expr
expr || expr
!value ? expr: expr
value=expr
value*=expr
value>>=expr
value^=expr

~expr
*expr
expr/expr
expr-expr
expr>>expr
expr<=expr
expr!=expr

++expr
& value
expr%expr

expr++
sizeof(type)

expr>expr

expr>=expr

--expr

expr--

value+=expr
value-=expr
value/=expr value%=expr
value<<=expr value&=expr
value|=expr
expr,expr

4. DEFINICIN DE DATOS
1. Definiciones de Datos
typedef
static
auto

[calificador_tipo] [especificador_tipo] [identificador]


Variable esttica e inicializada a 0 (que se puede utilizarla
como global)
La variable existe mientras el procedimiento est activo
Es el valor por defecto, por eso no es necesario poner auto

2. Especificadores de tipo:
unsigned
unsigned int
int
char
long
long int
signed
signed int
signed long
float
short
short int

define un nmero de 8 bits sin signo


define un nmero de 8 bits sin signo
define un nmero de 8 bits sin signo
define un nmero de 8 bits sin signo
define un nmero de 16 bits sin signo
define un nmero de 16 bits sin signo
define un nmero de 8 bits con signo
define un nmero de 8 bits con signo
define un nmero de 16 bits con signo
define un nmero de 32 bits en punto flotante
define un bit
define un bit
14

identificador

Identificador de una definicin TYPE de tipo

enum
struct
unin

tipo enumerado, vase sintaxis a continuacin


estructura, vase sintaxis a continuacin
unin, vase sintaxis a continuacin

3. Declarador:
[const] [*]identificador [expr._constante][= valor_inicial]
4. Enumerador:
enum [identificador]{
[lista_identificadores[= expresin_constante]]
}
5. Estructura y unin:
struct [identificador] {
[calificador_tipo [[*]identificador
:expresin_constante [expresin_constante]]]
}
Unin. Idntica a la definicin de la estructura
Si TYPEDEF se pone delante de la definicin de un dato, entonces no se asigna espacio de
memoria al identificador; a menos que sea utilizado como un especificador de tipo en otras
definiciones de datos.
Si delante del identificador se pone CONST, entonces el identificador es tratado como
constante. Las constantes deben ser inicializadas y no pueden cambiar en tiempo de
ejecucin. No estn permitidos punteros a constantes.
SHORT es un tipo de dato especial utilizado para generar cdigo muy eficiente para las
operaciones de I/O. No se permiten los arrays de SHORT ni los punteros a SHORT.
Los siguientes ejemplos muestran la sintaxis para las definiciones de datos:
Ejemplos:
int a,b,c,d;
typedef int byte;
typedef short bit;
bit e,f;
byte g[3][2];
char *h;
15

enum boolean {false, true};


boolean j;
byte k = 5;
byte const SEMANAS = 52;
byte const FACTORES [4] = {8, 16, 64, 128};
struct registro_datos {
byte a [2];
byte b : 2;
/* 2 bits */
byte c : 3;
/* 3 bits */
int d;
};
Ejemplo:
struct lcd_pin_map {
boolean enable;
boolean rs;
boolean rw;
boolean unused;
int data : 4;
} lcd;
Si se pone expresin_constante despus de un identificador, determina el nmero de bits
que utilizar dicho identificador. Este nmero puede ser 1,2, ...8. Se pueden utilizar arrays
de dimensin mltiple poniendo los [] que se precisen. Tambin se puede anidar
estructuras y uniones.
Un identificador despus de struct puede usarse en otra struct y las {} no se pueden usar
para reutilizar la estructura de la misma forma otra vez.
Nota: Recordar que todo lo expresado entre [corchetes] es opcional, es decir, se puede
especificar o no, segn convenga. Si la expresin va entre {llaves} entonces indica
que debe aparecer una o ms veces y en ese caso separado por comas.
El identificador despus de enum es un tipo de datos tan grande como la mayor de las
constantes de la lista. Cada uno de los identificadores de la lista son creados como una
constante. Por defecto, el primer identificador se pone a cero y los siguientes se
incrementan en uno. Si se incluye "=expresin_constante" despus de un identificador ste
tendr el valor de la expresin_constante y los siguientes se incrementarn en uno.
Ejemplo:
enum ADC_SOURCE {an0, an1, an2, an3, bandgap, srefh, srefl, itemp, refa, refb};
5. SENTENCIAS DE CONTROL
Las sentencias de control para programar el microcontrolador PIC, son las mismas a las del
Lenguaje C estndar, que a continuacin se listan:
16

Sentencias repetitivas:
o Bucle while
o Bucle for
o Bucle do-while
Sentencias condicionales:
o Sentencia if
o Sentencia if-else
o Sentencia switch
Adicionalmente, se tienen a disposicin las siguientes sentencias, que tambin son las
mismas a las del Lenguaje C estndar:
Sentencias: goto, break, continue.
6. DEFINICIN DE FUNCIN
El formato de la definicin de una funcin es como sigue:
[calificador_tipo] identificador ([[especificador_tipo identificador]) {
[cuerpo de la funcin]
}
El calificador_tipo para una funcin puede ser: void o un especificador de tipo.
La definicin de una funcin puede ir precedida por una de las siguientes directivas del
preprocesador (calificadores de funcin), para identificar una caracterstica especial de la
funcin: #separate #inline #int_...
Cuando se utiliza una de las directivas mencionadas y la funcin tiene un prototipo
(declaracin anterior a la definicin de la funcin, y colocada al principio del archivo
fuente) hay que incluir la misma #directiva en el prototipo y en la definicin de la funcin.
Una caracterstica no muy corriente, se ha aadido al compilador para ayudar a evitar los
problemas creados por el hecho de que no pueden crearse punteros a constantes de
cadenas. Una funcin que tiene un parmetro de tipo char aceptar una constante de
cadena. El compilador generar un bucle que llama a la funcin una vez para cada carcter
de la cadena.
Ejemplo:
void lcd_putc(char *c ) {
// definicin de la funcin
...
}

/ * declaracin de la funcin * /

lcd_putc ("Mquina parada".); /* llamada a la funcin */


17

7. FUNCIONES: PARMETROS POR VALOR Y DIRECCIN O REFERENCIA


Paso de parmetros por valor. Solo transfiere valores a la funcin y no retorna ningn
valor al programa principal o funcin que le llama.
Paso de parmetros por direccin o referencia. Transfiere valores a la funcin y retorna
un valor al programa principal o funcin que le llama.
El compilador est limitado a trabajar con parmetros por referencia. Esto aumenta la
legibilidad del cdigo as como la eficacia de algunos procedimientos.
Los dos procedimientos siguientes hacen lo mismo pero slo el segundo opera con
parmetros por referencia:
1. Paso de parmetros por direccin
void funcion_a(int*x,int*y) {
if (*x!=5)
*y=*x+3;
}

/ * declaracin de la funcin * /

funcion_a(&a,&b);

/* llamada a la funcin */

2. Paso de parmetros por referencia


void funct_b(int&x,int&y) {
if(x!=5)
y=x+3;
}

/ * declaracin de la funcin * /

funcion_b(a,b);

/* llamada a la funcin */

8. PROTOTIPO DE UNA FUNCIN


El prototipo de una funcin corresponde a la declaracin de una funcin, indicando: el
nombre de la funcin, el tipo del valor de retorno, el nmero de parmetros y el tipo de
cada parmetro.
Los prototipos de las funciones anteriores serian:
void funcion_a(int*,int*);
void funct_b(int&,int&);
9. EDICIN DE UN PROGRAMA EN C
Para crear un programa hay que seguir los pasos siguientes:
18

1.
2.
3.
4.
5.

Especificaciones del programa (qu tiene que hacer)


Hacer flujograma
Escribir el cdigo fuente (conocer el lenguaje)
Compilar + Enlazar (Link)
Depurar errores, si los hay

10. ESTRUCTURA DE UN PROGRAMA EN C


De forma generalizada, la estructura de un programa en C tiene el siguiente aspecto:
declaraciones globales
prototipos de funciones
void main(void) {
variables locales;
bloque de sentencias;
llamadas a las funciones;
}
funcion_1() {
variables locales a funcion_1;
bloque de sentencias;
llamada a otra/s funciones;
}
funcion_n() {

}
EJEMPLO DE UN PROGRAMA EN LENGUAJE C
/* parpadeo.c Programa que hace parpadear un led en RB7 cada ms */
#include <16F877.H>

/* tipo de PIC */

#use delay( clock = 4000000 )


#byte puerto_b = 0x06

/* reloj de 4 MHz */
/* direccin del puerto B */

void main( void )


{
set_tris_b( 0x00 );
puerto_b = 0;

/* puerto B como salida */


/* apaga todos los led */

do{
delay_us( 1000 );
bit_set( puerto_b, 7 );

/* retardo de 1mseg. */
/* enciende el led RB7 */
19

delay_us( 1000 );
bit_clear( puerto_b, 7);
} while( TRUE );

/* espera 1 ms*/
/* apaga el led */
/* Repetir siempre */

20

You might also like