Documente Academic
Documente Profesional
Documente Cultură
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 5
Instalacion de C18
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 9
Tipos de Datos en MPLAB C18
Los datos que puede manejar C pueden ser del tipo
enteros,, enteros positivos
p y negativos,
g , decimales con
presicin simple o mayor, llamados flotantes de simple
y doble presicin
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 10
Datos y Variables
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 12
Las variables
Para almacenar los datos dentro de un microcontrolador
se usa la memoria,, el lugar
g donde se pueden
p almacenar
temporalmente los mismos, los denominamos
VARIABLES
Desde el ppunto
nto de vista
ista fsico la variable
ariable se aloja en un
n
registro, el cual puede almacenar 8 bits. Sin embargo
una variable puede ocupar mas de un registro, todo
depende del largo que tenga el dato que quiera
almacenarse en la variable
Las variables por tanto se identifican por un nombre o
identificador y por tener una dimensin lo cual se
asigna mediante un tipo que puede ser modificado por
un calificador
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 13
Tipos de Variables: Char
Para almacenar datos las variables podrn ser:
char (carcter): puede contener un carcter o un dato
numrico de -128 a +127
unsigned char (carcter sin signo): puede contener un
dato de 0 a 255
signed char (carcter con signo): es igual que la tipo
char
Registro
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 14
Variables tipo int
La variable tipo int ocupa 2 bytes (16 bits), y la
misma se usa tpicamente
p para
p almacenar datos
numricos.
Int se usa cuando queremos almacenar cualquier
nmero que vaya desde -32768
32768 a +32767
Unsigned int permite el rango mximo de
almacenamiento pero solo para nmeros positivos
desde 0 a 65535
2 Registros
R i t de
d 8bits
8bit
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 15
Variables tipo short
La variable tipo Short ocupa 2 bytes como lo hace int (16
bits), pero si le sigue el modificador long ampliamos su
rango a 3 bytes (24bits)
short se usa cuando queremos almacenar cualquier nmero que
vaya desde -32768 a +32767
unsigned short permite el rango mximo de almacenamiento pero
solo para nmeros positivos desde 0 a 65535
short long permite un rango mayor de almacenamiento con un
rango negativo y positivo de nmeros que va desde -8.368.608 a
+8 368 607 (24 bits)
+8.368.607
unsigned short long permite todo el rango pero solo admite
numeros positivos desde 0 a 16.777.215 (24 bits)
2 o 3 Registros de 8bits
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 16
Variables tipo long
La variable tipo long ocupa 4 bytes, se usa
cuando queremos almacenar cualquier nmero
que vaya desde -2.147.483.648 a +2.147.483.647
unsigned long permite el rango mximo de
almacenamiento pero solo para nmeros
positivos desde 0 a 4.294.967.295
4 Registros de 8bits
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 17
Variables tipo float y double
Las variables tipo float y double ocupan 4 bytes,
se usan cuando queremos almacenar cualquier
nmero decimal.
4 Registros de 8bits
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 18
Almacenamiento de
variables
Las variables pueden crearse en la
memoria de datos (ram) o en la memoria
de programa del microcontrolador (rom).
Para indicarle al compilador donde deber
crear la variable se antepone a la
g
definicin de la variable las siglas rom o
ram.
Sino indicamos cual es el lugar
g donde se
almacenaran las variables, estas por
default se almacenaran en memoria de
datos
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 19
Almacenamiento en memoria de
Programa
Para almacenar datos en memoria de
programa eixsten 2 modificadores
modificadores,
denominados near y far (cercana y lejana:
ffar: cuando
d se usa estet modificador
difi d la l
variable se crea en la memoria de programa
por encima de los 64K
near: cuando se usa este modificador la
variable se crea en memoria de programa por
debajo de los 64K
Ejemplo:
#define MEM_MODEL near
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 20
Las funciones
Un programa de C esta constituido por rutinas, o
segmentos
g de cdigo
g que
q realizan una funcin
determinada.
Las funciones tienen un nombre, mediante el cual se
identifican.
identifican
La funcin mas importante, y donde comienza todo
programa
p g se denomina main (p (principal)
p )
Todo programa debe tener una funcin main donde se
encuentra la parte principal del mismo.
Las funciones son bloques de sentencias de cdigo, y
estn limitadas por llaves {}. Toda funcin comienza con
el {
{ y termina con }
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 21
Visibilidad de las variables
Las funciones usan las variables, las cuales si son
creadas dentro de las mismas se denominan locales,,
mientras que si son creadas fuera de las funciones, se
denominan globales.
Las variables
ariables locales solo existen
e isten dentro de las
funciones donde fueron creadas, y son destruidas, al
terminar la funcin
Las variables locales solo pueden ser vistas y por tanto
usadas, dentro de la funcin donde se crearon.
L variables
Las i bl globales
l b l son vistas
i t por todas
t d las
l
funciones, y por tanto pueden ser usadas por cualquier
funcin.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 22
Ejemplos de definiciones de
variables
Definiendo una variable:
int contador;
char buffer;
Definiendo variables mltiples:
char buffer1, datos, contador;
Definiendo e inicializando las variables:
unsigned long contador = 0;
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 23
Sistemas de numeracin
Los datos en los programas pueden
escribirse
ibi en distintos
di ti t formatos:
f t
Decimal: es el formato normal por
default
Binario: se debe anteponer 0b :
0b1011001
Hexadecimal: se antepone 0x:
0x0F1A
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 24
Ejemplo de un Programa que
controla un LED
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 25
Estructuras dentro de
un programa
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 30
Ciclos while
Otra forma de un ciclo iterativo es la del while
(mientras) En este caso mientras la condicin
(mientras).
de evaluacin se cumpla, se ejecutaran las
sentencias encerradas entre llaves. La condicin
de evaluacin debe ir entre parntesis.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 31
Ciclo do-while
El ciclo do-while es similar al while, con la diferencia que
mientras qque en el while,, si la condicin no se cumple,
p , el
bloque de sentencias no se ejecuta; en el do while por lo
menos se ejecutan una vez.
La condicin es checkeada al final del bloque
bloq e
do {
contador ++;
PORTB = contador;
} while (PORTAbits.RA1 = 1);
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 32
Sentencias de control
BREAK
Sentencia BREAK
interrumpe la ejecucin de un bucle while, do-while
o for.
for
For (;;) {
if ( a == 0) {
break;
}
a=PORTA;
a PORTA;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 33
Sentencia de Control
CONTINUE
Sentencia CONTINUE
Se
S utiliza
tili en los
l bucles
b l para pasar a lla siguiente
i i t repeticin.
ti i
For ((;;)) {
if ( PORTAbits.RA0 = 1) {
continue;
}
contador++;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 34
Sentencias de Control
GOTO
Sentencia goto
Transfiere
T fi incondicionalmente
i di i l t ell control
t l a lla sentencia
t i
etiquetada por el identificador.
goto identificador;
identificador:
instrucciones;
No
N es una b
buena prctica
ti utilizarla
tili l !!!
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 35
Operadores
< M
Menor que x < y 1 sii x menor que y, sino
i 0
Menor que o 1 si x menor o igual a y, sino 0
<= x <= y
igual a
> Mayor que x > y 1 si x mayor que y, sino 0
Mayor que o 1 si x mayor o igual a y, sino 0
>= x >= y
i
igual
la
== Igual a x == y 1 si x igual a y, sino 0
!=
! No igual a x !=
! y 1 si x no igual a y, sino 0
En expresiones condicionales,
condicionales cualquier valor no 0 es
es interpretado TRUE. Un valor de cero 0 es siempre FALSE.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 37
Operadores de relacin
Diferencia entre = y ==
= es el operador asignado
x = 5 asigna el valor 5 a la variable x
== es ell operador
d relacional
l i l 'igual
'i l a''
x == 5 prueba si es el valor de x es
5 if (x == 5)
{
haga si el valor de x es 5
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 38
Operadores Lgicos
Operado Operacion Ejemplo Resultado (FALSE = 0, TRUE 0)
r
&& Logica AND x && y 1 Si ambos x 0 y y 0,
sino 0
|| Logica
g OR x || y 0 Si ambos x = 0 e y = 0,
sino 1
! Logica NOT !x 1 if x = 0, sino 0
En expresiones condicionales,
condicionales cualquier valor no zero es
interpretado como TRUE. Un valor 0 es siempre FALSE.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 39
Operadores Lgicos a nivel BIT
(Bitwise)
Operador Operacin Ejemplo Resultado (para cada bit)
~ Bitwise NOT ~x 1, si x es 0
(Complemento a uno) 0, si y es 1
<< D
Desplaza
l a lla IIzq x << y Shift x por y bits
bit a lla IIzq
>> Desplaza a la Derecha x >> y Shift x por y bits a la Derecha
Cada
C d vez que se ejecuta
j t la
l sentencia
t i de
d desplazamiento,
d l i t
el contenido de la variable se desplaza hacia la derecha
o la izquierda N cantidad de bits, segun se exprese
Para desplazar, la variable es rellenada con ceros (no es
rotacin, es desplazamiento)
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 41
Operadores
El operador condicional
El operador condicional puede ser usado
para condicionar el asignarle un valor a
una variable
Ejemplo 1 (el mas usado comunmente)
x = (condicion) ? a : b;
x = a si la condicion es true
En ambos casos: x = b si la condicin es false
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 42
Arrays
Arrays:
Pueden contener cualquier nmero de
elementos
L elementos
Los l t deben
d b ser del
d l mismo
i tipo
ti
El ndice base es cero
El tamao del Array (numero de elementos)
debe estar en la declaracin
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 44
Arrays
Como crear un Array
Los arrays se declaran como las variables:
Sintaxis
tipo nombre
nombrearray [tamao
array[ ];
tamao];
int a[10]
a[10];; // Un array que contiene 10 elementos
char s[25]
s[25];; // Un array que contiene 25 caracteres
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 45
Arrays
Como inicializar un array en la declaracin
Los Arrays pueden ser inicializados con una lista en la declaracin :
Sintaxis
tipo nombrearray[tamao
nombrearray[ ] = {item
tamao] {item1,,itemn};
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 46
Arrays
Como usar un array
Arrays son accesibles como las variables, pero con un index:
Sintaxis
[indice
nombrearray[
nombrearray ]
indice]
Indice ppuede ser una variable o una constante
El primer elemento en un array tiene un indice 0
C no proporciona ninguna comprobacin de los lmites
Ejemplo
int i, a[10
10];
]; //un array que contiene 10 elementos
for(i = 0; i < 10
for( 10;; i++) {
a[i] = 0; //Inicializa los elementos del array a 0
}
a[4] = 42
42;; //cargamos el elemento 4
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 47
Arrays
Creando Arrays multidimensionales
Agregue las dimensiones adicionalesen la declaracin delarray :
Sintaxis
tipo nombrearray[tamao1]...[
nombrearray[ ]...[tamao
tamaon];
Los Arrays
y p
pueden tener cualquier
q nmero de
dimensiones
Tres dimensiones tienden a ser las ms usadas en
prctica comn
Ejemplo
int a[10
10][
][10
10];
]; //10x10 array para 100 enteros
float b[10
10][
][10
10][
][10
10];
];//10x10x10
//10x10x10 array para 100 decimales
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 48
Arrays
Creando Arrays multidimensionales
Arrays pueden ser inicializados con un listado dentro de un a listado:
Sintaxis
tipo nombrearray[tamao0][
nombrearray[ ][tamao
tamaon] =
{{item
{{ ,,item
item, },
item},
{item
item,,,item }};
item}};
Ejemplo
char a[3][
][33] = {{'X'
{{'X',, 'O',
'O', 'X'
'X'},
},
{'O'
'O',, 'O'
'O',, 'X'
'X'},
},
{'X'
'X',, 'X'
'X',, 'O'}};
'O'}};
int b[2][
][22][
][22] = {{{0
{{{0, 1},{
},{22, 3}},{{
}},{{44, 5},{
},{66, 7}}};
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 49
Arrays
Visualizando Arrays de 2 dimensiones
int a[3][3] = {{0, 1, 2},
{3, 4, 5},
fila, Columna {6, 7, 8}};
a[y][x] Columna
a[0][0] = 0; 0 1 2 x
ffila 0
a[0][1] = 1;
a[0][2]
[0][2] = 2
2;
0 0 1 2
0,0 0,1 0,2
a[1][0] = 3;
fila 1
a[1][1] = 4; Fila
F 1 3 4 5
a[1][2] = 5; 1,0 1,1 1,2
a[2][0] = 6;
2 6 7 8
a2
a[2][1] = 7;
fila
a[0][0][1] = 1; 4
a[0][1][0] = 2; 0 5
a[0][1][1] = 3; 0
fila
a[1][0][0] = 4; 1 x
7
1
Plane 1
a[1][0][1] = 5;
a[1][1][0] = 6;
2
[ ][ ][ ]
a[1][1][1] = 7;
;
y
0
3
1
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 51
Arrays
Ejemplo de procesamiento de un array
/**************************************************
* Imprime
p 0 a 90 en incrementos de 10
**************************************************/
int main
main((void
void))
{
int i = 0;
int a[10
10] ] = {0
{0,1,2,3,4,5,6,7,8,9};
while (i < 10
10))
{
a[i] *= 1010;
;
printf(
printf ("%d
"%d\\n"
n",
, a[
a[i]);
i++;
}
while (1);
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 52
Strings
Array de caracteres y Strings
Definicin
Strings son array de char en los cuales el ltimo caracter
es un caracter nulo '\0' con un valor ASCII de 0. C no
tiene tipos de datos string naticos s , los strings deben ser
tratados como arrays de caracteres
caracteres..
Strings:
Estan encerrados entre comillas "string"
Terminan con un caracter nulo '\0'
Deben ser tratados como una array de caracteres
(tratados elemento por elemento)
Pueden ser inicializados por un string literal
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 53
Strings
Creando un Array o String de Caracteres
Los Strings se crean como en cualquier otro array de char:
sintaxis
char nombrearray[longitud
nombrearray[ ];
longitud];
longitud debe
d b ser un caractert mas que lal longitud
l it d
mxima del string a almacenarpara que tambien se
pueda guardar
p g el caracter el caracter nulo '\0'
Un array char con n elementos contiene un string
igual a n-1 char
ejemplo
char str1
str1[[10
10];
]; //Contiene 9 caractere mas '\
'\0'
char str2
str2[[6]; //contiene 6 caracteres mas '\
'\0'
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 54
Strings
Como inicializar un String al Declararlo
Array de caracteres pueden ser inicializados con strings literales:
Sintaxis
char nombrearray[] = "Microchip"
nombrearray[] "Microchip";;
Arrayy no requiere
q tamao
El tamao es automaticamente determinado por la
longitud de string
caracter NULL '\0' es automaticamente adicionado
sintaxis
char str1
str1[]
[] = "Microchip"
"Microchip";; //10 caracteres "Microchip\
"Microchip\0"
char str2
str2[[5] = "Hola"
"Hola";; //5 caracteres "Hola\
"Hola\0"
//Declaracin alternati
alternativaa de string requiere
req iere tamao
char str3
str3[[4] = {'P'
'P',, 'I'
'I',, 'C'
'C',, '\0'
0'};
};
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 55
Strings
Como inicializar un string en Cdigo
En cdigo, puede inicializarse un string elemento por elemento:
Sintaxis
nombrearray[0] = char1;
nombrearray[
[1] = char2;
nombrearray[
nombrearray
[n] = '\0'
nombrearray[
nombrearray 0';;
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 56
Strings
Comparando Strings
Los Strings no pueden ser comparados por
operadores relacionales (==
(==, !=,
!= etc.)
etc )
Debe usar librera C Standar en funciones para
manipulacin de strings
strcmp() retorna 0 si los string son iguales
Ejemplo
char str
str[]
[] = "Hola"
"Hola";;
strcmp(( str
if (!strcmp str,, "Hola"
"Hola"))
))
printf(
printf
p (El string g es \"%s
"%s\
\".
".\
\n"
n",
, str
str);
);
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 57
Funciones
Print()
{
main() ...
{ return;
} Nop()
... {
Print(); ...
... Delay() return;
Delay(); { }
... ...
} Nop();
return;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 59
Funciones
Que es una funcin?
Definition
Definicin de la funcin
Nombre de la
funcin
f(xx) = x2 + 4x
f( 4x +3
Parmetro de la funcin
Tipo
p de dato retornado
expresion Parametro listado
Nombre (opcional)
tipo identifier
identifier((tipo1 arg1,,tipon argn)
{
d l
declaracn
dde sentencias
t i
Cuerpo
return expresion
expresion;;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 62
Funciones
Definiciones de funciones: Retorna tipo de datos
sintaxis
tipo identificador
identificador((tipo1 arg1,,tipon argn)
{
declaraciones
sentencias
t i
return expresion
expresion;;
}
El tipo
p de clarado de la funcin
debe coincidir con el tipo de datos
que expresion devuelva
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 63
Funciones
Definicin de Funciones: Tipo de datos retornado
int test(
test(int a, int b)
{
if (a > b)
return 1;
else
return 0;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 64
Funciones
Definicin de Funciones: Tipo de datos retornados
El tipo de funcin es void si:
La sentencia return no tiene expresion
La sentencia return no esta presente en
todas
Esto a veces llama a una funcin de
procedimiento puesto que no se devuelve nada
Ejemplo
void identificador
identificador((tipo1 arg1,,tipon argn)
{
declaraciones
sentencias return;
return ;p
puede ser omitida si no
return;
return ; se retorna nada
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 65
Funciones
Definicin de Funciones: Parmetros
Los parmetros de una funcin se declaran
apenas como variables ordinarias
ordinarias, pero una
coma delimita la lista dentro del parntesis
los nmbres de los parmetros solo son vlidos
dentro de la funcin (locales a la funcion)
Sintaxis
tipo identificador
identificador((tipo1 arg1,,tipon argn)
{
declaraciones Parmetros de funciones
sentencias
return expresion
expresion;;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 66
Funciones
Definicin de funciones: Parmetros
Lista de parmetros puede mezclar datos
int Txdata(int x, x float y,y char z)
Los parmetros del mismo tipo se deben
declarar por separado - es decir:
int maximum(int x, y) no puede trabajar
int maximum(int x, x int y) es correcta
Ejemplo
int maximum
maximum((int x, int y)
{
return ((
((xx >
>= y) ? x : y);
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 67
Funciones
Definicin de funciones: Parmetros
Si no se requieren parmetros , usar
l palabra
la l b clave
l id en lugar
void l de
d la
l
lista de parmetro al definir la funcin
Ejemplo
identificador(void
tipo identificador( void)
)
{
declaraciones
sentencias
return expresion
expresion;;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 68
Funciones
Como llamar o invocar una Funcion
Sintaxis de la llamada a funcin
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 69
Funciones
Funcion Prototipos
Justificada como variables, una funcin debe
ser declarada antes de que pueda ser utilizada
La declaracin debe ocurrir antes de main () o de
otras funciones que la utilicen
Declaraciones pueden tener dos formas:
La definicin de funcin entera
Justificada como funcion prototype la
definicin de funcin en s mismo se puede
entonces poner dondequiera en el programa
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 70
Funciones
Funciones Prototipos
Funcin prototipo puede tener dos formatos
diferentes:
Una exacta copia de la funcin HEADER:
Ejemplo Funcion Prototipo 1
int maximum
maximum((int x, int y);
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 71
Funciones
Declaracion y Uso: Ejemplo 1
Ejemplo 1
int a = 5, b = 10
10,
, c;
int maximo
maximo((int x, int y) Funcion es
{ d l d y
declarada
return ((
((xx >= y) ? x : y); definida antes
} de ser usada en
el main()
int main
main((void
void))
{
c = maximo
maximo((a, b);
printf(
printf (el maximo es: %d\
%d\n"
n",
, c)
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 72
Funciones
Declaracion y Uso: Ejemplo 2
Ejemplo 2
int a = 5, b = 10
10,
, c;
F
Funcion
i es
int maximo
maximo((int x, int y); declarada con
prototipo
p p antes
int main
main((void
void)) de ser usada en
{ el main()
c = maximo
maximo((a, b);
printf(
printf (el maximo es %d\
%d\n"
n",
, c)
}
F
Funcion
i es
int maximo
maximo((int x, int y) definida despues
{
de ser usada en el
return ((
((xx >= y) ? x : y);
}
main()
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 73
Funciones
Pasaje de parmetros por Valor
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 74
Funciones
Pasaje de parmetros por Valor
Ejemplo
int a, b, c;
int contador
contador((int x, int y)
{
x = x + (++
(++yy);
return x;
El valor de a es copiado en x.
}
El valor
l de d b es copiado
i d en y.
int main(
main (void
void)) La funcin no cambia el valor
{ de a b.
a = 5;
b = 10
10;
;
c = contador
contador((a, b);
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 75
Funciones y Alcance
Variables declaradas dentro de la funcin
Las variables declararon dentro de un bloque de la
funcin no son accesibles fuera de la funcin
Ejemplo
int x;
int acumula
acumula((int n)
{
int a;
return (a += n)n);
;
}
int
t main
main(
a (void
void)
o d)
d)
{
x = acumula
acumula(
(5); Esto puede generar un error. a no
x = a; puede ser accedida fuera de la funcin
} donde ha sido declarada.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 76
Funcione y Alcances
Variable Global versus Local
Ejemplo
int x = 5; x puede ser vista por todos
int suma
suma((int y)
{
int z = 1; (suma) parametro local es y
(suma) variable local es z
return (x + y + z);
}
int main
main((void
void))
{ (main) variable local es a
int a = 2;
x = suma
suma((a);
a = suma
suma((x);
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 77
Funciones y Alcance
Parameters
Superposicin" de nombres de variables:
n Declarada
D l d como Global
Gl b l y local
l l n Declarada
D l d solo
l como global
l b l
int n; int n;
int acumula(
acumula(int n) int acumula(
acumula(int x)
{ {
y += n; y += n;
} }
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 78
Funciones y Alcance
Parametros
Ejemplo
Diferentes
int n; f
funciones
i pueden
d
int acumula(
acumula(int n) usar el mismo
{ nombre
b del
d l
y += n;
} parmetro
int prod(
prod(int n)
{
z *= n;
}
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 79
printf()
Funcin de la Librera Standard
Usada para escribir texto en la salida standard"
Muchas en los microcontroladores PIC18 es la UART
Esto nos permite depurar un programa ya sea usando el
programa hyperteminal de Windows o en la USART
virtual del MPLABSIM
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 80
printf()
Funcin de la Librera Standard
Sintaxis
printf(ControlString
printf(ControlString,, arg1 ,argn
arg1, );
argn);
argn
Imprime todo palabra por palabra dentro del string
excepto %d
%d'ss los cuales son reemplazados por los
valores de los argumentos del listado
Ejemplo
int a = 5, b = 10
10;
;
printf(
printf("a = %d
%d\
\nb = %d
%d\
\n"
n",
, a, b);
Result:
NOTA: el 'd' en %d es la conversion
a=5 del caracter. (ver la siguiente
b = 10 lamina para mas detalles)
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 81
printf()
Conversion Caracteres para Control de String
Conversion
de caracter Significado
%c C
Caracter
t simple
i l
%s String (todo los caracteres hasta '\'\0')
%d Entero sin signo
%o Entero octal sin signo
%u Entero decimal sin signo
%x minuscula(1a5e))
Entero decimal sin signo con digitos minuscula(1a5e
%X como x, pero con dgitos mayusula (e.g. 1A5E
1A5E))
%f Valor decimal con signo(floating point)
%e Valor decimal con exponente(e.g. 1.26e
1.26e--5 )
%E como e, pero usando E para el exponente (e.g. 1.26E
1.26E--5 )
%g como e o f, pero dependiendo del tamao y precision del valor
%G como g, pero usando E para el exponente
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 82
printf()
El valor mostrado es interpretado enteramente
por el formato del string:
printf("ASCII = %d", 'a');
permite sacar : ASCII = 97
p
Un string mas problemtico :
printf("Value = %d", 6.02e23);
permite
it sacar: Valor = 26366
Resultados incorrectos pueden ser mostrados si
ell tipo
ti ded formato
f t no corresponde
d all tipo
ti ded
formato verdadero del argumento
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 83
printf()
Useful Format String Examples for Debugging
Imprimir valor hexadecimal 16-bit con un prefijo "0x" y
rellenar con ceros si es necesario p
para completar
p 4
dgtos hexa :
printf(
printf(direccion
direccion de x = %#06x
%#06x\\n
n",
, x_ptr);
x ptr);
# Especifica
E ifi que un 0x0 o 0X debera
d b precederd un valor
l hexadecimal
h d i l
(tiene otro significado para diferentes conversiones de caracteres)
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 84
printf()
Useful Format String Examples for Debugging
04 E
Especifica
ifi que 4 caracteres
t deben
d b ser sacados d (no ( incluyendo
i l d 0x
0
ya que se incluyo explicitamente en el string), los ceros seran
completados en la izquierda en caso de necesidad
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 85
Directivas elementales
#include <archivo.h>
E este
En t caso ell compilador
il d busca
b ell archivo
hi en ell directorio
di t i actual
t l
y en el resto de los directorios
P ejemplo:
Por j l C:\
C:
C \Program
P Files
Files\
Fil \Microchip
Mi
Microchip\
hi \
#include archivo.h
busca solo en el directorio actual
#include c:
c:\\Miproyecto
Miproyecto\
\archivo.h
Usa un path especfico para buscar un archivo include
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 88
Directiva #include
archivo HEADER main
main.h
h y achivo FUENTE main
main.c
c
main.h main.c
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 89
Libreras de C18
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 91
Las libreras de Microchip
Las libreras se encuentran separadas
por:
Libreras de perifricos de hardware
Libreras de perifricos por software
Libreras Generales por software
Libreras Matemticas
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 92
Libreras para el control de
Perifricos por Hardware
Estas libreras permiten configurar y
controlar los perifricos que incorporan
los MCU PIC18:
Funciones I/O
Conversor A/D
Timers
Modulo Captura
PWM
I2C
SPI
USART
MicroWire
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 93
Libreras para el control de
Perifricos por Software
Estas libreras permiten configurar y
controlar los siguiente perifricos
LCDs Inteligentes
Conexin en 4 u 8 bits
CAN 2510
I2C
SPI
USART
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 94
Libreras Generales de software
Estas libreras permiten en tratamiento de
caracteres estas se clasifican en
caracteres,
Funciones para clasificacin de caracteres
Funciones para la conversin de datos
Funciones para el manejo de Strings y memoria
Funciones de Delays
Funciones de Reset
Funciones para salida de caracteres
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 95
Funciones Matemticas
Estas libreras nos permiten procesar
di
diversas funciones
f i matemticas
t ti
como ser:
Funciones trigonomtricas
Funciones exponenciales
Funciones logartmicas
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 96
Librera para el control de un
LCD
El MPLAB-C18 incorpora una serie de libreras para el
control de pperifricos por
p software. Una de ellas es la
que controla un LCD inteligente.
BusyXLCD : esta ocupado el controlador del LCD ?
OpenXLCD : Configura las lineas I/O usedas para controlar
el LCD e inicializarlo.
putcXLCD : Escribe un byte al LCD
LCD.
putsXLCD : Escribe un string al LCD.
putrsXLCD : Escribe un string
p g desde memoria de p
programa
g
del LCD.
ReadAddrXLCD: Lee la direccin de un byte desde el LCD
ReadDataXLCD: Lee un byte desde el LCD.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 97
Librera para el control de un
LCD
SetCGRamAddr : Setea la direccin del generador de
caracteres del LCD.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 98
Ejemplo de aplicacin del uso de
las librerias LCD
Para usar la librera XLCD el usuario debe editar
el archivo xlcd.h
xlcd h para adaptar las conexiones del
hardware de su aplicacin por ejemplo:
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 99
Programa LCD
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 100
Programa LCD cont
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 101
Programa LCD cont.
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 102
C18 ADC Funciones de Librera
#include <adc.h>
char BusyADC (void);
Checquea si ADC esta esta procesando una conversin.
Retorna 1 si esta ocupado.
void CloseADC (void);
Desabilita el ADC y ADC interrucin
void ConvertADC (void);
Inicia la conversin ADC
void OpenADC
p (unsigned
g char config,
g
unsigned char config2);
Usado para configurar el ADC
Algunos PIC18 Tiene un 3rd argumento portconfig
Valores de config y config2 puede variar por dispositivo
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 103
C18 ADC Funciones de Librera
int ReadADC (void);
Lea el resultado del conversor ADC
Retorna un valor 16-bit con signo
Resultado puede estar justificado a la derecha o
a la izquierda determinado por la configuracin
void SetChanADC (unsigned char
channel);
Selecciona el pin usado para entrada del ADC
El valor del puede ser ADC_CH0
C C hasta
ADC_CH15)
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 104
Ejemplo de uso de las Librerias
ADC h
ADC.h
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 105
Ejemplo de uso de las Librerias
ADC h cont.
ADC.h cont
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 106
Librerias para el Manejo de los
Timers (Timers h)
(Timers.h)
Estas librerias nos permiten manejar el Timer0,
Timer1 Timer2 , Timer3 y Timer4
Timer1, Timer4.
Esta formada por las siguientes funciones:
OpenTimerX: permite configurar el Timer
CloseTimerX: apaga el Timer
WriteTimerX: nos permite escribir en el Timer
ReadTimerX: nos permite leer el Timer
N t lla X d
Nota: debe
b ser reemplazada
l d por ell Nro
N del
d l
timer que estemos trabajando
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 107
Librerias para el Manejo de los
Timers (Timers h)
(Timers.h)
OpenTimer : nos permite configurar el
f
funcionamiento
i i t del
d l Timer.
Ti
Segn
g el Timer que
q seleccionemos
sera el paso de parmetros:
Ejemplo:
OpenTimer0( TIMER_INT_OFF &T0_8BIT & T0_SOURCE_INT & T0_PS_1_32 );
OpenTimer1( TIMER_INT_ON & T1_8BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 &
T1 OSC1EN OFF & T1
T1_OSC1EN_OFF T1_SYNC_EXT_OFF
SYNC EXT OFF ));
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 108
Librerias para el Manejo de los
Timers (Timers h)
(Timers.h)
ReadTimer: nos permite leer el valor de cuenta del
Timer.
Timer
Ejemplo:
timer0 = (unsigned char) ReadTimer0();
WriteTimer: nos permite escribir un valor dentro del
Timer
Ejemplo:
WriteTimer0( 10000 );
Cl
CloseTimer:
Ti d
desabilita
bili ell timer
i y desactiva
d i lal
interrupcin del mismo
Ejemplo:
CloseTimer1();
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 109
Ejemplo de uso de la Librera
Timers h
Timers.h
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 110
Libreras para el manejo de la
USART
La librerias para el manejo de la USART nos permiten
controlar la configuracin, transmisin y recepcin de
datos:
BusyUSART: nos permite saber si ya se transmiti un dato
CloseUSART: desactivamos la USART
DataRdyUSART: nos permite saber si hay un dato disponible en
el buffer de lectura de la USART
getcUSART: lee un byte desde la USART
getsUSART: lee un STRING desde la USART
OpenUSART: nos permite configurar la USART
putcUSART: escribimos un byte a la USART
putsUSART: escribimos un string desde la RAM a la USART
putrsUSART:
t USART escribimos
ibi un string
t i desde
d d la
l memoria
i de
d
programa a la USART
ReadUSART: leemos un byte desde la USART
WriteUSART:escribimos un byte en la USART
baudUSART: seteamos el BAUD RATE en la USART mejorada
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 111
Programa ejemplo del uso de la
librera de la USART cont.
cont
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 112
Programa ejemplo del uso de la
librera de la USART cont.
cont
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 113
Laboratorios
2006 Microchip Technology Incorporated. All Rights Reserved. 202 PRC Slide 115
Fin
Gracias a todos!!!