View
416
Download
36
Category
Preview:
Citation preview
CCS PARA
MICROCONTROLADORES
PIC
POR: EULER DEZA FIGUEROA
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SESIÓN III
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
Euler_df28@hotmail.com
Entorno de desarrollo en CCS
En la parte lateral
izquierdo tiene
un panel donde
encontramos los
últimos proyectos
desarrollados.
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
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
Euler_df28@hotmail.com
Lenguaje C para CCS
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Tipos de datos …
Lenguaje C para CCS
Las constantes se pueden especificar en decimal, octal,
hexadecimal o en binario
Las constantes
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Las variables …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Operadores:
Operadores relacionales …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Lenguaje C para CCS Operadores:
Operadores relacionales: …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Operadores:
Operadores de desplazamiento con bits:
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS
Funciones …
La estructura de una función es:
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Funciones …
Lenguaje C para CCS Funciones …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Lenguaje C para CCS Funciones …
Lenguaje C para CCS Funciones …
Lenguaje C para CCS Funciones …
Lenguaje C para CCS Funciones …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS
Sentencia If – Else …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Lenguaje C para CCS
Sentencia If – Else …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Lenguaje C para CCS
Sentencia If – Else …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS
Sentencia Switch …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Lenguaje C para CCS Sentencia Switch … EJEMPLO:
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
Euler_df28@hotmail.com
Lenguaje C para CCS
Ciclos: Ciclo While
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS
Ciclos: Ciclo Do While
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Ciclo FOR …
Si se ejecuta la siguiente
epresion se consigue un
BUCLE SIN FIN;
Ejemplo:
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Directivas para el compilador …
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.
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
Euler_df28@hotmail.com
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
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Lenguaje C para CCS Comandos para entrada y salida Estas instrucciones nos permiten controlar lo puertos del pic:
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
SERIE PIC 16F87X
MICROCONTROLADORES MICROCHIP
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
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
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
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)
SERIE PIC 16F87X
Arq
uit
ectu
ra
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
SERIE PIC 16F87X
Puertos
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
Puertos
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
Puerto B
Puerto D
Puerto C
Puerto E
Puerto A
Puertos
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
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
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]
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.
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.
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”
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
Euler_df28@hotmail.com
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.
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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.
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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.
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
SERIE PIC 16F87X
Mapa de memoria 876/877/873/874
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
Euler_df28@hotmail.com
SERIE PIC 16F87X
Mapa memoria
de Datos PIC
16F876/877
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
SERIE PIC 16F87X
STA
TU
S
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
OP
TIO
N_R
E
G R
EG
IST
ER
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
INT
CO
N
RE
GIS
TE
R
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
PIE
1
RE
GIS
TE
R
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
SERIE PIC 16F87X
SE
T D
E
INS
TR
UC
CIO
NE
S
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
SERIE PIC 16F87X
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Lenguaje C para CCS Creamos una nueva carpeta “pruebas” y adentro guardamos
nuestro nuevo archivo “Ejer0_PicC.c”.
PROGRAMAS EN CCS COMPILER
Lenguaje C para CCS Escribimos nuestro código:
PROGRAMAS EN CCS COMPILER
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
Lenguaje C para CCS
Elegimos nuestro archivo “Ejer0_PicC”.
PROGRAMAS EN CCS COMPILER
Lenguaje C para CCS
Nos pregunta por el dispositivo, elegimos 16F877A. Y
PROGRAMAS EN CCS COMPILER
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Lenguaje C para CCS Escribimos y modificamos nuestro codigo
PROGRAMAS EN CCS COMPILER
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Para este ejercicio ocupamos este diagrama:
PROGRAMAS EN CCS COMPILER
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
PROGRAMA
PROGRAMAS EN CCS COMPILER
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 2: Corrimiento de led‟s …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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)
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 3: Control del encendido-apagado de un led mediante
switch [RB0] …
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
Las funciones output_x() e input_X() dependen de la directiva
#USE*_IO que esté activa.
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 4: Control de un Semáforo Peatonal de 2 Vías
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 4: Control de un Semáforo Peatonal de 2 Vías ..
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Funciones de Control:
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 5: Control de un led mediante uso de librería #USE FAST_IO
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 6: Control de un led mediante uso de librería #USE
STANDARD_IO
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 7: Control de un led mediante uso de librería #USE FIXED_IO
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 8: Control de un led mediante uso PUNTEROS
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 9: Manejo de Displays Multiplexados
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
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
PROGRAMAS EN CCS COMPILER Programa 9: Manejo de Displays Multiplexados ..
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
PROGRAMAS EN CCS COMPILER
Programa 9: Manejo de Desplays Multiplexados ..
EULER DEZA FIGUEROA
Euler_df28@hotmail.com
Recommended