You are on page 1of 161

CCS PARA

MICROCONTROLADORES
PIC

POR: MG. FELIX PUCUHUAYLA

Entorno de desarrollo en CCS


Acerca del entorno

de desarrollo:

El IDE de CCS es
una evolucin
significativa a los
entornos para
desarrolladores con
PIC's, tiene
una interfaz
amigable y
estructurada que
facilita la
implementacin y
organizacin del
cdigo.

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 pestaa de
identificadores
tenemos las
equivalencias entre
los perifricos con
sus etiquetas y
direcciones.

Entorno de desarrollo en CCS


El panel de edicin permite deshacer, cortar, pegar, comentar e
indentar nuestro cdigo, con esto se ahorra tiempo en codificar

La ventana de bsqueda nos permite localizar palabras en nuestro


cdigo y marcar reas
importantes.

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 compilacin es el mas importante, aqu generamos los


binarios y depuramos los errores,al construir el proyecto se
generan los binarios con todas sus dependencias.

Entorno de desarrollo en CCS


Este panel nos permite ver informacin del microcontrolador que
se esta programando, desde su hoja de datos hasta sus registros,
interrupciones, etc.

El Panel de herramientas tiene emuladores y utileras que nos


facilitan clculos de conversin de datos, entrada de valores,
comparacin de archivos y conexin con hardware de depuracin.

Entorno de desarrollo en CCS


Este panel permite la depuracin 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 opcin Document permite generar archivos de documentacin


general del proyecto, tambntrae 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 bsicas para
controlar el Microcontrolador PIC y varios ejemplos de
aplicacin.

Lenguaje C para CCS

Lenguaje C para CCS


Tipos de dato:
El lenguaje C para CCS proporciona cinco tipos bsico de
datos, con cuatro modificadores posibles. Podemos
utilizar variables de cualquiera de esos tipos.

Lenguaje C para CCS


Tipos de dato:
El lenguaje C para CCS proporciona cinco tipos bsico de
datos, con cuatro modificadores posibles. Podemos
utilizar variables de cualquiera de esos tipos.

Lenguaje C para CCS

Tipos de datos

Lenguaje C para CCS


Las constantes
Las constantes se pueden especificar en decimal, octal,
hexadecimal o en binario

Lenguaje C para CCS


Las constantes
Ademas, las constantes se pueden definir con un sufijo

Ademas, las constantes se pueden definir con un sufijo

Lenguaje C para CCS


Las variables
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:

Lenguaje C para CCS


Las variables
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 funcin y fuera de ellas.

Las variables globales son puestas a cero cuando se inicia la


funcion principal main()

Lenguaje C para CCS

Las variables

Lenguaje C para CCS


Las variables
Las variables pueden ser definidas con:
AUTO: (usada por defecto, no hace falta que se indique)

donde la variable existe mientras la funcin esta activa. Estas


variables no se inicializan a cero. Su valor se pierde cuando se
sale de la funcin
STATIC: Una variable local se activa como global, se inicializa

a cero y mantiene su valor al entrar y salir de la funcin.


EXTERN: Permite el uso de variables en compilaciones

mltiples

Lenguaje C para CCS


Comentarios en CCS:
Un comentario puede ser colocado en cualquier parte del
programa, excepto en medio de una palabra reservada, del
nombre de una funcin o del nombre de una variable.
Hay dos formas de introducir un comentario, son
exactamente iguales a los comentarios en C#.NET.

Lenguaje C para CCS


Operadores:
Operadores relacionales:
Compara dos operandos y devuelve 1 (verdadero) 0
(falso) segn el resultado de la expresin.
Se utilizan principalmente para elaborar condiciones en las
sentencias condicionales e iterativas
que se vern ms adelante.
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= diferente a

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 aritmticos:
CCS posee cinco operadores para realizar los comandos
bsicos de aritmetica

El operador % (mdulo) solo puede emplearse con enteros.


Devuelve el resto de una divisin de enteros.

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

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Operadores:
Operadores aritmticos:

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 Asignacin:
Nos permiten resumir comandos de nuestro cdigo:
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 divisin a%=b es lo
mismo que a=a%b;
EULER DEZA FIGUEROA
Euler_df28@hotmail.com

Lenguaje C para CCS


Operadores:
Operadores de Asignacin:
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 operacinAND de bits a&=b es lo mismo que
a=a&b
|= significa una operacin OR de bits a&=b es lo mismo que a=a&b
^= significa una operacin 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 tambin 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 cdigo
ms 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 operacinAND
x | y = 10001110 =142 operacin OR
x ^ y = 10000110 = 134 operacin XOR
EULER DEZA FIGUEROA
~ x = 01110011 = 115 complemento
Euler_df28@hotmail.com

Lenguaje C para CCS


Operadores:
Operadores de desplazamiento con bits:
Los operadores de desplazamiento "corren"
contenido de la variable a la derecha o a la
izquierda, rellenando con ceros.

el

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 Lgicos:
Al igual que los operadores relacionales, stos
devuelven 1 (verdadero), 0 (falso) tras la evaluacin
de sus operandos, las opciones disponibles son:
! "no" lgico
&& "y" lgico
|| "o" lgico

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 funcin puede ser invocada desde una sentencia de
otra funcin. Una funcin puede devolver un valor a la
sentencia que la ha llamado.
El tipo de dato se indica en la definicin de la funcin;
en el caso de no devolver un valor se debe especificar el
valor VOID. La funcin, adems de devolver un valor,
puede recibir parmetros o argumentos.

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Funciones
La estructura de una funcin 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 expresin debe manejar el mismo tipo de dato que


el indicado en la definicin de la funcin. En el caso de no
devolver nada se finaliza con RETURN, al encontrar esta
sentencia el compilador vuelve a la ejecucin de la
sentencia de la llamada. Tambin se puede finalizar la
funcin sin RETURN, tan solo con la llave de cierre }
Las funciones pueden agruparse en ficheros de libreras
<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 perifricos. Estas funciones
facilitan la configuracin 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 informacin relacionada con el
proyecto
.LST: muestra un listado con el cdigo C y el cdigo ensamblador
asociado para cada lnea de cdigo
.SYM: muestra las posiciones y valores de los registros y las variables
del programa
.STA: muestra una estadstica de la utilizacin 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 estndar para la programacin del PIC.
.COF: fichero binario que incluye el cdigo maquina y la informacin para
la depuracin correspondiente.
EULER DEZA FIGUEROA
Euler_df28@hotmail.com

Lenguaje C para CCS


Sentencias:
Sentencia Goto
La antigua sentencia Goto se hizo popular en los 80s
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 bsqueda de fallas, a
esto se le conoce como cdigospaghetti.
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
lgica, esta sentencia es la mas importante a la hora de
dar razonamiento a nuestros programas.
Las consideraciones principales son:
Cuando no se cumple la condicin if salta al else.
Se pueden declarar variables locales adentro de la
sentencia
En caso de ocupar mas sentencias se aaden else if
(condicin) 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 bsica es:

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Sentencia If Else
Primero se evala 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 mltiples
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 expresin numrica o de tipo
carcter con una lista de opciones constantes, al encontrar
la indicada entra al cdigo y en caso de no encontrarla se
posiciona en la opcin default. La sentencia Switch en
CCS tiene consideraciones especiales.
Una constante char se convierta automticamente a
entero.
El Switch esta mas limitado que el IF, ya que no puede
hacer comparaciones lgicas o relacionales (AND, OR).
La sentencia Switch solo involucra dos corchetes { }
que engloban todas las opciones.
No se pueden declarar variables en cada opcin.
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


Ciclo While

Ciclos:

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


C, primero evala la condicin y en caso de
ser verdadera entra al ciclo, al terminar regresa a validar
si se sigue cumpliendo la condicin.
Para que el PIC ejecute sus comandos por siempre es
comn escribir el ciclo de esta forma

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Ciclo While

Ciclos:

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Ciclo Do While

Ciclos:

La diferencia que tiene este ciclo con el While es que


primero ejecuta el cdigo y despus evala si debe
continuar

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

Lenguaje C para CCS


Ciclo Do While

Ciclos:

Lenguaje C para CCS


Ciclo FOR

Ciclos:

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


Ciclo FOR

Ciclos:

En las expresiones del FOR la inicializacin es una


variable a la cual se le asigna un valor inicial con el que
controlar el bucle. La condicin de finalizacin 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 expresin 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
cdigo CCS.
Este tipo de comandos permiten hacer mas rpidas
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
smbolo # y continan con un comando especifico.
La sintaxis depende del comando. Algunos comandos
no permiten otros elementos sintcticos en la misma
expresin. Muchas de las directivas utilizadas por CCS
son extensiones del C estndar

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 fcil a los registros. Ejemplo:

#DEFINE
Este tipo de instrucciones no generan cdigo en
ensamblador, en este caso el preprocesador reemplaza
la informacin al crear los binarios para el pic.
Usando #DEFINE damos un sentido comn a nuestros
programas por el hecho de reemplazar nmeros 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 bsico para que
se puedan generar binarios correspondientes a las
instrucciones del programa y la administracin de
memoria RAM y ROM. Para los Micros con ms de 256
bytes de RAM se pueden emplear punteros de 8 o 16 bits
En caso de 16 bits basta con aadir *=16 a continuacin 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 prcticamente una cabecera y su extensin es .h, al
incluir estos archivos importamos todas las funciones y
propiedades del dispositivo que estamos programando.
La forma de utilizar esta instruccin 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 caracterstica interesante de CCS es que convierte a
entero cualquier tipo de dato Char o Short, esto pasa cuando
se realizan clculos por tal motivo es importante considerar
estos aspectos:
Cuando se realiza una operacin 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 conversin 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 conversin 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 solucin:
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

MICROCONTROLADORES MICROCHIP

SERIE PIC 16F87X


EULER DEZA FIGUEROA
Euler_df28@hotmail.com

SERIE PIC 16F87X

SERIE PIC 16F87X


Temario
Caractersticas Generales

Microcontroladores de la serie 16F87X


Arquitectura general de la serie 16F87X
Organizacin de la memoria
Set de Instrucciones
Conclusiones

SERIE PIC 16F87X

Caractersticas Generales
CPU
Procesador de Arquitectura RISC
(Solo 35 instrucciones)
Instrucciones de un ciclo simple de
duracin (4 ciclos cristal) excepto
los saltos que requieren dos ciclos
simples

PERIFERICOS
Timer o contador de 8 bits con
prescalas de 8 bits

Timer de 16 bits
Puertos Comparadores/PWM
(Multiplexados) [16 bits resolucin]

Velocidad de operacin: 20 MHz

Convertidor A/D de 10 bits

Memorias FLASH, RAM y EEPROM

SPI (Puerto serial sincrnico para


conexin de perifricos esclavos)

Soporte para hasta 14 fuentes de


interrupcin
Watchdog timer (WDT) para lograr
modo de operacin ms seguro
Proteccin de cdigo programado
(Encriptado)

USART (Universal Synchronous


Asynchronous Receiver
Transmitter) Para comunicacin
serial con paquetes de 8 o 9 bits
Puerto paralelo esclavo de 8 bits

SERIE PIC 16F87X

Comparacin microcontroladores de la
misma serie (16F87X)
Caracterstica

Microcontrolador
PIC 16F873

PIC 16F874

PIC 16F876

PIC 16F877

Frecuencia de operacin
(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 Interrupcin

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

Puertos PWM o
Comparadores

Comunicacin Serial

USART

USART

USART

USART

Comunicacin Paralela

PSP

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

Arquitectura

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X


Contador Programa

MUX Direcciones

Arquitectura

Memoria Programa

Stack

Registro
Instrucciones

RAM
Registro FSR

Registro
STATUS
Decodificador de
Instrucciones y
Unidad de Control

MUX

Unidad Timing

ALU

Registro
W

Unidades de:
Reset
Inicializacin
Watchdog
Debugger
Programacin

Timers

Puerto
Paralelo

Timer 0

Timer 1

Timer 2

ADC

PUERTOS
EEPROM

CCP 1,2

SPI

USART

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

Puertos

Puerto B
Puerto D
Puerto C
Puerto E
Puerto A

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 RA0RA3 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 RB7RB4 pueden usarse como entradas de interrupcin
externa por cambio
Las interrupciones se configuran en el bit RBIF del registro INTCON
Uso: Teclado hexadecimal con atencin de teclas por interrupcin

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 conexin serial de
perifricos externos (Protocolo I2C para SPI) [RC3:RC4]
Comparte pines con salidas PWM o entradas de
comparadores [RC0:RC2]
Comparte pines con sistema comunicacin 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 expansin de memoria del
microprocesador o para conexin 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 seales de control cuando se


configura en modo de expansin 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 Aritmtica-Lgica)

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 segn el cdigo 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 operacin 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 ms significativos.
C: Bandera de Acarreo. Se pone en 1 si el resultado de una operacin 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 direccin directa o la


indirecta
La direccin directa se lee de la memoria de programa

La direccin 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 ms bajas son reservadas para registros de
control/configuracin
Cada banco se constituye por registros de propsito general.
Cada registro es una localidad de memoria de 13 bits
Cada registro se accesa como direccin de memoria, por
ejemplo:
07F9h es una localidad vlida 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
automticamente cuando se hace un Call/Return
Operacin 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 ubicacin del vector de RESET (0000h) es el valor del
contador de programa cuando la mquina se inicializa
La ubicacin 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 cdigo de programa para atender una
interrupcin.
EULER DEZA FIGUEROA
Euler_df28@hotmail.com

SERIE PIC 16F87X

Memoria de Programa
Almacena la secuencia de instrucciones que
corresponde al programa escrito
Almacena cdigos hexadecimales generados en un
archivo *.hex por el compilador o el ensamblador
Consta de pginas de 2kbytes
Se ubica en la parte alta de la memoria, despus del
vector de interrupciones
En 16F877 y 16F876 se tienen 4 pginas
En 16F874 y 16F873 se tienen 2 pginas
Es memoria de tipo FLASH

SERIE PIC 16F87X

Registro de Instrucciones

Registro que almacena la instruccin siguiente a ejecutar


tomada de la memoria de programa

Enva la instruccin a RAM en casos que requieren la


modificacin de algn registro
Enva la instruccin a la unidad de decodificacin para
preparase a ejecutar la siguiente instruccin

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X

Decodificador Instrucciones y Unidad


de Control

Recibe la instruccin siguiente a ejecutar


Realiza la decodificacin del dato recibido al cdigo de
operacin que debe utilizarse
El cdigo de operacin se aplica a la ALU, unidad de
RESET, unidad de WDT, etc segn sea la operacin

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X

Unidad de Reset e Inicializacin


Contiene las siguientes sub-etapas:
Contador de inicializacin. Hace que el sistema espere cierto tiempo para
estabilizarse despus de un RESET.
Contador de inicio del oscilador. Espera a que el oscilador se estabilice
luego de un RESET.
Power On RESET: Genera la seal interna que ejecuta el RESET por
inicializacin del sistema.
Watchdog Timer: Si el sistema entra en un ciclo infinito, el contador del
WDT ejecuta un RESET despus de transcurrido un tiempo considerable
Debugger: Herramienta de pruebas utilizada por el fabricante.
Programacin: Genera las seales 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
seleccin de flanco
Interrupcin 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 ms significativos
El TMR2 se usa como base
de tiempo para el PWM
Los registros de
configuracin son T0CON,
T1CON y T2CON

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X

Convertidor Analgico / Digital


Convierte con una precisin 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 seal CLK principal del sistema)
CHS2:CHS0: Bits para seleccin del canal que se va a convertir desde
AN7 hasta AN0

GO/DONE: Bandera activa cuando hay una conversin 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 comunicacin serial SCI.
Acepta comunicacin Full Duplex en asncrono y Half Duplex en sncrono
El reloj interesa solo para transmisiones sincrnicas
Maneja comunicaciones de 9 y 8 bits configurables en registros TXSTA y
RCSTA
Puede habilitarse/deshabilitarse
Seleccin de Baud-Rate segn fraccin de CLK en SPBRG
Manejo de transmisiones contnuas e interrumpidas
Control de errores de Frame y Overrun para solicitud de
retransmisiones
El registro de datos para transmisin es RCREG para recepcin y TXREG
para envo.

SERIE PIC 16F87X

SPI
Serial Peripheral Interface
Medio de comunicacin con perifricos con 8
bits simultneos de transmisin serial
Aplica a perifricos de alta velocidad
Puede usarse para importar o exportar datos o
seales de reloj
Opera como esclavo o maestro
EULER DEZA FIGUEROA
Euler_df28@hotmail.com

SERIE PIC 16F87X

CCP [ Capture/Compare/PWM ]
Mdulo de captura de 16 bits
Mdulo de comparacin de 16 bits
Mdulo 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 seal con ciclos de trabajo variables
segn el dato de 10 bits del registro CCPR1. La seal 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 seales de control de flujo de informacin


como EEWR para escritura y EERD para lectura
Capacidad mxima de 256 bytes
EULER DEZA FIGUEROA
Euler_df28@hotmail.com

SERIE PIC 16F87X

Puerto Paralelo
Ejecuta transferencias de 8 bits
Utiliza 3 seales 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 interrupcin

Solo tolera la conexin a sistemas multiprocesador


como esclavo

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X

Organizacin 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 funcin 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 interrupcin 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 mltiples bancos de
registros de propsito general,
seleccionados por RP0, RP1.

Extensin de cada banco: 128 bytes


Memoria tipo RAM esttica
Los registros permiten la configuracin de
las caractersticas 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 funcin especial permiten
configurar las diferentes posibilidades de
operacin del sistema:
STATUS
OPTION_REG REGISTER

INTCON REGISTER
PIE1 REGISTER

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

STATUS

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

OPTION_RE
G REGISTER

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

INTCON
REGISTER

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

PIE1
REGISTER

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SET DE
INSTRUCCIONES

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

SERIE PIC 16F87X

Conclusiones
Arquitectura RISC de 35 instrucciones.
Operaciones de duracin igual, excepto saltos.
Compatible con otras familias de PIC.
Pila de 8 niveles y 14 fuentes de interrupcin.

Proteccin de cdigo programable.


Frecuencia de operacin programable.
Comunicacin serie
ADCs de 10 bits de Resolucin

SERIE PIC 16F87X

EULER DEZA FIGUEROA


Euler_df28@hotmail.com

PROGRAMAS EN CCS COMPILER

Lenguaje C para CCS


Primer ejercicio:
Vamos a crear nuestro programa Hola Mundo versin 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 cdigo:

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

Lenguaje C para CCS


Escribimos y modificamos nuestro codigo

PROGRAMAS EN CCS COMPILER

Lenguaje C para CCS


Damos click en el botn de compilar (Build ) o presionamos F9

Ahora salta una pantalla con


el progreso de la compilacin
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

Lenguaje C para CCS


En la carpeta de nuestro proyecto de CCS debe esta el archivo
hexadecimal de nuestro programa:

PROGRAMAS EN CCS COMPILER

Para este ejercicio ocupamos este diagrama:

PROGRAMAS EN CCS COMPILER

PROGRAMA

PROGRAMAS EN CCS COMPILER

Programa 2: Corrimiento de leds


En este ejemplo, mediante un interrupto conectado al RA5
,se controla el sentido del corrimiento del encendido de un
led (Luces auto fantstico

PROGRAMAS EN CCS COMPILER

Programa 2: Corrimiento de leds

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. Segn 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

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)

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


Tambin existen algunos terminales
caractersticas especiales, por ejemplo:
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 utilizacin como
entrada de contador de
eventos
externos
en
conjuncin con un modulo
temporizador (TIMER)

que

poseen

unas

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

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
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
Se definen los registros PORTX y TRISX como bytes y se situan en

la posicion correspondiente
utilizada en C es #BYTE
#BYTE variable=constante;

de la memoria RAM. La directiva

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
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
Se definen los registros PORTX y TRISX como bytes y se situan en

la posicion correspondiente
utilizada en C es #BYTE
#BYTE variable=constante;

de la memoria RAM. La directiva

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
A TRAVES DE LA RAM
Una vez definidas estas variables se pueden configurar y controlar

los puertos a travs de los comandos de asignacin.

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
A TRAVES DE LA RAM
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

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
A TRAVES DE LA RAM
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

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

PROGRAMAS EN CCS COMPILER

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


switch [RB0]

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
A TRAVES DE LAS DIRECTIVAS
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

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
A TRAVES DE LAS DIRECTIVAS
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 tensin flotante ....
// (Simula salida en drenador abierto)
Input_state(pin*) ; /Lee el valor del pin sin cambiar el sentido del terminal

PROGRAMAS EN CCS COMPILER

Programa 4: Control de un Semforo Peatonal de 2 Vas

PROGRAMAS EN CCS COMPILER

Programa 4: Control de un Semforo Peatonal de 2 Vas ..


Funciones de Control:

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
#USE FAST_IO(PUERTO) [PUERTO: A]
Con la funcin output_x() se saca el valor del puerto y con la

funcin input_x() se lee el puerto. La directiva no modifica


previamente el registro TRIS correspondiente.
Hay que asegurarse de que los registros TRIS estn correctamente
definidos.
Ejemplo de Aplicacin ..

PROGRAMAS EN CCS COMPILER

Programa 5: Control de un led mediante uso de librera #USE FAST_IO

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
#USE STANDARD_IO(PUERTO) [PUERTO: A]
Con la funcin output_x() el compilador se asegura de que el

terminal, o terminales correspondientes, sean de salida mediante la


modificacin del TRIS correspondiente .
Con la funcin input_x() ocurre lo mismo pero asegurando el

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


Ejemplo de Aplicacin ..

PROGRAMAS EN CCS COMPILER

Programa 6: Control de un led mediante uso de librera #USE


STANDARD_IO

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
#USE FIXED_IO(PUERTO_OUTPUTS = pin*, )

[PUERTO: A]
El compilador se encarga de generar el cdigo para definir los

puertos de acuerdo con la informacin que indica la directiva


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

PROGRAMAS EN CCS COMPILER

Programa 7: Control de un led mediante uso de librera #USE FIXED_IO

PROGRAMAS EN CCS COMPILER

GESTION DE PUERTOS EN C
CON PUNTEROS
En C se puede acceder a la memoria de datos mediante punteros.

Los punteros se deben definir como INT :

PROGRAMAS EN CCS COMPILER

Programa 8: Control de un led mediante uso PUNTEROS

PROGRAMAS EN CCS COMPILER

Programa 9: Manejo de Displays Multiplexados


Realizar un contador de 0 a 99 con un doble display

de 7
segmentos nodo comn. La cuenta debe ser continua y de o a 9 el
digito de las decenas debe estar apagado. Tambin debe poseer
opciones para seleccionar color del display

PROGRAMAS EN CCS COMPILER

Programa 9: Manejo de Displays Multiplexados ..

PROGRAMAS EN CCS COMPILER

Programa 9: Manejo de Desplays Multiplexados ..

You might also like