Vous êtes sur la page 1sur 0

M

MICROCONTROLADORES ICROCONTROLADORES
Y Y
L
LENGUAJE ENGUAJE
C
C
e
l
e
c
t
r
o
n
i
k
.
e
s
1
Fundamentos de Lenguaje C para PICs
Introduccin
* Directivas de preprocesado
- Indican al compilador cmo
debe generar el cdigo
mquina.
* Funciones
- Bloques funcionales del
programa.
- Siempre debe incluirse una
funcin llamada main().
* Sentencias
- Instrucciones que definen lo
que hace el programa y la
secuencia de ejecucin del
mismo.
* Comentarios
- Imprescindibles como
documentacin del cdigo
fuente.
En un programa en C se pueden diferenciar varios elementos.
/ * FORMATO TI PO DE FI CHERO C*/
#i ncl ude <st di o. h> / / Di r ect i va
/ * Suma dos ent er os */
i nt suma (i nt a, b)
{
r et ur n ( a+b) ; / / Devuel ve suma
}
/ * Funci n pr i nci pal */
mai n( )
{
i nt dat o1, dat o2; / / Decl ar aci n
i nt r es; / / Decl ar aci n
dat o1=5; / / Asi gnaci n
dat o2=3; / / Asi gnaci n
r es=suma( dat o1, dat o2) ;
}
Fundamentos de Lenguaje C para PICs
Variables
Una variable es un nombre asignado a una o varias posiciones de
memoria RAM.
En C es necesario declarar todas las variables antes de poder
utilizarlas, indicando el nombre asignado y el tipo de datos que en ella
se van a almacenar (opcionalmente tambin el valor inicial asignado).
tipo nombre_variable [=valor]; p.e.: int i;
Las variables pueden ser locales o globales.
Las variables locales slo pueden ser usadas en la funcin en que se
declaran, mientras que las variables globales son compartidas por
todas las funciones del programa (deben declararse fuera de
cualquier funcin y antes de ser utilizadas).
Los tipos de datos aceptados en C estndar son cinco:
char (carcter) int (entero)
float (coma flotante en 32 bits) double (coma flotante en 64 bits)
void (sin valor)
e
l
e
c
t
r
o
n
i
k
.
e
s
2
Fundamentos de Lenguaje C para PICs
Especificacin Significado Tamao Rango
char carcter 8 bits 0 a 255 (sin signo)
int entero 8 bits 0 a 255 (sin signo)
float coma flotante 32 bits
double float doble precisin no soportado No para PCM
void sin valor nulo ninguno
int1 entero de 1 bit 1 bit 0 a 1
int8 entero de 8 bits 8 bits 0 a 255 (sin signo)
int16 entero de 16 bits 16 bits 0 a 65535 (sin signo)
int32 entero de 32 bits 32 bits 0 a (2
32
-1)
short entero de 1 bit 1 bit 0 a 1
long entero de 16 bits 16 bits 0 a 65535 (sin signo)
6 bits de precisin
El compilador de CCS acepta los siguiente tipos de variable.
Los tipos de variable short y long pueden tener detrs la palabra int
sin efecto alguno.
Fundamentos de Lenguaje C para PICs
Especificacin Significado Tamao Rango
signed char carcter con signo 8 bits -128 a 127
signed int entero con signo 8 bits -128 a 127
signed long coma flotante 16 bits -32768 a 32767
Todos los tipos de datos son por defecto sin signo (unsigned) salvo
los de tipo float.
Para almacenar datos con signo, hay que introducir el modificador
signed delante del tipo. El efecto que se consigue es el recogido en la
siguiente tabla.
Los nmeros negativos se codifican en complemento a 2.
Cuando se opera con distintos grupos de datos en una misma
expresin, se aplican una serie de reglas para resolver las
diferencias.
En general se produce una promocin hacia los tipos de datos de
mayor longitud presentes en la expresin.
e
l
e
c
t
r
o
n
i
k
.
e
s
3
Fundamentos de Lenguaje C para PICs
Funciones
Las funciones son los bloques constructivos fundamentales en C.
Todas las sentencias deben encontrarse dentro de funciones.
Las funciones deben ser definidas antes de ser utilizadas.
tipo_dato nombre_func (tipo param1 , tipo param2 , )
{
cuerpo de la funcin (sentencias);
}
Las funciones pueden devolver un valor a la sentencia que las llama.
El tipo de dato devuelto se indica mediante tipo_dato. Si no se
indica nada, se entiende que devuelve un entero. Si no devuelve nada,
debe incluirse una especificacin tipo void.
Formato general de definicin de una funcin
Fundamentos de Lenguaje C para PICs
La manera que tiene una funcin para devolver un valor es mediante
la sentencia return.
La expresin debe proporcionar el mismo tipo de dato que el
especificado en la funcin. Si no debe devolver nada, se finaliza con
Adems de con las sentencia return, las funciones terminan su
ejecucin y vuelven al lugar desde donde se les llam cuando alcanzan
la llave de cierre de funcin } tras ejecutar la ltima sentencia de la
misma.
Cuando una funcin se encuentra con una sentencia return se vuelve
a la rutina de llamada inmediatamente y las sentencias posteriores a
return no se ejecutan.
return (expresin); return expresin;
return;
e
l
e
c
t
r
o
n
i
k
.
e
s
4
Fundamentos de Lenguaje C para PICs
Adems de devolver valores, una funcin tambin puede recibir
parmetros (denominados argumentos) segn se indic en su definicin.
Por ejemplo: int suma (int a , int b)
{
return (a+b);
}
main()
{
int c;
c = suma (10 , 23);
}
Los argumentos se pueden pasar a las funciones por valor o por
referencia.
La llamada por valor copia el argumento de llamada en el parmetro
formal de la funcin.
La llamada por referencia usa la direccin de la variable que se pasa
a la funcin.
Fundamentos de Lenguaje C para PICs
Operadores
El lenguaje C define numerosos operadores mediante los cuales se
construyen las expresiones (combinacin de operadores y operandos).
Operadores aritmticos
+ - * / % (resto de divisin de enteros)
Operadores incremento y decremento
x++ ++x x-- --x
Operadores relacionales
> >= < <= == !=
Operadores lgicos
&& || !
Operadores a nivel de bits
& | ^ ~ >> <<
a&b a|b a^b ~a a >> n a << n
En lenguaje C profesional es muy frecuentes usar abreviaturas.
As, por ejemplo, es ms habitual ver a += b; que a = a + b;
e
l
e
c
t
r
o
n
i
k
.
e
s
5
Fundamentos de Lenguaje C para PICs
Sentencias de control de programa
Sentencia if.
Se ejecuta una sentencia o bloque de cdigo si la expresin que
acompaa al if tiene un valor distinto a cero (verdadero). Si es cero
(falso) contina sin ejecutar la sentencia o bloque de sentencias.
if (expresin) if (expresin)
sentencia; {
sentencia 1;
sentencia 2;
...
}
Sentencia if-else.
Se evala una expresin y, si es cierta, se ejecuta el primer bloque
de cdigo (o sentencia 1). Si es falsa, se ejecuta el segundo.
if (expresin)
sentencia 1;
else
sentencia 2;
(expresin) ? (sentencia 1) : (sentencia 2);
Fundamentos de Lenguaje C para PICs
Sentencia switch.
Substituye a if-else cuando se realiza una seleccin mltiple que
compara una expresin con una lista de constantes enteras o
caracteres. Cuando se da una coincidencia, el cuerpo de sentencias
asociadas a esa constante se ejecuta hasta que aparezca break.
switch (expresin)
{
case constante 1:
grupo 1 de sentencias;
break;
case constante 2:
grupo 2 de sentencias;
break;
...
default:
grupo n de sentencias;
}
break es opcional. Si
no aparece se sigue
con el case siguiente.
default es opcional y
el bloque asociado se
ejecuta slo si no hay
ninguna coincidencia
con las constantes
especificadas.
e
l
e
c
t
r
o
n
i
k
.
e
s
6
Fundamentos de Lenguaje C para PICs
Sentencia de bucle for.
Se emplea para repetir una sentencia o bloque de sentencias.
for (inicializacin ; condicin ; incremento)
{
sentencia(s);
}
En la inicializacin se le asigna un valor inicial a una variable que se
emplea para el control de la repeticin del bucle.
La condicin se evala antes de ejecutar la sentencia. Si es cierta,
se ejecuta el bucle. Si no, se sale del mismo.
El incremento establece cmo cambia la variable de control cada
vez que se repite el bucle.
Es posible anidar bucles for para modificar dos o ms variables de
control.
Fundamentos de Lenguaje C para PICs
Sentencia de bucle while.
La repeticin se lleva a cabo mientras sea cierta una expresin.
while (expresin)
{
sentencia(s);
}
La expresin se evala antes de cualquier iteracin. Si es falsa, ya
no se ejecuta la sentencia o bloque de sentencias.
Sentencia de bucle do-while.
do
{
sentencia(s);
}
while (expresin)
Las sentencias se ejecutan antes de que se evale la expresin, por
lo que el bucle se ejecuta siempre al menos una vez.
e
l
e
c
t
r
o
n
i
k
.
e
s
7
Fundamentos de Lenguaje C para PICs
Comentarios
Los comentarios se incluyen en el cdigo fuente para explicar el
sentido y la intencin del cdigo al que acompaan. Son ignorados por
el compilador y no afectan a la longitud ni rapidez de ejecucin del
cdigo final.
Hay dos formatos posibles para los comentarios.
Formato 1. Empiezan por // y finalizan con el final de la lnea.
// Esto es un comentario.
Formato 2. Empiezan por /* y finalizan por */. No es posible anidar
comentarios con este formato.
/* Esto tambin es
un comentario */
/* Pero esto que /* parece un comentario vlido*/ no lo es */
Un comentario se puede colocan en cualquier lugar del programa y
pueden tener la longitud y el nmero de lneas que se quiera.
Fundamentos de Lenguaje C para PICs
C especfico para los PIC
Las principales diferencias entre compiladores residen en las
directivas (pre-processor commands) y en las funciones integradas
(built-in functions).
Al final de esta seccin se incluyen sendas listas con las di rectivas y
las funciones integradas correspondientes al compilador de CCS.
Directivas de preprocesado ms habituales
#ASM Las lneas entre estas dos directivas deben ser
#ENDASM instrucciones ensamblador que se insertan tal y
como aparecen.
#BIT id=x.y Se crea una variable tipo bit correspondiente al
bit y del byte x en memoria.
#BYTE id=x Se crea una variable y se sita en el byte x en
memoria. Si ya exista esa variable, se coloca
fsicamente en la posicin especificada.
e
l
e
c
t
r
o
n
i
k
.
e
s
8
Fundamentos de Lenguaje C para PICs
#DEFINE id texto El identificador se sustituye por el texto adjunto.
#DEVICE chip Define el micro para el que se escribe el cdigo.
#FUSES options Define la palabra de configuracin para la
grabacin del microcontrolador.
#INCLUDE <fichero> Se incluye el texto del fichero especificado en el
#INCLUDE fichero directorio o fuera de l.
#INLINE La funcin que sigue a esta directiva se copia en
memoria de programa cada vez que se le llame.
Puede servir para mejorar la velocidad.
#SEPARATE La funcin que sigue a esta directiva se implementa
de manera separada (no INLINE). De esta manera
se ahorra ROM
#ORG start Sita el cdigo a partir de una determinada
posicin de la memoria de programa
Fundamentos de Lenguaje C para PICs
#INT_xxxx Indica que la funcin que sigue es un programa de
tratamiento de la interrupcin xxxx.
#INT_GLOBAL Indica que la funcin que sigue es un programa
genrico de tratamiento de interrupcin. No se
incluye cdigo de salvaguarda de registros ni de
recuperacin como cuando se usa #INT_xxxx.
#PRIORITY ints Establece un orden de prioridad en las interrup-
ciones.
#USE DELAY (clock = frecuencia en Hz)
Define la frecuencia del oscilador que se va a
utilizar, que se emplea para realizar los clculos
para funciones integradas de retardo.
#USE FAST_IO (puerto)
#USE FIXED_IO (puerto)
#USE STANDARD_IO (puerto)
Indican al compilador cmo debe generar cdigo
para las instrucciones de E/S.
e
l
e
c
t
r
o
n
i
k
.
e
s
9
Fundamentos de Lenguaje C para PICs
Fundamentos de Lenguaje C para PICs
e
l
e
c
t
r
o
n
i
k
.
e
s
10
Fundamentos de Lenguaje C para PICs
e
l
e
c
t
r
o
n
i
k
.
e
s
Extraido para www.electronik.es

Vous aimerez peut-être aussi