sesiÓn iii ccs para microcontroladores pic · ccs para microcontroladores pic por: euler deza...

161
CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA EULER DEZA FIGUEROA [email protected] SESIÓN III

Upload: hoangkhanh

Post on 30-Sep-2018

395 views

Category:

Documents


36 download

TRANSCRIPT

Page 1: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

CCS PARA

MICROCONTROLADORES

PIC

POR: EULER DEZA FIGUEROA

EULER DEZA FIGUEROA

[email protected]

SESIÓN III

Page 2: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS

• Acerca del entorno de desarrollo:

• El IDE de CCS es una evolución significativa a los entornos para desarrolladores con PIC's, tiene una interfaz amigable y estructurada que facilita la implementación y organización del código.

EULER DEZA FIGUEROA

[email protected]

Page 3: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS

En la parte lateral

izquierdo tiene

un panel donde

encontramos los

últimos proyectos

desarrollados.

Page 4: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS

En la pestaña de identificadores tenemos las equivalencias entre los periféricos con

sus etiquetas y direcciones.

EULER DEZA FIGUEROA

[email protected]

Page 5: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS El panel de edición permite deshacer, cortar, pegar, comentar e

indentar nuestro código, con esto se ahorra tiempo en codificar

La ventana de búsqueda nos permite localizar palabras en nuestro

código y marcar áreas

importantes.

EULER DEZA FIGUEROA

[email protected]

Page 6: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS El panel de opciones nos permite establecer propiedades del

proyecto y del IDE, desde configurar la impresora hasta actualizar

el software.

El panel de compilación es el mas importante, aquí generamos los

binarios y depuramos los errores,al construir el proyecto se

generan los binarios con todas sus dependencias.

EULER DEZA FIGUEROA

[email protected]

Page 7: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS Este panel nos permite ver información del microcontrolador que

se esta programando, desde su hoja de datos hasta sus registros,

interrupciones, etc.

El Panel de herramientas tiene emuladores y utilerías que nos

facilitan cálculos de conversión de datos, entrada de valores,

comparación de archivos y conexión con hardware de depuración.

EULER DEZA FIGUEROA

[email protected]

Page 8: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS Este panel permite la depuración por medio de ICD (in circuit Debugger),

para esto debe estar conectada la tarjeta, en nuestro curso no se va a

aplicar ICD por la variedad de programadores que se van a utilizar.

La opción “Document” permite generar archivos de documentación

general del proyecto, tambíéntrae un programa (FlowChart) para

crear diagramas de flujo, un editor de archivos de text RTF,etc

Page 9: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Entorno de desarrollo en CCS Como observamos CCS es un entorno de desarrollo

sofisticado y en algunos aspectos parecido a

VisualStudio.NET, ahora vamos a conocer los tipos de

dato, sentencias, ciclos e instrucciones básicas para

controlar el Microcontrolador PIC y varios ejemplos de

aplicación.

EULER DEZA FIGUEROA

[email protected]

Page 10: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

EULER DEZA FIGUEROA

[email protected]

Page 11: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

El lenguaje C para CCS proporciona cinco tipos básico de

datos, con cuatro modificadores posibles. Podemos

utilizar variables de cualquiera de esos tipos.

Tipos de dato:

EULER DEZA FIGUEROA

[email protected]

Page 12: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

El lenguaje C para CCS proporciona cinco tipos básico de

datos, con cuatro modificadores posibles. Podemos

utilizar variables de cualquiera de esos tipos.

Tipos de dato:

EULER DEZA FIGUEROA

[email protected]

Page 13: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Tipos de datos …

Page 14: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Las constantes se pueden especificar en decimal, octal,

hexadecimal o en binario

Las constantes

EULER DEZA FIGUEROA

[email protected]

Page 15: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ademas, las constantes se pueden definir con un sufijo

Las constantes …

Ademas, las constantes se pueden definir con un sufijo

EULER DEZA FIGUEROA

[email protected]

Page 16: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Las variables se utilizan para nombrar posiciones de

memoria RAM; se deben declarar, obligatoriamente, antes

de utilizarlas; para ello se debe indicar el nombre y el tipo

de dato que se manejará. Se definen de la siguiente

manera:

TIPO NOMBRE_VARIABLE [=VALOR INICIAL]

TIPO hace referencia a cualquiera de los tipos de datos

vistos anteriormente.

NOMBRE_VARIABLE puede ser cualquiera y el valor inicial

es opcional.

Veamos un ejemplo:

Las variables

EULER DEZA FIGUEROA

[email protected]

Page 17: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Las variables definidas en un programa pueden ser de tipo

LOCAL o GLOBAL.

Las variables LOCALES solo se utilizan en la funcion donde se

encuentran declaradas; las variables GLOBALES se pueden

utilizar en todas las funciones del programa.

Ambas deben declararse antes de ser utilizadas y las globales

deben declararse antes de cualquier función y fuera de ellas.

Las variables globales son puestas a cero cuando se inicia la

funcion principal main()

Las variables …

EULER DEZA FIGUEROA

[email protected]

Page 18: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Las variables …

EULER DEZA FIGUEROA

[email protected]

Page 19: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Las variables pueden ser definidas con:

AUTO: (usada por defecto, no hace falta que se indique)

donde la variable existe mientras la función esta activa. Estas

variables no se inicializan a cero. Su valor se pierde cuando se

sale de la función

STATIC: Una variable local se activa como global, se inicializa

a cero y mantiene su valor al entrar y salir de la función.

EXTERN: Permite el uso de variables en compilaciones

múltiples

Las variables …

EULER DEZA FIGUEROA

[email protected]

Page 20: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Un comentario puede ser colocado en cualquier parte del

programa, excepto en medio de una palabra reservada, del

nombre de una función o del nombre de una variable.

Hay dos formas de introducir un comentario, son

exactamente iguales a los comentarios en C#.NET.

Comentarios en CCS:

EULER DEZA FIGUEROA

[email protected]

Page 21: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores relacionales:

Compara dos operandos y devuelve 1 (verdadero) ó 0

(falso) según el resultado de la expresión.

Se utilizan principalmente para elaborar condiciones en las

sentencias condicionales e iterativas

que se verán más adelante.

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

== Igual a

!= diferente a

EULER DEZA FIGUEROA

[email protected]

Page 22: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores relacionales …

EULER DEZA FIGUEROA

[email protected]

Page 23: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores relacionales: …

EULER DEZA FIGUEROA

[email protected]

Page 24: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores aritméticos:

x = y + z;

x = y – z;

x = y * z;

x = y / z;

x = – x; // Cambia el signo de „x‟

x = x + 1; // Suma 1 al valor de „x‟

CCS posee cinco operadores para realizar los comandos

básicos de aritmetica

El operador % (módulo) solo puede emplearse con enteros.

Devuelve el resto de una división de enteros.

EULER DEZA FIGUEROA

[email protected]

Page 25: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores: Operadores aritméticos: …

En las operaciones de decremento e incremento, en funcion de

la posicion del operador, se consigue un preincremento (++A) o

un postincremento (A++)

EULER DEZA FIGUEROA

[email protected]

Page 26: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores de Asignación: … Nos permiten resumir comandos de nuestro código:

Ejemplo:

x=x+5;

Es lo mismo que:

x+=5;

Lo mismo aplica para Restas, Multiplicaciones y

divisiones con: -=, *=, /=

Un caso especial es el: %=

nos permite asignar el resto de la división a%=b es lo

mismo que a=a%b;

EULER DEZA FIGUEROA

[email protected]

Page 27: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores de Asignación: Existen otros que nos permiten trabajar con bits:

<<= significa un desplazamiento a la izquierda a<<b es lo mismo

que a=a<<b

>>= significa un desplazamiento a la derecha a>>b es lo mismo que

a=a>>b

&= significa una operaciónAND de bits a&=b es lo mismo que

a=a&b

|= significa una operación OR de bits a&=b es lo mismo que a=a&b

^= significa una operación OR exclusiva de bits (XOR) a^=b es lo

mismo que a=a^b

EULER DEZA FIGUEROA

[email protected]

Page 28: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores a nivel de bits:

CCS también provee atajos para utilizar los operadores

de bits. Hay algunas operaciones que se repiten a

menudo cuando creamos nuestros programas, y estos

atajos ayudan a que podamos escribir nuestro código

más rapidamente. Los atajos provistos son los

siguientes:

· a >>= b es lo mismo que a = a >> b

· a &= b es lo mismo que a = a & b

· a |= b es lo mismo que a = a | b

· a ^= b es lo mismo que a = a ^ b EULER DEZA FIGUEROA

[email protected]

Page 29: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores de desplazamiento con bits:

EULER DEZA FIGUEROA

[email protected]

Page 30: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Ejemplos de operaciones con bits:

Supongamos que x = 140, y = 10.

Ejemplos de operaciones con bits:

Operadores de desplazamiento con bits

Los operadores de desplazamiento "corren" el contenido de la variable

a la derecha o a la

izquierda, rellenando con ceros.

Ejemplo:

x = 140 = 10001100

x = x >> 2 = 00100011 = 35

x = x << 3 = 01100000 = 96

En binario:

x= 10001100

y= 00001010

x & y = 00001000 = 8 operaciónAND

x | y = 10001110 =142 operación OR

x ^ y = 10000110 = 134 operación XOR

~ x = 01110011 = 115 complemento EULER DEZA FIGUEROA

[email protected]

Page 31: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Operadores:

Operadores de desplazamiento con bits:

Los operadores de desplazamiento "corren" el

contenido de la variable a la derecha o a la

izquierda, rellenando con ceros.

Ejemplo:

x = 140 = 10001100

x = x >> 2 = 00100011 = 35

x = x << 3 = 01100000 = 96

EULER DEZA FIGUEROA

[email protected]

Page 32: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Operadores:

Operadores Lógicos:

Al igual que los operadores relacionales, éstos

devuelven 1 (verdadero), 0 (falso) tras la evaluación

de sus operandos, las opciones disponibles son:

! "no" lógico

&& "y" lógico

|| "o" lógico

EULER DEZA FIGUEROA

[email protected]

Page 33: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Operadores:

Operadores de incremento y decremento:

x++; // aumenta en 1 el valor de x

x--; // decrenenta en 1 el valor de x

Punteros

EULER DEZA FIGUEROA

[email protected]

Page 34: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Funciones:

Las funciones son bloques de sentencias; todas las

sentencias se deben enmarcar dentro de las funciones.

Al igual que las variables, las funciones deben definirse

antes de utilizarse.

Una función puede ser invocada desde una sentencia de

otra función. Una función puede devolver un valor a la

sentencia que la ha llamado.

El tipo de dato se indica en la definición de la función;

en el caso de no devolver un valor se debe especificar el

valor VOID. La función, además de devolver un valor,

puede recibir parámetros o argumentos.

EULER DEZA FIGUEROA

[email protected]

Page 35: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Funciones …

La estructura de una función es:

EULER DEZA FIGUEROA

[email protected]

Page 36: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

La forma de devolver un valor es mediante la sentencia

RETURN

Donde expresión debe manejar el mismo tipo de dato que

el indicado en la definición de la función. En el caso de no

devolver nada se finaliza con RETURN, al encontrar esta

sentencia el compilador vuelve a la ejecución de la

sentencia de la llamada. También se puede finalizar la

función sin RETURN, tan solo con la llave de cierre «}»

Las funciones pueden agruparse en ficheros de librerías

<fichero>, que se pueden utilizar mediante la directiva

#incluye<fichero>

EULER DEZA FIGUEROA

[email protected]

Page 37: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

CCS suministra una serie de funciones predefinidas para

acceder y utilizar el PIC y sus periféricos. Estas funciones

facilitan la configuración del PIC sin entrar en el nivel de

los registros especiales. Las funciones se clasifican por

bloques funcionales

EULER DEZA FIGUEROA

[email protected]

Page 38: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

Page 39: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

EULER DEZA FIGUEROA

[email protected]

Page 40: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

Page 41: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

Page 42: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

Page 43: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Funciones …

EULER DEZA FIGUEROA

[email protected]

Page 44: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Archivos generados CCS

PJT: fichero de proyecto; contiene toda la información relacionada con el

proyecto

.LST: muestra un listado con el código C y el código ensamblador

asociado para cada línea de código

.SYM: muestra las posiciones y valores de los registros y las variables

del programa

.STA: muestra una estadística de la utilización de la RAM, ROM, y la PILA.

.TRE: muestra un árbol del programa donde se especifican las funciones

y sus llamadas, con la ROM y RAM usada en cada una de ellas.

.HEX: fichero estándar para la programación del PIC.

.COF: fichero binario que incluye el código maquina y la información para

la depuración correspondiente.

EULER DEZA FIGUEROA

[email protected]

Page 45: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencias:

Sentencia Goto

La antigua sentencia Goto se hizo popular en los 80´s

con el lenguaje Basic, en CCS podemos

utilizarla para los mismos saltos incondicionales que la

caracterizan, sin embargo debemos tener

cuidado en no abusar en su uso, el exceso de saltos

pueden complicar la búsqueda de fallas, a

esto se le conoce como código“spaghetti”.

La sintaxis es sencilla:

EULER DEZA FIGUEROA

[email protected]

Page 46: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencias:

Sentencia If - Else

La sentencia if permite comparar condiciones que

pueden estar relacionadas por operadores AND, OR, que

dan gran versatilidad para implementar cualquier tipo de

lógica, esta sentencia es la mas importante a la hora de

dar “razonamiento” a nuestros programas.

Las consideraciones principales son:

· Cuando no se cumple la condición if salta al else.

· Se pueden declarar variables locales adentro de la

sentencia

· En caso de ocupar mas sentencias se añaden else if

(condición) antes del else EULER DEZA FIGUEROA

[email protected]

Page 47: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencias:

Sentencia If – Else …

Con la ayuda de IF-ELSE se puede tomar decisiones

La sintaxis básica es:

EULER DEZA FIGUEROA

[email protected]

Page 48: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Sentencia If – Else … Primero se evalúa la EXPRESION y si es cierta (TRUE o 1)

ejecuta la SENTENCIA_1, en el caso contrario (FALSE o 0)

ejecuta la SENTENCIA_2.

Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF;

esto permite tomar decisiones múltiples

En este caso las EXPRESIONES se

evaluan en orden, si alguna de ellas

es cierta la SENTENCIA asociada a

ella se ejecutara y se termina la

funcion. En caso contrario se

ejecuta la SENTENCIA del ELSE. En

ambos casos si existen varias

sentencias para ejecutar se deben

utiliza las llaves {}: EULER DEZA FIGUEROA

[email protected]

Page 49: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia If – Else …

EULER DEZA FIGUEROA

[email protected]

Page 50: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia If – Else …

EULER DEZA FIGUEROA

[email protected]

Page 51: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia If – Else …

EULER DEZA FIGUEROA

[email protected]

Page 52: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia Switch

Nos permite comparar una expresión numérica o de tipo

carácter con una lista de opciones constantes, al encontrar

la indicada entra al código y en caso de no encontrarla se

posiciona en la opción “default”. La sentencia Switch en

CCS tiene consideraciones especiales.

· Una constante char se convierta automáticamente a

entero.

· El Switch esta mas limitado que el IF, ya que no puede

hacer comparaciones lógicas o relacionales (AND, OR).

· La sentencia Switch solo involucra dos corchetes “{ }”

que engloban todas las opciones.

· No se pueden declarar variables en cada opción.

EULER DEZA FIGUEROA

[email protected]

Page 53: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia Switch …

EULER DEZA FIGUEROA

[email protected]

Page 54: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Sentencia Switch … Switch es un caso particular de una decision multiple

Evalua la expresion y en orden a la

CONSTANTE adcuada realiza las

sentencias asociadas. Si ninguno

de los CASE corresponde a la

CONSTANTE se ejecuta DEFAULT

(este comando es opcional)

El comando BREAK provoca la

salida de SWITCH, de lo contrario

se ejecuta el siguiente CASE

NOTA: no pueden existir dos CASE con la misma CONSTANTE

Page 55: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Sentencia Switch … EJEMPLO:

Page 56: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo While

El ciclo While en CCS es como en todas las versiones de

C, primero evalúa la condición y en caso de

ser verdadera entra al ciclo, al terminar regresa a validar

si se sigue cumpliendo la condición.

Para que el PIC ejecute sus comandos por siempre es

común escribir el ciclo de esta forma

EULER DEZA FIGUEROA

[email protected]

Page 57: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo While

EULER DEZA FIGUEROA

[email protected]

Page 58: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo Do While

La diferencia que tiene este ciclo con el While es que

primero ejecuta el código y después evalúa si debe

continuar

EULER DEZA FIGUEROA

[email protected]

Page 59: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo Do While

Page 60: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo FOR

Este ciclo permite repetir comandos con un control

predeterminado del inicio, fin e incrementos, es muy útil

cuando conocemos la cantidad de veces que deseamos

comparar sentencias o establecer comandos de I/O.

EULER DEZA FIGUEROA

[email protected]

Page 61: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Ciclos: Ciclo FOR …

En las expresiones del FOR la inicialización es una

variable a la cual se le asigna un valor inicial con el que

controlar el bucle. La condición de finalización sirve

para evaluar ANTES de ejecutar las sentencias si es

cierta o no, en e caso de ser cierta se ejecutan las

sentencias y en caso contrario sale del FOR. por ultimo,

la expresión de incremento o decremento modifica la

variable de control DESPUES de ejecutar el bucle

NOTA: Se pueden anidar bucles FOR utilizando

distintas variables de control EULER DEZA FIGUEROA

[email protected]

Page 62: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Ciclo FOR …

Si se ejecuta la siguiente

epresion se consigue un

BUCLE SIN FIN;

Ejemplo:

EULER DEZA FIGUEROA

[email protected]

Page 63: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Directivas para el compilador

#ASM / #ENDASM Este par de instrucciones permite que utilicemos un

bloque de instrucciones en ensamblador conbinado con

código CCS.

Este tipo de comandos permiten hacer mas rápidas

algunas rutinas

EULER DEZA FIGUEROA

[email protected]

Page 64: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Directivas para el compilador

Las directivas de pre-procesado comienzan con el

símbolo # y continúan con un comando especifico.

La sintaxis depende del comando. Algunos comandos

no permiten otros elementos sintácticos en la misma

expresión. Muchas de las directivas utilizadas por CCS

son extensiones del C estándar

EULER DEZA FIGUEROA

[email protected]

Page 65: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Directivas para el compilador …

Page 66: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS #BIT

Permite crear una nueva variable de un bit y acceder

mas fácil a los registros. Ejemplo:

#DEFINE Este tipo de instrucciones no generan código en

ensamblador, en este caso el preprocesador reemplaza

la información al crear los binarios para el pic.

Usando #DEFINE damos un sentido común a nuestros

programas por el hecho de reemplazar números por

palabras, la sintaxis es:Ejemplo:

#DEFINE <label> value <label> es la etiqueta que usaremos en el programa.

Page 67: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS #DEVICE

Con la directiva #DEVICE le decimos al compilador cual

va a ser el PIC de nuestro proyecto, es básico para que

se puedan generar binarios correspondientes a las

instrucciones del programa y la administración de

memoria RAM y ROM. Para los Micros con más de 256

bytes de RAM se pueden emplear punteros de 8 o 16 bits

En caso de 16 bits basta con añadir *=16 a continuación del

nombre microcontrolador seleccionado.

EULER DEZA FIGUEROA

[email protected]

Page 68: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

#USE DELAY (CLOCK = SPEED)

Permite definir la frecuencia del oscilador del PIC, el

compilador lo utiliza para realizar calculos de tiempo. Se

puede utilizar M, MHZ, K y KHZ para definir la frecuencia

#FUSES options

La cual permite definir la palabra de configuracion para

programar un PIC. Por ejemplo, en el PIC16F84 las

opciones posibles son:

LP, XT, HS, RC, NOWDT, WDT, NOPUT, PUT, PROTECT,

NOPROTECT

Page 69: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

#INCLUDE Permite incluir uno o mas archivos en nuestro proyecto,

es prácticamente una cabecera y su extensión es .h, al

incluir estos archivos importamos todas las funciones y

propiedades del dispositivo que estamos programando.

La forma de utilizar esta instrucción es la siguiente:

#USE RS232 Habilita el uso de puerto serie, es necesario la directiva

#USE DELAY antes de utilizar #USE RS232.

EULER DEZA FIGUEROA

[email protected]

Page 70: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

#USE STANDARD_IO Con esta directiva el compilador hace que un pin de I/O

pueda ser entrada o salida a la vez.

EULER DEZA FIGUEROA

[email protected]

Page 71: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Comandos para entrada y salida Estas instrucciones nos permiten controlar lo puertos del pic:

EULER DEZA FIGUEROA

[email protected]

Page 72: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Conversiones entre tipos Una característica interesante de CCS es que convierte a

entero cualquier tipo de dato Char o Short, esto pasa cuando

se realizan cálculos por tal motivo es importante considerar

estos aspectos:

Cuando se realiza una operación entre varios tipos el

resultado siempre es el de la variable mas grande que

intervino, es decir:

Si tenemos int x = 255 y = 20;

long z;

x = y * z;

El resultado es 5100, pero las reglas de conversión impiden

guardar el valor completo y al resultado lo trata como entero,

en otras palabras solo guarda los primeros 8 bits:

5100= 10011 (primeros 8 bits nos dan 236). EULER DEZA FIGUEROA

[email protected]

Page 73: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Conversiones entre tipos … Si tenemos int x = 255 y = 20;

long z;

x = y * z;

El resultado es 5100, pero las reglas de conversión impiden

guardar el valor completo y al resultado lo trata como entero,

en otras palabras solo guarda los primeros 8 bits:

5100= 10011 (primeros 8 bits nos dan 236).

La solución:

Para arreglar este detalle realizamos un cast tipo long al

momento de pasar el dato a la variable z.

z = (long) (x * y); //ahora nuestra variable z recibe el resultado

completo

EULER DEZA FIGUEROA

[email protected]

Page 74: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

MICROCONTROLADORES MICROCHIP

EULER DEZA FIGUEROA

[email protected]

Page 75: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Page 76: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Temario

Características Generales

Microcontroladores de la serie 16F87X

Arquitectura general de la serie 16F87X

Organización de la memoria

Set de Instrucciones

Conclusiones

Page 77: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Características Generales CPU PERIFERICOS

Procesador de Arquitectura RISC

(Solo 35 instrucciones)

Instrucciones de un ciclo simple de

duración (4 ciclos cristal) excepto

los saltos que requieren dos ciclos

simples

Velocidad de operación: 20 MHz

Memorias FLASH, RAM y EEPROM

Soporte para hasta 14 fuentes de

interrupción

Watchdog timer (WDT) para lograr

modo de operación más seguro

Protección de código programado

(Encriptado)

Timer o contador de 8 bits con

prescalas de 8 bits

Timer de 16 bits

Puertos Comparadores/PWM

(Multiplexados) [16 bits resolución]

Convertidor A/D de 10 bits

SPI (Puerto serial sincrónico para

conexión de periféricos esclavos)

USART (Universal Synchronous

Asynchronous Receiver

Transmitter) Para comunicación

serial con paquetes de 8 o 9 bits

Puerto paralelo esclavo de 8 bits

Page 78: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Característica Microcontrolador

PIC 16F873 PIC 16F874 PIC 16F876 PIC 16F877

Frecuencia de operación

(MHz) 20 20 20 20

Memoria FLASH

(Espacios de 14 bits) 4K 4K 8K 8K

Memoria para datos

(Bytes) 192 192 368 368

Memoria EEPROM

(Bytes) 128 128 256 256

Fuentes de Interrupción 13 14 13 14

Puertos Entrada/Salida A,B,C A,B,C,D,E A,B,C A,B,C,D,E

Timers o Contadores 3 3 3 3

Puertos PWM o Comparadores

2 2 2 2

Comunicación Serial USART USART USART USART

Comunicación Paralela X PSP X PSP

Convertidor ADC 5 Canales entrada 8 Canales entrada 5 Canales entrada 8 Canales entrada

Set de Instrucciones 35 instrucciones 35 instrucciones 35 instrucciones 35 instrucciones

Comparación microcontroladores de la

misma serie (16F87X)

Page 79: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Arq

uit

ectu

ra

EULER DEZA FIGUEROA

[email protected]

Page 80: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Arq

uit

ectu

ra

Memoria Programa

Stack

Contador Programa

RAM

MUX Direcciones

Registro

Instrucciones

Decodificador de

Instrucciones y

Unidad de Control

Unidad “Timing”

Unidades de:

•Reset

•Inicialización

•Watchdog

•Debugger

•Programación

Timer 0 Timer 1 Timer 2 ADC

EEPROM CCP 1,2 SPI USART

Registro FSR

Registro

STATUS

MUX

ALU

Registro

W

Puerto

Paralelo

PUERTOS

Timers

Page 81: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puertos

EULER DEZA FIGUEROA

[email protected]

Page 82: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puertos

EULER DEZA FIGUEROA

[email protected]

Page 83: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto B

Puerto D

Puerto C

Puerto E

Puerto A

Puertos

Page 84: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto A

Posee 6 bits bi-direccionales

Se configura en el registro TRISA

Un 1 configura una entrada, un 0 configura

una salida en el pin correspondiente al bit

El registro de datos de entrada/salida es

PORTA

El pin RA4 es multiplexado con el Timer

Los pines RA0…RA3 y RA5 son multiplexados

con el ADC

Page 85: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto B

Posee 8 bits bi-direccionales

Se configura en el registro TRISB

Un 1 configura una entrada, un 0 configura una salida en el pin

correspondiente al bit

El registro de datos de entrada/salida es PORTB

Puede activar/desactivar las resistencias internas de Pull Up (Con el

bit RBPU del registro OPTION)

El pull up está normalmente inactivo

Los pines RB7…RB4 pueden usarse como entradas de interrupción

externa por cambio

Las interrupciones se configuran en el bit RBIF del registro INTCON

Uso: Teclado hexadecimal con atención de teclas por interrupción

Page 86: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto C

Posee 8 bits bi-direccionales

Se configura en el registro TRISC

Un 1 configura una entrada, un 0 configura una salida en el pin

correspondiente al bit

El registro de datos de entrada/salida es PORTC

Tiene sus pines de entrada con buffers tipo Schmitt Trigger

Comparte pines con funciones de conexión serial de

periféricos externos (Protocolo I2C para SPI) [RC3:RC4]

Comparte pines con salidas PWM o entradas de

comparadores [RC0:RC2]

Comparte pines con sistema comunicación serial USART

[RC7:RC6]

Page 87: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto D

Posee 8 bits bi-direccionales

Se configura en el registro TRISD

Un 1 configura una entrada, un 0 configura una salida en

el pin correspondiente al bit

El registro de datos de entrada/salida es PORTD

Tiene sus pines de entrada con buffers tipo Schmitt

Trigger

El bit PSPMODE del registro TRISE permite usar este

puerto como puerto de expansión de memoria del

microprocesador o para conexión a sistemas

multiprocesador como esclavo con transferencias

paralelas.

Page 88: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto E

Posee 3 bits bi-direccionales

Se configura en el registro TRISE

Un 1 configura una entrada, un 0 configura una salida en

el pin correspondiente al bit

El registro de datos de entrada/salida es PORTE

Son entradas Schmitt Trigger

Sus pines se convierten en señales de control cuando se

configura en modo de expansión de memoria o en

sistemas multiprocesador con transferencia paralela de

datos.

Page 89: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Registro W

Registro de trabajo

Recibe los resultados de las operaciones ejecutadas

por la ALU

Puede ser escrito

Se usa para las transferencias indirectas entre

registros y ubicaciones de memoria

Por ejemplo: Puede usarse para transferir datos a la

pila y ejecutar un “Push” o un “Pop”

Page 90: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

ALU (Unidad Aritmética-Lógica)

Ejecuta las operaciones con los operandos de entrada

Tiene un registro acumulador “W” donde se

almacenan los resultados

El registro W puede realimentar su valor como dato de

entrada a la ALU

Ejecuta operaciones según el código que reciba en las

entradas de control.

EULER DEZA FIGUEROA

[email protected]

Page 91: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Registro STATUS

Ubicado en 03h,83h,103h y 183h

Resume las condiciones en que se encuentra el microcontrolador

Bits:

IRP: Selecciona bancos altos (2 y 3) cuando vale 1 y bancos bajos (1 y 0) cuando vale 0

RP1 y RP0: Selectores de bancos para acceso directo.

00: Banco 0

01: Banco 1

10: Banco 2

11: Banco 3

#TO: Bit de “Time Out”. Se pone en 0 cuando hay un “RESET”

#PD: Bit de “Power Down”. Se pone en 0 cuando entra en “SLEEP”

Z: Bandera del Cero. Se pone en 1 si el resulatado de la última operación realizada es un

0.

DC: Bandera de Acarreo Intermedio. Se pone en 1 si hay un carry de los 4 bits menos

segnificativos a los 4 bits más significativos.

C: Bandera de Acarreo. Se pone en 1 si el resultado de una operación excede la

capacidad de 8 bits y requiere de un acarreo.

Page 92: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Registro FSR [ File Select Register ]

Ubicado en 04h, 84h, 104h y 184h

Se utiliza para construir direcciones indirectas

Registro de 8 bits

Se utiliza para hacer barridos de RAM

EULER DEZA FIGUEROA

[email protected]

Page 93: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

MUX de direcciones

Define si a la RAM ingresa la dirección directa o la

indirecta

La dirección directa se lee de la memoria de programa

La dirección indirecta se construye a partir de

condiciones en el registro “FSR”.

Por ejemplo: Saltos condicionados

EULER DEZA FIGUEROA

[email protected]

Page 94: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

RAM: Memoria de Datos

Memoria destinada para almacenamiento temporal de datos.

Dividida en 4 bancos seleccionados con los bits RP0 y RP1 del

registro “Status”

Cada banco es de 128 bytes

Las ubicaciones más bajas son reservadas para registros de

control/configuración

Cada banco se constituye por registros de propósito general.

Cada registro es una localidad de memoria de 13 bits

Cada registro se accesa como dirección de memoria, por

ejemplo:

07F9h es una localidad válida de memoria de datos

EULER DEZA FIGUEROA

[email protected]

Page 95: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

STACK

Capacidad de 8 niveles de almacenamiento de 13 bits cada

nivel

Es parte de la memoria RAM, pero independiente de la

memoria de datos y de programa

No tiene banderas de “Overflow” o “Underflow”

No existen instrucciones de “Push” o “Pop”

El contador de programa se ingresa/saca de stack

automáticamente cuando se hace un “Call/Return”

Operación de “Buffer circular”: Si se ingresan 8 datos, se llena

el stack, un noveno dato que ingrese desplaza los contenidos

de la pila y elimina el primer dato que se ingresó a la pila.

EULER DEZA FIGUEROA

[email protected]

Page 96: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Contador de Programa

Contador de 13 bits.

Capacidad de direccionar programas de hasta 8k

instrucciones de 14 bits

La ubicación del vector de RESET (0000h) es el valor del

contador de programa cuando la máquina se inicializa

La ubicación del vector de interrupciones es (0004h) y

funciona como índice para cargar el contador de

programa con el valor de la localidad de memoria que

tiene el código de programa para atender una

interrupción.

EULER DEZA FIGUEROA

[email protected]

Page 97: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Memoria de Programa

Almacena la secuencia de instrucciones que

corresponde al programa escrito

Almacena códigos hexadecimales generados en un

archivo *.hex por el compilador o el ensamblador

Consta de páginas de 2kbytes

Se ubica en la parte alta de la memoria, después del

vector de interrupciones

En 16F877 y 16F876 se tienen 4 páginas

En 16F874 y 16F873 se tienen 2 páginas

Es memoria de tipo FLASH

Page 98: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Registro de Instrucciones

Registro que almacena la instrucción siguiente a ejecutar

tomada de la memoria de programa

Envía la instrucción a RAM en casos que requieren la

modificación de algún registro

Envía la instrucción a la unidad de decodificación para

preparase a ejecutar la siguiente instrucción

EULER DEZA FIGUEROA

[email protected]

Page 99: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Decodificador Instrucciones y Unidad

de Control

Recibe la instrucción siguiente a ejecutar

Realiza la decodificación del dato recibido al código de

operación que debe utilizarse

El código de operación se aplica a la ALU, unidad de

RESET, unidad de WDT, etc según sea la operación

EULER DEZA FIGUEROA

[email protected]

Page 100: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Unidad de Reset e Inicialización

Contiene las siguientes sub-etapas:

Contador de inicialización. Hace que el sistema espere cierto tiempo para

estabilizarse después de un RESET.

Contador de inicio del oscilador. Espera a que el oscilador se estabilice

luego de un RESET.

Power On RESET: Genera la señal interna que ejecuta el RESET por

inicialización del sistema.

Watchdog Timer: Si el sistema entra en un ciclo infinito, el contador del

WDT ejecuta un RESET después de transcurrido un tiempo considerable

Debugger: Herramienta de pruebas utilizada por el fabricante.

Programación: Genera las señales que escriben el programa en la

memoria correspondiente.

RESET por Brown-Out: Genera un RESET que puede controlarse por

software para ciertas aplicaciones.

Page 101: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Timers (0 1 2)

Capacidad de 8 bits

Lectura y escritura

Prescala de 8 bits

controlada por software

Reloj interno o externo con

selección de flanco

Interrupción por rebaso

activada al cambiar de FFh

a 00h

Registros de datos en

TMR0, TMR1 y TMR2

EL TMR1 es de 16 bits, y

usa los registros TMR1L

para los 8 bits menos

significativos y TMR1H para

los más significativos

El TMR2 se usa como base

de tiempo para el PWM

Los registros de

configuración son T0CON,

T1CON y T2CON

EULER DEZA FIGUEROA

[email protected]

Page 102: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Convertidor Analógico / Digital

Convierte con una precisión de 16 bits.

Guarda los resultados en los registros ADRESH (MSB) y ADRESL (LSB).

Tiene como registros de control ADCON0 y ADCON1

Tiene 4 posibles frecuencias de reloj para hacer las conversiones

(divisiones de la señal CLK principal del sistema)

CHS2:CHS0: Bits para selección del canal que se va a convertir desde

AN7 hasta AN0

GO/DONE: Bandera activa cuando hay una conversión en progreso

ADON: Bit de control para encender/apagar el ADC

ADFM: Bit para eliminar los 4 bits MSB o LSB.

Pueden programarse secuencias para muestrear todos los canales de

entrada de manera secuencial

EULER DEZA FIGUEROA

[email protected]

Page 103: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

USART [Universal Synchronous/Asynchronous Receiver/Transmitter

Interfase para comunicación serial SCI.

Acepta comunicación Full Duplex en asíncrono y Half Duplex en síncrono

El reloj interesa solo para transmisiones sincrónicas

Maneja comunicaciones de 9 y 8 bits configurables en registros TXSTA y

RCSTA

Puede habilitarse/deshabilitarse

Selección de Baud-Rate según fracción de CLK en SPBRG

Manejo de transmisiones contínuas e interrumpidas

Control de errores de “Frame” y “Overrun” para solicitud de

retransmisiones

El registro de datos para transmisión es RCREG para recepción y TXREG

para envío.

Page 104: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

SPI Serial Peripheral Interface

Medio de comunicación con periféricos con 8

bits simultáneos de transmisión serial

Aplica a periféricos de alta velocidad

Puede usarse para importar o exportar datos o

señales de reloj

Opera como esclavo o maestro

EULER DEZA FIGUEROA

[email protected]

Page 105: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

CCP [ Capture/Compare/PWM ]

Módulo de captura de 16 bits

Módulo de comparación de 16 bits

Módulo de salida PWM maestro y esclavo

Utiliza los registros CCPR1H y CCPR1L

El modo “Captura” guarda el valor del timer cada vez que ocurre

un evento en el pin de entrada RC2

El modo “Compara” compara el valor del registro CCPR1 con el

timer. Cuando son iguales produce un cambio de estado en el pin

RC2.

El modo PWM produce una señal con ciclos de trabajo variables

según el dato de 10 bits del registro CCPR1. La señal de salida se

ubica en el pin RC2

EULER DEZA FIGUEROA

[email protected]

Page 106: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

EEPROM

Puede habilitarse/deshabilitarse para ser usada como

memoria de almacenamiento secundario (Como el disco

duro en un PC) o como memoria de programa con el

registro EEPGD

Se configura con los registros EECON1 y EECON2

Si se usa como memoria de datos, en el registro EEDATA se

escriben/leen los datos.

Requiere de señales de control de flujo de información

como EEWR para escritura y EERD para lectura

Capacidad máxima de 256 bytes

EULER DEZA FIGUEROA

[email protected]

Page 107: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Puerto Paralelo

Ejecuta transferencias de 8 bits

Utiliza 3 señales adicionales de control (RD/WR/CS)

Se activa con el bit PSPIE del registro PIE1

Usa la bandera PSPIF del registro PIR1 para manejo

de interrupción

Solo tolera la conexión a sistemas multiprocesador

como esclavo

EULER DEZA FIGUEROA

[email protected]

Page 108: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Organización de Memoria

En los PIC existen tres tipos de memoria:

a- Memoria de Programa

b- Memoria de Datos

c- EEPROM data MEM

Cada bloque tiene una función dentro de la

arquitectura

EULER DEZA FIGUEROA

[email protected]

Page 109: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Memoria de programa

Esquema general:

Posee un contador de 13 bits

Maneja direccionamiento 8Kx14 ó 4Kx14

Vector de reset se ubica en 00H

Vector de interrupción ubicado en 04H

Mapa de memoria

EULER DEZA FIGUEROA

[email protected]

Page 110: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Mapa de memoria 876/877/873/874

Page 111: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Memoria para datos

Particionada en múltiples bancos de

registros de propósito general,

seleccionados por RP0, RP1.

Extensión de cada banco: 128 bytes

Memoria tipo RAM estática

Los registros permiten la configuración de

las características del MCU

EULER DEZA FIGUEROA

[email protected]

Page 112: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Mapa memoria

de Datos PIC

16F876/877

EULER DEZA FIGUEROA

[email protected]

Page 113: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Algunos registros importantes

Los registros de función especial permiten

configurar las diferentes posibilidades de

operación del sistema:

STATUS

OPTION_REG REGISTER

INTCON REGISTER

PIE1 REGISTER

EULER DEZA FIGUEROA

[email protected]

Page 114: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

STA

TU

S

EULER DEZA FIGUEROA

[email protected]

Page 115: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

OP

TIO

N_R

E

G R

EG

IST

ER

EULER DEZA FIGUEROA

[email protected]

Page 116: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

INT

CO

N

RE

GIS

TE

R

EULER DEZA FIGUEROA

[email protected]

Page 117: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

PIE

1

RE

GIS

TE

R

EULER DEZA FIGUEROA

[email protected]

Page 118: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

SE

T D

E

INS

TR

UC

CIO

NE

S

EULER DEZA FIGUEROA

[email protected]

Page 119: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

Conclusiones

Arquitectura RISC de 35 instrucciones.

Operaciones de duración igual, excepto saltos.

Compatible con otras familias de PIC.

Pila de 8 niveles y 14 fuentes de interrupción.

Protección de código programable.

Frecuencia de operación programable.

Comunicación serie

ADC´s de 10 bits de Resolución

Page 120: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

SERIE PIC 16F87X

EULER DEZA FIGUEROA

[email protected]

Page 121: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Primer ejercicio: Vamos a crear nuestro programa “Hola Mundo” versión CCS

(en otras palabras prender leds).

Abrimos CCS y elegimos File>New ->Source file:

PROGRAMAS EN CCS COMPILER

Page 122: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Creamos una nueva carpeta “pruebas” y adentro guardamos

nuestro nuevo archivo “Ejer0_PicC.c”.

PROGRAMAS EN CCS COMPILER

Page 123: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Escribimos nuestro código:

PROGRAMAS EN CCS COMPILER

Page 124: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Con nuestro archivo source creado nos vamos de nuevo

al menú y elegimos file - New - >Create Project :

PROGRAMAS EN CCS COMPILER

Page 125: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Elegimos nuestro archivo “Ejer0_PicC”.

PROGRAMAS EN CCS COMPILER

Page 126: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS

Nos pregunta por el dispositivo, elegimos 16F877A. Y

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 127: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Escribimos y modificamos nuestro codigo

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 128: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS Damos click en el botón de compilar (Build ) o presionamos F9

Ahora salta una pantalla con

el progreso de la compilación

y la ruta donde se van a

generar los archivos del

proyecto:

PROGRAMAS EN CCS COMPILER

Page 129: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS En la carpeta de nuestro proyecto de CCS debe esta el archivo

hexadecimal de nuestro programa:

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 130: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Lenguaje C para CCS En la carpeta de nuestro proyecto de CCS debe esta el archivo

hexadecimal de nuestro programa:

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 131: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

Para este ejercicio ocupamos este diagrama:

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 132: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMA

PROGRAMAS EN CCS COMPILER

EULER DEZA FIGUEROA

[email protected]

Page 133: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 2: Corrimiento de led‟s

En este ejemplo, mediante un interrupto conectado al RA5

,se controla el sentido del corrimiento del encendido de un

led (Luces auto fantástico

:

EULER DEZA FIGUEROA

[email protected]

Page 134: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 2: Corrimiento de led‟s …

EULER DEZA FIGUEROA

[email protected]

Page 135: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE LOS PUERTOS

Los microcontroladores PIC tienen terminales de

entrada /salida divididos en puertos, que se

encuentran nombrados alfabeticamente A, B, C, D,

etc.

Cada puerto puede tener hasta 8 terminales que, de

forma basica, se comportan como una entrada/salida

digital. Según las caracteristicas del PIC, cada puerto

puede tener, ademas, asignado un bloque funcional:

convertidor AD, USART, I2C, etc.

Por ejemplo, en la familia PIC16F87X, pueden llegar

hasta 5 puertos en el PIC16F877A donde se pueden

encontrar bloques de TIMERS, CPP, MSSP, USART,

PSP y convertidores AD

EULER DEZA FIGUEROA

[email protected]

Page 136: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE LOS PUERTOS …

Considerando a los puertos como e/s, los puertos se

caracterizan por ser independientes, es decir, se puede

programar cada terminal del puerto se comporte como

una entrada o una salida digital (TRISX)

EULER DEZA FIGUEROA

[email protected]

Page 137: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE LOS PUERTOS …

La habilitacion , como entrada o

salida se realiza a travez del

registro TRISX (TRISA: 85H)

La gestion del bus de datos se

realiza a traves de los registros

PORTX (PORTA:05H)

Page 138: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE LOS PUERTOS …

En el puerto A, el RA4 tiene

salida en drenador abierto lo

que obliga a utilizar una

resistencia PULL-UP en el

caso de funcionar como

salida. Este terminal tiene

entrada trigger-schmitt lo que

permite su utilización como

entrada de contador de

eventos externos en

conjunción con un modulo

temporizador (TIMER)

También existen algunos terminales que poseen unas

características especiales, por ejemplo:

EULER DEZA FIGUEROA

[email protected]

Page 139: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE LOS PUERTOS …

En el puerto B, los terminales tienen una resistencia de pull-up

interna que se puede habilitar a traves del bit RBPU del registro

OPTION_REG(81h,181h).

Si dicho bit es 1, todas las resistencias de pull-up estaran

deshabilitadas, si es un 0 estaran habilitadas solo en el caso de que

el terminal funcione como entrada

EULER DEZA FIGUEROA

[email protected]

Page 140: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C

Se definen los registros PORTX y TRISX como bytes y se situan en

la posicion correspondiente de la memoria RAM. La directiva

utilizada en C es #BYTE

#BYTE variable=constante;

En lenguaje C se pueden gestionar los puertos de dos formas:

Se declaran los registros TRISX y PORTX definiendo su posicion

en la menoria RAM como variables de C.

Utilizando las directivas especificas del compilador (#USE

FAST_IO, #USE FIXED_IO, #USE STANDARD_IO).

A TRAVES DE LA RAM

EULER DEZA FIGUEROA

[email protected]

Page 141: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C

Se definen los registros PORTX y TRISX como bytes y se situan en

la posicion correspondiente de la memoria RAM. La directiva

utilizada en C es #BYTE

#BYTE variable=constante;

En lenguaje C se pueden gestionar los puertos de dos formas:

Se declaran los registros TRISX y PORTX definiendo su posicion

en la menoria RAM como variables de C.

Utilizando las directivas especificas del compilador (#USE

FAST_IO, #USE FIXED_IO, #USE STANDARD_IO).

A TRAVES DE LA RAM

EULER DEZA FIGUEROA

[email protected]

Page 142: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Una vez definidas estas variables se pueden configurar y controlar

los puertos a través de los comandos de asignación.

A TRAVES DE LA RAM …

EULER DEZA FIGUEROA

[email protected]

Page 143: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Existen unas funciones de C que permiten trabajar bit a bit con los

registros o variables definidas previamente. Estas funciones son

las siguientes:

Bit_clear(var,bit); //Pone a 0 el bit especifico (0 a 7) de la variable

Bit_set(var,bit); //Pone a 1 el bit especifico (0 a 7) de la variable

Bit_test(var,bit); //Muestra el bit especifico (0 a 7) de la variable

Swap(var); //Intercambia los 4 bits de mayor peso por los

4 de menor peso de la variable

A TRAVES DE LA RAM …

EULER DEZA FIGUEROA

[email protected]

Page 144: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Se puede declarar un bit de un registro con una variable mediante

la dirctiva #BIT, lo que permite trabajar directamente con la terminal

BIT nombre = posicion.bit

A TRAVES DE LA RAM …

EULER DEZA FIGUEROA

[email protected]

Page 145: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 3: Control del encendido-apagado de un led mediante

switch [RB0]

La salida debe tener el mismo valor de la entrada

EULER DEZA FIGUEROA

[email protected]

Page 146: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 3: Control del encendido-apagado de un led mediante

switch [RB0] …

EULER DEZA FIGUEROA

[email protected]

Page 147: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

El compilador ofrece funciones predefinidas para trabajar con los

puertos. Estas funciones son:

Output_X (valor); //Por el puerto correspondiente saca el valor (0-255)

Input_X() ; //se obtiene el valor del puerto correspondiente

Set_tris_X (valor); //Carga el registro TRISx con el valor (0-255)

Port_b_pullups(valor); //Mediante valor = TRUE o valor = FALSE habilita

// o deshabilita las resistencias de pull-up en PORTB

Get_trisX (); //Devuelve el valor del registro TRISx

A TRAVES DE LAS DIRECTIVAS

EULER DEZA FIGUEROA

[email protected]

Las funciones output_x() e input_X() dependen de la directiva

#USE*_IO que esté activa.

Page 148: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Existen una serie de funciones asociadas a un terminal o pin*. El

parametro pin* se define en un fichero include (por ejemplo

16F876.h) con un formato del tipo PIN_Xn, donde X es elpuerto y n

es el numero de pin.

#define PIN_A0 40

#define PIN_A1 41

Las funciones son:

Output_low (pin*); //Pin a 0

Output_high (pin*); //Pin a 1

Output_bit(pin*, valor); //Pin al valor especificado

Output_togglet(pin*); //Complementa el valor del pin

Output_float(pin*); //Pin de entrada, quedando tensión flotante ....

// (Simula salida en drenador abierto)

Input_state(pin*) ; /Lee el valor del pin sin cambiar el sentido del terminal

A TRAVES DE LAS DIRECTIVAS …

EULER DEZA FIGUEROA

[email protected]

Page 149: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 4: Control de un Semáforo Peatonal de 2 Vías

EULER DEZA FIGUEROA

[email protected]

Page 150: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 4: Control de un Semáforo Peatonal de 2 Vías ..

EULER DEZA FIGUEROA

[email protected]

Funciones de Control:

Page 151: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Con la función output_x() se saca el valor del puerto y con la

función input_x() se lee el puerto. La directiva no modifica

previamente el registro TRIS correspondiente.

Hay que asegurarse de que los registros TRIS están correctamente

definidos.

Ejemplo de Aplicación ..

#USE FAST_IO(PUERTO) [PUERTO: A…]

EULER DEZA FIGUEROA

[email protected]

Page 152: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 5: Control de un led mediante uso de librería #USE FAST_IO

EULER DEZA FIGUEROA

[email protected]

Page 153: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

Con la función output_x() el compilador se asegura de que el

terminal, o terminales correspondientes, sean de salida mediante la

modificación del TRIS correspondiente .

Con la función input_x() ocurre lo mismo pero asegurando el

terminal (terminales) como entrada. Es la directiva por defecto.

Ejemplo de Aplicación ..

#USE STANDARD_IO(PUERTO) [PUERTO: A…]

EULER DEZA FIGUEROA

[email protected]

Page 154: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 6: Control de un led mediante uso de librería #USE

STANDARD_IO

EULER DEZA FIGUEROA

[email protected]

Page 155: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

El compilador se encarga de generar el código para definir los

puertos de acuerdo con la información que indica la directiva

(donde se indican los terminales de salida), sin tener en cuenta si la

operación es de entrada o de salida

#USE FIXED_IO(PUERTO_OUTPUTS = pin*, …)

[PUERTO: A…]

EULER DEZA FIGUEROA

[email protected]

Page 156: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 7: Control de un led mediante uso de librería #USE FIXED_IO

EULER DEZA FIGUEROA

[email protected]

Page 157: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C …

En C se puede acceder a la memoria de datos mediante punteros.

Los punteros se deben definir como INT :

CON PUNTEROS

EULER DEZA FIGUEROA

[email protected]

Page 158: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 8: Control de un led mediante uso PUNTEROS

EULER DEZA FIGUEROA

[email protected]

Page 159: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 9: Manejo de Displays Multiplexados

EULER DEZA FIGUEROA

[email protected]

Realizar un contador de 0 a 99 con un doble display de 7

segmentos ánodo común. La cuenta debe ser continua y de o a 9 el

digito de las decenas debe estar apagado. También debe poseer

opciones para seleccionar color del display

Page 160: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER Programa 9: Manejo de Displays Multiplexados ..

EULER DEZA FIGUEROA

[email protected]

Page 161: SESIÓN III CCS PARA MICROCONTROLADORES PIC · CCS PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA ... Un comentario puede ser colocado en cualquier parte del programa, excepto

PROGRAMAS EN CCS COMPILER

Programa 9: Manejo de Desplays Multiplexados ..

EULER DEZA FIGUEROA

[email protected]