Transcript

Diapositiva 1

GAMA ALTA DE MICROCONTROLADORESCOMPILADOR C CCS SISTEMAS EMBEBIDOSDIGITALES III: 1

1

GAMA ALTA DE MICROCONTROLADORESPIC18F4550CONSTANTES Y VARIABLESDIGITALES III: 2

2GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 3Las constantes son valores que el compilador remplaza, almacenan valores fijos los cuales no cambian.

Las constantes facilitan la comprensin de un programa y las modificaciones del mismo simplemente modificando su valor al inicio de un programa. Al momento de definir una constante no solo se puede asigna un valor, tambin se puede expresar como la operacin matemtica con otras constantes.

2.1 Declaracin de constantesLa declaracin se hace de dos formas:#DEFINEPara que le valor sea remplazado a lo largo del cdigo se utiliza la sentencia #DEFINE. Ejemplo:2. CONSTANTESGAMA ALTA DE MICROCONTROLADORES#define NUMERO_PI3.14159265#define TRUE1#define FALSE0#define PERIMETRO_CIRNUMERO_PI*RADIO4Utiliza la palabra reservada CONST antes de la declaracin, el valor tampoco cambia en el programa pero se la utiliza para que a este se le asigne una posicin fija dentro de la memoria flash, a esta posicin acceden para obtener el valor.

La constante se encuentra en una posicion fija y es importante si se utiliza un modificador o si el valor de esta constante cambia en la ejecucin del programa.2.2 CONSTPasos de un compilador estndar5Ejemplo:Constunsignedchartemperatura_max=40;Constunsignedchartemperatura_min=20;

2.3 CONSTANTES ENUMERADASSon constantes que se definen bajo un mismo grupo, toman valores consecutivos o se puede interrumpir las secuencias. Se utiliza la palabra reservada ENUM.

Estas cuentan con las siguientes estructuras:

enum nombre_grupo{ elemento_0[=contante_0] ,elemento_1[=contante_1] , elemento_2[=contante_2] ,. . . . . . . , elemento_n[=constante_n] }5GAMA ALTA DE MICROCONTROLADORES6La anterior estructura es igual a:#define elemento_0contante_0#define elemento_0contante_0#define elemento_0contante_0

Observe que no requiere el smbolo =

De la estructura ENUM se tiene que:nombre_grupo: Es el nombre del tipo enumerado.

elemento_n:: Es el nombre a declarar

constante_n: Es la equivalencia del elemento, como se encuentra al interior de los corchetes quiere decir que estos valores son opcionales.] ,Si constante_0 se omite por defecto carga el valor de 0 y continua con la secuencia. Si se rompe la secuencia se reinicializa en ese valor.GAMA ALTA DE MICROCONTROLADORES7Ejemplo de enum:

enum dias{lun=1,mar,mie,jue,vie,sab,dom}

De la asignacin anterior mar toma el valor de 2 y as sucesivamente.

enum mes{ENE=1, FEB,MAR,ABR, MAY, JUN,JUL,AGO, SEP, OCT,NOV,DIC}De la asignacin anterior FEB toma el valor de 2 y as sucesivamente hasta llegar a DIC=12.

GAMA ALTA DE MICROCONTROLADORES82.4 Constantes especiales tipo carcterLos caracteres ASCII en C se representan por valor decimal o hexadecimal, pero de ellos existen unos caracteres especiales que se escriben de forma especial para evitar errores en la compilacin entre estos tenemos:\bEN CSignificadoValor decimal\r\n\0\f\t\\Espacio atrs Enter Retorno de carro NuloSalto de pginaTabulaci horizComilla dobleComilla sencilla\vTabulacin vertic813100129343911GAMA ALTA DE MICROCONTROLADORES9Los caracteres se pueden escribir entre comillas sencillas, tambin se puede escribir el valor hexadecimal o decimal.

3. VariablesLas variables representan posiciones de memoria las cuales pueden cambiar el contenido de la informacin a medida que el programa lo requiera. La declaracin del tipo de variable se hace teniendo en cuenta la informacin que va a contener, por ejemplo si requiere almacenar numero enteros positivos que no excedan de 255 o si cuenta con valores negativos para un sensor de temperatura negativa.

Las variables tienen nombres y estos nombres deben indicar el contenido de los datos que almacenan.

Las variables siempre empiezan con una letra y puede utilizar el carcter _.GAMA ALTA DE MICROCONTROLADORES10Para declarar una variable es necesario como se menciono anteriormente conocer los datos que se van a almacenar, por ejemplo si se piensa construir un velocmetro para un vehculo que indique la velocidad en tres cifras el valor que debe almacenar la variable no baja de 0 km/h y tampoco excede de 255 km/h, a menos que instalara un velocmetro en un formula uno.

Las operaciones con valores positivos se ejecutan ms rpidas en procesadores de 8 y 16 bits, con estos datos se realizan comparaciones, incrementos, decrementos, entre otras.

En conclusin el tipo de variable a seleccionar depende del signo y de la informacin a alamacenar.GAMA ALTA DE MICROCONTROLADORES113.1 Tipos de variables

Int 8: charReserva 1 byte de informacin y este puede valor se puede encontrar en 256 combinaciones posibles(2 exp 8).Si el valor es positivo almacena un dato entre 0 a 255 Si el valor es negativo almacena un dato entre -128 a 127

b. Int 16: intReserva 2 bytes de informacin y este puede valor se puede encontrar en 65536 combinaciones posibles(2 exp 16).Si el valor es positivo almacena un dato entre 0 a 65535 Si el valor es negativo almacena un dato entre -32768 a 32767.

GAMA ALTA DE MICROCONTROLADORES123.1 Tipos de variables

c.Int 32: longReserva 4 bytes de informacin continuos y este puede valor se puede encontrar en 4.294.967.296 combinaciones posibles(2 exp 32).Si el valor es positivo almacena un dato entre 0 a 4.294.967.295 Si el valor es negativo almacena un dato entre -2.147.483.648 a 2.147.483.647

d. Float:Reserva 4 bytes de informacin, almacena datos de tipo flotante. Los valores se representan mediante mantisa, que es es un numero entre 0.1 y 1.0 y un exponenete que representa la potencia de 10, valor que multiplica la mantisa.GAMA ALTA DE MICROCONTROLADORES13La mantisa y el exponente puede ser positivos o negativos.De los 32 bits utilizan:

3 bytes para la mantisa, de ellos 23 contienen el valor y 1 un solo bit el signo.1 byte para el signo, 1 bit de ellos se utiliza para el signo.

Este tipo de datos se encuentra estandarizado y utiliza la IEEE32.

El rango de valores que almacena se encuentra entre:1.17549435 exp -38 a 3.402823466 exp +38

e. double: No soportado por ACCCSEn otros compiladores soporta 8 bytes, de ellos utiliza una mantisa de 53 bits y un exponente de 11. Los dos utilizan un bit para signo.

GAMA ALTA DE MICROCONTROLADORES144. Modificadores de datosLas variables cuando se declaran pueden estar acompaados de palabras reservadas del ANSI C que no modifican el tamao en bits del tipo sino el tratamiento y la forma en que se maneja esta informacin.

Los modificadores permiten optimizar el cdigo una vez llegue al proceso de ensamblado, hace que un programa se ejecute mas rpido.

Los modificadores permite que se pueda desarralloar operaciones entre variables de diferente tipo, por ejemplo cuando sume un INT 8 con una INT 16.

Entre los modificadores se tiene: signed, unsigned, volatile, near,far, register, const, static y extern.GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 154.1 unsigned:Le da a la variable la caracterstica positiva, el primer valor empieza en cero y el ltimo en (2 exp n)-1. En este caso el bit de mayor peso tiene un valor y no representa el signo.

El tipo de datos que se facilita para un microcontrolador de 8 bits es el unsigned char, por ser positivo y ser el de menor longitud.

4.2 signed:Le da a la variable la caracterstica negativa, el primer valor empieza en - (2 exp n)/2 y el ltimo en + ((2 exp n)/2)-1. En este caso el bit de mayor peso tiene un valor del signo.

El bit de mayor peso es 1 si la variable es negativa y el bit vale 0 si la variable es positiva. Los otros bits corresponden al complemento a 2 del valor absoluto de la variable.15GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 16Por defecto ANSI C si no se declara el modificador signed o unsigned la toma como si esta fuera signed.

Los modificadores signed y unsigned no aplican a las variables de tipo float y double por la naturaleza de datos que estan contienen.

4.3 volatile:El valor de la variable que posee este modificador puede cambiar de valor por un agente externo, uno de ellos es el hardware, en este caso una interrupcin la pude modificar.

El programa cada vez que hace referencia a esta variable lee desde la posicin especifica de memoria y no asume ningn valor.

16GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 17Los valores manipulados en una interrupcin, en los puertos o registros internos se pueden declarar como voltiles.Ejemplo:

El compilador como observa a varaible1=100 y despus la hace igual a 100, entonces al optimizar no toma la primer linea. Si se utiliza volatil si emsambla todo.17GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 18

18

GAMA ALTA DE MICROCONTROLADORESPIC18F4550OperadoresDIGITALES III: 19

19GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 20En el compilador se pueden utilizar operadores variados que potencian el desarrollo de sistemas embebidos como:

Aritmticos:+Suma -Resta *Multiplicacin /Divisin %Mdulo (resto) ++Incremento (suma 1) --Decremento (resta 1)

Los operadores de ++ y pueden representar la operacin de:Postincremento: a++Preincremento: ++aPostdecremento: a--Predecremento: --a20GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 21Cuando se desarrollan las operaciones matematicas se debe tener en cuenta el tipo de datos que se obtiene, por ejemplo en la suma:Unsigned char sumando, adendo;Unsigned intresultado;Sumando=200;Adendo=150;Resultado=sumando+adendo

La suma de dos variables tipo char generan un resultado de tipo int.

En la resta al igual que en las otras operaciones matematicas se deben tener en cuentas los tipos de variables a trabajar, por ejemplo, una resta que se realice entre dos variables de tipo char sin signo el resultado es un char pero con signo.21GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 22De forma similar en la multiplicacion:Unsigned char multiplicando,multiplicador;Unsigned intresultado;multiplicador=200;multiplicando=150;Resultado=multiplicador+multiplicando;

La division entre dos variables de tipo char depende del resultado se puede asignara a otra variable de tipo char, a menos que se requieran calculos precisos para guardar el resultado en variables de tipo punto flotante.Decrementos e incrementos:Cuando se utilizan los preincrementos primero se realiza el incremento y con este valor se opera, por ejemplo:X=10;Y=X++;En este caso Y es igual a 10 y X se hace igual a 1122GAMA ALTA DE MICROCONTROLADORESDIGITALES III: 23X=10;Y=++X;En este caso Y es igual a 11 y X se hace igual a 11.

Operadores relacionalesC cuenta con los operadores relacionales que se decriben a continuacin:

SmboloOperacinEjemplo

>Mayor que if(a>b)=b)b) ! NOT (El valor contrario) if (!a)Estas operaciones se realizan entre variables y permiten evaluar por ejemplo el estado de un condicin, tambin para independizar las operaciones se puede utilizar los parentesis, ejemplo:If (( a>5) && (a numero de bits a desplazar a derecha.Resultado=variable