arg c18 [modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser...

116
Aprendiendo C18 Introducción a la Programación y uso V3.2 August 10, 2007

Upload: trinhmien

Post on 25-Sep-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Aprendiendo C18Introducción a la Programación y uso

V3.2 August 10, 2007

Page 2: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Agenda Instalacion de C18Construyendo nuestro Primer ProyectoConstruyendo nuestro Primer ProyectoArquitectura de un Programa en C18Ti d d t i blTipos de datos y variablesAlmacenamiento en Memoria de Datos y M i d PMemoria de ProgramaIntroducción a las FuncionesVisibilidad de las variablesDeclaración de variables

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 2202 PRC

Como escribir y leer un PORT

Page 3: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Agenda cont.Estructuras condicionales IFB lBucles:

Bucle FORBucle WHILEBucle DO-WHILEBreak , Contine y Goto

Operaciones logicasOperaciones logicasOperadores logicos en condicionalesO d l i i l BIT

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 3202 PRC

Operadores logicos a nivel BIT

Page 4: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Agenda cont.ArraysF iFunciones

Modularizacion de un programaCreacion y declaracion de funcionesLlamada a funcionesEntrega de parametros

DirectivasDirectivas #include#d fi

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 4202 PRC

#define

Page 5: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Agenda cont.

Las Librerias de C18Librerias para el manejo de Perifericos

Manejo de la USARTManejo del TimersManejo del ADCj

Librerias para control por softwareManejo de displays LCDsManejo de displays LCDs

Librerias para tratamiento de Strings

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 5202 PRC

Page 6: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Instalacion de C18

V3.2 August 10, 2007

Page 7: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Como hacer nuestro Pimer ProyectoPimer Proyecto

V3.2 August 10, 2007

Page 8: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Arquitectura de un Programa en C18Programa en C18

V3.2 August 10, 2007

Page 9: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Arquitectura de un programa en C18C18

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 9202 PRC

Page 10: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Tipos de Datos en MPLAB C18Los datos que puede manejar C pueden ser del tipo enteros, enteros positivos y negativos, decimales con , p y g ,presición simple o mayor, llamados “flotantes de simple y doble presición”

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 10202 PRC

Page 11: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Datos y Variables

V3.2 August 10, 2007

Page 12: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Formato de datos Little Endian

Los datos de más de un byte de longitud seLos datos de más de un byte de longitud, se almacenan en memoria siguiendo el criterio LITTLE ENDIAN, es decir los bytes menos significativos ocupan las posiciones de memoria más bajas.Ejemplo:

#pragma idata mi_dato=0x1000Long valor = 0xAABBCCDD;Long valor 0xAABBCCDD;

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 12202 PRC

Page 13: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Las variablesPara almacenar los datos dentro de un microcontrolador se usa la memoria, el lugar donde se pueden almacenar , g ptemporalmente los mismos, los denominamos VARIABLESDesde el p nto de ista físico la ariable se aloja en nDesde el punto de vista físico la variable se aloja en un 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 variableLas variables por tanto se identifican por un nombre oLas variables por tanto se identifican por un nombre o “identificador” y por tener una dimensión lo cual se asigna mediante un “tipo” que puede ser modificado por

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 13202 PRC

un “calificador”

Page 14: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Tipos de Variables: CharPara almacenar datos las variables podrán ser:

char (carácter): puede contener un carácter o un datochar (carácter): puede contener un carácter o un dato numérico de -128 a +127unsigned char (carácter sin signo): puede contener un dato de 0 a 255signed char (carácter con signo): es igual que la tipo char

RegistroRegistroRegistroRegistro

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 14202 PRC

Page 15: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Variables tipo intLa variable tipo int ocupa 2 bytes (16 bits), y la misma se usa típicamente para almacenar datos p pnuméricos.

Int se usa cuando queremos almacenar cualquier número que vaya desde 32768 a +32767número que vaya desde -32768 a +32767Unsigned int permite el rango máximo de almacenamiento pero solo para números positivos desde 0 a 65535

2 R i t d 8bit2 R i t d 8bit© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 15202 PRC

2 Registros de 8bits2 Registros de 8bits

Page 16: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Variables tipo shortLa 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)rango a 3 bytes (24bits)

short se usa cuando queremos almacenar cualquier número que vaya desde -32768 a +32767unsigned short permite el rango máximo de almacenamiento perounsigned short permite el rango máximo de almacenamiento pero solo para números positivos desde 0 a 65535short long permite un rango mayor de almacenamiento con un rango negativo y positivo de números que va desde -8.368.608 a +8 368 607 (24 bits)+8.368.607 (24 bits)unsigned short long permite todo el rango pero solo admite numeros positivos desde 0 a 16.777.215 (24 bits)

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 16202 PRC

2 o 3 Registros de 8bits2 o 3 Registros de 8bits

Page 17: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Variables tipo longLa variable tipo long ocupa 4 bytes, se usa cuando queremos almacenar cualquier númerocuando queremos almacenar cualquier número que vaya desde -2.147.483.648 a +2.147.483.647unsigned long permite el rango máximo deunsigned long permite el rango máximo de almacenamiento pero solo para números positivos desde 0 a 4.294.967.295

4 Registros de 8bits4 Registros de 8bits© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 17202 PRC

4 Registros de 8bits4 Registros de 8bits

Page 18: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Variables tipo float y doubleLas variables tipo float y double ocupan 4 bytes, se usan cuando queremos almacenar cualquierse usan cuando queremos almacenar cualquier número decimal.

4 Registros de 8bits4 Registros de 8bits© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 18202 PRC

4 Registros de 8bits4 Registros de 8bits

Page 19: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Almacenamiento de variablesvariables

Las variables pueden crearse en la memoria de datos (ram) o en la memoriamemoria de datos (ram) o en la memoria de programa del microcontrolador (rom).Para indicarle al compilador donde deberáPara indicarle al compilador donde deberá crear la variable se antepone a la definición de la variable las siglas rom o gram.Sino indicamos cual es el lugar donde se galmacenaran las variables, estas por default se almacenaran en memoria de

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 19202 PRC

datos

Page 20: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Almacenamiento en memoria de ProgramaPrograma

Para almacenar datos en memoria de programa eixsten 2 modificadoresprograma eixsten 2 modificadores, denominados near y far (cercana y lejana:

f d t difi d lfar: cuando se usa este modificador la variable se crea en la memoria de programa por encima de los 64Kpor encima de los 64Knear: cuando se usa este modificador la variable se crea en memoria de programa porvariable se crea en memoria de programa por debajo de los 64KEjemplo:

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 20202 PRC

Ejemplo:#define MEM_MODEL near

Page 21: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Las funcionesUn programa de C esta constituido por rutinas, o segmentos de código que realizan una función g g qdeterminada.Las funciones tienen un nombre, mediante el cual se identificanidentifican. La función mas importante, y donde comienza todo programa se denomina main (principal)p g (p p )Todo programa debe tener una función main donde se encuentra la parte principal del mismo.Las funciones son bloques de sentencias de código, y están limitadas por llaves {}. Toda función comienza con el “{“ y termina con “ } “

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 21202 PRC

el { y termina con }

Page 22: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Visibilidad de las variablesLas 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 ariables locales solo e isten dentro de lasLas variables locales solo existen dentro de las funciones donde fueron creadas, y son destruidas, al terminar la funciónLas variables locales solo pueden ser vistas y por tanto usadas, dentro de la función donde se crearon.L i bl l b l i t t d lLas variables globales son vistas por todas las funciones, y por tanto pueden ser usadas por cualquier función.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 22202 PRC

Page 23: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplos de definiciones de variablesvariables

Definiendo una variable:int contador;int contador;char buffer;

Definiendo variables múltiples:char buffer1, datos, contador;Definiendo e inicializando las variables: unsigned long contador = 0;unsigned long contador 0;

Nota: todas las sentencias en los programas C t i i l den C terminan siempre con un ; el programador

debe tener cuidado en no olvidar esta regla pues generará un error en el compilador

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 23202 PRC

p g p

Page 24: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Sistemas de numeración

Los datos en los programas pueden ibi di ti t f tescribirse en distintos formatos:

Decimal: es el formato normal por defaultBinario: se debe anteponer 0b :Binario: se debe anteponer 0b : 0b1011001Hexadecimal: se antepone 0x:Hexadecimal: se antepone 0x:0x0F1A

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 24202 PRC

Page 25: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplo de un Programa que controla un LEDcontrola un LED

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 25202 PRC

Page 26: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Estructuras dentro de un programaun programa

V3.2 August 10, 2007

Page 27: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Estructuras condicionalesLas estructuras condicionales evalúan una condición determinada por el programador. La condición a evaluar p p gse coloca entre paréntesis.La sentencia para el condicional comienza con la palabra ififSi la condición se cumple, se ejecuta la sentencia siguiente al condicional; caso contrario, se ejecuta la g ; , jque se encuentra luego de la palabra else

Ejemplo:if(PORTAbits.RA4==1) // testeamos RA4.

PORTBbits.RB0=1; // Si esta en 1 Encendemos el PORT RB0

l

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 27202 PRC

else

PORTBbits.RB1=0; // Si esta en 0 Apagamos el PORT RB0

Page 28: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Sentencias Condicionales cont. Si la condición debe ejecutar mas de una sentencia estas deben ir entreuna sentencia, estas deben ir entre llaves:

if (PORTAbits.RA4==1) // testeamos si RA4 = 1.

{ PORTBbits.RB0=1; // Si esta en 1

Encendemos RB0PORTCbits.RC0=0; // Apagamos RC0

contador++; // incrementamos el contador}}

else{

PORTBbits.RB0=0; // Sino Apagamos RB0.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 28202 PRC

RB0.PORTCbits.RC0 = 1; // Encendemos RC1contador--; // decrementamos el contador

}

Page 29: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ciclos Iterativos

Un ciclo iterativo es una secuencia de i t i itinstrucciones que se repiten sucesivamente hasta que se cumpla una condición.Existen varias formas de crear unExisten varias formas de crear un ciclo iterativo:

Ci l FORCiclo FORCiclo While

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 29202 PRC

Ciclo Do-While

Page 30: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ciclos FORPara crear este ciclo se usa la palabra clave FORLa condición a evaluar tiene 3 parámetros los cuales seLa condición a evaluar tiene 3 parámetros, los cuales se colocan entre paréntesis y separados por “;”(i=0;i<10;i++): en este caso i es la variables que se testea, se inicia en 0, y se evalúa que la misma tenga un valor <10, finalmente indicamos que i se incremente cada vez

Ejemplo:

for (i=0 i<10 i++)for (i=0 ; i<10 ; i++){

PORTB = i; // enviamos al PORTB el valor de i}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 30202 PRC

}

Page 31: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ciclos whileOtra forma de un ciclo iterativo es la del while (mientras) En este caso mientras la condición(mientras). En este caso mientras la condición de evaluación se cumpla, se ejecutaran las sentencias encerradas entre llaves. La condición de evaluación debe ir entre paréntesis.

while (PORTAbits.RA0 == 1) // evaluamos que se cumpla RA0 = 1

{ // abrimos bloque que se ejecutará

contador++; // incrementamos el contador

PORTB = contador; // mostramos el contador

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 31202 PRC

} // cerramos bloque

Page 32: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ciclo do-whileEl ciclo do-while es similar al while, con la diferencia que mientras que en el while, si la condición no se cumple, el q , p ,bloque de sentencias no se ejecuta; en el do while por lo menos se ejecutan una vez.La condición es checkeada al final del bloq eLa condición es checkeada al final del bloque

do { {

contador ++;

PORTB = contador;PORTB = contador;

} while (PORTAbits.RA1 = 1);

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 32202 PRC

Page 33: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Sentencias de controlBREAKBREAK

SentenciaSentencia BREAKBREAK• interrumpe la ejecución de un bucle while, do-while o foro for.

Ejemplo:Ejemplo: ¿ cómo salir de un bucle infinito for ?

For (;;) {if ( a == 0) {

break;}

a=PORTA;

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 33202 PRC

a PORTA;}

Page 34: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Sentencia de ControlCONTINUECONTINUE

Sentencia Sentencia CONTINUECONTINUE

S tili l b l l i i t ti ió• Se utiliza en los bucles para pasar a la siguiente repetición.

For (;;) {( ) {if ( PORTAbits.RA0 = 1) {

continue;}}

contador++;}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 34202 PRC

Page 35: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Sentencias de ControlGOTOGOTO

Sentencia gotoSentencia goto

T fi i di i l t l t l l t iTransfiere incondicionalmente el control a la sentencia etiquetada por el identificador.

goto identificador;

identificador:identificador:instrucciones;

N b á ti tili l !!!N b á ti tili l !!!

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 35202 PRC

¡¡¡ No es una buena práctica utilizarla !!!¡¡¡ No es una buena práctica utilizarla !!!

Page 36: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Operadores

V3.2 August 10, 2007

Page 37: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Operadores de RelaciónOperador Resultado (FALSE= 0, TRUE ≠ 0)Operación Ejemplo

MM<< << 1 i1 i i 0i 0Menor queMenor que<<

Menor que o Menor que o igual aigual a

<=<=

x < yx < y

x <= yx <= y

1 si 1 si xx menor que menor que yy, sino 0, sino 01 si 1 si xx menor o igual a menor o igual a yy, sino 0, sino 0

Mayor queMayor que>>

Mayor que o Mayor que o i li l

>=>=

x > yx > y

x >= yx >= y

1 si 1 si xx mayor que mayor que yy, sino 0, sino 0

1 si 1 si xx mayor o igual a mayor o igual a yy, sino 0, sino 0

Igual aIgual a====

No igual aNo igual a!=!=

igual aigual ax == yx == y

x != yx != y

yy

1 si 1 si xx igual a igual a yy, sino 0, sino 0

1 si1 si xx no igual ano igual a yy sino 0sino 0

En expresiones condicionalesEn expresiones condicionales cualquier valor no 0cualquier valor no 0 eses

No igual aNo igual a!! x ! yx ! y 1 si 1 si xx no igual a no igual a yy, sino 0, sino 0

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 37202 PRC

En expresiones condicionales, En expresiones condicionales, cualquier valor no 0cualquier valor no 0 es es es interpretado TRUE. Un valor de cero 0 es siempre FALSE.es interpretado TRUE. Un valor de cero 0 es siempre FALSE.

Page 38: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Operadores de relaciónDiferencia entre = y ==Diferencia entre y

Tenga cuidado de no confundir = y ==. N i bi bl !

= es el operador asignado

¡No son intercambiables!

= es el operador asignadox = 5 asigna el valor 5 a la variable x

l d l i l 'i l '== es el operador relacional 'igual a' x == 5 prueba si es el valor de x es

ifif (( 55))5 ifif ((x x ==== 55)){{

haga si el valor dehaga si el valor de xx es 5es 5

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 38202 PRC

haga si el valor dehaga si el valor de xx es 5es 5}}

Page 39: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Operadores LógicosOperado

rResultado (FALSE = 0, TRUE ≠ 0)Operacion Ejemplo

Logica ORLogica OR||||

Logica ANDLogica AND&&&&

x || yx || y

x && yx && y

0 Si ambos 0 Si ambos xx == 00 e e yy == 00,,

1 Si ambos 1 Si ambos xx ≠≠ 00 y y yy ≠≠ 00,,sino 0sino 0

r

Logica NOTLogica NOT!!

gg||||

!x!x

|| y|| y

1 if 1 if xx == 00, sino 0, sino 0

yy ,,sino 1sino 1

En expresiones condicionales cualquier valor no zero es

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 39202 PRC

En expresiones condicionales, cualquier valor no zero es interpretado como TRUE. Un valor 0 es siempre FALSE.

Page 40: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Operadores Lógicos a nivel BIT(Bitwise)(Bitwise)

Operador Resultado (para cada bit)Operación Ejemplo

1 i 11 i 1Bitwise ANDBitwise AND&&

Bitwise ORBitwise OR||

x & yx & y

x | yx | y

1, si x e y son 11, si x e y son 10, si x o y son 00, si x o y son 01, si x o y son 11, si x o y son 10 i 0 00 i 0 0

Bitwise XORBitwise XOR^̂

Bitwise ORBitwise OR||

x ^ yx ^ y

x | yx | y

1, si x es distínto de y1, si x es distínto de y0, si x es igual a y 0, si x es igual a y

0, si x e y 0 son 00, si x e y 0 son 0

Bitwise NOTBitwise NOT(Complemento a uno)(Complemento a uno)

~~ ~x~x 1, si x es 01, si x es 00, si y es 10, si y es 1

La operación se realiza Bit a Bit entre los 2 operandos que estan afectados por la

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 40202 PRC

operandos que estan afectados por la sentencia

Page 41: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

OperadoresDesplazamientoDesplazamiento

Operador ResultadoOperación Ejemplo

D l l ID l l I<<<< <<<< ShiftShift bit l Ibit l IDesplaza a la IzqDesplaza a la Izq<<<<

Desplaza a la DerechaDesplaza a la Derecha>>>>

x << yx << y

x >> yx >> y

Shift Shift xx por por yy bits a la Izqbits a la Izq

Shift Shift xx por por yy bits a la Derechabits a la Derecha

Ejemplo de desplazamiento a la Izquierda:x = 5; // x = 0b00000101 = 5x 5; // x 0b00000101 5y = x << 2; // y = 0b00010100 = 20

C d j t l t i d d l i tCada vez que se ejecuta la sentencia de desplazamiento, el contenido de la variable se desplaza hacia la derecha o la izquierda N cantidad de bits, segun se exprese

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 41202 PRC

Para desplazar, la variable es rellenada con ceros (no es rotación, es desplazamiento)

Page 42: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

OperadoresEl operador condicionalEl operador condicional

El operador condicional puede ser usado para condicionar el asignarle un valor a

Ejemplo 1 (el mas usado comunmente)

para condicionar el asignarle un valor a una variable

Ejemplo 1 (el mas usado comunmente)

x = (condicion) ? a : b;

Ejemplo 2 (el menos usado)

(condicion) ? (x = a):(x = b);

x = a si la condicion es true

(condicion) ? (x a):(x b);

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 42202 PRC

x = a si la condicion es truex = b si la condición es falseEn ambos casos:

Page 43: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Arrays

V3.2 August 10, 2007

Page 44: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysDefiniciónArraysArrays sonson laslas variablesvariables queque puedenpueden almacenaralmacenar muchosmuchos artículosartículos deldelmismomismo tipotipo.. LosLos itemsitems individualesindividuales sonson conocidosconocidos comocomo elementoselementos,, sonsonalmacenadosalmacenados secuencialmentesecuencialmente yy sonson identificadosidentificados unicamenteunicamente porpor elelindiceindice deldel ARRAY(llamadoARRAY(llamado avecesaveces unun subscriptsubscript))..

Arrays:Pueden contener cualquier número de elementosL l t d b d l i tiLos elementos deben ser del mismo tipoEl índice base es cero

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 44202 PRC

El tamaño del Array (numero de elementos) debe estar en la declaración

Page 45: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysComo crear un Array

Sintaxis

Como crear un ArrayLos arrays se declaran como las variables:

tamaño refierre al número de elementos

tipotipo nombrenombrearrayarray[[tamañotamaño];];

tamaño refierre al número de elementostamaño debe ser una constante entera

Ejemplo

intint a[10]a[10]; ; // Un array que contiene 10 elementos// Un array que contiene 10 elementos

charchar s[25]s[25]; ; // Un array que contiene 25 caracteres// Un array que contiene 25 caracteres

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 45202 PRC

Page 46: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysComo inicializar un array en la declaración

Sintaxis

Como inicializar un array en la declaraciónLos Arrays pueden ser inicializados con una lista en la declaración :

tipotipo nombrearraynombrearray[[tamañotamaño] = {] = {itemitem11,,……,,itemitemnn};};

Los items deben ser todos iguales en el tipo de array

Ejemplo

intint aa[[55] =] = {{1010,, 2020,, 3030,, 4040,, 5050};};

p y

charchar bb[[55] =] = {{'a''a',, 'b''b',, 'c''c',, 'd''d',, 'e''e'}; };

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 46202 PRC

Page 47: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysComo usar un array

Sintaxis

Como usar un arrayArrays son accesibles como las variables, pero con un index:

nombrearraynombrearray[[indiceindice]]

Indice puede ser una variable o una constantepEl primer elemento en un array tiene un indice 0C no proporciona ninguna comprobación de los límites

Ejemplo

intint ii,, aa[[1010]; ]; //un array que contiene 10 elementos//un array que contiene 10 elementos

forfor((ii == 00;; ii << 1010;; ii++) {++) {aa[[ii] =] = 00;; //Inicializa los elementos del array a 0//Inicializa los elementos del array a 0

}}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 47202 PRC

}}aa[[44] =] = 4242;; //cargamos el elemento 4//cargamos el elemento 4

Page 48: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysCreando Arrays multidimensionales

Sintaxis

Creando Arrays multidimensionalesAgregue las dimensiones adicionalesen la declaración delarray :

Los Arrays pueden tener cualquier número de

tipotipo nombrearraynombrearray[[tamañotamaño11]...[]...[tamañotamañonn];];

y p qdimensionesTres dimensiones tienden a ser las más usadas en práctica común

Ejemplopráctica común

intint aa[[1010][][1010]; ]; //10x10 array para 100 enteros//10x10 array para 100 enteros

floatfloat bb[[1010][][1010][][1010];];//10x10x10 array para 100 decimales//10x10x10 array para 100 decimales

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 48202 PRC

Page 49: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysCreando Arrays multidimensionales

Sintaxis

Creando Arrays multidimensionalesArrays pueden ser inicializados con un listado dentro de un a listado:

tipotipo nombrearraynombrearray[[tamañotamaño00]…[]…[tamañotamañonn] = ] = {{{{itemitem,,……,,itemitem},},

{{itemitem,,……,,itemitem}};}};

Ejemplo

charchar aa[[33][][33] =] = {{{{'X''X',, 'O''O',, 'X''X'},},{{'O''O',, 'O''O',, 'X''X'},},{{'X''X',, 'X''X',, 'O''O'}};}};

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 49202 PRC

intint bb[[22][][22][][22] = {{{] = {{{00, , 11},{},{22, , 33}},{{}},{{44, , 55},{},{66, , 77}}};}}};

Page 50: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysVisualizando Arrays de 2 dimensionesVisualizando Arrays de 2 dimensiones

int a[3][3] = {{0, 1, 2},{3, 4, 5},

a[y][x]fila, Columna

Columna

{6, 7, 8}};

a[0][0] = 0;a[0][1] = 1;[0][2] 2

x0

0

1

0 1fila

0

2

2

a[0][2] = 2;a[1][0] = 3;a[1][1] = 4;

0

1

0 1

3 4Fila

fila

1

2

50,0 0,1 0,2

6a[1][2] = 5;a[2][0] = 6;a[2][1] = 7;

Ff

7 82a 2

1,0 1,1 1,2

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 50202 PRC

a[2][1] = 7;a[2][2] = 8; y

fila

2,0 2,1 2,2

Page 51: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysVisualizando Arrays de 3 dimensionesVisualizando Arrays de 3 dimensiones

int a[2][2][2] = {{{0, 1},{2, 3}},{{4 5} {6 7}}};

z1a[z][y][x]Plano, Fila, Columna {{4, 5},{6, 7}}};

a[0][0][0] = 0;a[0][0][1] = 1;a[0][1][0] = 2;

0

04

5lane

0

a[0][1][0] = 2;a[0][1][1] = 3;a[1][0][0] = 4; x

0

1

01

5

7fil

a

Pl1 a[1][0][1] = 5;

a[1][1][0] = 6;a[1][1][1] = 7;

y0

1 23

7

Plan

e 1

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 51202 PRC

[ ][ ][ ] ; 01

Page 52: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

ArraysEjemplo de procesamiento de un arrayEjemplo de procesamiento de un array

/**************************************************/*************************************************** Imprime 0 a 90 en incrementos de 10* Imprime 0 a 90 en incrementos de 10pp**************************************************/**************************************************/intint mainmain((voidvoid)){{

intint i i == 00;;intint aa[[1010] = {] = {00,,11,,22,,33,,44,,55,,66,,77,,88,,99};};

whilewhile ((ii << 1010))whilewhile ((i i << 1010)){{

aa[[ii] *=] *= 1010;;printfprintf(("%d"%d\\n"n", a, a[[ii]);]);ii++;++;

}}

whilewhile ((11););

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 52202 PRC

whilewhile ((11););}}

Page 53: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

StringsArray de caracteres y Strings

Definición

Array de caracteres y Strings

StringsStrings sonson arrayarray dede charchar enen loslos cualescuales elel últimoúltimo caractercaracterStringsStrings sonson arrayarray dede charchar enen loslos cualescuales elel últimoúltimo caractercaractereses unun caractercaracter nulonulo ''\\00'' concon unun valorvalor ASCIIASCII dede 00.. CC nonotienetiene tipostipos dede datosdatos stringstring naticosnaticos ss ,, loslos stringsstrings debendeben sersertratadostratados comocomo arraysarrays dede caracterescaracteres..

Strings:Estan encerrados entre comillas "string"

tratadostratados comocomo arraysarrays dede caracterescaracteres..

Estan encerrados entre comillas "string"Terminan con un caracter nulo '\0'Deben ser tratados como una array de caracteresDeben 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. Slide 53202 PRC

Page 54: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

StringsCreando un Array o String de Caracteres

sintaxis

Creando un Array o String de CaracteresLos Strings se crean como en cualquier otro array de char:

charchar nombrearraynombrearray[[longitudlongitud];];

d b t l l it dlongitud debe ser un caracter mas que la longitud máxima del string a almacenarpara que tambien se pueda guardar el caracter el caracter nulo '\0'

ejemplo

p gUn array char con n elementos contiene un string igual a n-1 char

ejemplo

charchar str1str1[[1010]; ]; //Contiene 9 caractere mas '//Contiene 9 caractere mas '\\0'0'

charchar str2str2[[66];]; //contiene 6 caracteres mas '//contiene 6 caracteres mas '\\0'0'

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 54202 PRC

charchar str2str2[[66]; ]; //contiene 6 caracteres mas '//contiene 6 caracteres mas '\\0'0'

Page 55: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

StringsComo inicializar un String al Declararlo

Sintaxis

Como inicializar un String al DeclararloArray de caracteres pueden ser inicializados con strings literales:

charchar nombrearraynombrearray[] = [] = "Microchip""Microchip";;

Array no requiere tamañoy qEl tamaño es automaticamente determinado por la longitud de string caracter NULL '\0' es automaticamente adicionado

sintaxis

charchar str1str1[] =[] = "Microchip""Microchip"; ; //10 caracteres "Microchip//10 caracteres "Microchip\\0"0"

caracter NULL '\0' es automaticamente adicionado

charchar str2str2[[55] =] = "Hola""Hola"; ; //5 caracteres "Hola//5 caracteres "Hola\\0"0"

//Declaración alternati a de string//Declaración alternati a de string req iere tamañoreq iere tamaño

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 55202 PRC

//Declaración alternativa de string //Declaración alternativa de string –– requiere tamañorequiere tamañocharchar str3str3[[44] =] = {{'P''P',, 'I''I',, 'C''C',, ''\\0'0'};};

Page 56: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

StringsComo inicializar un string en Código

Sintaxis

Como inicializar un string en CódigoEn código, puede inicializarse un string elemento por elemento:

nombrearraynombrearray[[00] = ] = charchar11;;nombrearraynombrearray[[11] = ] = charchar22;;

nombrearraynombrearray[[nn] = ] = ''\\0'0';;

Caracter Null '\0' debe ser adicionado manualmenteEjemplo

strstr[[00] =] = ‘H’‘H’; ;

\

strstr[[11] =] = ‘o’‘o’;;strstr[[22] =] = ‘l’‘l’;;strstr[[33] =] = ‘a’‘a’;;strstr[[55]] ‘‘\\0’0’;;

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 56202 PRC

strstr[[55] =] = ‘‘\\0’0’;;

Page 57: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

StringsComparando StringsComparando Strings

Los Strings no pueden ser comparados por operadores relacionales (== != etc )operadores relacionales (==, !=, etc.)Debe usar librería C Standar en funciones para manipulación de stringsmanipulación de stringsstrcmp() retorna 0 si los string son iguales

Ejemplo

charchar strstr[] =[] = "Hola""Hola";;[][]

if if ((!!strcmpstrcmp(( strstr, , "Hola""Hola"))))printfprintf((“El string es “El string es \\"%s"%s\\".".\\n"n", , strstr););

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 57202 PRC

pp (( gg \\ \\ \\ ,, ););

Page 58: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funciones

V3.2 August 10, 2007

Page 59: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesEstructura un programa

Print()

Estructura un programa

Print(){...return;

main()Nop(){

return;}

{...Print();

Delay(){

...return;

}...Delay();... ...

Nop();return;

}

}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 59202 PRC

}

Page 60: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesQue es una función?

Definition

Que es una función?

FuncionesFunciones sonson segmentossegmentos dede programaprograma autónomosautónomosgg p gp gdiseñadosdiseñados parapara realizarrealizar unauna tareatarea específica,específica, bienbien definidadefinida..

Todos los programas en C tienen una o masTodos los programas en C tienen una o mas funciones La función main() es requeridaLa función main() es requeridaLas funciones pueden tomar valores desde el código que las llamacódigo que las llama Las funciones retornan un valor simpleLas funciones ayudan a organizar un programa

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 60202 PRC

Las funciones ayudan a organizar un programa en segmentos logicamente manejables

Page 61: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesRecuerda las clases de Algebra?

Las Funciones en C son conceptualmente son similares a las funciones matemáticas

Recuerda las clases de Algebra?

similares a las funciones matemáticas…

Definición de la funciónDefinición de la función

f(f(xx) = ) = xx22 + 4+ 4xx +3+3Nombre de laNombre de lafunciónfunción

Si usted pasa un valor 7 a la función: f(7) el

Parámetro de la funciónParámetro de la función

Si usted pasa un valor 7 a la función: f(7), el valor 7 obtenido "copiado" dentro de x y usado donde quiera que x exisista con la función

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 61202 PRC

donde quiera que x exisista con la función definida: f(7) = 72 + 4*7 + 3 = 80

Page 62: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefiniciones

Sintaxis

Definiciones

Tipo de dato retornadoTipo de dato retornadoppexpresionexpresion

NombreNombreParametro listadoParametro listado

(opcional)(opcional)

tipotipo identifieridentifier((tipotipo11 argarg11,,……,,tipotiponn argargnn)){{d l ó d t id l ó d t ideclaracón de sentenciasdeclaracón de sentenciasreturnreturn expresionexpresion;;

}}

CuerpoCuerpo

Retorna Evaluación (opcional)Retorna Evaluación (opcional)CabeceraCabecera

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 62202 PRC

Retorna Evaluación (opcional)Retorna Evaluación (opcional)CabeceraCabecera

Page 63: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefiniciones de funciones: Retorna tipo de datos

sintaxis

Definiciones de funciones: Retorna tipo de datos

tipotipo identificadoridentificador((tipotipo11 argarg11,, ,,tipotipo argarg ))tipotipo identificadoridentificador((tipotipo11 argarg11,,……,,tipotiponn argargnn)){{declaracionesdeclaraciones

t it isentenciassentenciasreturnreturn expresionexpresion;;

}}

El tipo de clarado de la función pdebe coincidir con el tipo de datos que expresion devuelva

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 63202 PRC

que expresion devuelva

Page 64: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefinición de Funciones: Tipo de datos retornadoDefinición de Funciones: Tipo de datos retornado

Una función puede tener declaraciones para retornos múltiples pero solamentepara retornos múltiples, pero solamente una será ejecutada y deben todas ser del mismo tipo

ejemplo

mismo tipo

intint testtest((intint aa,, intint bb)){{

ifif ((a a >> bb))returnreturn 11;;

elseelsereturnreturn 00;;

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 64202 PRC

}}

Page 65: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefinición de Funciones: Tipo de datos retornadosDefinición de Funciones: Tipo de datos retornados

El tipo de función es void si:La sentencia return no tiene expresionLa sentencia return no tiene expresionLa sentencia return no esta presente en todastodas

Esto a veces llama a una función de procedimiento puesto que no se devuelve nada

Ejemplo

voidvoid identificadoridentificador((tipotipo11 argarg11,,……,,tipotiponn argargnn))

procedimiento puesto que no se devuelve nada

{{declaracionesdeclaracionessentenciassentencias returnreturn;; puede ser omitida si no puede ser omitida si no

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 65202 PRC

returnreturn;;}}

ppse retorna nadase retorna nada

Page 66: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefinición de Funciones: ParámetrosDefinición de Funciones: Parámetros

Los parámetros de una función se declaran apenas como variables ordinarias pero unaapenas como variables ordinarias, pero una coma delimita la lista dentro del paréntesislos nómbres de los parámetros solo son válidoslos nómbres de los parámetros solo son válidos dentro de la función (locales a la funcion)

Sintaxistipotipo identificadoridentificador((tipotipo11 argarg11,,……,,tipotiponn argargnn)){{{{declaracionesdeclaracionessentenciassentenciasreturnreturn expresionexpresion;;

Parámetros de funcionesParámetros de funciones

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 66202 PRC

returnreturn expresionexpresion;;}}

Page 67: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefinición de funciones: ParámetrosDefinición de funciones: Parámetros

Lista de parámetros puede mezclar datosint Txdata(int x float y char z)int Txdata(int x, float y, char z)

Los parámetros del mismo tipo se deben declarar por separado es decir:declarar por separado - es decir:int maximum(int x, y) no puede trabajarint maximum(int x int y) es correctaint maximum(int x, int y) es correcta

EjemploEjemplointint maximummaximum((intint xx,, intint yy)){{returnreturn ((((xx >=>= yy) ?) ? xx :: yy););

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 67202 PRC

returnreturn ((((x x >> yy) ?) ? x x :: yy););}}

Page 68: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDefinición de funciones: ParámetrosDefinición de funciones: Parámetros

Si no se requieren parámetros , usar l l b l id l d lla palabra clave void en lugar de la lista de parámetro al definir la función

Ejemplotipotipo identificadoridentificador((voidvoid)){{

declaracionesdeclaracionessentenciassentenciassentenciassentenciasreturn return expresionexpresion;;

}}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 68202 PRC

Page 69: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesComo llamar o invocar una Funcion

Sintaxis de la llamada a función

Como llamar o invocar una Funcion

Sin parámetros y no retorna valorSin parámetros y no retorna valorSin parámetros y no retorna valorSin parámetros y no retorna valorDelayDelay();();

Sin parámetros pero con retorno de valorSin parámetros pero con retorno de valorSin parámetros pero con retorno de valorSin parámetros pero con retorno de valorx x == DelayDelay();();

Con parámetros pero sin retorno de valorCon parámetros pero sin retorno de valorCon parámetros pero sin retorno de valor Con parámetros pero sin retorno de valor Delay10KTCYxDelay10KTCYx((aa););

Con parámetros y retorna un valorCon parámetros y retorna un valorCon parámetros y retorna un valorCon parámetros y retorna un valorx x == itoaitoa((aa,, bb););

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 69202 PRC

Page 70: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesFuncion PrototiposFuncion Prototipos

Justificada como variables, una función debe ser declarada antes de que pueda ser utilizadaser declarada antes de que pueda ser utilizadaLa declaración debe ocurrir antes de main () o de otras funciones que la utilicenotras funciones que la utilicenDeclaraciones pueden tener dos formas:

La definición de función enteraJustificada como funcion prototype – la definición de función en sí mismo se puede entonces poner dondequiera en el programa

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 70202 PRC

Page 71: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesFunciones Prototipos

Función prototipo puede tener dos formatos diferentes:

Funciones Prototipos

diferentes:Una exacta copia de la función HEADER:

Ejemplo – Funcion Prototipo 1Ejemplo – Funcion Prototipo 1

intint maximummaximum((intint xx,, intint yy););

Como la función main, pero sin los nombres de parámetro - solamente los tipos necesitan

t t d á testar presentes para cada parámetro:

Ejemplo – Funcion Prototipo 2

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 71202 PRC

intint maximummaximum((intint,, intint););

Page 72: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDeclaracion y Uso: Ejemplo 1

Ejemplo 1

Declaracion y Uso: Ejemplo 1

intint aa == 55 bb == 1010 cc;;int int aa == 55,, bb == 1010,, cc;;

intint maximomaximo((intint xx,, intint yy)){{

Funcion es Funcion es d l dd l d{{

returnreturn ((((x x >=>= yy) ?) ? x x :: yy););}}

declaradadeclarada y y definidadefinida antesantesde ser usada en de ser usada en

intint mainmain((voidvoid)){{

el main()el main()

c c == maximomaximo((aa,, bb););printfprintf((“el maximo es: %d“el maximo es: %d\\n"n",, cc))

}}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 72202 PRC

Page 73: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesDeclaracion y Uso: Ejemplo 2

Ejemplo 2

Declaracion y Uso: Ejemplo 2

int int aa == 55,, bb == 1010,, cc;;F iF i

,, ,, ;;

intint maximomaximo((intint xx,, intint yy););

Funcion es Funcion es declaradadeclarada con con prototipo prototipo antesantes

intint mainmain((voidvoid)){{

cc == maximomaximo((aa bb););

p pp pde ser usada en de ser usada en el main()el main()

c c == maximomaximo((aa,, bb););printfprintf((“el maximo es %d“el maximo es %d\\n"n",, cc))

}}

F iF iintint maximomaximo((intint xx,, intint yy)){{

returnreturn ((((xx >=>= yy) ?) ? xx :: yy););

Funcion es Funcion es definidadefinida despuesdespuesde ser usada en el de ser usada en el

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 73202 PRC

returnreturn ((((x x >=>= yy) ?) ? x x :: yy););}} main()main()

Page 74: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesPasaje de parámetros por ValorPasaje de parámetros por Valor

Parametros pasados a una función son pasados l lvalor por valor

Valores pasados a una función son copiados dentro de los parámetros de las variables localesLa variable original que es pasada a la función no puede ser modificada por la funciónpuesto o puede se od cada po a u c ó puestoque solamente una copia de su valor fue pasada

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 74202 PRC

Page 75: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FuncionesPasaje de parámetros por Valor

Ejemplo

Pasaje de parámetros por Valor

int int aa,, bb,, cc;;

intint contadorcontador((intint xx,, intint yy)){{

El El valorvalor de de aa es es copiadocopiado en en xx..ElEl ll dd i di d

{{x x == x x ++ (++(++yy););returnreturn xx;;

}} El El valorvalor de de bb es es copiadocopiado en en yy..La función no cambia el valor La función no cambia el valor dede aa óó bb

}}

intint mainmain((voidvoid)){{ de de aa ó ó bb..{{

aa == 55;;bb == 1010;;cc == contadorcontador((aa bb););

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 75202 PRC

c c == contadorcontador((aa,, bb););}}

Page 76: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funciones y AlcanceVariables declaradas dentro de la funciónVariables declaradas dentro de la función

Las variables declararon dentro de un bloque de la función no son accesibles fuera de la función

Ejemplo

intint xx;;intint acumulaacumula((intint nn)){{

intint aa;;;;returnreturn ((aa +=+= n)n);;

}}intint mainmain((voidvoid))

Esto puede generar un error. Esto puede generar un error. aa no no puede ser accedida fuera de la funciónpuede ser accedida fuera de la función

tt aa (( o do d)){{

x x == acumulaacumula((55););xx == aa;;

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 76202 PRC

puede ser accedida fuera de la función puede ser accedida fuera de la función donde ha sido declarada.donde ha sido declarada.

x x aa;;}}

Page 77: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funcione y AlcancesVariable Global versus Local

Ejemplo

Variable Global versus Local

intint x x == 55;; xx puede ser vista por todospuede ser vista por todos

intint sumasuma((intint yy)){{

xx puede ser vista por todospuede ser vista por todos

{{intint z z == 11;;returnreturn ((x x ++ y y ++ zz););

}}

(suma)(suma) parametro local es parametro local es yy(suma)(suma) variable local es variable local es zz

}}

intint mainmain((voidvoid)){{ (main)(main) variable local esvariable local es aa{{

intint a a == 22;;x x == sumasuma((aa););aa == sumasuma((xx););

(main)(main) variable local es variable local es aa

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 77202 PRC

a a == sumasuma((xx););}}

Page 78: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funciones y AlcanceParametersParameters

”Superposición" de nombres de variables:D l d Gl b l l l D l d l l b l

intint nn;;

n Declarada como Global y local n Declarada solo como global

intint nn;;

intint acumulaacumula((intint nn)){{

intint acumulaacumula((intint xx)){{

……y y +=+= nn;;

……y y +=+= nn;;

……}}

……}}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 78202 PRC

Page 79: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funciones y Alcance Parametros

Ejemplo

intint nn;;

Parametros

Diferentes f i dintint nn;;

intint acumulaacumula((intint nn))

funciones pueden usar el mismo

b d l{{y y +=+= nn;;

}}

nombre del parámetro}}

intint prodprod((intint nn)){{{{

z z *=*= nn;;}}

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 79202 PRC

Page 80: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()Función de la Librería StandardFunción de la Librería Standard

Usada para escribir texto en la ”salida standard"Muchas en los microcontroladores PIC18 es la UARTMuchas en los microcontroladores PIC18 es la UART Esto nos permite depurar un programa ya sea usando el programa hyperteminal de Windows o en la USARTprograma hyperteminal de Windows o en la USART virtual del MPLABSIM

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 80202 PRC

Page 81: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()Función de la Librería StandardFunción de la Librería Standard

Sintaxis

printfprintf((ControlStringControlString arg1arg1 argnargn););printfprintf((ControlStringControlString,, arg1arg1,…,…argnargn););

Imprime todo palabra por palabra dentro del string excepto %d's los cuales son reemplazados por los

Ejemplo

excepto %d s los cuales son reemplazados por los valores de los argumentos del listado

intint a a == 55,, b b == 1010;;printfprintf(("a = "a = %d%d\\nb = nb = %d%d\\n"n",, aa,, bb););

Result:Result:

a = 5a = 5 NOTA: el 'd' en %d es la conversion del caracter. (ver la siguiente

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 81202 PRC

b = 10b = 10del caracter. (ver la siguiente lamina para mas detalles)

Page 82: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()Conversion Caracteres para Control de StringConversion Caracteres para Control de String

Conversionde caracter Significado

%c%c C t i lC t i l%c%c%s%s%d%d

Caracter simpleCaracter simpleString (todo los caracteres hasta 'String (todo los caracteres hasta '\\0')0')Entero sin signoEntero sin signo

%o%o%u%u%x%x

Entero octal sin signoEntero octal sin signoEntero decimal sin signoEntero decimal sin signoEntero decimal sin signo con digitos minuscula(Entero decimal sin signo con digitos minuscula(1a5e1a5e))%x%x

%X%X%f%f

Entero decimal sin signo con digitos minuscula(Entero decimal sin signo con digitos minuscula(1a5e1a5e))como como xx, pero con dígitos mayusula (e.g. , pero con dígitos mayusula (e.g. 1A5E1A5E))Valor decimal con signo(floating point)Valor decimal con signo(floating point)

%e%e%E%E%g%g

Valor decimal con exponente(e.g. Valor decimal con exponente(e.g. 1.26e1.26e--55))como como ee, pero usando , pero usando EE para el exponente (e.g. para el exponente (e.g. 1.26E1.26E--55))comocomo ee oo ff, pero dependiendo del tamaño y precision del valor, pero dependiendo del tamaño y precision del valor

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 82202 PRC

%g%g%G%G

como como ee o o ff, pero dependiendo del tamaño y precision del valor, pero dependiendo del tamaño y precision del valor

como como gg, pero usando , pero usando EE para el exponentepara el exponente

Page 83: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()

El valor mostrado es interpretado enteramente por el formato del string:por el formato del string:printf("ASCII = %d", 'a');permite sacar : ASCII = 97pUn string mas problemático :printf("Value = %d", 6.02e23);

itpermite sacar: Valor = 26366Resultados incorrectos pueden ser mostrados si

l ti d f t d l ti del tipo de formato no corresponde al tipo de formato verdadero del argumento

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 83202 PRC

Page 84: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()Useful Format String Examples for DebuggingUseful Format String Examples for Debugging

Imprimir valor hexadecimal 16-bit con un prefijo "0x" y rellenar con ceros si es necesario para completar 4 p pdígtos hexa :

printf(”direccion de x =printf(”direccion de x = %#06x%#06x\\n", x ptr);n", x ptr);

# E ifi 0 0X d b í d l h d i l

printf( direccion de x printf( direccion de x %#06x%#06x\\n , x_ptr);n , x_ptr);

# Especifica que un 0x o 0X debería preceder un valor hexadecimal (tiene otro significado para diferentes conversiones de caracteres)

06 Especifica que 6 caracteres deben salir (incluido el prefijo 0x ) los06 Especifica que 6 caracteres deben salir (incluido el prefijo 0x ), los ceros permiten rellenar a la izquierda si es necesario

x Especifica que el valor de salida debe ser expresado como un

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 84202 PRC

x Especifica que el valor de salida debe ser expresado como un entero hexadecimal

Page 85: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

printf()Useful Format String Examples for DebuggingUseful Format String Examples for Debugging

Como el anterior, excepto fuerza las letras hex mayusculas mientras deja 'x' en '0x'hex mayusculas mientras deja 'x' en '0x' minusculas:

E ifi 4 t d b d ( i l d 0

printf(”Dirección de x = 0xprintf(”Dirección de x = 0x%04X%04X\\n", x_ptr);n", x_ptr);

04 Especifica que 4 caracteres deben ser sacados (no incluyendo 0x ya que se incluyo explicitamente en el string), los ceros seran completados en la izquierda en caso de necesidad

X Especifica que el valor debería ser expresado como un entero hexadecimal con A-F mayúsculas

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 85202 PRC

Page 86: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Directivas elementales

V3.2 August 10, 2007

Page 87: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

DirectivasLas directivas son ordenes que le damos al compilador no son instrucciones deal compilador, no son instrucciones de lenguaje C18.E i t i di ti lExisten varias directivas para el compilador, sin embargo las mas usadas

3son 3#include: nos permite incluir un archivo#define: permite redefinir una etiqueta#pragma: se usa para definiciones de los

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 87202 PRC

fusibles de configuración y las interrupciones

Page 88: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Directiva #includeTres formas usan esta directiva #include:

Syntax

#include#include <archivo.h><archivo.h>E t l il d b l hi l di t i t lE t l il d b l hi l di t i t lEn este caso el compilador busca el archivo en el directorio actual En este caso el compilador busca el archivo en el directorio actual y en el resto de los directoriosy en el resto de los directorios

P j l CP j l C \\P FilP Fil \\Mi hiMi hi \\Por ejemplo: C:Por ejemplo: C:\\Program FilesProgram Files\\MicrochipMicrochip\\

#include#include “archivo.h”“archivo.h”busca solo en el directorio actualbusca solo en el directorio actual

#include#include “c:“c:\\MiproyectoMiproyecto\\archivo.h”archivo.h”

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 88202 PRC

Usa un path específico para buscar un archivo includeUsa un path específico para buscar un archivo include

Page 89: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Directiva #includearchivo HEADER main h y achivo FUENTE main c

main.h main.c

archivo HEADER main.h y achivo FUENTE main.c

unsigned intunsigned int a;a;unsigned intunsigned int b;b;

#include #include "main.h""main.h"

unsigned intunsigned int c;c; intint main(main(voidvoid)){{

a = a = 55;;;;b = b = 22;;c = a+b;c = a+b;

}}

El contenido del archivo El contenido del archivo main.h son efectivamente main.h son efectivamente pasados dentro delpasados dentro del }}pasados dentro del pasados dentro del comienzo del main.c en las comienzo del main.c en las lineas de directivas lineas de directivas #include#include

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 89202 PRC

#include#include

Page 90: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerías de C18

V3.2 August 10, 2007

Page 91: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Las librerías de MicrochipMicrochip ha desarrollado una serie de librerías mediante las cuales es posible controlar todosmediante las cuales es posible controlar todos los periféricos del microcontrolador, periféricos externos y hacer conversiones de datos yLas librerías viene dentro del MCC18.Microchip documenta sus librerías c oc p docu e ta sus b e asprofusamente en su manual :

MPLAB® C18 C COMPILER LIBRARIESMPLAB® C18 C COMPILER LIBRARIES (documento :DS51297F)

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 91202 PRC

Page 92: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Las librerías de Microchip

Las librerías se encuentran separadas por:

Librerías de periféricos de hardwareLibrerías de periféricos por software Librerías Generales por softwareLibrerías Generales por softwareLibrerías Matemáticas

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 92202 PRC

Page 93: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerías para el control de Periféricos por HardwarePeriféricos por Hardware

Estas librerías permiten configurar y controlar los periféricos que incorporancontrolar los periféricos que incorporan los MCU PIC18:

Funciones I/OFunciones I/OConversor A/DTimersModulo CapturaPWMI2CSPIUSARTMicroWire

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 93202 PRC

MicroWire

Page 94: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerías para el control de Periféricos por SoftwarePeriféricos por Software

Estas librerías permiten configurar y controlar los siguiente periféricoscontrolar los siguiente periféricos

LCDs InteligentesConexión en 4 u 8 bitsConexión en 4 u 8 bits

CAN 2510I2CI2CSPIUSARTUSART

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 94202 PRC

Page 95: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerías Generales de software

Estas librerías permiten en tratamiento de caracteres estas se clasifican encaracteres, estas se clasifican en

Funciones para clasificación de caracteresFunciones para la conversión de datosFunciones para la conversión de datosFunciones para el manejo de Strings y memoriaFunciones de DelaysFunciones de DelaysFunciones de ResetFunciones para salida de caracteres

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 95202 PRC

Page 96: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Funciones Matemáticas

Estas librerías nos permiten procesar di f i t átidiversas funciones matemáticas como ser:

Funciones trigonométricasFunciones exponencialesFunciones exponencialesFunciones logarítmicas

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 96202 PRC

Page 97: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librería para el control de un LCDLCD

El MPLAB-C18 incorpora una serie de librerías para el control de periféricos por software. Una de ellas es la p pque controla un LCD inteligente.BusyXLCD :BusyXLCD : esta ocupado el controlador del LCD ?OpenXLCD :OpenXLCD : Configura las lineas I/O usedas para controlar el LCD e inicializarlo.putcXLCD :putcXLCD : Escribe un byte al LCDputcXLCD :putcXLCD : Escribe un byte al LCD.putsXLCD :putsXLCD : Escribe un string al LCD.putrsXLCD :putrsXLCD : Escribe un string desde memoria de programa pp g p gdel LCD.ReadAddrXLCD:ReadAddrXLCD: Lee la dirección de un byte desde el LCD

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 97202 PRC

ReadDataXLCD:ReadDataXLCD: Lee un byte desde el LCD.

Page 98: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librería para el control de un LCDLCD

SetCGRamAddr :SetCGRamAddr : Setea la dirección del generador de caracteres del LCD.

SetDDRamAddr :SetDDRamAddr : Setea la dirección de datos del LCD.

WriteCmdXLCD :WriteCmdXLCD : Escribe un comando al LCD .

WriteDataXLCD WriteDataXLCD : Escribe un byte al LCD.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 98202 PRC

Page 99: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplo de aplicación del uso de las librerias LCDlas librerias LCD

Para usar la librería XLCD el usuario debe editar el archivo xlcd h para adaptar las conexiones delel archivo xlcd.h para adaptar las conexiones del hardware de su aplicación por ejemplo:

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 99202 PRC

Page 100: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Programa LCD

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 100202 PRC

Page 101: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Programa LCD cont

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 101202 PRC

Page 102: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Programa LCD cont.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 102202 PRC

Page 103: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

C18 ADC Funciones de Librería#include <adc.h>char BusyADC (void);

Checquea si ADC esta esta procesando una conversión. Retorna ‘1’ si esta ocupado.

void CloseADC (void);void CloseADC (void);Desabilita el ADC y ADC interrución

void ConvertADC (void);void ConvertADC (void);Inicia la conversión ADC

void OpenADC (unsigned char config,p g gunsigned char config2);

Usado para configurar el ADC

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 103202 PRC

Algunos PIC18 Tiene un 3rd argumento portconfigValores de config y config2 puede variar por dispositivo

Page 104: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

C18 ADC Funciones de Libreríaint ReadADC (void);

Lea el resultado del conversor ADCLea el resultado del conversor ADCRetorna un valor 16-bit con signoResultado puede estar justificado a la derecha oResultado puede estar justificado a la derecha o a la izquierda determinado por la configuración

void SetChanADC (unsigned char channel);

Selecciona el pin usado para entrada del ADCC CEl valor del puede ser ADC_CH0 hasta

ADC_CH15)

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 104202 PRC

Page 105: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplo de uso de las Librerias ADC hADC.h

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 105202 PRC

Page 106: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplo de uso de las Librerias ADC h contADC.h cont.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 106202 PRC

Page 107: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerias para el Manejo de los Timers (Timers h)Timers (Timers.h)

Estas librerias nos permiten manejar el Timer0, Timer1 Timer2 Timer3 y Timer4Timer1, Timer2 , Timer3 y Timer4.Esta formada por las siguientes funciones:

OpenTimerX: permite configurar el TimerOpenTimerX: permite configurar el Timer CloseTimerX: apaga el TimerWriteTimerX: nos permite escribir en el TimerWriteTimerX: nos permite escribir en el TimerReadTimerX: nos permite leer el Timer

N t l X d b l d l N d lNota: la X debe ser reemplazada por el Nro del timer que estemos trabajando

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 107202 PRC

Page 108: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerias para el Manejo de los Timers (Timers h)Timers (Timers.h)

OpenTimer : nos permite configurar el f i i t d l Tifuncionamiento del Timer.Según el Timer que seleccionemos g qsera el paso de parámetros:

Ejemplo: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 SYNC EXT OFF )T1_OSC1EN_OFF & T1_SYNC_EXT_OFF );

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 108202 PRC

Page 109: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerias para el Manejo de los Timers (Timers h)Timers (Timers.h)

ReadTimer: nos permite leer el valor de cuenta del TimerTimer.

Ejemplo:timer0 = (unsigned char) ReadTimer0();timer0 (unsigned char) ReadTimer0();

WriteTimer: nos permite escribir un valor dentro del Timer

Ejemplo:WriteTimer0( 10000 );

Cl Ti d bili l i d i lCloseTimer: desabilita el timer y desactiva la interrupción del mismo

Ejemplo:

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 109202 PRC

Ejemplo:CloseTimer1();

Page 110: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Ejemplo de uso de la Librería Timers hTimers.h

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 110202 PRC

Page 111: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Librerías para el manejo de la USARTUSART

La librerias para el manejo de la USART nos permiten controlar la configuración, transmisión y recepción de datos:datos:

BusyUSART: nos permite saber si ya se transmitió un datoCloseUSART: desactivamos la USARTDataRdyUSART: nos permite saber si hay un dato disponible enDataRdyUSART: nos permite saber si hay un dato disponible en el buffer de lectura de la USARTgetcUSART: lee un byte desde la USARTgetsUSART: lee un STRING desde la USARTOpenUSART: nos permite configurar la USARTputcUSART: escribimos un byte a la USARTputsUSART: escribimos un string desde la RAM a la USART

t USART ibi t i d d l i dputrsUSART: escribimos un string desde la memoria de programa a la USARTReadUSART: leemos un byte desde la USARTWriteUSART:escribimos un byte en la USART

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 111202 PRC

WriteUSART:escribimos un byte en la USARTbaudUSART: seteamos el BAUD RATE en la USART mejorada

Page 112: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Programa ejemplo del uso de la librería de la USART contlibrería de la USART cont.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 112202 PRC

Page 113: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Programa ejemplo del uso de la librería de la USART contlibrería de la USART cont.

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 113202 PRC

Page 114: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Laboratorios

V3.2 August 10, 2007

Page 115: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

Donde conseguir ayuda

Usted puede consultar:www.microchip.com

© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 115202 PRC

Page 116: ARG C18 [Modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser modificado por ... { // abrimos bloque que se ejecutará ... bloque de sentencias

FinGracias a todos!!!

V3.2 August 10, 2007