arg c18 [modo de compatibilidad] - microchip.com.ar · asigna mediante un “tipo” que puede ser...
Post on 25-Sep-2018
214 Views
Preview:
TRANSCRIPT
Aprendiendo C18Introducción a la Programación y uso
V3.2 August 10, 2007
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
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
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
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
Instalacion de C18
V3.2 August 10, 2007
Como hacer nuestro Pimer ProyectoPimer Proyecto
V3.2 August 10, 2007
Arquitectura de un Programa en C18Programa en C18
V3.2 August 10, 2007
Arquitectura de un programa en C18C18
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 9202 PRC
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
Datos y Variables
V3.2 August 10, 2007
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
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”
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
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
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
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
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
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
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
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 }
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
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
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
Ejemplo de un Programa que controla un LEDcontrola un LED
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 25202 PRC
Estructuras dentro de un programaun programa
V3.2 August 10, 2007
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
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
}
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
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
}
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
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
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;}
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
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 !!!
Operadores
V3.2 August 10, 2007
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.
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}}
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.
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
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)
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:
Arrays
V3.2 August 10, 2007
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
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
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
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
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
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}}};}}};
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
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
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););}}
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
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'
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'};};
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’;;
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 \\ \\ \\ ,, ););
Funciones
V3.2 August 10, 2007
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
}
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
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
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
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
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
}}
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
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;;}}
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););}}
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
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
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
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););
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
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()
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
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););}}
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;;}}
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););}}
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
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
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
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)
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
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
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
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
Directivas elementales
V3.2 August 10, 2007
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
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
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
Librerías de C18
V3.2 August 10, 2007
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
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
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
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
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
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
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.
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
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
Programa LCD
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 100202 PRC
Programa LCD cont
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 101202 PRC
Programa LCD cont.
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 102202 PRC
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
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
Ejemplo de uso de las Librerias ADC hADC.h
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 105202 PRC
Ejemplo de uso de las Librerias ADC h contADC.h cont.
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 106202 PRC
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
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
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();
Ejemplo de uso de la Librería Timers hTimers.h
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 110202 PRC
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
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
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
Laboratorios
V3.2 August 10, 2007
Donde conseguir ayuda
Usted puede consultar:www.microchip.com
© 2006 Microchip Technology Incorporated. All Rights Reserved. Slide 115202 PRC
FinGracias a todos!!!
V3.2 August 10, 2007
top related