Академический Документы
Профессиональный Документы
Культура Документы
COMPILADOR C CCS
SISTEMAS EMBEBIDOS
DIGITALES III:
CONSTANTES Y
VARIABLES
PIC18F4550
DIGITALES III:
2. CONSTANTES
Las constantes son valores que el compilador
remplaza, almacenan valores fijos los cuales no
cambian.
Las constantes facilitan la comprensin de un
programa y las modificaciones del mismo
simplemente modificando su valor al inicio de un
programa. Al momento de definir una constante
no solo se puede asigna un valor, tambin se
puede expresar como la operacin matemtica con
otras constantes.
2.1 Declaracin de constantes
La declaracin se hace de dos formas:
#DEFINE
DIGITALES III: 3
GAMA ALTA DE
MICROCONTROLADORES
#define
NUMERO_PI
#define TRUE
1
#define FALSE
0
#define PERIMETRO_CIR
3.14159265
NUMERO_PI*RADIO
2.2 CONST
Utiliza la palabra reservada CONST antes de la
declaracin, el valor tampoco cambia en el programa
pero se la utiliza para que a este se le asigne una
posicin fija dentro de la memoria flash, a esta
posicin acceden para obtener el valor.
La constante se encuentra en una posicion fija y es
importante si se utiliza un modificador o si el valor de
esta constante cambia en la ejecucin del programa.
char temperatura_max=40;
char temperatura_min=20;
GAMA ALTA DE
MICROCONTROLADORES
: Es el nombre a declarar
constante_n
: Es la equivalencia del elemento,
como se encuentra al interior de los corchetes quiere
decir que estos valores son opcionales.
],
Si constante_0 se omite por defecto carga el valor
de 0 y continua con la secuencia. Si se rompe la
secuencia se reinicializa en ese valor.
6
GAMA ALTA DE
MICROCONTROLADORES
Ejemplo de enum:
enum
dom}
vie,
sab,
GAMA ALTA DE
MICROCONTROLADORES
Constantes
especiales tipo
2.4
carcter
Los caracteres ASCII en C se representan por valor
decimal o hexadecimal, pero de ellos existen unos
caracteres especiales que se escriben de forma
especial para evitar errores en la compilacin entre
estosEN
tenemos:
C
Significado
Valor
\b
\r
\n
\0
\f
\t
\
\
\v
Espacio atrs
<bs>
Enter
<CR>
Retorno de carro
<Lf>
Nulo<NUL>
Salto de
pgina<FF>
Tabulaci
horiz<TAB>
Comilla
doble
Comilla sencilla
Tabulacin
vertic<VT>
decimal
8
13
10
0
12
9
34
39
11
8
GAMA ALTA DE
MICROCONTROLADORES
GAMA ALTA DE
MICROCONTROLADORES
10
3.1 Tipos
GAMA ALTA DE
de MICROCONTROLADORES
variables
a. Int 8: char
Reserva 1 byte de informacin y este puede valor
se puede encontrar en 256 combinaciones
posibles(2 exp 8).
Si el valor es positivo almacena un dato entre 0 a
255
Si el valor es negativo almacena un dato entre -128
a 127
b. Int 16: int
Reserva 2 bytes de informacin y este puede valor
se puede encontrar en 65536 combinaciones
posibles(2 exp 16).
Si el valor es positivo almacena un dato entre 0 a
65535
Si el valor es negativo almacena un dato entre11
3.1 Tipos
GAMA ALTA DE
de MICROCONTROLADORES
variables
GAMA ALTA DE
yMICROCONTROLADORES
el exponente puede
La mantisa
negativos.
ser positivos o
13
GAMA ALTA DE
MICROCONTROLADORES
4. Modificadores de datos
Las variables cuando se declaran pueden estar
acompaados de palabras reservadas del ANSI C
que no modifican el tamao en bits del tipo sino
el tratamiento y la forma en que se maneja esta
informacin.
Los modificadores permiten optimizar el cdigo
una vez llegue al proceso de ensamblado, hace
que un programa se ejecute mas rpido.
Los modificadores permite que se pueda
desarralloar operaciones entre variables de
diferente tipo, por ejemplo cuando sume un INT 8
con una INT 16.
Entre los modificadores se tiene: signed, unsigned,
14
4.1 unsigned:
Le da a la variable la caracterstica positiva, el primer
valor empieza en cero y el ltimo en (2 exp n)-1. En
este caso el bit de mayor peso tiene un valor y no
representa el signo.
El tipo de datos que se facilita para un
microcontrolador de 8 bits es el unsigned char, por ser
positivo y ser el de menor longitud.
4.2 signed:
Le da a la variable la caracterstica negativa, el
primer valor empieza en - (2 exp n)/2 y el ltimo en +
((2 exp n)/2)-1. En este caso el bit de mayor peso
tiene un valor del signo.
El bit de mayor peso es 1 si la variable es negativa y
III: 15
el bit vale 0 si la variable es positiva. Los DIGITALES
otros bits
Los
valores
manipulados en una
interrupcin, en los
puertos o registros
internos se pueden
declarar
como
voltiles.
Ejemplo:
El compilador como
observa
a
varaible1=100
y
despus la hace
igual
a
100,
entonces
al
optimizar no toma la
primer linea.
Si se utiliza volatil
si emsambla todo.
DIGITALES III: 17
DIGITALES III: 18
Operadores
PIC18F4550
DIGITALES III:
20
DIGITALES III: 21
X=10;
Y=++X;
En este caso Y es igual a 11 y X se hace igual a 11.
Operadores relacionales
C cuenta con los operadores relacionales que se
decriben a continuacin:
Smbolo
>
<
>=
<=
==
!=
Operacin
Ejemplo
Mayor que
if(a>b)
Menor que
if(a<b)
Mayor o igual que
if(a>=b)
Menor o igual que
if(a<=b)
Igual que
if(a==b)
Distinto que
if(a!=b)
DIGITALES III: 23
A &&B
A ||B
!A
DIGITALES III: 25
Smbolo Descripcin
Ejemplo
&
Y AND
A&B
|
Or Inclusiva
A|B
^
Or Exclusiva
A^B
<<
Rotacin a la izquierda A<<B
>>
Rotacin a la derecha A>>B
~
Complemento a uno
~A
DIGITALES III: 26
OR
RESULTADO
A &B
RESULTADO
A |B
0&0
0|0
0&1
0|1
1&0
1|0
1&1
1|1
XOR
RESULTADO
A ^B
0|0
0|1
1|0
1|1
COMPLEMENTO
A
!A
0
DIGITALES III: 27
Desplazamiento de bits:
Los operadores desplazan los bits a la derecha o a la
izquierda segn se especifique en la instruccin.
La estructura es:
Resultado=variable >> numero de bits a desplazar a
derecha.
Resultado=variable << numero de bits a desplazar a
izquierda.
Ejemplo:
C=a <<4
La anterior instruccin desplaza a la izquierda 4
posiciones, los valores que sobran en cada
desplazamiento se desechan y los espacios que
quedan se rellenan con ceros.
Estas instrucciones son diferentes a las rotaciones
ya29
DIGITALES III:
Funciones y
sentencias de control
PIC18F4550
DIGITALES III:
5.1 Funciones
Una funcion es una serie de instrucciones que se
llamaran varias veces a lo largo de la ejecucion de un
programa, estas son siomilares a las utilizadas en
ensamblador por las intrucciones call.
La funcin ejecutan una actividad especfica, el
llamado que se hace a una secuencia de cdigo hace
que se facilite entender un cdigo. El cdigo es
reusable. La estructura de una funcin es:
Tipo nombre_funcion( tipo parametro 1, parametro2
)
{
instrucciones. . . .
}
Los valores se retornan por medio de la instruccin:
DIGITALES III: 31
return(variable)
Funciones
Si la funcin si retorna un valor la estructura es:
Tipo nombre_funcion( tipo parametro 1, parametro2
)
{
instrucciones. . . .
return(variable o expresion);
}
Pero si la funcin no retorna un valor es necesario
definirla de la siguiente manera:
Void nombre_funcion( tipo parametro 1, parametro2
)
{
instrucciones. . . .
}
La anterior siempre y cuando recibe parmetros, si no
DIGITALES III: 32
recibe parmetros
la funcion es sencilla
en su
DIGITALES III: 33
34
if (condicin)
{ sentencia1; }
/*CONDICION VERDAD*/
else
{ sentencia2; }
/*CONDICION FALSA*/
Existe otra opcin se denomina If anidados, en ella se
valida diferentes opciones:
if (condicin)
{ sentencia1;
}
else if (condicin)
{ sentencia2;
}
else if (condicin)
{ sentencia3;
}
else
sentencia4;
DIGITALES III: 35
b. Estructura Switch
Esta estructura se suele utilizar en los mens, de
manera que segn la opcin seleccionada se ejecuten
una serie de sentencias. Su sintaxis es:
switch (variable)
{
case contenido_variable1:
sentencias;
break;
case contenido_variable2:
sentencias;
break;
default:
sentencias;
break;
}
DIGITALES III: 36
Estructuras repetitivas
Las estructuras de repeticin se utilizan en los
programas y estas pueden ser de dos tipos: una
cuando realiza un nmero conocido de veces o la otra
cuando la repeticin depende de una condicin.
La estructura repetitiva cuando se conoce un nmero
finito de veces es:
c. Ciclo for
El ciclo for ejecuta un bloque de instrucciones n veces,
se utiliza este ciclo cuando se conoce el nmero de
iteraciones o repeticiones de una tarea. Su sintaxis es
la siguiente:
for(valor inicial; condicin de paro; incremento)
{
instrucciones
}
DIGITALES III: 38
Ejemplo 2:
Unsigned int i;
for (i=1; i<2000; i++)
{
Output_B(i);
Delay();
}
Donde se establece como variable de inicio la variable
i y se inicializa con 1, la condicin de paro del ciclo se
ejecuta hasta que i sea menor de 2000 y el
incremento o actualizacin de i es un incremento de 1
en 1.
Si se quiere crear ciclos infinitos se puede crear la
estructura:
for (;;)
{
DIGITALES III: 40
d. Sentencia break
Cuando se desea salir de manera abrupta de un ciclo
se puede utilizar la instruccin BREAK. Por lo general
se utiliza despus de una condicin al interior del ciclo.
Unsigned int i;
for (i=1; i<20; i++)
{
if (i==10)
{
break;
/* Sale del ciclo sin esperar que i sea menor a 20 */
}
Output_B(i);
Delay();
}
DIGITALES III: 41
e. Sentencia continue:
Cuando se desea saltar una iteracin y continuar con
el resto de los ciclo se utiliza la instruccin
CONTINUE, esta sentencia tambin se ejecuta
despus de una condicin. Ejemplo:
Unsigned int i;
for (i=1; i<20; i++)
{
if (i==15)
continue; /* Salta la secuencia si la i es igual a15 */
Output_B(i);
Delay();
}
DIGITALES III: 42
f. ciclo while
Este ciclo ejecuta un bloque de instrucciones mientras
una condicin determinada sea verdadera. Su sintaxis
es la siguiente:
while(condicin)
{
instrucciones
}
Cuando la ejecucin de un programa llega al ciclo
while, sucede lo siguiente:
1. Es evaluada la expresin de la condicin.
2. Si la condicin se evala como falsa (es decir, a
cero), el ciclo while termina, y la ejecucin pasa al
primer enunciado que se encuentre a continuacin de
los enunciados del while.
3. Si la condicin se evala como verdadera (esto es,
1), se ejecutan los enunciados (bloque de
DIGITALES III: 43
instrucciones ) del while.
DIGITALES III: 44
g. ciclo do while
Este ciclo ejecuta por lo menos un bloque de
instrucciones y posteriormente evalua una condicin.
Su sintaxis es la siguiente:
do
{
instrucciones
} while(condicin);
Cuando la ejecucin de un programa llega al ciclo
while, sucede lo siguiente:
1. Ejecuta el bloque de instrucciones.
2. Es evaluada la expresin de la condicin. Si la
condicin se evala como falsa (es decir, a cero), el
ciclo do while termina,
3. Si la condicin se evala como verdadera (esto es,
1), se regresa al paso 1.
DIGITALES III: 45
h. Sentencia goto
C le permite utilizar la sentencia goto pero ests no es
muy utilizada hoy en dia, se hace un tanto ilegible el
cdigo y pareciera ensambaldor. Ejemplo :
y=1;
Incrementar
y++;
if( y<20) goto incrementar
Se recomienda al programador mejor no utilizar estas
estructuras,
DIGITALES III: 46
en
el
Ejemplo
__Asm
sleep
Observe que no requiere agregar ; al final de la
lnea.
DIGITALES III: 48
Bloque de ensamblador:
C le permite ingresar bloques de lenguaje
ensamblador, al interior del bloque no se hace usos
del carcter ; para indicar fin de linea. Los bloques
se agregan entre las sentencias: #asm y se finalizan
con #endasm. Ejemplo:
#asm
clrf bsr
Nop
Nop
Nop
sleep
#endasm
Es de anotar que cuando se utiliza este sentencia no
se puede tabular, todas las sentencias #asm y
DIGITALES III: 49
#endasm empiezan en la columna 1.
50