Sei sulla pagina 1di 510

1

AUTOR: Csar lvarez


DISEO INSTRUCCIONAL:
Maril Snchez y Csar lvarez
Escuela de Ingeniera Elctrica
Contenido Instrucciones
2
INSTRUCCIONES
Botn para avanzar..........................
Botn para retroceder......................
Botn para ir al contenido principal..
Botn para retornar..........................
Para ir a un tema del contenido,
hacer clic en ttulo del tema.............
Para salir, presione la tecla..............
INICIO
Tema..
Esc

3
Equipo necesario
Requerimientos mnimos
Computador personal Pentium III 128MB RAM, disco duro con
100MB libres, unidad de CD, monitor igual o mayor de 14 de
alta resolucin y puertos: serial (RS-232) o paralelo (LPT), y
conexin a Internet (no indispensable, pero recomendable).
Sistema operativo Windows 98SE o superior.
Software MS Office 2000 o superior (Power Point).
En cuanto a componentes, podrs tratar de ubicar lo siguiente:
Microcontroladores: PIC16C54JW o PIC16F54, PIC16F84A y un
PIC16F877 o algn otro PIC16F87X.
Leds rojos, verdes y amarillos, resistencias, indicadores
numricos 7 segmentos, pulsadores, interruptores y lo que te
interese utilizar para tus aplicaciones.
Un programador PICSTART Plus. Si no lo consigues o te parece
muy costoso, podrs construir tu propio programador, para ello
debers consultar el anexo 7 despus de ver el tema 2.
Adems ser necesario
Mucha voluntad y dedicar suficiente tiempo para aprender sobre
los microcontroladores PIC.

4
INSTALACIONES
Instalar el siguiente software, si no lo ha hecho con anterioridad,
para la consulta de artculos en Internet y tener tu sistema de
desarrollo:
Acrobat Reader
Win Zip
MPLAB IDE
Para ello podr hacer Clic en el programa que deseas instalar o
debers ingresar a los sitios webs de cada uno de ellos,
buscar el software de instalacin, bajarlo gratis, y luego hacer
las instalaciones.
Te recordamos que para hacer las instalaciones, debers salir del
mdulo instruccional al pulsar la tecla y luego
llamar a cada uno de los programas instaladores por
separado, en el orden sugerido.
Esc
CONTENIDO
INTRODUCCIN.
E TEMA I. GENERALIDADES DE LOS MICROCONTROLADORES PIC
E TEMA 2. PROGRAMACIN DEL PIC16C54.
E TEMA 3. MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y
TEMPORIZADORES
E TEMA 4. CARACTERSTICAS ESPECIALES DEL HARDWARE
E TEMA 5. OTROS MICROCONTROLADORES DE LA GAMA BSICA
E TEMA 6. MICROCONTROLADOR PIC 16F84A
E TEMA 7. MICROCONTROLADORES DE LA SERIE PIC16F87X
E CONCLUSIN
E ANEXOS
6
El objetivo primordial que nos movi a disear este material, es el de
que adquieras, a travs de su estudio terico y prctico, las habilidades
y destrezas necesarias para conocer los microcontroladores y disear
circuitos basados en algunos de ellos.
Se explicar y describir qu son los microcontroladores, cules son sus
aplicaciones y funciones, y se describirn ejemplos de circuitos, para
aprender a manejarlos.
Para ello hemos decidido trabajar con los microcontroladores PIC de
Microchip, debido a que, en la actualidad, son los que tienen mayor
popularidad, tanto en las universidades del continente americano y
europeo, como en las diversas industrias que desarrollan proyectos en
electrnica.
Este material se ha dividido en siete temas, con los cuales irs
aprendiendo poco a poco acerca de los microcontroladores PIC, desde el
ms bsico, el PIC16C54, luego podrs observar las diferencias con otros
miembros de la serie PIC16C5X, si as lo deseas. Despus podrs
conocer al microcontrolador PIC16F84A que es uno de los ms bsicos la
gama media, y finalmente se hablar sobre los microcontroladores de la
serie PIC16F87X, los cuales son los ms utilizados de la gama media.
INICIO
7
La metodologa empleada consiste en explicar de manera secuencial, desde el
microcontrolador ms bsico, hasta que poco a poco vayas conociendo aquellos
componentes con mayor complejidad. Por otro lado, se incluir desde un principio,
nociones bsicas del software que te ambientar en el desarrollo de tus programas: El
MPLAB, el cual irs empleando, a medida que vayas elaborando tus programas,
instrucciones del lenguaje ensamblador, mtodos para simular tus programas, elaboracin
de interfaces electrnicas para la adaptacin de seales y el uso del programador, para
que puedas hacer el montaje de los circuitos que has desarrollado.

Este mdulo instruccional te ofrece adems, algunos anexos, los cuales podrs
consultar para profundizar tus conocimientos acerca de los microcontroladores y el
software que emplears, definiciones comnmente utilizadas en este campo, y
sugerencias para la elaboracin de circuitos electrnicos con microcontroladores PIC.

INICIO
8
DIVISIN DE LOS TEMAS
Los temas estn divididos de la siguiente manera:

Tema 1: Se muestra en forma general el concepto de microcontroladores, cmo han
surgido, cules son los fabricantes ms destacados y se resume las caractersticas
principales de los microcontroladores PIC. Luego se presenta la arquitectura del
microcontrolador PIC16C54 y se describe cada una de las instrucciones de los
microcontroladores de la gama bsica.

Tema 2: Se explica detalladamente los pasos para programar cualquier
microcontrolador. Se dan ejemplos y se ensean los primeros pasos para trabajar con el
lenguaje Ensamblador y el ambiente de trabajo MPLAB, el cual es una herramienta muy
poderosa para trabajar con cualquiera de los microcontroladores PIC que vayas a utilizar
en el futuro. Aqu aprenders: a editar un programa, a ensamblarlo en un cdigo para la
memoria del microcontrolador, a simularlo para observar si la lgica del programa est
correcta y grabarlo en un microcontrolador. Para ello utilizaremos unos ejemplos sencillos.

Tema 3: En este aparte, se describe cmo est organizada la memoria de programa y
de datos del microcontrolador PIC16C54. Esto te ayudar a comprender cmo programar
por medio de los registros de funciones especiales que son los que controlan el programa y
algunos circuitos especficos dentro del microcontrolador. Con ello podrs hacer
programas un poco ms complejos.


INICIO
9
TEMAS RELACIONADOS CON
MICROCONTROLADORES MS AVANZADOS
Tema 4: Aqu vers las caractersticas de los circuitos internos o hardware del
microcontrolador PIC16C54. En este tema podrs informarte acerca de la
inicializacin del circuito, los temporizadores internos, el modo de reposo o bajo
consumo y los tipos de osciladores que puedes utilizar.

Tema 5: En este aparte aprenders acerca de otros microcontroladores de la gama
bsica y las diferencias con el PIC16C54.

Tema 6: En este tema te iniciars con la familia de los microcontroladores de la
gama media. Aqu vers las diferencias entre el PIC16C54 y el PIC16F84A;
encontrars que estas diferencias consisten en algunas mejoras que te permitirn
desarrollar circuitos ms verstiles. En el estudio del PIC16F84A te dars cuenta que
todo lo que aprendiste en los cuatro primeros temas, lo aplicars a este tema.

Tema 7: En este ltimo tema encontrars informacin sobre los microcontroladores
de la gama media de la serie PIC16F87X, los cuales tienen mucha aplicacin en la
industria. Estos microcontroladores tienen gran capacidad de funciones, ya que pueden
leer seales analgicas, hacer control de potencia por modulacin de ancho de pulsos,
comunicacin serial y otras posibilidades ms.

Anexos: En los anexos encontrars una gua de referencia para consulta: El
glosario, el manejo detallado de instrucciones, las directivas del lenguaje ensamblador,
algunas notas de aplicacin, etc.

INICIO
10
UNOS CONSEJOS MS
ANTES DE EMPEZAR
Para el mejor aprendizaje de este mdulo es conveniente que leas y practiques con
este material de manera ordenada, para que t, como interesado en esta rea,
conozcas los microcontroladores, su tecnologa electrnica avanzada y su aplicacin en
la actualidad.
Es importante que cuentes, al menos con una computadora compatible con las PCs que
trabaje en ambiente Windows, e instales el MPLAB IDE, el cual lo puedes bajar
gratuitamente en la direccin microchip.com. Si tienes la posibilidad de obtener el
PICSTART PLUS, y conseguir algunos microcontroladores, tales como el PIC16F54, el
PIC16F84 y el PIC16F877 sera mucho ms provechoso para ti todava, ya que podrs
contar con la posibilidad de hacer tus propios montajes.
Si no tienes la posibilidad de obtener el PICSTART PLUS, en el anexo 7 encontrars
un circuito y un software que podrs utilizar para grabar tu microcontrolador PIC.
Finalmente, te aconsejamos que para empezar a estudiar con microcontroladores,
ser necesario que tengas conocimientos de electrnica analgica y electrnica digital:
Circuitos con resistencias, condensadores, diodos, leds, transistores, tiristores,
amplificadores operacionales, interfaces, lgebra de Boole, sistemas numricos
binarios y hexadecimales, aritmtica de nmeros binarios, compuertas lgicas, bloques
funcionales combinacionales, contadores, etc.
Mientras mayores conocimientos tengas de electrnica, circuitos digitales,
instrumentacin y otros campos relacionados o no con la electrnica, mejor provecho
podrs sacar a estos microcontroladores para tus planes en el futuro.
INICIO
11
Te recomendamos que leas el material detalladamente, porque as
comprenders mejor el contenido.
Ten presente, que gracias a tu empeo el aprendizaje depender de
ti, ya que eres el nico responsable directo de l.
Debes cumplir con las actividades y ejercicios que aparecen en el
material.
Cuando tengas dudas, pide a tu profesor asesor de la materia una
entrevista.
Si eres claro al responder la auto-prueba que aparece en el
material, sabrs cul ha sido tu avance.
INICIO
1.1.- Contexto histrico de los microcontroladores
1.2.- Definiciones de microcontroladores
1.3.- Funciones de los microcontroladores
1.4.- Aplicaciones de los microcontroladores
1.5.- Algunos fabricantes de microcontroladores
1.6.- Consideraciones que debes tener antes de seleccionar un microcontrolador
1.7.- Familia de los microcontroladores PIC
1.8.- Principales caractersticas del PIC16C54
1.9.- Descripcin de los microcontroladores PIC16C54
1.10.- Arquitectura del microcontrolador PIC16C54
1.11.- Instrucciones del PIC16C54 y los PIC de la gama bsica


Generalidades de los Microcontroladores PIC
INICIO
Objetivos Terminales:

Describir cmo han surgido
los microcontroladores a
travs del tiempo.
Enumerar algunas aplicacio-
nes de los microcontrolado-
res.
Explicar la arquitectura de
los microcontroladores de la
serie PIC16C54.
Clasificar las instrucciones
de los microcontroladores
de la gama bsica.
INICIO
14
Al comenzar la dcada de 1970, los microcontroladores hicieron su aparicin, y han
encontrado una gran aceptacin en los diseos de aplicaciones electrnicas que
requieren un nivel bsico de automatizacin y programacin. Hoy en da su uso se
extiende en casi cualquier elemento que contenga componentes electrnicos: equipos de
sonido, televisores, hornos de microondas, aires acondicionados, sistemas de alarmas,
automviles, perifricos de computadoras, telfonos inalmbricos y celulares,
calculadoras, agendas electrnicas, traductores de idiomas, controles inalmbricos,
relojes despertadores, equipos de control industrial, equipos mdicos, medidores
digitales, y as puede nombrarse un sinnmero de aparatos los cuales tienen al
microcontrolador como circuito de control para el funcionamiento de stos.
La razn de tal aceptacin, se debe a que un microcontrolador, es bsicamente una
computadora en miniatura, y como tal, puede desarrollar un gran nmero de funciones
segn los programas que tenga grabado en su memoria.
Hoy en da existen microcontroladores con un potencial superior al de las primeras
computadoras personales, lo cual indica las posibilidades que se pueden desarrollar con
ellos, y todo esto en un pequeo circuito integrado.
1.1.- Contexto histrico de los
Microcontroladores
INICIO
15
Durante la dcada de 1960, algunas compaas fabricantes de dispositivos electrnicos,
entre ellas Intel, Texas Instruments y Motorala, decidieron integrar componentes
electrnicos para el desarrollo de circuitos integrados. Intel marc una pauta al
desarrollar un procesador de 4 bits, el Intel 4004, despus fabric microprocesadores
de 8 bits: el 8008 en 1972, el 8080 en 1973 y el 8085 en 1975. Por su parte en 1971
Texas Instruments anunci el desarrollo de su primer microcontrolador: El TMS1000,
cuya patente fue dada al ingeniero Gary Boone y a la Texas Instruments. Este
componente fue utilizado inicialmente para la construccin de calculadoras de 8 dgitos
que realizaban las cuatro operaciones bsicas: suma, resta, multiplicacin y divisin.
INICIO
El primer microcontrolador
Al TMS1000, en un principio, se le llam computador en un
chip, constaba de las siguientes partes: oscilador, unidad
central de procesamiento con un juego de 32 instrucciones, 64 x
4bits de RAM, 1024 bytes de ROM y puertos de entrada salida.
En los ltimos veinte aos del siglo XX, muchos fabricantes se
han dedicado a la tarea de desarrollar una gran diversidad de
microcontroladores de 4, 8, 16 y 32 bits, siendo los de 8 y 16
bits, los ms populares.
16
En cuanto a los microcontroladores PIC, en 1965, la empresa General Instruments
cre una divisin de microelectrnica, GI Microelectronics Division, que comenz
fabricando memorias. A principios de los aos 1970 dise el microprocesador de
16 bits CP1600, razonablemente bueno, pero que no manejaba eficazmente las
entradas y salidas. Para solventar este problema, en 1975 dise un circuito
integrado destinado a controlar los puertos: el PIC (Peripheral Interface
Controller). Se trataba de un controlador rpido pero limitado y con pocas
instrucciones, pues iba a trabajar en combinacin con el microprocesador CP1600.
La arquitectura del PIC, que se comercializ en 1975, era sustancialmente la misma
que la de los actuales modelos PIC16C5X. En aquel momento se fabricaba con
tecnologa NMOS y el producto slo se ofreca con memoria de lectura solamente
(ROM) y con un pequeo pero robusto conjunto de instrucciones.
La dcada de los aos 1980 no fue buena para GI, que tuvo que reestructurar sus
negocios, concentrando sus actividades en los semiconductores de potencia.
INICIO
Surgimiento de los PICs
17
La GI Microelectronics Divisin se convirti en una empresa subsidiaria, llamada
GI Microelectronics Inc. Finalmente, en 1985, la empresa fue vendida a un grupo
de inversores de capital de riesgo, los cuales, tras analizar la situacin,
rebautizaron a la empresa con el nombre de Arizona Microchip Technology, y
orientaron su negocio a los PICs, las memorias EPROMs paralelo y las EEPROMs
serie. Se comenz rediseando los PICs, que pasaron a fabricarse con tecnologa
CMOS, surgiendo la familia de gama bsica PIC16C5X, considerada como la
"clsica".
El xito de los microcontroladores PIC ha sido vertiginoso. Mientras en 1990
ocupaba la vigsima posicin en ventas de microcontroladores de 8 bits, en 1999
subi a la segunda posicin, y desde 2002 se mantiene en la primera. En febrero
de 2004 llegaron a totalizar las tres mil millones de unidades vendidas y la
tendencia es seguir aumentando esta cantidad.
INICIO
18
Las razones del xito de los PIC se basa quizs en muchas cosas: simplicidad en el
uso, conjunto de pocas instrucciones con alta eficiencia de cdigo, rapidez en la
ejecucin de programas, compatibilidad de instrucciones desde la gama bsica a la
alta, gran variedad de modelos, multiplicidad de interfaces, soporte de software,
librera de aplicaciones prcticas. En pocas palabras, son elementos de muy alta
versatilidad que pueden utilizarse en un sinnmero de diferentes diseos electrnicos
y, cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su
repertorio de instrucciones, es muy fcil emplear otro modelo.
Los fabricantes de los PICs, ofrecen una gama de diversos tipos de
microcontroladores, que pueden ser usados en muchas aplicaciones; desde un sencillo
reloj digital, hasta el control de velocidad de motores de induccin y circuitos de
control que utilizan lgica difusa en aplicaciones de robtica y procesos industriales.



INICIO
19
La diversidad de modelos, abarca los microcontroladores bsicos, los cuales tienen:
Unidad central de procesamiento, memoria de programa (PROM, EPROM o FLASH),
memoria de datos (RAM), puertos y temporizadores. Hay otros, ms avanzados, que
ofrecen, adems de los elementos mencionados anteriormente, algunos de los circuitos
que se nombran a continuacin: Manejador de interrupciones, convertidores A/D,
convertidores D/A, memoria EEPROM y FLASH (que pueden mantener sus datos despus
de quitar la alimentacin, sin aadir un equipo externo), moduladores de ancho de pulso,
sensores de temperatura, comparadores, interfaces seriales, entre otros.
INICIO
20
w Es un computador completo dedicado, aunque con limitadas prestaciones, que est
contenido en un circuito integrado y se destina a gobernar una sola tarea.

w Son circuitos integrados programables que constan bsicamente de una unidad
central de procesamiento (CPU), una memoria de programa, una memoria de datos,
puertos de entrada y salida, temporizador y circuitos de inicializacin y reloj.
1.2.- Definiciones de Microcontrolador
INICIO
21
Los microcontroladores tienen funciones especficas, que se realizan de acuerdo al
programa grabado y a las conexiones de las lneas de entrada y salida. Estas lneas
se conectan a interfaces que manejan elementos de lectura y de accin final en un
equipo o sistema a controlar.
1.3.- Funciones de los
Microcontroladores
INICIO
AUTOR: Csar lvarez
DISEO INSTRUCCIONAL:
M. Snchez y C. lvarez
100
0
20
40
60
80
Microcontrolador
Interfaces
22
Los microcontroladores tienen una gran
cantidad de aplicaciones; prcticamente
cualquier aparato electrnico que se fabrica
en la actualidad utiliza al menos un
microcontrolador.
Las aplicaciones de stos pueden desglosarse
en reas de: computacin, comunicaciones,
industria, automocin y electrodomsticos.
1.4.- Aplicaciones de los
Microcontroladores
INICIO
1.5.- Algunos Fabricantes de
Microcontroladores
Fabricante Microcontroladores Capacidad de Memoria
Intel MCS51, 151, 251 8KB - 16KB ROM, 256B - 1KB RAM
Siemens C540U (8051) 4KB - 8KB ROM, 256B RAM
Dallas, Atmel 8051-52 2KB - 16KB ROM, 256B - 16KB RAM
Motorola 68HC05
68HC08
68HC11
0 - 16KB ROM, 176B 512B RAM
16KB - 32KB ROM, 512B - 1KB RAM
4KB - 32KB ROM, 256B - 2KB RAM
Texas Instruments TMS370 0KB - 64KB ROM, 128B - 2KB RAM
NEC m
PD7890xxx
m
PD780xxx
2KB - 24KB ROM, 128B 512B RAM
8KB - 60KB ROM, 256B - 2KB RAM
Toshiba TLCS-870
TLCS-90
4KB - 60KB ROM, 256B - 2KB RAM
0 - 60KB ROM, 0 - 2KB RAM
Hitachi H8/300 8KB- 60KB ROM, 256B - 2KB RAM
SGS-
THOMSON
(ST-Micro)
ST-6
ST-7
ST-9
1KB- 8KB ROM, 64B 320B RAM
4KB- 60KB ROM, 256B - 2KB RAM
0KB-128KB ROM, 512B - 4KB RAM
National
Semiconductor
COP820, 840, 880C, 912
COP884xx, 888xx
1KB- 4KB ROM, 64B 128B RAM
4KB-32KB ROM, 128B 1088B RAM
Zilog Z8 0,5KB - 32KB ROM, 61B 237B RAM
Microchip 16Cxx
18Fxx
512X12 - 4KX14 ROM, 25B 192B RAM
2K - 32Kx16 ROM, 232B 2KB RAM
INICIO
Las compaas de mayor produccin de
microcontroladores de 8bits 1990 - 2002
INICIO
25
Principalmente se debe tomar en cuenta, en qu aplicacin quieres que ste opere.
Si deseas seleccionar algn fabricante especfico, para desarrollar muchas
prototipos, entonces se deber escoger aqul que ofrezca ciertas ventajas tanto en
las caractersticas del hardware como del software.
Suficiente capacidad de memoria para los
programas y datos.
Lneas de entrada y salida suficientes para
la aplicacin a desarrollar.
Que presente rapidez en la ejecucin de los
programas.
Sencillez en el montaje.
Sistema de soporte para la grabacin.
Diversidad de productos.
Disponibilidad en el mercado y bajo costo.
Debe seleccionarse a aquellos que ofrezcan
facilidad de programacin y cdigos de
programacin eficientes.
Programas de simulacin de fcil uso.
Soporte de lenguajes de programacin de
alto nivel.
Compatibilidad con los sistemas operativos
ms comunes.
Disponibilidad de programas y libreras de
aplicaciones.
Disponibilidad de herramientas de desarrollo.
1.6.- Consideraciones a tomar antes
de seleccionar un Microcontrolador:
INICIO
En este mdulo instruccional hemos seleccionado a los microcontroladores PIC de
Microchip, ya que ofrecen una gran variedad de productos para muchas aplicaciones.
26
En principio, para la seleccin de un microcontrolador en una aplicacin especfica,
debers tomar en cuenta muchos factores para que esta escogencia resulte en una
relacin efectiva de bajo costo. Entre estos factores estn: tensin de
alimentacin, tipo de fuente a utilizar, capacidad de memoria de programa y de
datos, tipos de seales a manejar, cantidad de lneas de entrada y salida, tipos de
memorias para programa y datos, capacidad de interrupcin, tamao y otros
factores ms.
Podra darse el caso, de tomar en cuenta muchos de estos factores y luego
encontrar otro microcontrolador que se adapte mejor a lo que t deseabas. En este
sentido, no hay mayor problema, ya que el programa que elaboraste en el primer
microcontrolador, podr ejecutarse en otro, si ste es de la misma gama o de una
gama superior.
Por otro lado podramos dar una idea inicial de aquellos microcontroladores que
ofrece Microchip, segn la serie a la cual pertenece. En las pginas siguientes de
este mdulo instruccional se mencionan las caractersticas principales de estos
microcontroladores. Para un anlisis ms detallado, debers consultar con las
especificaciones que presenta el manual del fabricante.
Finalmente, en este mdulo encontrars cmo trabajar con los microcontroladores
ms utilizados de Microchip. Obteniendo un buen aprendizaje, podrs seleccionar el
microcontrolador ms adecuado para tu aplicacin especfica.
INICIO
27
La familia de los microcontroladores de 8 bits de Microchip, es muy variada, y
prcticamente hay un tipo de microcontrolador para cada aplicacin. La siguiente
tabla resume las caractersticas principales de cada familia hasta comienzos de 2004.
La serie dsPIC, que aparece al final de la tabla, es una familia de procesadores
seales de 16bits que entr en produccin recientemente.
PIC Memoria de Caractersticas Principales
Series Programa
PIC 12C5XX 0,5 - 1K x 12 Opcin EEPROM, Velocidad: 1 a 2 MIPS
PIC 12C6XX 2K x 14 8 Terminales, Oscilador incluido, A/D C
PIC 12F6XX 0,5 - 1K x 14 A/D C, EEPROM, FLASH, Oscila. interno
Velocidad: 5 MIPS, 8 Terminales.
PIC 14C000 4K x 14 A/D C 16 Bits, DA/C, Lector de temperat.
28 terminales, manejo de Interrupciones

PIC 16C5X 0,5K -2K x 12 Velocidad: 5 MIPS, Disponibilidad en
14, 18 y 28 terminales
PIC 16CXXX 0,5K -8K x 14 Comparador Digital y analgico, Interrpc.
Modulador de ancho de pulso (PWM),
Interfaz serial (USART), A/D C ,
Manejador LCD, variedad de tamaos.
1.7.- Familia de los
Microcontroladores PIC
INICIO
28
INICIO
PIC 17C4X/7XX 2K - 8K x 16 Multiplicador de 8x8 bits, Comparador
Digital, PWM, Opciones en: OTP, EPROM
y FLASH - ROM, USART, I2C,Velocidad:
8,5 MIPS, manejo de Interrupciones,
Disponibilidad de hasta 44 Terminales.
Conjunto de 58 instrucciones de 16 bits.
PIC 16FXXX 0,5K - 8K x 14 A/D C de 10bits, PWM, USART, EEPROM,
FLASH o ROM, Manejo de Interrupciones,
I2C, Comparador Digital, Vel: 5 MIPS,
Disponibles en 18, 28,40 y 44 Terminales.
PIC18CXX /18FXX 0 - 65K x 16 Similar a la serie PIC 17C7XX. Conjunto
de 77 instrucciones de 16 bits velocidad
de 10 MIPS. Compilacin en C eficiente
rfPIC12C5XX 1K x 12 Similar a la serie PIC 12XXX, pero incluye
rfPIC12F6XX 1K x 14 un transmisor de radio frecuencia UHF.
dsPIC30FXXXX 4K - 48K x 24 A/D C de 12bits, PWM, EEPROM, FLASH
(Procesadores de Manejo de Interrupciones, USART, I2C,
seales de 16bis) CAN, Comparador Digital, Vel: 30 MIPS,
18 a 80 Terminales. Conjunto de 84 instruc.
29
w Facilita la labor de depuracin de programas.
w Permite el desarrollo de aplicaciones en poco tiempo.
w Todas las instrucciones son sencillas y presentan un cdigo eficiente, lo que
permite reducir un programa a la mitad con respecto a otros microcontroladores de
8 bits.
w Circuito de inicializacin incluido.
w Presenta cuatro configuraciones programables para el oscilador.
w Modo Reposo (sleep) para el ahorro de energa.
w Temporizador perro guardin (Watchdog), para prevenir que un programa se
cuelgue.
w Proteccin de programas.
1.8.- Principales caractersticas del
PIC16C54
INICIO
30
El PIC16C54 es un microcontrolador de 8 bits de tecnologa CMOS.
Este microcontrolador tiene una arquitectura RISC con un conjunto de apenas 33
instrucciones de una sola palabra (12 bits), lo cual reduce esfuerzo en memorizar
los cdigos de instruccin.
1.9.- Descripcin del Microcontrolador
PIC16C54
INICIO
31
El microcontrolador PIC16C54 utiliza una arquitectura Harvard, lo cual significa que la
memoria de programa y la de datos est separada en dos buses diferentes. Esto
mejora la velocidad en el acceso a instrucciones y datos, y permite utilizar palabras de
una longitud para las instrucciones y otra para los datos.

El PIC16C54 utiliza cdigos de instruccin de 12 bits, esto permite combinar
instrucciones de un ciclo donde se incluye el acceso directo a la memoria de datos;
adems, se cuenta con una estructura de entubamiento en la cual, mientras se ejecuta
una instruccin, se prepara la siguiente, es decir, significa un ahorro en el tiempo de
ejecucin de cada programa, en donde se necesita apenas cuatro perodos del oscilador
por cada ciclo de ejecucin de una instruccin. Por ejemplo: para un oscilador con una
frecuencia igual a 20 MHz, el perodo del oscilador es de 50nSeg; esto significa que el
ciclo de una instruccin tarda 4 X 50nSeg, es decir, 200 nSeg. Las instrucciones en
donde se ejecutan saltos demoran dos ciclos, ya que la instruccin que se prepara es la
de la siguiente lnea del programa, y al realizar el salto se va a una instruccin que
est ubicada en otra lnea del programa.

A continuacin se presenta la arquitectura del microcontrolador PIC 16C54:
1.10.- Arquitectura del
Microcontrolador PIC16C54
INICIO
32
Diagrama de Bloques del Microcontrolador
PIC16C54
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
(SRAM)
25 BYTES
F
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
5-7
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
33
Al examinar la figura de la arquitectura, se puede ver que arriba a la izquierda se
encuentra la memoria de programa EPROM o ROM; su capacidad es de 512 palabras
de 12 bits, y all est el programa desde la posicin 000h.
A la derecha de la memoria de programa, se encuentra el registro PC o Contador de
Programa, del cual salen los valores de las direcciones que se leern en la memoria
de programa. El programa del microcontrolador comienza en la direccin 0 que
corresponde a la siguiente instruccin despus de la inicializacin.
Los datos que salen de la memoria de programa, que corresponden a los cdigos de
instruccin, que son las lneas del programa codificadas en binario, van al Registro de
Instrucciones. En este registro se almacena temporalmente el cdigo de la
instruccin a ejecutar, la cual es interpretada por el Decodificador de Instrucciones.
El Decodificador de Instrucciones traduce el cdigo o valor binario que est en la
memoria del programa a una instruccin que se va a ejecutar. Esta instruccin puede
tomar dos caminos: Si la instruccin implica un salto de direccin, entonces se
colocar en el registro PC (va directa) un nuevo valor, el cual corresponde a la nueva
direccin del programa; si la instruccin consiste en hacer una operacin con uno de
los Registros de Propsitos Generales (vase el bloque en la parte derecha de la
figura) o con el registro W, se tomarn unas lneas del Registro de Instrucciones
para especificar la direccin de acceso al registro, y las otras lneas para colocar el
cdigo de la operacin que se realizar en la Unidad de Lgica y Aritmtica.
INICIO
34
En la Unidad de Lgica y Aritmtica se puede hacer clculos aritmticos, tales
como la suma y la resta binarias, u operaciones lgicas, tales como: and, or,
exor, complemento y desplazamientos. Las operaciones se pueden ejecutar con
una o dos variables de 8 bits, que pueden estar en el registro de trabajo W o en
un registro indicado por medio de la direccin F, que seala una posicin de la
memoria de datos o Registro de Propsitos Generales, un Puerto, un registro TRIS
o el temporizador TMR0, como puede observarse en la parte inferior de la
arquitectura PIC 16C54.
En la parte superior derecha de la figura, se puede observar el bloque que se
refiere a la Palabra de Configuracin, la cual define si se va a inhabilitar el
Temporizador WDT (perro guardin), si se va a hacer la Proteccin de Cdigos del
programa de la memoria y cul palabra de configuracin se va a emplear para
seleccionar el tipo de oscilador en el bloque Oscilador, Tiempo y Control.
El registro Option, el cual se escribe por medio del registro W, es el encargado
de colocar la palabra de configuracin en el Escalamiento de WDT y TMR0. Este
escalamiento fijar la programacin del divisor de frecuencia en uno de los
temporizadores.
Finalmente, en la parte derecha del registro PC, se encuentran los registros Pila1
y Pila2, que se utilizan para almacenar la direccin del contador de programa en el
momento en el que se va a ejecutar una subrutina.
INICIO
35
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
36
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
37
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
38
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
39
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
40
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
41
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
42
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
F
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
43
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
44
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
45
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
46
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
47
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
48
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
49
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
50
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
51
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
52
ENTRADA
TOCKI
RA3 RA0
TRIS 6
TRISB PUERTO B
8 8
8
RB7 RB0
9-11
EPROM-ROM
512x12
PC
9-11
REGISTRO DE
INSTRUCCIONES
DECODIFICADOR
DE
INSTRUCCIONES
PILA 1
PILA 2
DIRECCIN
DIRECTA
TIEMPO DE
ESPERA DEL
WDT
ESCALAMIENTO
DE TMRO Y WDT
TEMPORIZADOR
WDT
PALABRA DE
CONFIGURACIN
INHABILITA
PROTECCIN
DE CODIGOS
TIPO DE
OSCILAD.
OSCILADOR,
TIEMPO Y
CONTROL
OSC1 OSC2 MCLH
REG. OPTION
SLEEP
OPTION
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES
RAM DE
DIRECCIN DIRECTA
W
UNIDAD
LGICA Y
ARITMTICA
TMRO
BUS DE DATOS
TRIS 5
TRISA PUERTO A
4
4
4
STATUS
9
8
12
12
8
2
8
6
5
8
8
INICIO
53
Diagrama de conexiones del
Microcontrolador PIC16C54
A continuacin, se presenta la interconexin del los PIC 16C54
Cada conexin tiene su propia funcin especfica. Haz clic en el terminal
deseado para encontrar la funcin correspondiente en el glosario.
INICIO
PIC
16C54
54
1.11.- Instrucciones del PIC16C54
y los PIC de la gama bsica
Un programa que se graba en un microcontrolador, es el encargado de ejecutar una
funcin de aplicacin para el circuito a utilizar.
Para hacer un programa, es necesario conocer las instrucciones que ofrece el lenguaje con
el que se va a trabajar y manejar el software necesario para comprobar que el programa
haga lo que se desea.
Queremos hacerte entender que la labor de programacin no es difcil. Hacer un
programa es algo as como hablar con alguien para que ejecute una o ms acciones. Para
realizar esto, t necesitas conocer una gran cantidad de palabras del idioma con el que te
puedas expresar, y la persona deber entender el mismo lenguaje que t empleas.
Mientras ms palabras conozcas, podrs manejar con mayor eficiencia tu lenguaje y tu
modo de expresin. Sin embargo, adems de conocer las palabras, necesitars manejar
tambin las reglas de expresin o sintaxis. Por ejemplo cuando le dices a alguien:
Quiero que me traigas 1Kg de azcar. En ese caso ests expresando un deseo a ese
alguien, que consiste en que esa persona salga de la casa, camine hacia el abasto, entre
al lugar, busque el azcar en los estantes, tome un paquete de 1 Kg de azcar, vaya a la
caja a pagarlo, saque el dinero, tome el vuelto, salga del abasto, regrese a la casa y
finalmente te entregue el paquete de azcar.
Fjate que en la expresin utilizada inicialmente, que es bastante corta, implica una serie
de pasos que se deben ejecutar para llegar a la accin final, y estos pasos podrn ser tan
especficos como a nosotros se nos pudiera ocurrir. La expresin Quiero que me traigas
1Kg de azcar podra interpretarse en un software, como una instruccin de un lenguaje
de alto nivel o una subrutina de un lenguaje de bajo nivel, y los pasos que implican realizar
la accin, pueden verse como los cdigos del lenguaje del microcontrolador.
INICIO
55
Cuando se quiere dar rdenes a un microcontrolador, se deber emplear un lenguaje de
programacin que l lo entienda directamente. Sabemos que un microcontrolador
entender cdigos compuestos por 1 y 0, que nosotros podramos aprenderlo, pero
invertiramos mucho tiempo y sera muy fcil equivocarnos al emplear este lenguaje. Sin
embargo, como vamos a contar con una computadora, podremos utilizar un lenguaje un
poco ms fcil de entender, y la computadora har las traducciones necesarias al
lenguaje del microcontrolador. Este proceso se llama ensamblaje o compilacin.

El lenguaje que se utiliza comnmente para trabajar con microcontroladores es el
lenguaje Ensamblador, que es un lenguaje de bajo nivel. Existen otros lenguajes, de
alto nivel, que tambin se pueden utilizar para programar estos componentes, tales
como los lenguajes C y Basic. El lenguaje Ensamblador es bsicamente un lenguaje
de mquina, es decir, que las instrucciones que emplea se codifican directamente para
ser grabadas en la memoria del programa del microcontrolador.

Para facilitar un poco el entendimiento del lenguaje Ensamblador de un microcontrolador
o un microprocesador, las instrucciones se presentan con cdigos, que representan
abreviaciones, y a continuacin, los operadores que van a realizar la instruccin. El
lenguaje ensamblador permite colocar, de manera opcional, algunos comentarios, que se
reconocern por ser expresiones que estn despus de ; en una lnea del programa.
Otra opcin que nos permite el ensamblador, consiste en colocar etiquetas o
encabezados, que indican posiciones en la memoria de programa escritas en palabras de
uso comn.
INICIO
56
Para escribir un programa en un microcontrolador, sea cual fuere el lenguaje que vamos
a emplear, debemos utilizar un software que nos facilite la labor de la comunicacin.
En este curso se emplear el software MPLAB, ya que es la plataforma de
programacin gratuita que ofrece Microchip para todos los microcontroladores que
fabrica, y permite realizar todos los pasos necesarios en la programacin del
microcontrolador, sin necesidad de llamar a otro software.
Para escribir un programa en un microcontrolador, debes comenzar por conocer las
instrucciones o el lenguaje que vas a emplear. En este curso comenzaremos por utilizar
el lenguaje Ensamblador, ya que ste nos permitir conocer con bastante profundidad el
modo de funcionamiento del microcontrolador. Ms adelante podrs emplear un lenguaje
de alto nivel; sin embargo queremos que sepas que si puedes hacer un buen programa en
el lenguaje ensamblador, ste se ejecutar con mayor rapidez y emplear menos
cantidad de memoria que al hacer uso de un compilador de lenguaje de alto nivel.
Despus de conocer las instrucciones del lenguaje de programacin, podrs utilizar el
MPLAB o algn otro software para editar el programa, es decir, escribirlo como si
fuera una carta, pero de manera ordenada; luego debers ejecutar el comando que
ensambla o compila el programa; despus, si no hubo error de sintaxis, podrs hacer la
simulacin del programa; y si no hay errores de lgica, podrs finalmente grabarlo en la
memoria del microcontrolador para que, de esta manera, puedas probar si funciona
correctamente en un circuito. En cada fase debe hacerse las correcciones necesarias
segn los resultados que se van obteniendo.

INICIO
57
Fjate en lo siguiente:
El microcontrolador PIC16C54 utiliza palabras de 12 bits divididas en un cdigo de
operacin que especifica el tipo de instruccin y los registros en donde se va a
ejecutar la operacin y en qu lugar se va a colocar el resultado. Esto te permite
utilizar instrucciones que en el microcontrolador se codifican en una sola palabra.
Eso te garantiza que tu programa en el microcontrolador ocupa igual nmero de
instrucciones como las que empleaste en el lenguaje ensamblador. Esto no ocurre
con la mayora de los otros microcontroladores.
El nmero de instrucciones que presenta el PIC16C54, es de apenas 33. El formato
de estas instrucciones, permite tratar a la memoria de datos, como si fueran
registros de trabajo, lo cual implica un ahorro tanto en la codificacin de la
instruccin, como en el tiempo de ejecucin en la misma.
Las instrucciones pueden hacer operaciones entre registros de un byte, para lo
cual se utiliza el apuntador de direcciones de registros f y el registro de trabajo
W; pueden ejecutarse entre operaciones con valores constantes y el registro de
trabajo W; tambin pueden ejecutarse operaciones orientadas a bits, para esto se
utiliza la variable b, que indica la posicin del bit en el registro apuntado por f.
En las instrucciones orientadas a bytes, f es un valor que representa la direccin
de un registro de asignacin y d representa el destino, que puede ser el mismo
registro apuntado por f o el registro W. Los registros sealados por f, son uno de
los 32 lugares de memoria a los que puede acceder la instruccin, por medio de los
5 bits del cdigo especificado para ello.
INICIO
58
En resumen
W Registro de trabajo.
F Direccin del registro de la RAM.
d Destino, a donde va el resultado (W o F).
b Direccin del bit a utilizar en el registro de
direccin F.
K Valor numrico constante.
INICIO
59
La designacin del destino, que se hace por medio de d, indicar si el resultado se
llevar al registro de trabajo W, cuando d=W, o al registro de direccin f, cuando
d=f. Recuerda que las operaciones lgicas y aritmticas se hacen en cdigo
binario, y por lo general se utiliza el cdigo hexadecimal en los valores asignados en
el lenguaje ensamblador.
Por ejemplo, la instruccin:


ADDWF f,d
Indicar sumar (ADD) el registro de trabajo W,
con el registro de direccin f. El resultado se
colocar en W si d=W, o en f si d=f. Si no
colocas ningn destino, el ensamblador
guardar el resultado en el registro de
direccin f y te dar un mensaje de
advertencia.


Operaciones entre W y f
Digamos que la instruccin:
ADDWF 12,W ;Suma en binario el contenido del registro
;W con el contenido del registro 12 y el
;resultado se guardar en el registro W
INICIO
Cdigo de la instruccin
Registro
Destino
60
GOTO K ; (Ejemplo GOTO LAZO)
Indica que el programa saltar a la posicin indicada
por el valor K, donde K puede ser un nmero de 9 bits
en este caso, o una palabra clave o etiqueta que indica
una posicin en la memoria de programa.
Para las instrucciones orientadas a bits, b representa
la posicin de un bit ubicado en el registro f. Por
ejemplo, la instruccin:
BCF f,b
Indicar una instruccin (Bit Clear) que borrar el bit
en la posicin b (0 a 7) del registro de direccin f (0
a 31).
IORLW K

Donde K es un valor constante de 8 bits, indicar que se
realizar la funcin (Inclusive) OR entre los bits del Literal K y los del
registro W. El resultado ir a W.
Para instrucciones con literales y control, K representa una constante de 8 9
bits, o un valor literal indicado por medio
de una palabra clave o etiqueta.
Un ejemplo:
IORLW B10010110 ; 10010110 es un nmero
; en binario
Operaciones con literales y bits
INICIO
61
INSTRUCCIONES DEL LENGUAJE
ENSAMBLADOR
Clasificacin de las instrucciones del microcontrolador PIC16C54:

Instrucciones de transferencia de datos, las cuales mueven datos de un registro a otro
(los registros involucrados son el W y un registro apuntado por f), o un dato constante en
la memoria del programa al registro W.
Instrucciones aritmticas, las cuales ejecutan operaciones aritmticas binarias entre W
y un registro de direccin f.
Instrucciones lgicas, las cuales ejecutan operaciones lgicas bit a bit entre W y un
registro de direccin f, o entre W y un valor constante.
Instrucciones de borrado, las cuales colocan el valor cero a un registro.
Instrucciones de rotacin, las cuales permiten rodar el contenido de un registro de
direccin f, un bit hacia la derecha o hacia la izquierda. Estas instrucciones se utilizan
para efectuar multiplicaciones y divisiones aritmticas binarias. Entre estas instrucciones
tambin existe una que permite intercambiar grupos de 4 bits, para el manejo de dgitos.
Instrucciones de manejo de bits, las cuales pueden colocar en 0 o en 1 un bit
determinado de un registro de direccin f.
Instrucciones de saltos, las cuales permiten la posibilidad de cambiar la direccin de
ejecucin de un programa de manera incondicional o segn la evaluacin de un bit o si un
registro es igual a cero.
Instrucciones de control, las cuales permiten hacer algunas configuraciones de hardware
en el microcontrolador.

INICIO
62
INSTRUCCIONES DE TRANSFERENCIA DE DATOS

MOVF f,d ; Mueve el contenido de f hacia el destino d (W o f)
MOVLW K ; Se asigna a W el valor K
MOVWF f ; Mueve el contenido de W hacia el registro f
INSTRUCCIONES ARITMTICAS
ADDWF f,d ; Suma W con f (y guarda el resultado en d: W o f)
SUBWF f,d ; Resta f menos W
DECF f,d ; Decremento en 1 el contenido de f
INCF f,d ; Incremento en 1 en contenido de f
Instrucciones de transferencia
de datos y aritmticas
INICIO
63
INSTRUCCIONES LGICAS
ANDLW K ; And de los bits de W con los de K y guarda en W
ANDWF f,d ; And de los bits del registro W con los de f
COMF f,d ; Complemento en uno el contenido del registro f
IORLW K ; Or de los bits de W con los de K y guarda en W
IORWF f,d ; Or de los bits del registro W con los de f
XORLW K ; Exor de los bits de W con los de K y guarda en W
XORWF f,d ; Exor de los bits del registro W con los de f
INSTRUCCIONES DE BORRADO
CLRF f ; Borra el contenido del registro f
CLRW W ; Borra el contenido del registro W
Instrucciones lgicas y de borrado
INICIO
64
INSTRUCCIONES DE ROTACIN
RLF f,d ; Rotacin de f hacia la izquierda a travs de Carry
RRF f,d ; Rotacin de f hacia la derecha a travs de Carry
SWAPF f,d ; Intercambia nibles (grupo de 4 bits) en el registro f
INSTRUCCIONES DE MANEJO DE BITS
BCF f,b ; Pone en 0 bit b del registro f
BSF f,b ; Pone en 1 bit b del registro f
Instrucciones de rotacin
y manejo de bits
INICIO
65
INSTRUCCIONES DE SALTO (Si se ejecuta el salto, la instruccin demora dos ciclos)
BTFSC f,b ; Si el bit b de f es cero, salta una instruccin
BTFSS f,b ; Si el bit b de f es uno, salta una instruccin
CALL K ; Llama a subrutina en la direccin K
GOTO K ; El programa va a la direccin K
DECFSZ f,d ; Decremento de f y si es cero, salta una instruccin
INCFSZ f,d ; Incremento de f y si es cero, salta una instruccin
RETLW K ; Retorno de subrutina, W toma el valor de K
Instrucciones de Salto
INICIO
66
INSTRUCCIONES DE CONTROL
CLRWDT ; Borra temporizador Perro guardin (WDT)
SLEEP ; Inhabilita el procesador, (Reposo)
NOP ; No ejecuta operacin
OPTION ; El contenido de W se carga al registro OPTION,
; que se utiliza para la configuracin de los
; temporizadores y el escalamiento.
TRIS f ; Contenido de W va a TRIS (programacin puertos),
; f representa uno de los puertos A o B (5 6).
; Un 1 en el bit de programacin, configura la lnea
; correspondiente al puerto como entrada; un 0 lo
; configura como lnea de salida.
Instrucciones de Control
Nota: Si deseas ver el significado en detalle de todas las instrucciones de los
microcontroladores PIC de las gamas bsica y media, puedes consultar el anexo 2.
INICIO
67
ACTIVIDADES A REALIZAR
En este aparte, se pide que t desarrolles las actividades que a continuacin se
presentan, para comprender mejor el tema siguiente.
1.- Define con tus propias palabras los siguientes trminos:
a.- Qu es un Microcontrolador?
b.- Cmo funciona un microcontrolador?
c.- En cules aplicaciones se podra utilizar un microcontrolador?
d.- Describe las principales caractersticas de los microcontroladores PIC.
2.- Dibuja la arquitectura de un microcontrolador PIC16C54.
3.- Haz una clasificacin de las instrucciones de los microcontroladores PIC de la
gama bsica y relaciona el significado de cada cdigo de operacin con la instruccin
que ejecuta con sus operadores.
4.- Explica qu es lenguaje ensamblador y haz un ejemplo de un programa que lea dos
datos ubicados en la memoria de datos y los sume.
INICIO
2.1.- Programacin de Microcontroladores
2.2.- Pasos para programar un Microcontrolador
2.3.- Representacin del circuito.
2.4.- Edicin del Programa con el MPLAB
2.5.- Ensamblaje del Programa
2.6.- Simulacin
2.7.- Grabacin del Microcontrolador
2.8.- Reduciendo el programa
2.9.- Advertencia para un vehculo
2.10.- Control de leds por medio de pulsadores
2.11.- Ejemplo de un programa para sumar
2.12.- Resta de dos nmeros
TEMA 2
Programacin del PIC 16C54

Contenido
INICIO
69
Objetivos Terminales:
Explicar los pasos necesarios para
programar un microcontrolador para
una aplicacin especfica.
Desarrollar programas bsicos para
aplicaciones especficas, que puedan
ejecutarse por un microcontrolador
PIC16C54.
TEMA II: Programacin del microcontrolador
PIC16C54
INICIO
70
La programacin es el modo de organizacin de las instrucciones que va a realizar
el microcontrolador para cumplir una o ms funciones especficas.

Para programar los microcontroladores es importante que utilices el lenguaje
ensamblador, ya que es el ms parecido al lenguaje del procesador, y esto te
ayudar a entender mejor cmo trabaja cada instruccin. Existe tambin la
posibilidad de utilizar los programas en lenguaje C, Basic o algn otro de alto
nivel.

Queremos convencerte que esta labor no es difcil, especialmente si ya has
programado en cualquier otro lenguaje, recuerda que programar es parecido a
hablar o escribir en el idioma que empleas usualmente para comunicarte.

Para hacer un diseo en el que se utilicen circuitos integrados programables, ser
necesario emplear herramientas que ayuden a la puesta a punto del Hardware y
del Software.
2.1.- Programacin de
Microcontroladores
INICIO
71
Debes tener en cuenta que, adems de
los compiladores o intrpretes de los
lenguajes usados, es muy interesante
disponer de simuladores de programas,
que consisten en un software que
ejecuta las instrucciones que
representan, en una computadora, el
comportamiento interno del procesador y
el estado de las lneas de entrada y
salida.
Recuerda que es indispensable el grabador,
encargado de escribir el programa en la memoria
del microcontrolador. Existen grabadores muy
completos capaces de trabajar con muchos modelos
de diferentes familias. Otra herramienta de
desarrollo, es el emulador en circuito, que consiste
en un complejo dispositivo fsico que, controlada por
un programador desde tu computadora personal,
dispone de un conector con cables que van hacia la
computadora y que tiene los mismos terminales que
el microcontrolador que trata de imitar. El
conector se introduce en la base donde ir el
microcontrolador, con el programa definitivo en la
memoria de la computadora. El emulador en
circuito (ICE) hace funcionar el sistema como si
hubiese un microcontrolador real, pero con la
ventaja de poder observar todo el funcionamiento
en la computadora. Un inconveniente de los
emuladores, es su elevado precio que los aleja de
los usuarios personales
INICIO
72
Despus de seleccionar un microcontrolador para una aplicacin especfica, para
programarlo ser necesario:

Despus de cada fase, se
deber corregir los errores
hasta que todo funcione bien.
Ensamblar el programa
Simular el programa
Grabar el programa en el microcontrolador
Hacer pruebas en el circuito
Editar el programa
Representar el circuito
2.2.- Pasos para programar un
Microcontrolador:
INICIO
73
2.3.- Representacin del circuito.
Un ejemplo
Para representar el circuito, se colocar el siguiente ejemplo:
Se desea hacer un circuito con cuatro interruptores de entrada y ocho
indicadores a la salida, de los cuales cuatro sern de color rojo, y cuatro sern
de color verde. Cada interruptor estar asociado a dos indicadores de diferente
color, y al accionarlo, deber cambiar el encendido, de uno a otro. Cuando un
interruptor est abierto, deber encender el indicador de color rojo asociado a
ste. En el caso de estar cerrado encender el indicador de color verde.
Solucin:
De acuerdo al problema planteado, debers contestar estas preguntas:
Cuntas lneas de entrada y salida sern necesarias para desarrollar el circuito?
Cules sern conectadas como entradas y cules se conectarn como salidas?
Qu tipo de interfaz se colocar para las entradas?
Qu tipo de interfaz se colocar para las salidas?
El PIC 16C54 ser apropiado para este circuito?
Antes de pasar a la siguiente pgina, recomendamos que t respondas estas
preguntas. Si lo deseas, podrs consultar con las pginas anteriores de este
mdulo instruccional.
INICIO
74
Respuestas
De acuerdo a las preguntas planteadas en la pgina anterior, las respuesta sern las
siguientes:
Se necesitarn doce lneas de entrada y salida, de las cuales cuatro sern entradas,
que correspondern a los interruptores y ocho sern salidas, que correspondern a
los indicadores o leds.
Las interfaces se harn de una forma sencilla. Se tomar en cuenta que en los
puertos de entrada, si las lneas no estn conectadas, la lectura ser indefinida (0
1), entonces se conectar una resistencia de 4,7K al voltaje de alimentacin para
cada entrada, y en el mismo punto, se colocar un interruptor a la referencia
negativa o tierra, de manera que si el interruptor est abierto, se leer un 1, y si
est cerrado, se leer un 0. En cuanto a las interfaces de salida, se deber
considerar si los microcontroladores pueden manejar directamente a los leds.
Teniendo en cuenta que los puertos de los microcontroladores pueden entregar o
absorber hasta 25mA a 25C con una alimentacin de 5V, y para un led basta una
corriente de 5 a 10mA para encenderlo, entonces la interfaz se har por medio de
una resistencia de 300 en serie con cada led. La ecuacin para calcular la
resistencia de cada Led, ser: Rled=(Vdd-Vled)/Iled
Donde: Vdd = 5V (O la tensin de alimentacin que utilizas para el circuito)
Vled 2V (Depende del color del led: Rojo -> 1,6V; Verde -> 2,4V)
Iled 10mA (Depende del brillo deseado y la corriente mxima del led)
INICIO
75
Seleccin del Microcontrolador
Segn lo establecido anteriormente, el microcontrolador PIC16C54 es adecuado para esta
aplicacin, ya que tiene doce lneas disponibles para los puertos de entrada-salida. Si en
el mercado local no consigues el PIC16C54, podras utilizar el PIC16F54, el PIC16F84A o
algn otro microcontrolador PIC de 18 terminales que pertenezca a la gama bsica o
media, ya que dispone de doce terminales de entrada-salida, y los programas que se
elaboran con los PIC16C54, funcionan con los otros de la gama bsica o media; las
conexiones externas entre ellos tambin son compatibles. A continuacin se presenta el
circuito a utilizar, en donde se escoger al puerto A como entrada (4 bits) y el puerto B
como salida (8 bits).
Vdd
PIC
16C54
INICIO
76
2.4.- Edicin del Programa
con el MPLAB
Alt
Despus de representar el circuito, y de asignar cada lnea de entrada y salida a los
puertos del microcontrolador, se proceder a editar el programa. Debes tener claro
con qu elemento se conecta cada lnea de los puertos del microcontrolador.
Existen muchos editores para programar los microcontroladores PIC. Sin embargo,
se utilizar el MPLAB, debido a que esta herramienta de programacin, ofrece la
posibilidad de: Editar, compilar, simular y grabar.
Para entrar al entorno MPLAB, se deber acceder al software que ofrece
gratuitamente la compaa Microchip (www.microchip.com), o al comprar uno de los
sistemas de desarrollo para estos microcontroladores. Despus de instalar el
software, se abrir el programa MPLAB.
Si deseas alternar entre este mdulo instruccional y el MPLAB, puedes hacerlo al
presionar simultneamente las teclas: y (Tab)
La primera vez que se abre este programa, aparecer la siguiente pantalla:
Llamada:
Microchip
MPLAB IDE
INICIO
77
Familiarizacin con el MPLAB
Despus de abrir el MPLAB, ya podrs comenzar
a editar tu programa en el espacio donde dice
Untiteled Work space. Si quieres trabajar con
mayor comodidad, podrs ampliar esta ventana.
Los recursos que se ofrecen con este software
son bastante variados, es por esto que en este
aparte se mostrar slo algunos de los comandos
necesarios para iniciar una edicin de un
programa.
Algo que debers tomar en cuenta, es el ser
consistente con el dispositivo que vas a usar.
Para ello, debers seleccionar el microcontrolador
en este ambiente de trabajo; en este caso el
PIC16C54 (o el microcontrolador que encontraste
en el mercado local). Para esto se ir a la barra
de men, y se escoger en Configure y luego
Select Device... Si el MPLAB se est utilizando
por primera vez, en pantalla aparecer la
siguiente ventana:
INICIO
78
Opciones del MPLAB
Si vas a utilizar el PIC 16C54, se deber cambiar a:
Ntese el cambio al PIC16C54. Luego
se seleccionar en OK. Despus de
hacer esto, el MPLAB estar listo para
trabajar con el PIC16C54. Si se va a
trabajar con otro microcontrolador, ste
se seleccionar en Device. Al regresar
al ambiente de trabajo, en la parte
inferior aparecer el tipo de
microcontrolador que se va a emplear, el
cual deber ser igual al que se utilizar
en el circuito, o de lo contrario podr
haber problemas en el momento de
ensamblar, cuando se realice la
simulacin o al grabar el programa.
1
2
INICIO
79
Es importante documentar
bien el programa
En un programa ensamblador, es muy importante hacer una buena documentacin; en
lo posible, hay que colocar los comentarios que sean necesarios para comprender bien
qu es lo que se est haciendo. Los comentarios se reconocern por el smbolo ;
tal como se puede ver en la figura de la pgina siguiente, en donde se hace una
breve descripcin del programa que se va a realizar.
Te recalcamos la importancia de colocar los comentarios, ya que los que comienzan a
trabajar en esto, consideran innecesario colocarlos. Sin embargo, un tiempo
despus, a la hora de analizar el programa no recuerdan qu fue lo que hicieron, y
prcticamente tienen que comenzar desde cero para tratar de entender el programa.
Antes de comenzar a editar el programa, te recomendamos que revises, en el tema
1, en la parte de las Instrucciones del Lenguaje Ensamblador, lo que hacen las
siguientes instrucciones, o sino accede a las explicaciones de ellas, por medio del
hipervnculo asociado:
MOVLW K GOTO K
TRIS f BSF f,b
CLRW BCF f,b
BTFSS f,b BTFSC f,b
En la pgina siguiente encontrars la primera parte de la edicin del programa.
Fjate bien en los comentarios escritos.
INICIO
80
Comentarios
INICIO
81
Los archivos INCLUDE
En el ejemplo de la pgina anterior, se puede observar una parte inicial compuesta de
comentarios, los cuales se colocan para describir el programa. Despus se observa la
directiva INCLUDE P16C5X.INC. Esta directiva, bsicamente se utiliza para incluir
un archivo que asigna valores numricos a cada uno de los registros de funciones
especiales y los bits del registro STATUS. Esto nos facilitar la elaboracin del
programa, es decir, que para emplear, por ejemplo, una instruccin MOVF 5,0; el
programa entender que el contenido del puerto A, que est en la direccin 5, pasar
al registro W. Sin embargo, ser mucho ms fcil comprender la instruccin, si se
escribiera de esta manera: MOVF PORTA, W. Esta ltima instruccin se aceptar, si
previamente se defini PORTA y W, y esto se puede hacer con la directiva
INCLUDE.
Si deseas ms informacin acerca de las directivas del lenguaje ensamblador, puedes
consultar el anexo 3 de este mdulo instruccional.
En el archivo P16C5X.INC, est la asignacin de los registros de funciones especiales
(tal como PORTA y W) de los microcontroladores de la gama bsica. En el caso de no
utilizar este archivo, tendramos que asignar nosotros mismos los registros en el
programa. Es decir, que antes de comenzar el programa deberamos escribir lo
siguiente:
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
W EQU H'0000'
F EQU H'0001
INDF EQU H'0000'
TMR0 EQU H'0001'
INICIO
82
Las Directivas y las Bases Numricas
El hecho de que un valor aparezca como H0000, slo significa que se est escribiendo
en hexadecimal. Por otro lado, EQU significa igual, o sea que al escribir la directiva:
W EQU H0000, significa que en cualquier instruccin que se escriba W, al codificarse
el texto, se colocar un valor 0 en el programa ensamblador. Una directiva, es algo as
como una instruccin que no se codifica en el programa, pero que realiza una operacin
de control en el ensamblador. En otras palabras, la directiva EQU asigna la igualdad
entre una etiqueta y un nmero, para que en el momento de hacer la codificacin del
programa, en donde aparezca la etiqueta, se asignar el nmero, ya que en el
microcontrolador slo pueden entrar valores numricos binarios. El ensamblador permite
tambin que utilices varios tipos de sistemas numricos, por ejemplo, el nmero 11 en
decimal se puede representar de las siguientes maneras:
Base Numrica Representacin
Hexadecimal 0B / 0BH / H0B / 0x0B
Binaria B1011
Decimal D11
Observa que a los nmeros hexadecimales que empiezan por una letra, le debes colocar
un 0 a la izquierda.
A continuacin seguimos con la elaboracin del programa en la siguiente pgina, donde
podrs observar, cmo se separa el programa en columnas, por medio de la tecla de
tabulacin, de manera que la columna 1 se utiliza para etiquetas, la segunda para la
instruccin, la tercera para los operadores y la cuarta para los comentarios:
INICIO
83
{Comentarios}
{Etiquetas}
{Instrucciones}
{Operadores}
Colu. 1 Colu. 2 Colu. 3 Columna 4
Divisin por columnas
INICIO
84
Comienzo del Programa
Puede verse en la pantalla anterior, la directiva ORG (Origen) poco despus de la
directiva INCLUDE. lla asigna la direccin en la cual va a comenzar una seccin del
programa. En este caso, el programa comienza en la direccin 0 de la memoria EPROM
del microcontrolador.
Al comenzar el programa, se debe preparar los puertos y registros que se van a utilizar.
En este caso, se asignar la programacin de los puertos, tal como se puede observar a
partir de la etiqueta PREPAR en el programa de la pgina anterior.
En la seccin siguiente se presenta el comienzo el programa. Se ver cmo se realiza el
anlisis para un grupo de una sola entrada del puerto A y dos salidas del puerto B.
INICIO
85

Trata de completar lo que debe ir en las secciones: GRUPO1, GRUPO2 y GRUPO3. Es
importante que cada etiqueta se escriba en una sola palabra, sin espacio, es decir que
sera incorrecto colocar, por ejemplo, GRUPO 1.
Recuerda que aqu se utiliza la instruccin BTFSS PORTA,0; la cual indica que se va a
hacer un test del bit 0 del puerto A, o sea RA0, (Bit Test de F, Salta si es 1). Si el
resultado es 0, ejecutar la instruccin siguiente GOTO VERD0ON, la cual har que el
programa salte a la posicin VERD0ON, en donde se apagar el led rojo (BCF PORTB,0;
que har RB0=0) y encender el led verde (BSF PORTB,1; que har RB1=1). Si al hacer
el test de RA0, ste es igual a 1, el interruptor estar abierto; en el programa se
indica que debe saltar una lnea, por lo tanto se pasar a la lnea ROJO0ON, en donde
se apagar el led verde (BCF PORTB,1), y se encender el rojo.
Las direcciones que se le asignan a las etiquetas, se hacen de manera automtica. Por
ejemplo, la etiqueta PREPAR, que est ubicada despus de los comentarios iniciales,
tendr asignada la direccin 0, ya que se ubica inmediatamente despus de la directiva
ORG 0.
La etiqueta INICIO, se ubicar entonces en la direccin 4, ya que est cuatro
instrucciones por debajo de PREPAR. Recuerda que ni los comentarios ni las directivas
cuentan como instrucciones del programa en el microcontrolador.
En la pgina siguiente, podrs observar la parte final de este programa, que sirve como
una de las soluciones para activar los cuatro interruptores que manejan los ocho leds.
Si no estuvo claro el comienzo, lee
esto detenidamente
INICIO
86
Continuacin del programa
INICIO
87
2.5.- Ensamblaje del Programa
Despus de editar el programa, o en los momentos que creas convenientes, debers
guardar tu programa con un nombre luego un punto (.) y despus asm: nombre.asm.
Te recomendamos que abras un subdirectorio en el directorio Mis documentos y
guardes all los programas elaborados. Cuando hayas editado todo, proceders a
ensamblar el programa. El programa que se present anteriormente, no presenta
errores de codificacin. Sin embargo, t puedes intentar editarlo, y luego podrs
proceder a ensamblarlo o codificarlo. Al ensamblar un programa, se generar un
archivo objeto codificado en binario o hexadecimal, el cual ser el mismo que se
grabar en la memoria del microcontrolador; este archivo tendr como nombre, el
mismo del programa editado, pero con extensin .hex. Por ejemplo si al programa
anterior le colocaste por nombre conmutador.asm, el archivo generado al compilar se
llamar conmutador.hex. Por otro lado se generar un archivo de listado con todos
los smbolos utilizados (conmutador.lst) y un archivo con los errores (conmutador.err),
INICIO
88
Ensamblando el archivo editado
Para ensamblar un archivo, debers seleccionar en Project y luego Quickbuilt nombre.asm:
INICIO
89
Resultados del ensamblaje
Si al final aparece la frase:
BUILD SUSCCEEDED, significa
Que ha sido exitosa la compilacin.
INICIO
90
Archivos con errores
Si algo sale mal, es decir, si hay errores al introducir las instrucciones, entonces
habr que buscar el problema y solucionarlo. Si en tu programa no ha habido errores,
te felicitamos, porque lo copiaste muy bien. En caso contrario, no te preocupes,
porque te ayudaremos a encontrarlos. Primero volveremos a ensamblar el programa
con errores intencionales. Fjate en esta seccin del programa:
INICIO
91
Listado de errores
Al tratar de ensamblar nuevamente, nos encontraremos con un error, tal como lo
muestra la siguiente figura:
INICIO
Al aparecer la frase BUILD FAILED, indica que no se pudo realizar el ensambalje,
debido a que hay uno o ms errores en el programa.
92
Encontrando los errores
Una forma sencilla de encontrar en cul lnea se cometi el error, se logra al hacer
doble clic en el error que queremos ver. Es posible que un error aparezca varias
veces, ya que ste puede reflejarse en las lneas del programa que estn asociadas
con ese problema. Hagamos doble clic en donde aparece el error y caemos en el
programa fuente, en el cual podemos ver la indicacin que seala la lnea donde se
produjo ese error.
El error consiste en que no se ha definido previamente PUERTOA. Para solucionar
esto, se deber colocar la variable PORTA, definida en P16C5X.INC o escribir
previamente la directiva PUERTOA EQU 5, para indicar que el puerto A corresponde
a la direccin 5 de la memoria de registros o RAM.
Si hay ms errores en el programa, el procedimiento para hallarlos es el mismo. En
la edicin de errores, se hace doble clic en la lnea correspondiente, donde aparece
el error, luego te indicar dnde se produjo ste en el programa fuente.
Trata de interpretar los mensajes dados, y corrige los errores en el programa.
INICIO
Indicacin
de la lnea
con error
93
2.6.- Simulacin
Debemos asegurarnos que la herramienta MPLAB SIM est activada, para poder
ejecutar la simulacin.
Despus de ensamblar el programa, en la memoria ROM del MPLAB se encuentra el
programa ensamblado. Podremos ver las memorias y registros en la simulacin al
seleccionar en View, segn veremos en la pgina siguiente. Las ventanas las
podemos colocar segn nuestra conveniencia.
Corregiste todo? Es importante que lo hagas, y que te fijes bien, para dar el
prximo paso.
El prximo paso, consiste en la simulacin del programa. Esto significa que se debe
revisar si hay errores de lgica, los cuales no se detectan al ensamblar el archivo.
Una vez ensamblado el programa, procederemos a hacer la simulacin. Para ello,
vamos a asegurarnos que el MPLAB tiene activada la simulacin. Nos colocamos en el
men Debugger:
INICIO
94
Ventanas para verificar el programa
INICIO
Registros
Memoria de
programa
Registro de
funciones
especiales
95
Simulacin de las condiciones de entrada
Ser tambin til, colocar un simulador de condiciones, para variar los valores en las
lneas que corresponden al puerto A. Para ello se seleccionar en Debugger,
Stimulus. Esta opcin slo aparecer, si ya ha sido seleccionada la herramienta de
simulacin. A continuacin aparece la siguiente ventana.
INICIO
96
Para asignar cada entrada
Para asignar cada entrada, se har lo siguiente:
1. Presionar el botn Add Row
2. Presionar uno de los rectngulos blancos de la primera fila. Aparecer:
INICIO
97
Explicacin de los estmulos
INICIO
Los terminales seleccionados y el tipo de accin, se podrn escoger en cada fila:
Type. Indica si la entrada es sincrnica o asincrnica con respecto a los pulsos del
reloj. Por lo general, para entradas externas se fija en Asynch (Asincrnico).
Enable. Se utiliza para generar la accin en el terminal de entrada.
Pin. Indica el terminal del microcontrolador que se va a utilizar para generar el
estmulo: RA0, RA1, etc. Al presionar la flecha adyacente encontrars las
opciones.
Action. Determina el tipo de entrada que se va a colocar: High (cambia a 1), Low
(cambia a cero), Toggle (cambia al estado opuesto cada vez que se presiona),
Pulse (pulso que cambia momentneamente al estado opuesto y luego vuelve al
inicial).
High cicles. Nmero de ciclos en que la entrada se mantiene en uno, al aplicar un
estmulo sincrnico.
Low cicles. Nmero de ciclos en que la entrada se mantiene en cero, al aplicar un
estmulo sincrnico.
PC. Direccin numrica o smbolo en el cual ocurrir el estmulo.
Invert. Si el smbolo de chequeo est activo, indica que se invertir el pulso si se
est utilizando un estmulo sincrnico.
Comments. Puedes indicar un comentario relacionado con el estmulo.

98
Asignacin de cada entrada
T podrs aadir ms entradas de estmulo cada vez que presionas el botn Add
Row. Cuando termines de colocar todos los estmulos con sus caractersticas,
presionars Edit Complete y luego Save para guardar lo que hiciste. Despus de
esto podrs comenzar la simulacin.
Trata de colocar las entradas del puerto A como estmulo tipo toggle:
INICIO
99
Ejecucin del programa
Para ejecutar el programa, podrs seleccionar inicialmente la velocidad del
microcontrolador, los puntos de parada y las opciones de trazado en Debugger y
luego en Settings.
Si no has seleccionado nada en Settings, al ejecutar el programa y mover
adecuadamente las ventanas, encontrars lo siguiente:
INICIO
Ejecucin del
programa

Detencin
del programa

Paso que se
ejecuta

Verificacin
de estados

Estimulacin
de entradas



Reinicio

Ejecucin
paso a paso

Ejecucin
animada
100
Revisin de resultados
INICIO
Los resultados no los podrs ver en el momento del aplicar los estmulos. Para
observar los cambios, debers detener el programa.
Tambin tienes la posibilidad de correr el programa paso a paso, para observar el
comportamiento del mismo al ejecutarse cada instruccin, o al presionar F8.
Al ejecutar en forma animada, se observa en el programa editado y en la memoria de
programa, cmo se van ejecutando cada paso del programa. En este modo, al aplicar
los estmulos no siempre obedecen. Esto se podr verificar en la lectura de los bits
de los puertos.
Despus de verificar que el programa se ejecuta correctamente, se deber proceder a
grabar en la EPROM del microcontrolador.
Si existe algn problema, entonces se deber revisar el programa, ya sea paso a paso
o entre dos posiciones de la EPROM.
101
2.7.- Grabacin del Microcontrolador
Despus de revisar cuidadosamente el programa, ahora se proceder a grabar el
microcontrolador. Es importante tener un borrador de EPROM y el programador. Si
no tienes el borrador de EPROM que consiste en una lmpara ultravioleta, entonces
trabaja mejor con un PIC16F54 o un PIC16F84A. En el caso de no tener el
programador, trata de comprarlo o hacer alguno de los que se proponen en la Internet.
Para realizar este paso, supondremos que se dispone del programador PICSTART Plus.
La ventaja de utilizar este programador, es que sirve para casi cualquier
microcontrolador PIC, desde ocho terminales hasta cuarenta terminales. Si tienes una
versin vieja del programador, podrs ir al anexo 7, en el cual se explican los pasos
para actualizar el programador.
El programador se conectar por medio de una fuente que trae el equipo, y el puerto
de comunicacin serial disponible de una computadora personal.
Para empezar, debers seleccionar en el MPLAB, el programador que vas a utilizar:
INICIO
102
Seleccin del puerto de comunicacin serial
Si se desea cambiar el puerto serial, como por ejemplo, el puerto 2, se deber
escoger en Programmer, Settings, Comunications. Despus se selecciona el puerto
serial deseado.
INICIO
103
Equipo de Desarrollo PICSTAR Plus
1 Programador PICSTART Plus
2 Cable serial RS-232 (Interfaz con la Computadora)
3 Microcontroladores
4 Disco con software, manuales y notas de aplicaciones
INICIO
104
Comenzando a Grabar
INICIO
Una vez que escogiste el puerto de comunicacin serial y tienes todo conectado, entonces
colocars el microcontrolador en el conector del programador. Procederemos a llamar al
programador en Programmer, Enable Programmer. Primero se verificar la comunicacin
con el programador. Si todo est correcto, entonces aparecer la siguiente ventana:
Chequeo si Leer Grabar Verificar Borrar
est borrado memoria programa programacin memoria Flash
105
Cargando el programa a la computadora
Si un programa ha sido recin ensamblado, en la
ventana View, Program Memory, aparecer el
programa en cdigo hexadecimal. En este caso ya
todo estara listo para programar el
microcontrolador. Suponiendo que antes de cargar
el programa, queremos verificar si el
microcontrolador est borrado, al presionar en ,
se podr hacer esta verificacin. En el caso de
hacer una lectura del contenido de la memoria del
microcontrolador, los datos se tranferiran a la
ventana de la memoria del programa y se borra la
del programa ensamblado. Para cargar nuevamente
el programa ensamblado, se buscar en File, Import,
Download To Memory... Luego se accede al archivo
con el nombre con extensin .hex, el cual ha sido
ensamblado anteriormente.
INICIO
106
Estableciendo las condiciones de Hardware y
grabacin en la memoria del microcontrolador
INICIO
Antes de programar nos
fijaremos en la ventana inferior,
la cual establece algunas
condiciones del hardware del
microcontrolador:
De stas cambiaremos el Watchdog Timer a Off, ya que en nuestro programa, no hemos
usado este temporizador. Por otro lado, debemos dejar el Code Protect en off, ya que
si lo cambiamos, no podramos volver a regrabar el microcontrolador.
Una vez realizado esto, se puede proceder a grabar. Para ello, simplemente se
activar el botn , y se transfiere los datos a la EPROM del microcontrolador.
Si se desea verificar que la grabacin fue correcta, se podr activar el botn .
107
Si no se dispone del microcontrolador
PIC16C54 o un borrador de EPROM
Si no puedes trabajar con el PIC16C54JW, ya sea porque no lo consigues en el mercado
local, o porque no tienes la lmpara de luz ultravioleta, entonces podrs utilizar el
PIC16F54, el cual es igual al PIC16C54, con la diferencia de que se puede regrabar sin
necesidad de la lmpara de luz ultravioleta, gracias a su memoria de programa tipo
FLASH. Otro microcontrolador PIC que puedes utilizar, haciendo pocas modificaciones,
es el PIC16F84A que tambin contiene una memoria del tipo FLASH.
Entre el PIC16C54 y el PIC16F84A hay compatibilidad de hardware, es decir que los
terminales de conexin coinciden en ambos casos y por lo tanto no tienes que modificar
el circuito. Otro detalle que hay en ambos microcontroladores, es la compatibilidad del
software. A pesar de que el PIC16F84A es un microcontrolador de la gama media, el
programa que editaste con el PIC16C54 puede ejecutarse sin problemas, ya que las
instrucciones de los microcontroladores de la gama bsica son compatibles con los de la
gama media. A pesar de esta compatibilidad, debers hacer las siguientes modificaciones
para que puedas grabar correctamente al PIC16F84A:
En el programa debers cambiar la directiva INCLUDE P16C5X.INC, por la directiva
INCLUDE P16F84.INC, ya que vas a trabajar con el PIC16F84A.
En el MPLAB debers seleccionar en Options, Development Mode y Processor al
PIC16F84A. De esta manera al grabar con el MPLAB seleccionars los cdigos
adecuados para este microcontrolador.
Finalmente, debers reensamblar el programa, para generar los cdigos del PIC16F84.
INICIO
108
Conexiones externas al microcontrolador
Una vez que se ha grabado el microcontrolador, este dispositivo est listo para ser
utilizado en un circuito. Como se vio en el captulo 1, las conexiones restantes a los
puertos sern: Vdd voltaje de alimentacin positiva, cuyo valor continuo, puede estar
comprendido entre 3V y 6V; Vss que corresponde al punto negativo de la fuente o
comn; MCLR o inicializacin, que en operacin normal se deber conectar a Vdd;
TOCKI, que es la base de tiempo del temporizador TMR0, y que se deber conectar a
Vdd o a Vss en el caso de no utilizarse. Las otras dos lneas son OSC1 y OSC2, que
se utilizan para conectar el circuito oscilador.
Como primera prueba, se podr conectar el circuito, segn se muestra en la siguiente
pgina.
Al activar los interruptores, se deber observar el funcionamiento del circuito, tal
como se program. En el caso de no ser as, se deber chequear las conexiones, y
las tensiones en cada punto del circuito, observar si hay oscilacin en OSC1 y OSC2,
y chequear si los leds no estn invertidos.
En el caso de haber revisado todo, y el circuito sigue sin funcionar, consulta con tu
profesor.
INICIO
109
Circuito final

PIC16C54

18 17 16 15 14 13 12 11 10
5V
5V
1 2 3 4 5 6 7 8 9
5V
5V
8 Resistencias de 300
4 Resistencias de 4,7K
10K
f680KHz
100 pF
INICIO
110
Algunas Preguntas
Para qu sirve la instruccin TRIS?
Cules lneas se emplearon para entrada y cules para salida?
Qu hace la directiva ORG?
Qu hace la directiva EQU?
Cul es la diferencia entre una directiva y una instruccin?
Cunta corriente circulan por los leds, cuando ellos estn encendidos?
Qu hace la instruccin BTFSS?
Qu hacen las instrucciones BCF y BSF?
En cules partes del programa se ejecutan saltos?
Para qu sirve la directiva END?
Por qu son importantes los comentarios en un programa?
Entendiste la lgica del programa?
Te atreveras a escribir nuevamente un programa que haga lo mismo, sin
consultar este mdulo instruccional? Explcalo claramente.
Comprendiste los pasos necesarios para programar a un microcontrolador?
INICIO
111
2.8.- Reduciendo el programa
Es posible reducir la cantidad de lneas de programa, para utilizar menor espacio en
la memoria de programa. Para ello, se leer el puerto de entrada, y con la
instruccin de rotacin. Se podr hacer la evaluacin bit por bit en un registro.
Con este procedimiento, tambin se podr escribir los bits en el puerto de salida.
Te recomendamos que antes de comenzar a interpretar el programa que se presenta
en la siguiente pgina, analiza lo que realizan las siguientes instrucciones:
MOVWF f MOVF f,d
DECF f,d INCF f,d
DECFSZ f,d INCFSZ f,d
RRF f,d RLF f,d
En las instrucciones RRF y RLF, el registro f rueda un bit hacia la derecha o hacia
la izquierda respectivamente; sin embargo esto lo hace al travs de un noveno bit
que se llama Carry (C) que se encuentra en el registro STATUS. Este registro
guarda algunas condiciones despus de que se ejecutan ciertas operaciones, por
ejemplo, si un resultado es igual a cero, en STATUS hay un bit Z, que se colocar en
1. De manera similar, si en el bit 0 de f hay un 1, al hacer la rotacin a la
derecha, el bit C del STATUS, se colocar en 1.
INICIO
112
Programa reducido para la
lectura de interruptores
INICIO
113
2.9.- Advertencia para un vehculo
Te recomendamos que analices, edites, ensambles y simules el programa que se present
anteriormente. Vers que har lo mismo que el primer programa. Nota que en este
programa se utiliza algunas posiciones de la RAM, en la que se guarda los valores
temporales del puerto A, puerto B y el contador de ciclos.
A continuacin, se presentar un programa que indicar ciertas condiciones de
advertencia para un vehculo. Para ello te recomendamos que estudies y analices las
siguientes instrucciones:
ANDWF f,d ANDLW K
IORWF f,d IORLW K
XORWF f,d XORLW K
COMF f,d NOP
Recordando las funciones lgicas que se efectuar en cada bit de ndice n de los
registros W y F:
AND IOR XOR COM Donde:
n [ Posicin de bit
f [ Direc. de RAM
w [ Reg de
trabajo
d [ Destino (w o f)
INICIO
114
Descripcin del Problema
Se desea hacer un circuito que indique seales de advertencia para un vehculo de dos
puertas. Las advertencias se darn segn se cumplan las condiciones siguientes:
Condicin 1: El motor est encendido y alguna de las puertas est abierta. Se
utilizar la lnea RA0 para sealar esta condicin.
Condicin 2: El motor est encendido y el cinturn de seguridad del conductor est
desabrochado. Se utilizar la lnea RA1 para indicar esta condicin.
Condicin 3: El motor est apagado y las luces estn encendidas. Se utilizar la
lnea RA2 para sealar esta condicin.
Condicin 4: El motor est apagado, la puerta del conductor abierta y la llave de
encendido puesta. Se utilizar la lnea RA3 para indicar esta condicin.
Advertencia General: Si ocurre cualquiera de las condiciones anteriores. Se tomar
la lnea RB7 para sealar esta condicin.
Cada condicin se mostrar por medio de un indicador luminoso (Led) y la advertencia
general se dar por medio de una seal sonora.
Se dispone de seis detectores tipo pulsador, que detectan las seales de entrada y
sern conectadas a cada lnea de entrada del puerto B. La lgica de los detectores
se dar de la siguiente manera:
Motor: Indica un 1 si ste est encendido, se conectar a RB0.
Pcond (puerta del conductor): Indica un 1 si sta est abierta, se conectar a RB1.
Pacom (la otra puerta): Indica un 1 si sta est abierta, se conectar a RB2.
Cintu (cinturn de seguridad): Indica un 1 si est desabrochado, se conectar a RB3.
Luces: Indica un 1 si estn encendidas, se conectar a RB4.
Llave: Indica un 1 si est colocada, se conectar a RB5.
INICIO
115
Circuito y Ecuaciones Lgicas
De acuerdo a la descripcin del problema, te proponemos como actividad, que dibujes
el circuito del microcontrolador, con los detectores y las luces de advertencia.

Las ecuaciones lgicas para cada condicin de advertencia, segn el problema
planteado, se podrn colocar de la siguiente manera:

COND1 = MOTOR.(PCOND+PACOM)
COND2 = MOTOR.CINTU
COND3 = MOTOR.LUCES
COND4 = MOTOR.PCOND.LLAVE
ADGEN = COND1 + COND2 + COND3 + COND4

Segn las asignaciones en cada puerto, se puede plantear tambin lo siguiente:

RA0 = RB0.(RB1+RB2)
RA1 = RB0.RB3
RA2 = RB0.RB4
RA3 = RB0.RB1.RB6
RB7 = RA0 + RA1 + RA2 + RA3

Donde RAn son las lneas que corresponde al puerto A y RBn son las lneas que
corresponden al puerto B.
INICIO
116
Lgica del Programa
En un primer intento, la lgica a utilizar en este programa, consiste en asignar un
registro a cada entrada, y luego hacer las operaciones lgicas correspondientes, para
colocar los resultados en registros que correspondan a cada solucin. Esto implica que
hay que tomar la lectura de las lneas RB0 hasta RB5, y asignar las condiciones al bit
menos significativo de cada uno de los registros correspondientes. Los resultados, se
colocarn en el bit menos significativo de cada registro. Vase a continuacin, la
asignacin de etiquetas en el programa:

INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC

MOTOR EQU 10 ;MOTOR
PCOND EQU 11 ;PUERTA DEL CONDUCTOR
PACOM EQU 12 ;PUERTA DEL ACOMPAANTE
CINTU EQU 13 ;CINTURON DE SEGURIDAD
LLAVE EQU 14 ;LLAVE DE ENCENDIDO
LUCES EQU 15 ;LUCES
COND1 EQU 16 ;CONDICION 1
COND2 EQU 17 ;CONDICION 2
COND3 EQU 18 ;CONDICION 3
COND4 EQU 19 ;CONDICION 4
ALGEN EQU 1A ;ALARMA GENERAL

Nota: Es muy importante que las direcciones asignadas a cada etiqueta, no coincidan con las reservadas
para cada uno de los registros de propsitos especiales del microcontrolador.
INICIO
117
CONSIDERANDO UN PROGRAMA
MODULAR
La forma en la cual se present las posiciones de los registros es completamente vlida.
Sin embargo, te recomendamos que te acostumbres a hacer mdulos de subrutina, de
manera que con pocos cambios, lo puedas utilizar sin problemas en otros programas.
Para ello, en cada subrutina se especificar la longitud del programa, la direccin de
arranque, la cantidad de registros utilizados y la posicin de referencia de estos
registros. Si te acostumbras a hacer esto, entonces podrs hacer mdulos que
utilizaras luego sin mucha dificultad. Para ello te proponemos que especifiques los
registros de la manera siguiente:

MOTOR EQU 10 ;MOTOR
PCOND EQU MOTOR+1 ;PUERTA DEL CONDUCTOR
PACOM EQU MOTOR+2 ;PUERTA DEL ACOMPAANTE
CINTU EQU MOTOR+3 ;CINTURON DE SEGURIDAD
LLAVE EQU MOTOR+4 ;LLAVE DE ENCENDIDO
LUCES EQU MOTOR+5 ;LUCES
COND1 EQU MOTOR+6 ;CONDICION 1
COND2 EQU MOTOR+7 ;CONDICION 2
COND3 EQU MOTOR+8 ;CONDICION 3
COND4 EQU MOTOR+9 ;CONDICION 4
ALGEN EQU MOTOR+0A ;ALARMA GENERAL

En este caso, sabremos que la cantidad de registros utilizada es de 11, y que la posicin de referencia
es MOTOR, que ocupa la posicn 10H.
INICIO
118
Otra forma de nombrar
bloques de constanes
Otra manera que puedes utilizar para nombrar las etiquetas de tu programa en un
bloque, es la siguiente:

cblock 0x10
MOTOR, PCOND, PACOM, CINTU, LLAVE, LUCES,
COND1, COND2, COND3, COND4, ALGEN
endc

La directiva cblock asigna un bloque de constantes, a partir de un valor especfico, es
decir que en el caso anterior se define la etiqueta MOTOR con el valor 10h, y a
continuacin a PCOND se le asigna el valor 11h, y as sucesivamente. Como podrs
observar sta es una manera ms sencilla de asignar valores a un bloque de constantes.
La directiva endc indica la finalizacin de la lista de constantes, es decir que la ltima
de ellas es ALGEN.
INICIO
119
Asignacin de detectores a registros
INICIO
120
Asignacin de advertencias
INICIO
121
Condicin de Alarma General
El programa presentado, es una de las formas de solucionar este problema. En la
siguiente pgina, se presenta otro programa, mucho ms corto y que utiliza menos
registros. La lgica que se utiliz, se basa en asignar las operaciones lgicas en
forma paralela, es decir, que cada condicin se manifiesta en un bit de una palabra.
Deber notarse que en todas las operaciones est involucrada la variable MOTOR,
por lo que se aprovecha esto, para simplificar ms el programa.
INICIO
122
Una alternativa ms eficiente
La lgica se basa en s, en que hay dos operadores: OPER1, donde se colocar las
condiciones del motor y OPER2, donde se asignarn las otras condiciones. Para ello, en el
bit 0 se coloca la condicin 1, en el bit 1 la condicin 2 y as sucesivamente. Luego se
escribe la condicin inicial 0011 a OPER1, que asignar una suposicin de que el motor
est encendido. En el caso de detectarse que est apagado, se inviertir esta condicin.
OPER1 (Motor): Motor Motor Motor Motor
OPER2 (Otros): (Llave. Pcond) Luces Cintu (Pcond+Pacom)
Condicin4 Condicin3 Condicin2 Condicin1
; COMIENZO DEL PROGRAMA
;
; ASIGNACIONES DE VARIABLES
;
OPER1 EQU 10 ; OPERADOR 1 SE UTILIZARA PARA COLOCAR LAS CONDICIONES
; DEL MOTOR
OPER2 EQU OPER1+1 ; EL OPERADOR 2 SE UTILIZARA PARA COLOCAR LAS OTRAS
; CONDICIONES


INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC

ORG 0
PREPAR
CLRW ; EL PUERTO A SERA UTILIZADO COMO ENTRADA
TRIS PORTA
MOVLW 7F ; RB7 SERA UTILIZADO COMO SALIDA Y EL RESTO
TRIS PORTB ; DE LOS BITS DEL PUERTO B SERAN ENTRADAS

INICIO
123
INICIO
Programa de advertencia reducido
124
2.10.- Control de leds por medio
de pulsadores
En este ejemplo se har lo mismo que en el caso de la lectura de los interruptores,
pero se utilizar pulsadores para encender los leds de manera alterna.
Se deber considerar el efecto de rebote del pulsador, el cual consiste en que al
accionarlo, sus contactos rebotan varias veces antes de lograr permanecer en su
estado estable; el tiempo de duracin del efecto de rebote, podr estar entre 5 y 25
mSeg dependiendo de la calidad y el tipo del pulsador. En otras palabras, se deber
hacer la lectura de los conmutadores por lo menos cada 25 mSeg.
El programa a realizar, entonces deber leer el estado del pulsador. En el caso de
que ste se haya presionado, se deber encender el led que estaba apagado, y apagar
el que estaba encendido en el canal correspondiente, adems se deber esperar un
tiempo de aproximadamente 25 mSeg, para efectuar la siguiente lectura.
El circuito, entonces deber constar de cuatro entradas y ocho salidas, de manera
similar que en el caso de los interruptores.
INICIO
125
Circuito utilizado para leer pulsadores
De acuerdo a lo establecido anteriormente, se deber escoger un microcontrolador que
tenga al menos doce lneas para puertos de entrada-salida. Una eleccin posible,
podra ser el PIC16C54, ya que tiene doce terminales de entrada-salida. Las
conexiones se presentarn a continuacin, en donde se escoger al puerto A como
entrada (4 bits) y el puerto B como salida (8 bits).
Vss
PIC
16C54
INICIO
126
Comienzo del Programa
El programa que se presenta a continuacin, se utilizar para detectar el estado de uno
de los pulsadores.
Como siempre, el programa deber empezar con comentarios que den suficiente
informacin acerca del programa que se va a realizar.
;
;
; PROGRAMA PARA LA LECTURA DE PULSADORES
;
;
; Este programa se utilizar en un circuito con cuatro pulsadores de entrada y
; ocho indicadores a la salida, de los cuales cuatro sern de color rojo, y cuatro
; sern de color verde.
;
; Longitud del programa 82 (51h) palabras. Direccin de inicio del programa 0H
; Cantidad de registros 2. Posicin de referencia PBANTES direccin 10h
;
; Cada pulsador estar asociado con dos indicadores de diferente color, y
; al presionarlo, deber cambiar el encendido, de uno a otro. En condiciones iniciales,
; debern encender los indicadores de color rojo.
;
; Se tomar el puerto A como entrada para los pulsadores.
; Un "1" determinar que el pulsador est abierto
; Un "0" determinar que el pulsador est presionado
;
; El puerto B se utilizar como salida
; Los terminales pares se conectarn a los leds rojos
; Los terminales impares se conectarn a los leds verdes
INICIO
127
Preparacin y deteccin
INCLUDE "P16F84.INC" ; ESTA DIRECTIVA INDICA QUE SE ASIGNARA VALORES
; NUMERICOS A CADA UNO DE LOS REGISTROS DE FUNCIONES
; ESPECIALES Y LOS BITS DEL REGISTRO STATUS

PBANTES EQU 10 ; INDICA EL ESTADO ANTERIOR DEL PUERTO B
STTUSPA EQU PBANTES + 1 ; INDICA EL ESTADO DE LOS BITS LEIDOS EN EL PUERTO A

ORG 0
PREPAR MOVLW 0F
TRIS PORTA ; PUERTO A SERA ENTRADA
CLRW
TRIS PORTB ; PUERTO B SERA SALIDA
MOVLW 55
MOVWF PORTB ; SE ALTERNAN 1 Y 0 EN LAS LINEAS DE SALIDA DEL PUERTO B
CLRF PBANTES ; PALABRA DE ESTATUS QUE INDICA EN CADA GRUPO QUE LOS
; LEDS ROJOS ESTAN ENCENDIDOS Y LOS VERDES APAGADOS
CLRF STTUSPA ; PALABRA DE CONTROL PARA MANTENER VALOR EN LA ENTRADA

INICIO BTFSS PORTA,0 ; CONDICION BIT 0 DEL PUERTO A: SI ES 1 => PULSADOR NO PRESIONADO
GOTO CAMBIO0 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 0
BCF STTUSPA,0 ; PONE UN 0 PARA MANTENER CONDICION MIENTRAS SE PRESIONA PULSADOR
GRUPO1 BTFSS PORTA,1 ; CHEQUEA CONDICION BIT 1 DEL PUERTO A
GOTO CAMBIO1 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 1
BCF STTUSPA,1
GRUPO2 BTFSS PORTA,2 ; CHEQUEA CONDICION BIT 2 DEL PUERTO A
GOTO CAMBIO2 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 2
BCF STTUSPA,2
GRUPO3 BTFSS PORTA,3 ; CHEQUEA CONDICION BIT 3 DEL PUERTO A
GOTO CAMBIO3 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 3
BCF STTUSPA,3
SIGCICL CALL RETARDO ; LLAMA RUTINA DE RETARDO PARA ESPERAR TIEMPO DE REBOTE
GOTO INICIO
INICIO
128
Cambio de estado en dos de los grupos
INICIO
129
Eliminacin del Rebote
El programa se repite en forma similar para los otros dos grupos. Intenta t terminar
lo que falta del programa.
Finalmente queda por editar el retardo. Para ello, se asumir que el oscilador del
microcontrolador, produce una frecuencia de 4MHz, lo cual quiere decir que el perodo
es igual a 0,25Seg. Si una instruccin se ejecuta en cuatro perodos del oscilador,
significa que el tiempo de duracin de una instruccin es de 1Seg.
Para eliminar el rebote, se podr esperar un tiempo de 30mSeg, es decir que se
necesitara ejecutar 30.000 instrucciones. Esto se puede hacer mediante lazos
repetitivos, como el que se muestra a continuacin, que corresponde a la instruccin
siguiente despus de la ltima escritura al puerto B:
INICIO
130
En el siguiente ejemplo, se muestra cmo realizar la suma binaria de dos nmeros de
4 bits que se leen en el puerto B. Trata de aprender a utilizar las siguientes
instrucciones:
2.11.- Ejemplo de un programa
para sumar
INICIO
ADDWF f,d SUBWF f,d
CALL K RETLW K
CLRF SWAPF f,d
131
Programa SUMABYTE
; SUMABYTE
;
; Programa que suma dos nmeros de 8 bits. Los sumadores se encuentran
; en PORTB, luego se ubican en las posiciones 8h y 9h en la memoria de
datos.
; El resultado se guardar en la posicin 0Ah y sale por PORTA
PREPAR CLRW ; SE ASUME PORTB COMO ENTRADA Y SE PROGRAMA
PORTA
TRIS PORTA ; COMO SALIEA
INICIO MOVF PORTB,W ; EL CONTENIDO DE PORTB VA A W
ANDLW 0F ; SE TOMAN LOS 4 BITS MENOS SIGNIFICATIVOS
MOVWF 8 ; SE GUARDA VALOR EN LA POSICIN 8H
MOVF PORTB,W ; SE VUELVE A LEER EL PUERTO B
ANDLW OFO ; SE TOMAN LOS 4 BITS MAS SIGNIFICATIVOS
MOVWF 9 ; SE GUARDA VALOR EN LA POSICIN 9H
SWAPF 9,F ; EL VALOR SE COLOCA EN
CALL SUMABYTE
MOVF 0A,W
MOVWF PORTA
GOTO INICIO ; VA AL INICIO DEL PROGRAMA
SUMABYTE MOVF 8,W ; Mueve Sumador ubicado en la posicin 8 a W
ADDWF 9,W ; Suma valor de la posicin 9 con W, resultado a W
MOVWF 0A ; El resultado se guarda en la posicin 0A
RETLW 0 ; Retorno con W = 0
END
INICIO
132
Resta de dos nmeros
Este ejemplo es similar al anterior. Sin embargo, hay que tomar en cuenta que la
operacin restar en un microprocesador, se hace por medio de una suma, en donde
el valor negativo se complementa a dos, es decir, se complementa en 1 (se cambia
unos por ceros y viceversa) y luego se le suma 1.
;
; RESTABYTE
;
; Programa que resta dos nmeros de 8 bits
; Los valores se encuentran ubicados en las posiciones minuendo (8h)
; y sustraendo (9h) en ;la memoria de datos.
; El resultado se guardar en la posicin 0Ah
;

MINUENDO EQU 8 ; Posicin del minuendo
SUSTRAENDO EQU 9 ; Posicin del sustraendo
RESULTADO EQU 0A ; Posicin del resultado
ORG 50 ; Direccin del comienzo del programa 50h
RESTABYTE
MOVLW 5 ; Asigna el valor 5 a W (Registro de trabajo)
MOVWF MINUENDO ; El valor 5 pasa al minuendo
MOVLW 3 ; Asigna el valor 3 a W
MOVWF SUSTRAENDO ; El valor 3 pasa al sustraendo
MOVF SUSTRAENDO,W ; El valor del sustraendo pasa a W
SUBWF MINUENDO,W ; Resta MINUENDO SUSTRAENDO,
; resultado en W
MOVWF RESULTADO ; El resultado se guarda en la posicin 0A

END ;Finalizacin del programa
INICIO
133
Trata de hacerlo t
En el siguiente ejemplo se propone hacer el control de cuatro semforos en
una interseccin de dos vas. Los semforos tienen cruces a la izquierda en cada
esquina. Se asume que los tiempos de duracin sern los que se muestran en la tabla
anexa:

Esquinas1 y 3 Esquinas 2 y 4 Duracin
Rojo y Verde cruce Rojo 8 segundos
Verde Rojo 20 segundos
Amarillo Rojo 3 segundos
Rojo Rojo y Verde cruce 8 segundos
Rojo Verde 25 segundos
Rojo Amarillo 3 segundos
1
2 3
4
INICIO
134
ACTIVIDADES A REALIZAR
Hasta este punto hemos visto los pasos necesarios para realizar programas,
simulaciones y prototipos con microcontroladores desde un punto de vista muy bsico.
Algunas de las actividades que puedes realizar, para complementar este tema, son las
siguientes:
1.- Edita, compila y simula los programas que se han explicado en este tema.
2.- Graba un microcontrolador PIC16C54JW, PIC16F54 o PIC16F84 con los programas
que se proponen como ejemplos y monta los circuitos para verificar el funcionamiento.
3.- Hacer un circuito con un microcontrolador, que detecte una clave secreta de 8
bits. El usuario introducir un valor binario en uno de los puertos y, por medio de un
pulsador, har vlido el cdigo de entrada. Si el cdigo falla tres veces seguidas, se
deber inhibir el circuito por un perodo de dos minutos. En el caso de que el cdigo
sea correcto, se deber activar una luz indicadora.
4.- Hacer un contador binario de 8 bits, con dos pulsadores de entradas, que permita
que cuente en forma ascendente o descendente, de acuerdo al pulsador que se
presione.
INICIO
3.1- Organizacin de las memorias del PIC 16C54:
3.2.- Organizacin de la memoria de programa del PIC16C54:
3.3.- Organizacin de la memoria de datos del microcontrolador PIC 16C54:
3.4.- Registro STATUS
3.5.- Registros INDF y FSR, Modo de acceso indirecto
3.6.- Registro contador de programa PC
3.7.- Registro STACK (pila)
3.8.- Puertos de Entrada y Salida
3.9.- Registro OPTION
3.10.- Temporizador contador
3.11.- Temporizador WDT (Perro Guardin)

TEMA 3
MEMORIA DE PROGRAMA, REGISTROS,
PUERTOS Y TEMPORIZADORES

CONTENIDO
INICIO
136
Objetivos Terminales:
Describir los registros de funciones
especiales del microcontrolador
PIC16C54.
Mencionar la utilidad de los
temporizadores en los microcontro-
ladores.
TEMA III:
MEMORIA DE PROGRAMA, REGISTROS, PUERTOS
Y TEMPORIZADORES
INICIO
137
Memoria de Datos
Memoria de Programa
Se almacenan todas las instrucciones
del programa de control. El tamao
de esta memoria es de 512
palabras.
Los datos que manejan los programas
varan continuamente y esto exige
que la memoria que los contiene,
debe ser de lectura y escritura, por
lo que la memoria RAM esttica
(SRAM) es la ms adecuada, aunque
sea voltil.
Para entender un poco ms las instrucciones, hace falta conocer la organizacin de la
memoria, cules son los registros especiales, dnde se ubican, y cules son los
registros de propsitos generales. Poco a poco se ir incluyendo ejemplos con otras
nuevas instrucciones en donde se observar cmo stas influyen, tanto en los
diferentes registros como en el funcionamiento del microcontrolador. La memoria del
PIC16C54 se organiza en dos tipos:
3.1- Organizacin de las memorias
del PIC16C54
INICIO
138
El PIC16C54, tiene un contador de programa (PC) de 9 bits, capaz de ubicar al
programa, en una de las 512 direcciones del espacio de memoria que se utiliza la
palabra de 12 bits.
PC<8:0>
NIVEL DE PILA 1
NIVEL DE PILA 2
MEMORIA
DE
PROGRAMA
VECTOR DE INICIALIZACIN
000h
0FFh
100h
1FFh
Espacio
para
memoria
del
usuario
CALL, RERLW
9
Memoria de programa del PIC16C54
3.2.- Organizacin de la memoria de
programa del PIC 16C54
INICIO
139
La memoria de datos est organizada por registros de un byte de extensin,
contenidos en una RAM. Los registros se dividen en dos grupos:
Registros de
funciones
especiales
Registros de
propsitos
generales
Estos incluyen:
El registro STATUS (Estado)
El Registro FSR (Registro
apuntador de direcciones de la RAM).
El PCL (Contador de programa)
Los registros PORTA y PORTB
(puertos de entrada y salida)
El Registro TMRO (Temporizador)

Se utilizan para guardar
informacin de datos y control por
medio de las instrucciones del
programa.
3.3.- Organizacin de la memoria de
datos del microcontrolador PIC 16C54
INICIO
140
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
1Fh
REGISTROS
DE
PROPSITOS
GENERALES
MEMORIA DE DATOS DEL
PIC16C54
(1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est
contenida en el registro FSR.
INICIO
141
a.- Registro de propsitos generales:
Los registros de propsitos generales, son aqullos donde se guardan los datos de
los programas de aplicacin. Ellos se pueden acceder de manera directa por medio
de la direccin f en una instruccin, o de manera indirecta, a travs del registro
FSR o registro apuntador de direcciones.

b.- Registros de funciones especiales:
Estos registros los usa la CPU y los perifricos para el control de la operacin del
microcontrolador. Debes tener cuidado de no utilizar un registro de funcin
especial, como un registro de propsito general, ya que en los registros de
funciones especiales se asigna un control especfico, que puede estar relacionado
con el hardware del microcontrolador o el control del programa. En la siguiente
tabla se representa un resumen de las funciones de estos registros.
Tipos de Registros
INICIO
142
Funcin de cada bit de los registros
de funciones especiales
Nota: x significa cualquier cosa y u significa no cambia
Valor despus Valor despus
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB) 1111 1111 1111 1111
N/A OPTION Contiene los bits de configuracin del escalamiento, TMRO y WDT --11 1111 --11 1111
00h INDF Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx uuuu uuuu
01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu
02h

PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111
03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx
04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
INICIO
143
Est ubicado en la direccin 03h, en la memoria de datos, y contiene los bits de
estado de la Unidad Lgica y Aritmtica y el estado de la inicializacin (RESET).
El registro STATUS puede ser el destino para una instruccin, como cualquier otro
registro. Si este registro es el destino de una instruccin que afecta los bits C
(acarreo), DC (acarreo decimal) o Z (cero), entonces la escritura de estos tres
bits es inhibida, es decir, estos bits se establecern de acuerdo a la lgica del
dispositivo.

Por otro lado, los bits TO (Tiempo de espera) y PD (Reposo) no se pueden escribir.

A continuacin se presentarn los bits del registro STATUS (direccin: 03h).
3.4 Registro STATUS
INICIO
144
R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin.
Bit 7-5: PA2 PA0: No se usan para el PIC16C54
Bit 4: TO: Bit Tiempo de espera.
1 = Al encender la alimentacin o con las instrucciones CLRWT o SLEEP.
0 = Al haber un desbordamiento en el registro WDT.
Bit 3: PD: Bit Reposo.
1 = Al encender la alimentacin o con las instrucciones CLRWT.
0 = Al ejecutar la instruccin SLEEP.
Bit 2: Z: Bit cero.
1 = El resultado de una operacin lgica o aritmtica es cero.
0 = El resultado de una operacin lgica o aritmtica es diferente de cero.
Bit 1: DC: Bit de acarreo/dbito de dgito (instrucciones ADDWF o SUBWF).
ADDWF
1 = Ocurre un acarreo en el cuarto bit del resultado (se excede el valor 0Fh).
0 = No ocurre un acarreo en el cuarto bit del resultado.
SUBWF
1 = No ocurre un dbito en el cuarto bit del resultado.
0 = Ocurre un dbito en el cuarto bit del resultado.
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
PA2 PA1 PA0 TO PD Z DC C
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
INICIO
Bits del Registro STATUS
145


Bit 0: C: Bit de acarreo/dbito (instrucciones ADDWF, SUBWF, RRF o RLF).
ADDWF
1 = Ocurre un acarreo.
0 = No ocurre un acarreo.
SUBWF
1 = No ocurre un dbito.
0 = Ocurre un dbito.

RRF: Toma el valor del bit menos significativo (LSb) del registro f.
RLF: Toma el valor del bit ms significativo (MSb) del registro f.

El bit C o bit de acarreo (Carry)
INICIO
146
Programa para incrementar
un contador BCD
Un programa tpico es el de un contador BCD. ste, a diferencia de los contadores
binarios, presentan la salida en cdigo BCD, de manera que pueda ser fcilmente
llevado a una presentacin decimal.
El programa que se presenta a continuacin, cada vez que es llamado, incrementa un
contador cuya salida es de cdigo BCD. Para ello se utilizan los bits DC y C del
registro STATUS.

INCLUDE "P16C5X.INC"
CONT EQU 0X10 ; En CONT se encuentra el contador BCD

org 0
clrf CONT ; Se hace CONT igual a 0
Increm incf CONT,F ; Se incrementa CONT en 1
movlw 6 ; Se hace el ajuste a BCD
addwf CONT,W ; suma 6 para correccin digito 0
btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0
movwf CONT ; corrige si hay acarreo digito 0
movlw 60
addwf CONT,W ; suma 60 para correccin digito 1
btfsc STATUS,C ; corrige si hay acarreo digito 1
movwf CONT
goto Increm
end
INICIO
147
El registro INDF no es un registro fsico; si se accede al registro INDF, se coloca en
el registro cuya direccin est contenida en el registro FSR, es decir, que FSR es un
apuntador de direcciones.
Ejemplo de cmo utilizar los
registros INF y FSR:
La siguiente seccin de programa, permite borrar los registros ubicados desde la
direccin 10h hasta la 1Fh. Una forma de realizar esto es por medio del modo de
acceso indirecto.
MOVLW 0X10 ; Inicializacin del apuntador de la RAM
MOVWF FSR ; El Registro FSR toma el valor 10h
Prximo CLRF INDF ; Borra registro cuya direccin est en FSR
INCF FSR, F ; Incremento del apuntador
BTFSS FSR,5 ; Borrado completo? (Examina bit 5 de FSR)
GOTO Prximo ; No, borra siguiente
3.5 Registros INDF y FSR,
Modo de acceso indirecto
INICIO
148
Cuando una instruccin es ejecutada, el contador de programa (PC) contendr la
direccin de la prxima instruccin a ejecutarse. El valor del PC se incrementa en
uno por cada ciclo de instruccin, al menos que la instruccin cambie el valor del
PC.
Para una instruccin GOTO, los bits 8 a 0 del PC se incluyen en dicha instruccin.
El registro PCL toma los bits 7 a 0. Vase figura a continuacin:
8 7
0
PC PCL
Palabra de Instruccin
PIC16C54
3.6 Registro contador de programa PC
INICIO
149
Para una instruccin CALL, o alguna instruccin donde el PCL es el destino, los bits 7
a 0 del PC se obtienen del cdigo de la instruccin. Sin embargo, el bit 8 del PC no
viene del cdigo de la instruccin, sino que es puesto en cero.

Algunas de las instrucciones donde el PCL es el destino, o se le modifica el
contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la direccin
del PCL es la 2

8 7
0
PC PCL
Palabra de Instruccin
PIC16C54
Inicializacin
A 0
INICIO
150
Saltos de direccin del programa
A lo largo de este mdulo instruccional, hemos visto algunos ejemplos en los que se
ejecutan algn cambio en la direccin del programa. Recordemos que estas
instrucciones son las nicas que duran dos ciclos de mquinas, es decir, que se
demoran en ejecutar el doble de las otras instrucciones.
Veamos algunos ejemplos de saltos de direccin del programa:

BTFSS REG0,3 ; Chequea el bit 3 de REG0 si es 1 salta una instruccin
BTFSC STATUS,C ; Chequea el bit de acarreo del estatus, salta si es 0
GOTO FINAL ; Salto incondicional a la direccin final, el salto corresponde a 9 bits
CALL MULT ; Ejecuta la rutina MULT, el salto corresponde a 8 bits
RETLW 0 ; Retorno de subrutina, la direccin del STACK va al PC
MOVWF PCL ; El contenido de W va a los 8 bits menos significativos del PC
ADDWF PCL,F ; Se suma W + PCL y el resultado va al PC
XORWF PCL,F ; Se hace el exor entre PCL y W y el resultado modifica al PC
BCF PCL,2 ; Coloca en 0 el bit 2 del PC

Otras instrucciones que ejecutan cambios en el PC son: ANDWF PCL,F;
IORWF PCL,F; COMF PCL; BSF PCL,1; RRC PCL,F; RLC PCL, F; INCF PCL,F;
DECF PCL,F; INCFSZ PCL,F; DECFSZ PCL,F; CLRF PCL; SWAPF PCL,F; etc.

INICIO
151
El registro STACK guarda las direcciones de retorno de las rutinas que se llaman
por medio de la instruccin CALL, y carga la direccin de retorno al PC con la
instruccin RETLW. la longitud de palabra de la pila es la misma que la del PC. La
pila tiene dos niveles:
Una instruccin CALL coloca el contenido del nivel 1 de la pila, en el nivel 2 y luego
coloca el valor del contador del programa actual, incrementando en uno, en el nivel
1 de la pila. Si se llama a ms de dos subrutinas en una misma secuencia,
nicamente las direcciones de las dos ms recientes sern almacenadas.
Una instruccin RETLW, cargar el contenido del nivel 1 de la pila al PC y el del
nivel 2 al nivel 1. Si ms de dos instrucciones RETLW se ejecutan, la pila se
llenar con la direccin almacenada previamente en el nivel 2, y podra dar
problemas en el programa.

NOTA:
Al utilizar la instruccin RETLW, el registro W se cargar con el valor literal en la
instruccin. Esto es til para la construccin de tablas de conversin con la
memoria de programa.
3.7 Registro STACK (pila)
INICIO
152
Convertidor BCD a 7 Segmentos
Este es un programa tpico que utiliza una tabla de conversin BCD a 7 segmentos.
Bsicamente se coloca el valor a convertir en el registro W, y se utiliza este valor
para sumrselo al PC, luego se regresa W con el valor convertido en 7 segmentos.
Para esta rutina, se asume que un 1 significa que el valor del segmento es activo, lo
cual se usa en indicadores del tipo ctodo comn. El bit menos significativo (RB0)
corresponde al segmento a.

include "P16C5X.INC"
valorBCD equ 10
org 0
INICIO movf valorBCD,w ; el valor BCD a convertir se lleva a W
call BCD7SEG
goto INICIO
BCD7SEG ; rutina de conversion BCD a 7 segmentos
addwf PCL,f ; El valor BCD se suma al contador de programa
; en el retorno se convierte en 7 segmentos
retlw b'00111111' ; 0
retlw b'00000110' ; 1
retlw b'01011011' ; 2
retlw b'01001111' ; 3
retlw b'01100110' ; 4
retlw b'01101101' ; 5
retlw b'01111101' ; 6
retlw b'00000111' ; 7
retlw b'01111111' ; 8
retlw b'01101111' ; 9
end
INICIO

a (RB0)
f (RB5) b (RB1)
g (RB6)
e (RB4) c (RB2)
d (RB3)

153
Los puertos de entrada y salida pueden ser ledos y escritos como cualquier registro
de datos por medio de las instrucciones de programa. Sin embargo, una instruccin
de lectura (por ejemplo MOVF PORTB, W) leer los terminales de los puertos,
independientemente si ellos estn programados como entrada o salida. Despus de
una inicializacin, todos los puertos se definen como entrada (alta impedancia), ya
que los registros de control TRISA y TRISB son puestos en 1.

Puerto A: El puerto A es un registro de 4 bits (PORTA), los bits que se utilizan son
los menos significativos (RA3:RA0). Los bits 7-4 se leen como ceros.

Puerto B: El puerto B es un registro de entrada-salida de 8 bits (PORTB<7:0>).


3.8 Puertos de Entrada y Salida
INICIO
154
Los registros de control de puertos, son cargados con el contenido del registro W,
al ejecutar la instruccin TRIS F. Un 1 en un bit del registro TRIS, coloca el
adaptador del terminal correspondiente en modo de alta impedancia o entrada. Un
0 en ese bit, coloca el adaptador de ese terminal como salida.

NOTA:
Una lectura de los puertos, lee los terminales de los puertos de salida, y no la
salida que ha sido enviada. Esto significa que si una salida de un terminal es
habilitada para tener un 1 y en el sistema externo, este terminal es forzado a un
nivel bajo, la lectura del puerto indicar que en el terminal correspondiente habr
un cero.
Los registros TRIS, son registros de escritura solamente, y son colocados en 1
despus de una inicializacin (RESET todas las lneas de los puertos quedarn
programados como entradas).
Los registros TRIS no tienen una direccin asignada en los microcontroladores de la
gama bsica. Sin embargo en los microcontroladores de la gama media si tienen
una direccin asignada, y por lo tanto, en ellos no se recomienda utilizar la
instruccin TRIS.
Registro de control de puerto TRIS
INICIO
155
Cada terminal de un puerto, puede ser utilizado como entrada o salida. Para
operaciones de entrada, estos puertos no guardan la condicin. El nivel de
entrada debe permanecer hasta que la instruccin de lectura se ejecute (por
ejemplo MOVF PORTB, W). En el caso de las salidas, las lneas mantienen su nivel
hasta que haya una nueva instruccin de escritura en el puerto. Para usar un
terminal como salida, la direccin correspondiente del bit de control en TRISA o
TRISB, debe colocarse en cero. Para usar este terminal como entrada, el bit
correspondiente en el registro TRIS debe colocarse en uno.

Cualquier lnea de un puerto, puede programarse individualmente como entrada o
salida.

El circuito equivalente para cada lnea de un puerto, es el que se muestra a
continuacin:
Interfaces de Entrada y Salida
INICIO
156
Registro
Tipo D
Q
D
Q CK
Bus de
Datos
Escribe
en puerto
Registro
TRIS
Q
D
Q CK
Registro
W
TRIS f
Inicializacin
Lee de Puerto
P
N
Vss
terminal de
Entrada/Salida
Vdd
INICIO
157
La siguiente tabla presenta un resumen de la posicin de las lneas en cada uno de los
puertos:
Nota: x significa cualquier cosa y u significa no cambia
INICIO
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
Valor despus Valor despus
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
158
Escritura en un Indicador
7 segmentos
RB0
RB1
RB2
PIC 16C54 RB3
RB4
RB5
RB6
En el registro W se encuentra el cdigo 7 segmentos que se va a
escribir en el indicador numrico.
La instruccin:
MOVWF PORTB ; Lleva el contenido de W al puerto B.
Previamente se debe programar al puerto B como salida con la
instruccin TRIS PORTB.
INICIO
159
Escritura en Dgitos Multiplexados

RA0
RA1
RA2
RA3

PIC16C54
RB0
RB1
RB2
RB3
RB4
RB5
RB6
La siguiente figura muestra
una configuracin de una
salida de cuatro dgitos
controlados por los puertos
A y B.
Los indicadores numricos 7
segmentos son del tipo
nodo comn, por lo tanto
se debe considerar que los
segmentos encendern con
un 0 en vez de con un
1.
Los dgitos se encendern
con un 0 en la entrada
del transistor que le
corresponde manejar al
dgito correspondiente.
En la siguiente pgina se
muestra una rutina para el
control de varios dgitos.
INICIO
160
Rutina para el manejo
de cuatro dgitos
;4IDIGITOS

;Salida para 4 dgitos 7 segmentos
INCLUDE "P16C5X.INC"
CBLOCK H'10'
DIGITO0, DIGITO1, DIGITO2, DIGITO3
ENDC ; VALORES DE SALIDA DE CADA DIGITO
ORG 0

PREPARA CLRW
TRIS PORTA
TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS

INICIO MOVF DIGITO0,W ; EL CONTENIDO DE DIGITO 0 VA A W
MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B
MOVLW B1110 ; SELECCION DEL PRIMER DIGITO
MOVWF PORTA,F ; SE SELECCIONA RA0, PARA EL PRIMER DIGITO
CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR
MOVF DIGITO1,W ; EL CONTENIDO DE DIGITO 1 VA A W
MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B
MOVLW B1101 ; SELECCION DEL SEGUNDO DIGITO
MOVWF PORTA,F ; SE SELECCIONA RA1, PARA EL PRIMER DIGITO
CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR
MOVF DIGITO2,W ; EL CONTENIDO DE DIGITO 2 VA A W
MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B
MOVLW B1011 ; SELECCION DEL TERCER DIGITO
MOVWF PORTA,F ; SE SELECCIONA RA2, PARA EL PRIMER DIGITO
CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR
MOVF DIGITO3,W ; EL CONTENIDO DE DIGITO 3 VA A W
MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B
MOVLW B0111 ; SELECCION DEL CUARTO DIGITO
MOVWF PORTA,F ; SE SELECCIONA RA3, PARA EL PRIMER DIGITO
CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR
INICIO
161
Rutina para el manejo
de varios dgitos
;MULTIDIGITO
;Salida para 4 o ms dgitos 7 segmentos
INCLUDE "P16C5X.INC"
CBLOCK H'10'
DIGITO0, DIGITO1, DIGITO2, DIGITO3, SELDIGI
ENDC ; VALORES DE SALIDA DE CADA DIGITO
ORG 0

PREPARA CLRW
TRIS PORTA
TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS

INICIO MOVLW B11111110 ; SE HACE 0 EL BIT 0, PARA ENCENDER PRIMER DIGITO
MOVWF SELDIGI,F ; EL VALOR SE LLEVA DE W A SELDIGI
MOVLW DIGITO0 ; VALOR DIGITO 0 VA A W PARA CARGARLO A FSR
MOVWF FSR ; DIGITOX VA AL APUNTADOR DE DIRECCIONES
PROXDIG MOVF INDF,W ; VALOR DEL DIGITO VA A W
MOVWF PORTB ; SE SACA VALOR AL PUERTO B
MOVF SELDIGI,W ; SELECCIONADOR DE DIGITO A W
MOVWF PORTA ; SELECCION DE DIGITO AL PUERTO A
BSF STATUS,C ; COLOCA ACARREO EN 1, PARA APAGAR DIGITO 0
RLF SELDIGI,F ; CAMBIO EN LA SELECCION DE DIGITO
INCF FSR,F ; INCREMENTA APUNTADOR DE DIGITOS
CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR
BTFSS SELDIGI,4 ; SI FINALIZA ULTIMO DIGITO SALTA
GOTO PROXDIG ; SINO VA AL PROXIMO DIGITO
INICIO
162
El registro OPTION es un registro de 6 bits de escritura solamente, y contiene los
bits de control para configurar el escalamiento del temporizador TMR0 (Timer 0) o
del temporizador WDT (Perro guardin). El registro OPTION no tiene direccin
asignada en los microcontroladores de la gama bsica. Sin embargo, este registro
s tiene una direccin especfica en los microcontroladores de la gama media.
A continuacin se presenta la asignacin de los bits del registro OPTION:
U-C U-0 W1 W1 W1 W1 W1 W1
TOCS TOSE PSA PS2 PS1 PS0
7 6 5 4
3
2 1 0
Bit 5: TOCS: Bit de seleccin de fuente del temporizador TMR0
1 = Transicin del terminal TOCKI
0 = Reloj de ciclo de instrucciones interno (CLKOUT)
Bit 4: TOSE: Bit de seleccin de transicin de fuente del temporizador TMR0
1 = Incremento en una transicin de bajada en el terminal TOCKI
0 = Incremento en una transicin de subida en el terminal TOCKI

3.9 Registro OPTION
INICIO
163
Bit 3: PSA: Bit de asignacin del escalamiento.
1 = Se asigna el escalamiento a WDT (perro guardin).
0 = Se asigna el escalamiento al temporizador TMR0 (Timer 0).
Bit 2-0: PS2:PS0: Bits de seleccin de la relacin de escalamiento.
PS2 PS1 PS0 Relacin TMR0 Relacin WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
INICIO
164
Cambios en el
preescalador
Veamos un ejemplo de cmo cambiar el preescalador para los temporizadores del
PIC16C54. En el primer caso se hace un cambio del temporizador 0 al WDT.
Recuerda que los valores binarios x, son los que vamos a asignar:

CLRWDT ; BORRA EL TEMPORIZADOR PERRO GUARDIAN WDT
CLRF TMR0 ; BORRA TEMPORIZADOR TMR0
MOVLW B00xx1111 ; LAS ULTIMAS TRES INSTRUCCIONES SE REQUERIRAN SI
OPTION ; SE DESEA HACER EL CAMBIO
CLRWDT ; PS<2:0> A 000 O 001
MOVLW B00xx1xxx ; SE ESTABLECE EL PREESCALADOR AL VALOR DESEADO
OPTION ; PARA EL WDT

En el segundo caso se hace un cambio del preescalador del WDT al TMR0.

CLRWDT ; BORRA EL WDT Y EL PREESCALADOR
MOVLW Bxxxx0xxx ; SELECCIONA EL NUEVO ESCALAMIENTO PARA TMR0 Y LA
OPTION ; FUENTE QUE ACTIVA ESTE TEMPORIZADOR
INICIO
165
Un temporizador contador tiene la funcin de calcular el tiempo transcurrido
durante la ejecucin del programa del microcontrolador o, contar los pulsos
producidos por uno o ms eventos externos. Bsicamente el circuito que se utiliza
es el de un contador independiente, que puede ser activado por el oscilador del
microcontrolador o por un oscilador externo.

El temporizador TMR0 presenta las siguientes caractersticas:

w Registro contador - temporizador de 8 bits de lectura y escritura.
w Escalamiento programable (Vase registro Option).
w Seleccin de entrada de oscilador interna o externa.
w Seleccin del tipo de transicin que activa la cuenta.

3.10 Temporizador contador
INICIO
166
El modo temporizador se selecciona al colocar un cero en el bit TOCS, bit 5 del
registro OPTION. En este modo, el temporizador se incrementa por cada
transicin del escalamiento, el cual divide la frecuencia de cada ciclo de
instruccin. Si se escribe el registro TMR0 (temporizador 0), el incremento se
inhibe durante los dos ciclos siguientes, vase las siguientes figuras:
INICIO
Ciclos del Temporizador 0, para el oscilador interno sin escalamiento:
PC (Contador de
programa)
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
Preparacin de
instruccin
Temporizador 0
Instruccin
Ejecutada
Escribir
TRMRO
Ejecutado
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO+1
Leer TMRO
Lee NTO+2
MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0, W
Modo Temporizador
167
PC (Contador de
programa)
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
Preparacin de
instruccin
Temporizador 0
Instruccin
Ejecutada
Escribir
TRMRO
Ejecutado
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO
Leer TMRO
Lee NTO+1
MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0,W
Ciclos del Temporizador 0:
Oscilador interno con escalamiento 1 a 2
INICIO
El programador debe considerar este retardo en la escritura para ajustar el valor
deseado en TMR0.
168
El modo contador se selecciona al poner en 1 el bit TOCS (bit 5 del registro
OPTION). En este modo, el temporizador o el escalamiento se incrementar en 1
cada vez que haya una transicin en el terminal de entrada TOCKI. El tipo de
transicin se determina por medio del bit TOSE (bit 4 del registro OPTION); si
ste es cero, la entrada es sensible a transiciones de subida.
En la siguiente figura, se muestra la conexin elctrica del terminal TOCKI, que es
la entrada del temporizador TMR0:






El escalamiento puede ser usado por TMR0 o por el temporizador WDT perro
guardin, pero no por ambos. La asignacin del escalamiento se hace por el bit
PSA (bit 3 de OPTION). Si el bit PSA es cero, el escalamiento ser asignado al
temporizador TMR0. Los valores de escalamiento pueden ser desde 1/2 hasta
1/256, segn la tabla mostrada en el registro OPTION.
INICIO
TOCKI
N
Entrada con
Disparador de
Schmitt
Modo Contador
169
Valor al Valor despus
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Encender de TMR0 y TO
N/A TMRO Temporizador 0 - Contador/reloj de tiempo real de 8 bits xxxx xxxx uuuu uuuu
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 11 1111 1111 1111
En la tabla siguiente, se muestra un resumen de los registros asociados con
el temporizador TMR0.
INICIO
170
Contador de tiempo
INICIO
Veamos como ejemplo que se quiere incrementar un contador de tiempo cada segundo,
y que en una posicin de memoria, se lleve la cuenta del tiempo en minutos.
Supongamos que el microcontrolador tiene un cristal de 10MHz.
Para este caso, si el oscilador es de 10MHz, el perodo del oscilador es igual a
100nSeg. El ciclo de mquina dura cuatro perodos del oscilador, por tanto
corresponde a 400nSeg. El valor mximo que se puede asignar al preescalador para
el TMR0, corresponde a 256 veces. Es decir que si tomamos el mximo valor, se
obtiene: 400nSeg X 256 = 102,4Seg. El TMR0 es de 8 bits, por tanto este tiempo
lo podemos ampliar hasta 102,4Seg X 255 = 26,112mSeg. Si la idea es obtener un
tiempo submltiplo de 1Seg, podramos seleccionar por ejemplo 20mSeg o 10mSeg, de
manera que al leer 50 o 100 veces el incremento de un registro que detecte cada vez
que el TMR0 se desborda, entonces obtendramos 1 segundo respectivamente.
Supongamos que seleccionamos como base del temporizador 10mSeg, entonces
podramos tomar el valor de escalamiento en 1/128, en vez de 1/256 que es el
mximo. As se podr tener mayor exactitud en la medicin del tiempo.
El incremento del tiempo se har en 400nSeg X 128 = 51,2Seg. En 10mSeg se
necesitarn 10mSeg/51,2Seg perodos del TMR0, es decir; 195,3125 ciclos de
TMR0. Como ste slo admite un valor entero, se tomar el 195. El resto podra
corregirse con una rutina que retarde la escritura del temporizador unos 51,2Seg X
0,3125 = 16Seg, que corresponde a la ejecucin de 40 ciclos del PIC. Sin embargo,
lo mejor sera probarlo sin tomar en cuenta este remanente, y luego corregir.
Para obtener los 195 ciclos del TMR0, debe cargarse el valor 256-195=61; no se
toma en cuenta el retardo en la escritura, ya que el valor del escalamiento es alto.
171
El Contador de segundos
y minutos
INICIO
include "P16C5X.INC" ; Incluye los smbolos del PIC16C54
cblock 10H
segund, minuto, hora, dia
endc
prepara movlw b'00000110' ; Seleccin del preescalador a TMR0 y divisin por 128
option ; Carga al registro OPTION la configuracin
tmr0full movf TMR0,w
btfss STATUS,Z ; Chequea si el TMR0 est en 0
goto tmr0full
movlw d'61'
movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0
incf segund,f ; Se incrementan los segundos
call ajuste
goto tmr0full ; Se espera hasta que el tmr0 vuelva a 0. Para otras aplicacione
; el programa principal puede seguir mientras se incrementa TMR0
ajuste movlw 6 ; Se hace el ajuste a BCD
addwf segund,w ; suma 6 para correccin digito 0
btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0
movwf segund ; corrige si hay acarreo digito 0
movlw 0A0
addwf segund,w ; suma 100 para correccin de segundos
btfsc STATUS,C ; corrige si hay acarreo
goto incminu ; va a incrementar los minutos
retlw 0 ; retorna si no hay incremento de minutos
incminu movwf segund ; corrige si hay acarreo en el siguiente dgito
incf minuto,f ;
; el programa contina, aqu se puede hacer las correcciones para
; contar los minutos, horas, das, etc.
172
En el programa anterior observamos que el microcontrolador est un tiempo inactivo,
mientras espera el desbordamiento del TMR0. Para este programa, puede no ser
problema alguno, pero en otros programas se necesita administrar mejor el tiempo
del microcontrolador. Esto se puede solucionar si el microcontrolador tuviera una
interrupcin que avisara que ya se llen el TMR0. Sin embargo los PIC de la gama
media no tienen este recurso, cosa que s tienen los PICs de gamas ms avanzadas.
Si se desea aprovechar mejor un programa de un PIC de la gama bsica, entonces se
sugiere que el programa que se est ejecutando realice sus actividades mientras el
TMR0 est contabilizando el tiempo. Es importante que mientras se ejecuta dicho
programa, el tiempo no exceda al de un ciclo del TMR0, porque sino, al evaluar su
salida, pudo ya haber pasado por cero, y entonces habr que esperar otro
desbordamiento del temporizador.
Una consideracin respecto
al programa anterior
INICIO
173
Un pequeo pulso se
pierde en el muestreo
Entrada de un
Oscilador Externo o
Salida del
Escalamiento
Salida del Oscilador
Externo/Escalamiento
Despus del muestreo
01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04
(3)
(1)
Incremento del tem-
porizador TMR0 (Q4)
Temporizador TMR0
INICIO
Si un oscilador externo se usa para el temporizador TMR0, hay que considerar que
debe haber una sincronizacin con la fase del oscilador externo; sino habr un
retardo en el incremento del temporizador TMR0 despus de la sincronizacin.

Al no usar el escalamiento, la seal del oscilador externo entra directamente al bloque de
sincronizacin. Esta sincronizacin de TOCKI con la fase del oscilador interno, se realiza por
medio del muestreo de la salida escalada en los ciclos Q2 y Q4 de la fase del oscilador interno.
Por consiguiente, se necesita que TOCKI est en 1 por lo menos dos veces el periodo del oscilador
y en 0 al menos otro intervalo de tiempo igual. Vase la siguiente figura:

Uso de un oscilador externo
para TMR0
174
Cuando se usa el escalamiento, se obtiene una seal simtrica cuya frecuencia est
divida con respecto a la de la frecuencia de entrada del oscilador. Es necesario que
en la entrada TOCKI, el perodo sea de por lo menos 4Tosc dividido entre el valor
escalado. Por otro lado, la duracin de un nivel debe ser mayor que el mnimo ancho
de pulso requerido de acuerdo a las especificaciones, es decir 10nSeg.

Debido a que la salida del escalamiento se sincroniza con el oscilador interno, cuando
ocurre una transicin en la seal externa habr un pequeo retardo en el incremento
del temporizador TMR0.
INICIO
175
En la mayora de los microcontroladores, se incorpora un temporizador independiente
llamado perro Guardin (Watchdog Timer). ste tiene la finalidad de reiniciar el
programa principal o atender una interrupcin, cuando ocurre una anormalidad en la
ejecucin de la secuencia de instrucciones programadas. Bsicamente esta
anormalidad har que el programa ejecute un lazo sin retorno, y por tanto el
microcontrolador no har la funcin que se le haba asignado. Si esto ocurre, y se
dispone de un temporizador perro guardin, ste, despus de un tiempo de espera,
enviar la seal de interrupcin que repondr al microcontrolador y podr ser capaz
de iniciar o continuar el programa principal. Es de suponer, que si se va a utilizar
este temporizador, el programa principal debe borrarlo en un tiempo menor al tiempo
de espera especificado por el temporizador, porque de lo contrario el programa
nunca se ejecutara completamente.
3.11 Temporizador WDT
(Perro Guardin)
INICIO
176
En los PIC16C5X, el temporizador WDT o perro guardin es un oscilador
independiente de configuracin RC que est dentro del microcontrolador. Esto
significa que este circuito genera una seal, aunque el oscilador principal (terminales
OSC1/CLKIN y OSC2/CLKOUT) se haya detenido, como por ejemplo al ejecutar la
instruccin SLEEP. En una operacin normal o en el modo Reposo (SLEEP), una
seal de habilitacin del WDT, resultar en una inicializacin del microcontrolador.
El bit TO (bit 4 de STATUS) se borrar despus de esta seal de inicializacin.

El temporizador WDT puede ser deshabilitado permanentemente al colocar en 0 el
bit de configuracin WDTE. Vase el tema IV, acerca de los bits de configuracin
para los microcontroladores 16C5X.
INICIO
177
El perodo de espera del temporizador WDT, es de alrededor 18 mSeg cuando no
tiene escalamiento. Si se desea un mayor tiempo de espera, este perodo se puede
aumentar por medio del escalamiento hasta 128 veces. Para ello se debe colocar en
1 los bits PSA, PS2, PS1 y PS0 del registro OPTION. De esta manera, se puede
obtener un tiempo de espera normal de hasta 2,3 segundos. Este periodo puede
variar con la temperatura, VDD y las tolerancias en las especificaciones.
Perodo del temporizador WDT
INICIO
178
REGISTROS ASOCIADOS CON EL TEMPORIZADOR WDT (PERRO GUARDIN):
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor al Valor despus de
Encender TMR0 y MCLR
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111
INICIO
Consideraciones al programar
el Temporizador WDT:

La instruccin CLRWDT borra el contenido del temporizador WDT y el
escalamiento, si ste ha sido asignado a WDT. Esto permitir que no
ocurra una inicializacin del microcontrolador.

La instruccin SLEEP, borra el contenido del temporizador WDT y el
escalamiento, si ste ha sido asignado a WDT. El perro guardin
(WDT) despertar al microcontrolador en el tiempo mximo de espera
fijado por el WDT.
179
Programa que utiliza el WDT
para prevenir lazos infinitos
INICIO
Veamos el ejemplo del contador de segundos y minutos. Sabemos que el programa
deber chequear continuamente el temporizador TMR0. Una manera de prevenir que el
programa se guinde es de la siguiente manera:

tmr0full movf TMR0,w
btfss STATUS,Z ; Chequea si el TMR0 est en 0
goto tmr0full
movlw d'61'
movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0
clrwdt ; Borra el temporizador WDT
incf segund,f ; Se incrementan los segundos




Recordemos que el WDT reiniciara el microcontrolador cada 18mSeg aproximadamente,
si no se borra antes de que transcurra ese tiempo, ya que este valor no se puede
ampliar porque el TMR0 est utilizando el escalador. Si sabemos que el TMR0 se
carga cada 10mSeg, entonces podra ser una buena alternativa colocar la instruccin de
borrado del WDT despus de cargar el valor en el TMR0.
Es importante tomar en cuenta, que el WDT se activa por medio de los bits de
configuracin al hacer la programacin del PIC, lo cual se ver en el prximo tema.
180
ACTIVIDADES A REALIZAR
1.- Hacer un contador BCD con dos pulsadores para el control ascendente y
descendente, y que tenga dos dgitos de salida en formato siete segmentos.
2.- Hacer un control de luces para el semforo propuesto en el tema 2, en el cual se
lleve la medicin del tiempo con el temporizador TMR0. Suponga que la frecuencia
del oscilador es igual a 4MHz.
3.- Hacer un reloj digital, que sincronice su velocidad con el temporizador TMR0.
Este reloj deber tener la posibilidad de ajustar la hora y minutos, por medio de
pulsadores. Asuma que la frecuencia del oscilador es igual a 20MHz.
4.- Incluir el temporizador WDT en las actividades anteriores, de manera que el
programa se ejecute correctamente, en condiciones normales, y que haga la
inicializacin, en el caso de caer en un lazo infinito.
INICIO
TEMA 4
Caractersticas Especiales del
Hardware

CONTENIDO
4.1.- Configuracin de la serie PIC16C5X
4.2.- Modo SLEEP (Reposo)
4.3.- Inicializacin de los PIC16C5X
4.4.- El Temporizador de Inicializacin (DRT)
4.5.- Inicializacin por Encendido (POR)
INICIO
182
Objetivos Terminales:
Describir los modos de
configuracin que presentan los
microcontroladores PIC.
Sealar la importancia que tiene
activar el modo Reposo en un
microcontrolador.
Describir los modos de
inicializacin que presentan los
microcontroladores PIC.
INICIO
183
En la direccin FFFh de los microcontroladores de la serie 16C5X, se dispone de
una palabra de configuracin de 12 bits, de los cuales 4 bits tienen funciones
especficas. Cuando se va a grabar el programa en el microcontrolador, se tiene
acceso a esta direccin. Para ello, se dispone de una ventana que permite
configurar algunas caractersticas del hardware del microcontrolador.

Estos bits pueden programarse para seleccionar algunas funciones de Hardware
del microcontrolador.

Dos de los bits son para seleccionar el tipo de oscilador que se va a utilizar, un
bit es para la habilitacin del temporizador Perro Guardin (WDT) y un bit es
para habilitar la proteccin del cdigo del programa.
4.1.- Configuracin de
la serie PIC16C5X
INICIO
184
CP WDTE FOSC0 FOSC1
Bit 11 10 9 8 7 6 5 4 3 2
1 Bit 0
Registro CONFG
Direccin FFFH
Bits 11-4: No utilizados: Se leen 0

Bit 3: CP: Bit de proteccin de cdigos
1-> No protegido
0-> Protegido

Bit 2: WDTE: Habilitacin del temporizador WDT (Perro Guardin)
1-> Habilitado
0-> Inhabilitado
Diagrama de la palabra de configuracin
INICIO
185
Los microcontroladores PIC tienen la posibilidad de proteger el programa grabado
en memoria al acceder al bit 3 de la palabra configuracin.

Si este Bit tiene valor 0, entonces no ser posible leer el programa guardado.
Habilitacin del Temporizador WDT
El temporizador WDT se utiliza normalmente para reiniciar el programa principal,
cuando ocurre una anormalidad.

En el bit 2 de la palabra de configuracin se puede habilitar o no este
temporizador, al colocar un 1 un 0 respectivamente.
Proteccin de cdigos
INICIO
186
Los microcontroladores PIC16C5X, pueden operar en uno de cuatro modos de
oscilacin; para ello, el usuario deber programar dos de los bits de
configuracin del microcontrolador.

En la palabra de configuracin, que slo se accede a ella en el modo de
programacin, se encuentran los bits FOSC1 y FOSC0 (bits 1 y 0
respectivamente).

De acuerdo a la combinacin de ellos, se puede escoger lo siguiente:

LP Cristal resonante a bajo consumo (00)
XT Cristal resonante (01)
HS Cristal resonante de alta velocidad (10)
RC Resistencia y condensador (11)
Seleccin del Oscilador
INICIO
187
En las figuras de la pgina siguiente, se puede observar la conexin del cristal en
el microcontrolador, y los valores adecuados de los condensadores segn el modo de
oscilacin seleccionado.
Otra alternativa existente es la de conectar una seal producida por un oscilador
externo en la entrada OSC1/CLKIN, lo cual se puede observar a continuacin
Seal de un oscilador
externo
Abierto
OSC1
OSC2
PIC 16C5X
INICIO
188
Tipo de Frecuencia C1 C2
Oscilador resonante
LP 32KHz

15 pF 15pF
XT 100KHz

15-30 pF 200-300 pF
200KHz 15-30 pF 100-200 pF
455KHz 15-30 pF 15-100 pF
1MHz 15-30 pF 15-30 pF
2MHz 15 pF 15 pF
4MHz 15 pF 15 pF

HS 4MHz

15 pF 15 pF
8MHz

15 pF 15 pF
20MHz

15 pF 15 pF
C2
(1)

RS
(2)

SLEEP
Hacia lgica
interna
RF
(3)

OSC2
XTAL
C1
(1)
OSC1
PIC16C5X
NOTAS:
1.- Ver tabla de seleccin de C1 y
C2
2.- Puede ser necesario colocar una
resistencia en cristales sin blindajes
3.- El valor de RF depende del
cristal seleccionado
INICIO
Tabla de Seleccin
189
Para las aplicaciones en las cuales no se requiera precisin en la medicin del tiempo,
el modo RC ofrece una alternativa econmica para el desarrollo de circuitos. La
frecuencia del oscilador RC, depende de los valores del voltaje de alimentacin, la
resistencia R
ext
, el condensador C
ext
, la temperatura de operacin y la tolerancia que
ofrece el dispositivo. Se recomienda utilizar valores de R
ext
entre 3 K y 100 K.
En cuanto a C
ext
se recomienda utilizar valores por encima de los 20 pF.
En la siguiente figura se muestra la conexin de circuito RC, ntese que se dispone de
una salida con la frecuencia de oscilacin dividida entre cuatro en el terminal
OSC2/CLKOUT.
VDD
R
ext

OSC1
PIC16C5X
OSC2/ClkOUT
FOSC/4
Vss
Cext
Reloj Interno
N
INICIO
190
Valores tpicos de frecuencia que se
pueden obtener en el modo RC
C
ext
R
ext
Frecuencia
V
dd
= 5V, T
amb
=25C
20pF
3.3K
5K
10K
100K
5,0MHz
3,8MHz
2,2MHz
260KHz
100pF
3.3K
5K
10K
100K
1,6MHz
1,2MHz
680KHz
72KHz
300pF
3.3K
5K
10K
160K
660KHz
480KHz
270KHz
29KHz
INICIO
191
Los microcontroladores PIC, tienen la posibilidad de estar en un modo de operacin
de bajo nivel de consumo. Sin embargo, durante ese tiempo, no podr ejecutar
instrucciones, tal como si estuviera durmiendo. Luego podr despertar para
funcionar en el modo normal, por medio de una seal de inicializacin.

Para estar en el modo Reposo, se deber ejecutar en el programa la instruccin
SLEEP. Si el temporizador perro guardin est habilitado, al ejecutar la
instruccin SLEEP, borrar el contenido del registro WDT, para dar comienzo el
tiempo de espera seleccionado segn el escalamiento del WDT, y enviar despus la
seal del temporizador perro guardin. Por otro lado, el bit TO o tiempo de
espera (bit 4 de STATUS), se coloca en 1, y el bit PD o baja potencia (bit 3 de
STATUS), se coloca en 0, entonces el oscilador se detiene. Los puertos de
entrada y salida mantienen el estado anterior a la ejecucin de la instruccin SLEEP.

Si se desea un consumo an menor en este estado, se deber colocar el terminal
TOCKI a un nivel fijo (V
DD
o V
SS
) y la entrada MCLR/V
pp
deber colocarse a un nivel
alto.

4.2.- Modo SLEEP (Reposo)
INICIO
192
Para salir del modo de reposo, existen dos posibilidades: Por medio de una
inicializacin externa o al cumplirse el tiempo de espera en el temporizador perro
guardin (si WDT haba sido habilitado).

Estas dos formas causarn una inicializacin del dispositivo, y los bits TO y PD
pueden usarse para determinar cmo se hizo la inicializacin.

Un cero en el bit TO, indicar que el tiempo de espera en el WDT despert al
microcontrolador.
INICIO
193
Los microcontroladores PIC pueden iniciar sus funciones de las siguientes formas:

/ Inicializacin por encendido (POR).
/Inicializacin MCLR (operacin normal).
/ Inicializacin MCLR al despertar (desde el modo Reposo o SLEEP).
/ Inicializacin WDT (operacin normal).
/ Inicializacin del WDT para despertar (desde el modo Reposo o SLEEP).

La siguiente tabla muestra las condiciones de los bits de los registros PCL y STATUS,
despus de una inicializacin.
4.3.- Inicializacin de los PIC16C5X
INICIO
194
Nota: x significa cualquier valor; u significa que mantiene el valor anterior
Condicin
PCL
Direccin: 02h
STATUS
Direccin: 03h
Inicializacin por encendido 1111 1111 0001 1xxx
Inicializacin MCLR
(operacin normal)
1111 1111 000u uuuu
Inicializacin MCLR al
despertar (desde modo
Reposo)
1111 1111 0001 0uuu
Inicializacin WDT
(operacin normal)
1111 1111 0000 1uuu
Inicializacin WDT al
despertar (desde modo
Reposo)
1111 1111 0000 0uuu
INICIO
195
Algunos registros se establecern segn la condicin de inicializacin. Los otros no
sern afectados y sus estados sern indefinidos despus de una inicializacin al
encender el dispositivo, y mantendrn sus valores para otro tipo de inicializacin.
Los bits TO (tiempo de espera) y PD (Reposo); se colocarn en 0 o en 1,
dependiendo de la condicin de la inicializacin. Estos bits pueden utilizarse para
conocer la causa de inicializacin. A continuacin se muestra cmo se afectan los
bits TO y PD segn el tipo de inicializacin y segn ciertas condiciones en el
microcontrolador.
TO PD Inicializacin fue causada por:
1 1 Encendido (POR)
u u Inicializacin MCLR (Operacin Normal)
1 0 Inicializacin MCLR al despertar
0 1 Inicializacin WDT (Operacin Normal)
0 0 Inicializacin WDT Al despertar
INICIO
196
Registro Direccin Inicializacin por
Encendido
Inicializacin por
MCLR o WDT
W N/A xxxx xxxx uuuu uuuu
TRIS N/A 1111 1111 1111 1111
OPTION N/A --11 1111 --11 1111
INDF 00h xxxx xxxx uuuu uuuu
TMRO 01h xxxx xxxx uuuu uuuu
PCL
(1)
02h 1111 1111 1111 1111
Estados de los registros,
despus de una inicializacin
Nota: x significa cualquier valor.
u significa que mantiene el valor anterior.
INICIO
197
Registro Direccin Inicializacin por
Encendido
Inicializacin por
MCLR o WDT
STATUS 03h 0001 1xxx 000? ?uuu
FSR 04h 1xxx xxxx 1000 0000
PORTA 05h --- xxxx ---- uuuu
PORTB 06h xxxx xxxx uuuu uuuu
07h-7Fh xxxx xxxx uuuu uuuu
Registros de
propsitos generales
INICIO
198
En la siguiente figura, se muestra el diagrama de bloques del circuito de
inicializacin:
Detector de
Encendido
V
DD

MCLR/V
DD

Oscilador RC
Interno
Contador de 8 Bits
Asincrnico
(Temporizador de
Arranque)
Inicio
S Q
Q R
Inicializacin
del Chip

POR
(Inicializacin
por Encendido)
Tiempo de espera
del WDT
INICIO
199
El temporizador de inicializacin (DRT) es un circuito interno, basado en un
oscilador RC, que introduce un tiempo de espera nominal de 18mseg, antes de la
inicializacin del microcontrolador.

El retardo en la inicializacin que introduce este circuito, permite la estabilizacin
de la frecuencia de oscilacin en el circuito resonante que fija los ciclos del
microcontrolador; lo cual evita la necesidad de colocar una red RC externa para
este propsito.

El DRT tambin se activa despus de un tiempo de espera del perro guardin
(WDT), lo cual es importante para aplicaciones en las que despertar al
microcontrolador, despus del modo dormir o reposo.
4.4. El Temporizador de
Inicializacin (DRT)
INICIO
200
Los microcontroladores de la familia PIC16C5X incorporan un circuito de
inicializacin por encendido dentro del chip, para la mayora de las situaciones.
Para utilizar estas facilidades, el diseador simplemente debe colocar el terminal
MCLR/V
pp
al voltaje de alimentacin V
pp.

Los circuitos de la inicializacin por encendido (POR) y del temporizador de
inicializacin (DRT), estn muy relacionados. Cuando se enciende el
microcontrolador, el registro de inicializacin se coloca en 1 y se borra el DRT.
Luego el DRT arranca cuando detecta un 1 en la lnea MCLR. Despus de un
tiempo de espera, que dura aproximadamente 18mseg, se pone en 0 el registro
de inicializacin y de esta manera se genera la seal de inicializacin.

Un ejemplo de encendido en donde MCLR no se conecta a V
DD
se grafica en la
siguiente figura:
4.5. Inicializacin por
encendido (POR)
INICIO
201
POR INTERNO
MCLR
V
DD

ESPERA DRT
INICIALIZACIN INTERNA
TDRT
V
1

El V
DD
aumenta y se estabiliza antes de que MCLR sea igual a 1.
La inicializacin se efectuar un tiempo despus de que MCLR sea 1 y ser
fijado por el DRT.
INICIO
202
INICIALIZACIN INTERNA
V
DD

MCLR
POR INTERNO
TDRT
ESPERA DRT
V
1

El caso conveniente se consigue cuando MCLR se conecta a V
DD
. El
valor de V
DD
permanece estable antes de que se cumpla el tiempo de espera
en el DRT, y no hay problemas en obtener la inicializacin adecuada.
La siguiente figura muestra el caso en que MCLR se conecta a V
DD
.
INICIO
203
Para los casos en los que la alimentacin sube de manera muy lenta, ocurre una
situacin problemtica. Vase la siguiente figura:
V
DD

INICIALIZACIN INTERNA
MCLR
POR INTERNO
ESPERA DRT
V
1

TDRT
Cuando VDD se eleva lentamente, el tiempo de espera TDRT se acaba antes de
que VDD llegue al valor final. En este ejemplo, el dispositivo tendr una
inicializacin apropiada, nicamente si V1 VDD.
INICIO
204
Si se desea mayor informacin, consultar la nota de aplicacin AN522 en el
Embedded Control Handbook o en www.microchip.com.
Cuando el DRT detecta el 1 lgico en la entrada MCLR/V
pp
, y sta no ha llegado
a estabilizar su voltaje, no habr garanta de que la inicializacin en el
microcontrolador se haya hecho correctamente. Para estos casos, se recomienda
colocar un circuito RC como se muestra a continuacin, de manera de solventar este
problema.
V
DD

V
DD

D
R
R1
C
MCLR
PIC16C5X
INICIO
5.1.- Introduccin
5.2.- Familia de los microcontroladores PIC de la gama bsica
5.3.- Conexiones externas de los microcontroladores PIC de la gama bsica
5.4.- Organizacin de las memorias de los microcontroladores PIC de la gama bsica
5.5.- Registro STATUS
5.6.- Registro Contador de Programa PC
5.7.- Memoria de Datos

TEMA V
Otros Microcontroladores de la Gama Bsica
INICIO
206
5.1 INTRODUCCIN
Hemos visto hasta ahora todo lo relacionado con el PIC16C54. Este microcontrolador
es muy til para aplicaciones bsicas. En la medida en que aumenta la complejidad de
un circuito, ser necesario utilizar dispositivos con mayor capacidad de memoria, o
posiblemente se requiera una mayor cantidad de lneas de entrada y salida, o por el
contrario, pueden haber aplicaciones en las que se requiera pocas lneas y bajo
consumo. Dentro de los PIC de la gama bsica, hay otros microcontroladores que
pueden solucionar estos problemas. Recuerda que la idea al utilizar
microcontroladores, es para que este circuito haga prcticamente todas las funciones
electrnicas de la aplicacin requerida. En otras palabras, un circuito con
microcontrolador no debera tener, en lo posible, ampliaciones externas de memoria ni
circuitos digitales de soporte. Por qu? Simplemente, porque si se hace esto, estas
soluciones implican la utilizacin de ms circuitos externos y en muchos casos se
sacrificaran lneas que pueden utilizarse como puertos; por otro lado, si en un
programa se pueden realizar todas las funciones lgicas, entonces ser ms econmico
aprovechar la elaboracin de rutinas que ejecuten esas funciones. Por ejemplo, no
sera conveniente hacer un contador con un microcontrolador, cuyas salidas vayan a un
decodificador BCD a 7 segmentos. Es ms econmico y funcional hacer la
decodificacin BCD a 7 segmentos, por medio de una rutina de conversin. Tampoco
ser lgico aadir una memoria externa para aumentar la capacidad, ya que al
comunicar la memoria con el microcontrolador se utilizarn lneas de puerto, que bien
pueden emplearse para otra actividad. La solucin ser adquirir un microcontrolador
con mayor capacidad de memoria.
INICIO
207
5.2 Familia de los microcontroladores
PIC de la gama bsica
A continuacin se presentan otros modelos de microcontroladores PIC de la gama
bsica con sus caractersticas:
INICIO
Producto Memoria de programa RAM Lneas Encapsulado Temporizadores Veloc. Otras caractersticas
MCU Bytes OTP/EPROM ROM Bytes E/S y WDT Mx.
208
Familia de los microcontroladores PIC
de la gama bsica con memoria FLASH
A continuacin se presentan los dos modelos de microcontroladores PIC de la gama
bsica con memoria FLASH y sus caractersticas:
INICIO
Producto
MCU
Memoria de
programa FLASH
RAM
Bytes
Lneas
E/S
Encapsulado Temporiza-
dores y
WDT
Velocidad
Mx.
Otras
Caractersticas
PIC16F54 512X12 25 12 18/PDIP
18/SOIC
20/SSOP
1-8 bits
1-WDT
20MHz Memoria FLASH
PIC16F57 2KX12 72 20 1-8 bits
1-WDT
20MHz Memoria FLASH
Podemos observar que las caractersticas son idntica a los PIC16C54 y PIC16C57,
con la diferencia de que la memoria de programa es del tipo FLASH. Esto ofrece una
ventaja considerable, ya que no se necesita el borrador de luz ultravioleta para poder
reprogramar los microcontroladores.
209
5.3 Conexiones externas de los
microcontroladores PIC
de la gama bsica
A continuacin, se presenta la interconexin de los PICs 16C54 hasta el 16C58.
Puede observarse que las lneas RA0 a RA3, RB0 a RB7 y RC0 a RC7 constituyen las
lneas de puertos de entrada y salida.
Cada conexin tiene su propia funcin especfica
INICIO
210
5.4 Organizacin de las memorias
de los microcontroladores PIC
de la gama bsica
Sabemos que los microcontroladores de la gama bsica tienen un mismo conjunto de
instrucciones. Sin embargo, debido a las diferencias que hay entre cada modelo, en
cuanto a las capacidades de memoria y nmeros de lneas de entrada y salida, se
deber tomar esto en consideracin para realizar la programacin.
Los 16C54 y 16C55, tienen un contador de programa (PC) de 9 bits, capaz de ubicar
al programa, en una de las 512 direcciones del espacio de memoria que se utiliza la
palabra de 12 bits.


INICIO
PC<8:0>
NIVEL DE PILA 1
NIVEL DE PILA 2
MEMORIA
DE
PROGRAMA
VECTOR DE INICIALIZACIN
000h
0FFh
100h
1FFh
Espacio
para
memoria
del
usuario
CALL, RERLW
9
Memoria de programa de los PIC16C54 y 55
211
Organizacin de las memorias de los
microcontroladores PIC16C56, 57 y 58
PC<9:0>
NIVEL DE PILA 1
NIVEL DE PILA 2
MEMORIA DE
PROGRAMA
(pgina 0)
VECTOR DE INICIALIZACIN
000h
0FFh
100h
1FFh
Espacio
para
memoria
del
usuario
CALL, RERLW
10
MEMORIA DE
PROGRAMA
(pgina 1)
200h
2FFh
300h
3FFh
Memoria de programa del PIC16C56
PC<10:0>
NIVEL DE PILA 1
NIVEL DE PILA 2
MEMORIA DE
PROGRAMA
(pgina 0)
VECTOR DE INICIALIZACIN
000h
0FFh
100h
1FFh
Espacio
para
memoria
del
usuario
CALL, RERLW
11
MEMORIA DE
PROGRAMA
(pgina 1)
200h
2FFh
300h
3FFh
400h MEMORIA DE
PROGRAMA
(pgina 2)
MEMORIA DE
PROGRAMA
(pgina 3)
4FFh
500h
6FFh
700h
7FFh
Memoria de programa del PIC16C57 y 58
5FFh
600h
INICIO
212
5.5 Registro STATUS
R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin.

Bit 7: PA2: No se usa para la serie 16C5X

Bit 6-5: PA1-PA0: Pgina seleccionada de la memoria de programa (PIC 16C56/57/58)
00 = Pg. 0 = (000h - 1FFh)
01 = Pg. 1 = (200h - 3FFh)
10 = Pg. 2 = (400h - 5FFh) PIC16C57/58
11 = Pg. 3 = (600h - 7FFh) PIC16C57/58

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
PA2 PA1 PA0 TO PD Z DC C
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
INICIO
Hemos visto en la descripcin del PIC16C54 que el registro STATUS se ubica en la
direccin 03h en la memoria de datos. Este registro tiene unos bits que indican los
estados de las operaciones lgicas y aritmticas, la deteccin del tipo de inicializacin
y la seleccin de pgina de la memoria de programa.
A continuacin se presentan los bits del registro STATUS y ms abajo, la explicacin
de los bits PA1 y PA0, los cuales son los bits que se utilizan para la seleccin de
pgina de la memoria de programa.
213
Cuando una instruccin es ejecutada, el contador de programa (PC) contendr la
direccin de la prxima instruccin a ejecutarse. El valor del PC se incrementa en
uno por cada ciclo de instruccin, al menos que la instruccin cambie el valor del
PC.
Para una instruccin GOTO, los bits 8 a 0 del PC se incluyen en dicha instruccin.
El registro PCL toma los bits 7 a 0. Vase figura a continuacin:
5.6 Registro Contador de
Programa PC
PIC16C56
7
PA0
STATUS
0
9 8 7
0
PC PCL
Palabra de Instruccin
8 7
0
PC PCL
Palabra de Instruccin
PIC16C54/55
PIC16C57/58
10 9 8 7
0
PC PCL
Palabra de Instruccin
2
7
PA1 PA0
STATUS
0
INICIO
214
Para una instruccin CALL, o alguna instruccin donde el PCL es el destino, los bits 7
a 0 del PC se obtienen del cdigo de la instruccin. Sin embargo, el bit 8 del PC no
viene del cdigo de la instruccin, sino que es puesto en cero.

Algunas de las instrucciones donde el PCL es el destino, o se le modifica el
contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la direccin
del PCL es la 2

Para los PIC16C56, 16C57 y 16C58, se debe agregar un nmero de pgina. El bit 5
del registro STATUS se transfiere al bit 9 del PC para el PIC16C56, y los bits 5 y
6 del registro STATUS se transfieren respectivamente a los bits 9 y 10 del PC para
los PIC16C57 y PIC16C58. Vase figura a continuacin.
INICIO
215
8 7
0
PC PCL
Palabra de Instruccin
PIC16C54/55
Inicializacin
A 0
7
PA0
STATUS
0
9 8 7
0
PC PCL
Palabra de Instruccin
Inicializacin
A 0
PIC16C56
PIC16C57/58
10 9 8 7
0
PC PCL
0 Palabra de Instruccin
2
7
PA1 PA0
STATUS
0
INICIO
216
El contador de programa (PC) es cargado en la ltima direccin de la memoria de
programa cuando hay una inicializacin (RESET), lo cual significa que la direccin
del PC se coloca al finalizar la direccin de la ltima pgina, es decir al valor del
vector inicializacin.

Los bits de la pgina preseleccionada en el registro STATUS, son borrados
despus de una inicializacin, lo cual significa que se preselecciona la pgina 0.
Por consiguiente, despus de la inicializacin, una instruccin GOTO en la posicin
del vector inicializacin, har que el programa salte a la pgina 0.

Si ocurre una inicializacin inadecuada (por ejemplo una baja de tensin en la
alimentacin), los bits de preseleccin de pgina, en el registro STATUS, pueden
no ser borrados. Por consiguiente, es una buena prctica de programacin
borrar el registro STATUS (CLRF STATUS) en la posicin del vector de
inicializacin para que despus el PC se coloque en la posicin 000h.
Efectos de la inicializacin
INICIO
217
Consideraciones para las pginas
en los PIC 16C56/57/58
Si el contador de programa est apuntando a la ltima direccin de una pgina
seleccionada, cuando ste se incremente, har que el programa contine hacia la
pgina siguiente. Sin embargo, los bits de la pgina preseleccionada en el registro
STATUS, no se actualizarn. Por consiguiente, la prxima instruccin GOTO,
CALL o de modificacin del PCL, enviar al programa a la pgina especificada por
los bits preseleccionados de pgina (PA0 o PA1).

Por ejemplo, una instruccin NOP en la posicin 1FFh (pgina 0), incrementa el PC
a 200h (pgina 1). Un GOTO xxh en la posicin 200h, har que el programa salte
a la posicin xxh en la pgina 0 (asumiendo que PA1: PA0 valen 0). Para prevenir
esto, los bits de la pgina preseleccionada deben actualizarse por medio del
control del programa.
INICIO
218
La memoria de programa est seleccionada en pginas de 512 palabras de 12 bits.
Cada posicin en una pgina, puede ser accedida directamente cuando se va a
ejecutar un salto de direccin por medio de las instrucciones: CALL, RETLW o
GOTO.
Para los dispositivos con capacidad de ms de 512 palabras, se utilizan los bits de
seleccin de pgina PA1 y PA0, los cuales se encuentran en el STATUS.
En la memoria de datos se ubican los registros de funciones especiales y los de
propsitos generales. En las siguientes pginas, podrs observar la ubicacin de los
registros en los microcontroladores PIC de la serie 16C5X. En ellos encontrars que
los dispositivos de 28 terminales, tienen al puerto C ubicado en la posicin 07h, que
corresponde a un registro de propsito general para los microcontroladores de 18
terminales. Por otro lado, observars que los PIC16C57 y PIC16C58 tienen una
memoria RAM de mayor capacidad, y por tanto el acceso se hace por medio del
registro FSR, ya sea de manera indirecta a travs del registro INDF o directa, por
medio de los bits 6 y 5 del registro FSR, ya que stos indican el banco de memoria
a utilizar, que est especificado de acuerdo a su valor en binario.
ecuerda
INICIO
219
5.7 Memoria de datos
PIC16C54, 55 y 56
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
1Fh
REGISTROS
DE
PROPSITOS
GENERALES
MEMORIA DE DATOS DE LOS
PIC16C54 Y 56
MEMORIA DE DATOS DEL
PIC16C55
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
1Fh
REGISTROS
DE
PROPSITOS
GENERALES
PORTC
(1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est
contenida en el registro FSR.
INICIO
220
Memoria de datos PIC16C57
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
08h
0Fh
REGISTROS
DE
PROPSITOS
GENERALES
PORTC
00 01 10 11
REGISTROS
DE
PROPSITOS
GENERALES
10h
1Fh
FSR<6:5>
Direccin
de registro
REGISTROS
DE
PROPSITOS
GENERALES
30h
3Fh
REGISTROS
DE
PROPSITOS
GENERALES
50h
5Fh
REGISTROS
DE
PROPSITOS
GENERALES
70h
7Fh
20h
40h
60h
Este Mapa de Direcciones
retoma a las direcciones
del Banco 0
2Fh 4Fh
6Fh
Banco 0 Banco 1 Banco 2 Banco 3
MEMORIA DE DATOS DEL PIC16C57
INICIO
221
Memoria de datos PIC16C58
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
REGISTROS
DE
PROPSITOS
GENERALES
00 01 10 11
REGISTROS
DE
PROPSITOS
GENERALES
10h
1Fh
FSR<6:5>
Direccin
de registro
REGISTROS
DE
PROPSITOS
GENERALES
30h
3Fh
REGISTROS
DE
PROPSITOS
GENERALES
50h
5Fh
REGISTROS
DE
PROPSITOS
GENERALES
70h
7Fh
20h
40h
60h
Este Mapa de Direcciones
retoma a las direcciones
del Banco 0
2Fh 4Fh
6Fh
Banco 0 Banco 1 Banco 2 Banco 3
MEMORIA DE DATOS DEL PIC16C58
INICIO
6.1.- Introduccin
6.2.- Familia de los microcontroladores PIC16F8X
6.3.- El PIC16F84A
6.4.- Nuevas instrucciones de los PIC de la gama media
6.5.- Organizacin de la memoria del PIC16F84A
6.6.- El registro STATUS
6.7.- Manejo de Interrupciones en el PIC16F84A
6.8.- La Memoria EEPROM
6.9.- Registro Contador de Programa PC
6.10.- El Registro STACK (Pila)
6.11.- Los temporizadores y algo ms de PORTB
6.12- Los Bits de configuracin


TEMA VI
Microcontrolador PIC16F84A
INICIO
223
Objetivos Terminales:

Establecer las diferencias
de software y hardware
entre los microcontroladores
de la gama bsica y los de
la gama media.
Explicar la arquitectura del
microcontrolador PIC16F84.
Disear circuitos bsicos
con microcontroladores de
la gama media.
INICIO
224
6.1- INTRODUCCIN
Los microcontroladores de la gama bsica son tiles para aplicaciones sencillas, en
donde se realiza una tarea a la vez. Ejemplos de estas aplicaciones, pueden ser los
relojes digitales, las combinaciones de cajas fuertes y cerraduras, medidores de
frecuencia, tacmetros y algunos circuitos bsicos de control.
Cuando una aplicacin se hace ms compleja, se podra aadir circuitos externos a
estos microcontroladores; sin embargo, la idea de utilizar estos dispositivos consiste
en reducir considerablemente el nmero de componentes, y por tanto, el espacio y el
consumo de energa en los circuitos de diferentes aplicaciones. Por ejemplo.
Suponiendo que se necesita disear un circuito que sea capaz de controlar un sistema
con varias seales analgicas a la vez; si utilizramos un microcontrolador de la gama
bsica, tendramos que aadir al circuito: un convertidor analgico a digital, uno o
ms multiplexers analgicos, posiblemente se deba agregar ms memoria RAM, se
necesitara utilizar una EEPROM externa para guardar constantes del sistema y
constantes de calibracin, y as el circuito se hara bastante complejo, de tal forma,
que quizs sea ms indicado utilizar un microprocesador que un microcontrolador.
Como se ha visto en la primera seccin de esta gua, existen microcontroladores que
internamente tienen los elementos que nombramos anteriormente, y por lo tanto hay
la posibilidad de disear equipos con cierta complejidad utilizando un solo
microcontrolador. En esta seccin se vern los microcontroladores de la gama media
a partir del PIC16F84.
INICIO
225
6.2- Familia de la serie PIC16F8X
INICIO
Producto Memoria. de programa EEPROM RAM Lneas Encapsulado Canales Comparadores PWM Temporizadores Puertos Veloc. ICSP BOR/ CCP/ Otras caractersticas
MCU FLASH Bytes Bytes E/S A/D C Analgicos 16bits y WDT seriales Mxima PBOR ECCP
A continuacin, se presenta la familia PIC16F8X con sus caractersticas principales:
226
6.3- El PIC16F84A
Inicialmente se har una descripcin del PIC16F84A, ya que ste es uno de los ms
sencillos de la familia de los microcontroladores de la serie PIC16F8X. En principio se
establecern las diferencias con respecto al microcontrolador PIC16C54, luego se harn
unos ejemplos de aplicacin con este microcontrolador.
El PIC16F84A es un microcontrolador Microchip de la gama media que presenta las
siguientes caractersticas bsicas, las cuales se comparan con las del PIC16C54:

Microcontrolador PIC16F84A PIC16C54JW
Memoria de Programa 1Kx14 tipo Flash 0,5Kx12 tipo EPROM
Memoria de datos 68 bytes tipo RAM
64 bytes tipo
EEPROM
25 bytes tipo RAM
Manejo de interrupciones 4 0
Nmero de lneas de E/S
digitales
13

12
Nmero de temporizadores 2: TMR0 y WDT 2: TMR0 y WDT
INICIO
227
Diferencias entre los microcontroladores
de la gama bsica y los de la media
Despus de programar y utilizar un PIC de la gama bsica, notars que no hay mucha
diferencia en la programacin con respecto a los PICs de la gama media. Algo
importante que debes saber, es que podrs utilizar sin ningn problema el MPLAB para
los PIC de la gama media, tal como se sugiri al ejecutar un programa editado para el
PIC16C54 en un PIC16F84. En otras palabras, si editas un programa para un PIC de la
gama bsica, ste se ejecutar en un PIC de la gama media. Sin embargo, existen
algunas diferencias que debes tomar en cuenta al programar los PIC de la gama media.
En primer lugar la longitud de las palabras de instruccin en los PICs de la gama media
es de 14 bits, en comparacin con los 12 bits de la gama bsica. Esto significa que se
podr obtener ciertas ventajas en la programacin. Por otro lado, los registros TRIS y
OPTION, tendrn una direccin definida, y por lo tanto, las instrucciones asociadas a
ellas cambian. A pesar de que en un programa, estas instrucciones se pueden ensamblar
sin problemas, se recomienda sustituirlas por las instrucciones MOVWF TRISX, donde
X es el puerto que se desea configurar (A, B, etc.) y MOVWF OPTION_REG.
Una ventaja que aparece en el manejo de instrucciones en los microcontroladores de la
gama media, es que ahora se podr acceder directamente a 128 registros de la memoria
RAM con una sola instruccin, sin necesidad de seleccionar bancos de memoria, a
diferencia de los PICs de la gama bsica, en los cuales slo se tena acceso directo a 32
registros de la RAM.
Otra ventaja importante de los PICs de la gama media, es que ahora se cuenta con ocho
niveles de subrutinas, a diferencia de dos en los PICs de la gama bsica.
INICIO
228
6.4 Nuevas instrucciones de los
PICs de la gama media
Es importante considerar que existen cuatro nuevas instrucciones en los PICs de la gama
media. Dos de ellas permiten hacer operaciones aritmticas con valores constantes, y
las otras dos se utilizan para retornos de subrutinas e interrupciones. Si eliminamos las
instrucciones TRIS y OPTION, significa que el conjunto de instrucciones de los
microcontroladores PIC de la gama media suman un total de 35.
Las nuevas instrucciones y el grupo al que pertenecen, se presentan a continuacin:
INSTRUCCIONES ARITMTICAS
ADDLW K ; Suma W con K, donde K es constante y el resultado va a W.
SUBLW K ; Resta K menos W, donde K es un valor constante.
INSTRUCCIONES DE SALTO, se realizan en dos ciclos porque ejecutan un salto
hacia la direccin de retorno.
RETFIE ; Retorno y habilitacin de interrupcin, el PC toma el valor del TOS (Pila)
RETURN ; Retorno de subrutina, el PC toma el valor del TOS (Pila)
Cambios en las INSTRUCCIONES DE CONTROL
OPTION MOVWF OPTION_REG ; Las posiciones de estos registros estn en
TRIS f MOVWF TRISF ; el banco 1 de la RAM (BSF STATUS,RP0)
INICIO
229
6.5- Organizacin de la Memoria
del PIC16F84A
Debido a que los microcontroladores de la gama media tienen una mayor cantidad de
funciones, stas se configuran por medio de registros. Fjate cmo en los
microcontroladores de la gama bsica encontrbamos registros de funciones especiales
para: INDF, TMR0, PCL, STATUS, FSR, PORTA y PORTB; dependiendo del nmero
de terminales, tambin poda aparecer PORTC. Ahora hay que agregar los registros
OPTION, TRISA y TRISB (y otros PORT y otros TRIS segn la cantidad de puertos).
Por otro lado existen otros registros de control, que para el PIC16F84A, se resumen
en la tabla de la pgina siguiente.
En primer lugar, se podr observar la coincidencia con algunas direcciones de los
registros de los microcontroladores de la gama bsica.
En segundo lugar, se puede ver que las posiciones de los registros TRISA y TRISB
estn en las direcciones 85h y 86h respectivamente, por otro lado el registro OPTION
est en la direccin 81h. Mientras los primeros registros mencionados pertenecen al
banco 0 de la memoria RAM, estos ltimos pertenecen al banco 1, es decir, hay que
considerar en las instrucciones, a cul banco se est sealando, ya que en la palabra
de instruccin de los PIC de la gama media, slo podemos acceder de manera directa a
128 posiciones de la RAM. Si estamos en el banco 0, podemos acceder desde la
posicin 00h hasta la 7Fh, y si estamos en el banco 1, desde la posicin 80h hasta la
0FFh. La seleccin del banco se har por medio del bit RP0 del registro STATUS.
Finalmente veremos que hay un grupo de registros que son nuevos para nosotros, y que
sern explicados ms adelante.
INICIO
230
Ubicacin de los registros del
microcontrolador PIC16F84A
INICIO
Banco 0 Banco 1
En la siguiente tabla, se presentan
las direcciones y los nombres
de los registros del
PIC16F84A.
Notas:
(1) Al igual que el PIC16C54, el
registro indirecto INDF, no
corresponde a una posicin
fija en la RAM; al acceder a
ese registro, se lee o escribe
en el registro sealado en la
direccin sealada por el
registro FSR.
(2) Los espacios de la tabla en
color gris, corresponden a
direcciones no implementadas.
231
Asignacin de bits en cada registro
INICIO
Direccin Nombre
Valor despus
de encender
Valor despus
de otra
inicializacin
232
Como en el caso de los microcontroladores de la gama bsica, este registro est
ubicado en la direccin 03h de la memoria de datos, y contiene los bits de estado
de la Unidad Lgica y Aritmtica, el estado de la inicializacin (RESET), y los bits
de seleccin de los bancos de registros de la memoria de datos.
Los bits de STATUS de los PIC de la gama bsica y el PIC16F84A tienen las
mismas funciones, con la excepcin de que los bits de seleccin de pgina en los
microcontroladores de la gama bsica se cambian por los de seleccin de banco de
los registros de la memoria de datos. Observa las diferencias en el tema 3.
6.6- Registro STATUS
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
IRP RP1 RP0 TO PD Z DC C
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin.
Bit 7: IRP: Se utiliza para acceso indirecto 0-> 00h a 0ffh. 1-> 100h a 1ffh
(nota: IRP y RP1 no se utilizan en los PIC16F84, por tanto se hacen iguales a 0).
Bit 6-5: RP1-RP0: Seleccin de banco de la memoria de datos
00 = Banco 0 = (00h - 7Fh)
01 = Banco 1 = (80h - 0FFh)
10 = Banco 2 = (100h - 17Fh) RP1 no se utiliza en los PIC16F84A
11 = Banco 3 = (180h - 1FFh)
INICIO
233
6.7- Manejo de las Interrupciones
en el PIC16F84A
Muchas veces cuando ests desarrollando una actividad, como por ejemplo una tarea
para entregarla al da siguiente, encuentras momentos en que necesitas interrumpir tus
labores, ya sea para comer, para descansar, para atender una llamada telefnica o para
alguna otra cosa. Algo similar ocurre con los programas que se ejecutan en los
microcontroladores. Un programa es una secuencia de instrucciones que ejecutan una
actividad en el microcontrolador. Si ese programa se encarga de leer un dato en
memoria, luego lo muestra en un indicador numrico, y despus vuelve a comenzar, para
que cclicamente ejecute esa actividad, entonces esa actividad podra ser el programa
principal. Supongamos que ese dato que se muestra corresponde a la temperatura de
una habitacin. Si se quiere leer la seal que corresponde a la lectura de temperatura y
llevarla a la posicin de memoria que el programa principal busca y lo lleva al indicador,
se necesitar interrumpir este programa principal por un momento, ejecutar una rutina
de lectura de la seal de temperatura y almacenamiento del dato de temperatura y luego
volver al programa principal en el punto donde fue interrumpido, sin que se pierda los
valores de los registros que utiliza el programa principal, especialmente el registro W, el
registro STATUS y cualquier otro registro que se modifique en la rutina de interrupcin.
INICIO
234
Entonces, se puede definir las interrupciones, como desviaciones del flujo de control del
programa originadas asncronamente mediante diversas causas que pueden ser externas
al sistema, tales como el cambio de nivel de una entrada; o internas, tal como el
desbordamiento en la cuenta de un temporizador.
La manera de ejecutar una interrupcin, es similar al llamado de una subrutina con la
instruccin CALL, ya que se almacena la direccin del PC de la siguiente instruccin a
ejecutar, en el registro PILA, con la diferencia de que en la interrupcin, el programa
salta a una posicin de la memoria de programa llamada vector de interrupcin.
AUTOR: Csar lvarez
DISEO
INSTRUCCIONAL:
M. Snchez y C. lvarez
100
0
20
40
60
80
Programa Principal:
Lee posicin de la memoria
Convierte a 7 segmentos
Escribe valor en el indicador
Interrupcin:
Lee la seal
Convierte a digital
Guarda en memoria
INICIO
235
Fuentes de interrupcin
en el PIC16F84A
En el PIC16F84A, el vector de interrupcin est ubicado en la direccin 4h de la
memoria de programa. Esto significa que en esa posicin comienza la rutina de
interrupcin, y por lo tanto, el programa principal no debera tener nada escrito all.
Debemos considerar lo siguiente acerca de las interrupciones en el PIC16F84A:
Una interrupcin puede ocurrir debido a diversas causas. Para el PIC16F84A estas
causas pueden ser:
Una activacin en la entrada RB0/INT
Un desbordamiento en la cuenta del temporizador 0 (TMR0).
El cambio de estado de uno de los 4 terminales de mayor peso del puerto B.
La finalizacin de la escritura en la EEPROM.
Cuando se atiende una interrupcin, el microcontrolador deshabilita automticamente
cualquier otra interrupcin que pueda ocurrir, al colocarse en 0 el bit GIE del registro
INTCON. Al salir de la rutina de interrupcin, por medio de la instruccin RETFIE se
vuelve a habilitar automticamente la atencin de alguna otra interrupcin.
Las interrupciones se pueden habilitar o deshabilitar por software al escribir un 1 o un
0 en el bit GIE del registro INTCON.
Cada interrupcin se puede habilitar o deshabilitar individualmente segn los bits de
control del registro INTCON.

INICIO
236
El registro INTCON
Control de interrupciones
La mayor parte de las indicaciones de las fuentes de interrupcin y las habilitaciones de
interrupcin, se encuentran en el registro INTCON. En el caso de las habilitaciones de
las interrupciones, un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las
indicaciones, un 1 seala que ocurri el evento, es decir que podr interrumpir si hay
habilitacin y un 0 que no ha ocurrido nada.
GIE. Habilitacin global de interrupciones. Si GIE = 0 no se acepta ninguna de las
interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas.
EEIE. Habilitacin de interrupcin por finalizacin de la escritura en la EEPROM.
T0IE. Habilitacin de interrupcin por desbordamiento de TMR0 (Temporizador 0).
INTE. Habilitacin de interrupcin por la activacin del terminal RB0/INT.
RBIE. Habilitacin de interrupcin por cambio de estado en RB7, RB6, RB5 RB4.
T0IF. Indicador de un desbordamiento en TMR0.
INTF. Indicador de la activacin en el terminal RB0/INT.
RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 RB4.
INICIO
INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
237
Guardar W y STATUS en
la rutina de interrupcin
En el momento de ejecutar una rutina de interrupcin, es sumamente importante
guardar los registros W y STATUS, adems de algn otro que pueda ser utilizado en
el programa principal y que la rutina de interrupcin los modifique.
En los PICs de la gama media esta labor no es tan directa como en otros
microcontroladores, los cuales utilizan las instrucciones PUSH y POP. Aqu hay que
tomar en cuenta el banco seleccionado por la RAM en el programa principal, el cual al
interrumpir al microcontrolador, no sabemos cul est seleccionado. En el caso del
PIC 16F84A, los registros de propsitos generales que se acceden en el banco 0,
corresponden a la misma direccin en el banco 1, de esta manera bastara con salvar
los registros W y STATUS como se muestra a continuacin:

Rut_interr movwf W2 ; se guarda el valor de w en W2.
swapf STATUS,w ; se utiliza esta instruccin, ya que movf afecta al bit Z de STATUS
movwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados
; Se ejecuta la rutina de interrupcin


swapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posicin original
movwf STATUS
swapf W2,f ; se toma el valor de W2 con los nibbles intercambiados
swapf W2,w ; se recupera el valor de w.
retfie ; Retorno de la interrupcin

INICIO
238
Ejemplo de interrupcin
por TMR0
include "P16F84A.INC" ; Incluye los smbolos del PIC16F84A
; Definicin de smbolos, tales como: segundo, minuto, hora, da, etc.
org 0 ; Direccin inicial del programa en el microcontrolador
goto prepara ; En prepara se establece la seleccin de TMR0, interrupciones, puertos, etc.
org 4 ; Direccin donde comienza la rutina de interrupcin
interrupt btfsc INTCON,T0IF ; Evala si la interrupcin fue del TMR0
goto tmr0full ; si es 1 atiende rutina de TMR0
btfsc eecon1,eeif ; Evala si la interrupcin fue de la EEPROM

tmr0full movwf W2 ; se guarda el valor de w en W2, para recuperarlo al retorno
swapf STATUS,w
movwf STATUS2 ; Se guarda el STATUS en STATUS2, para luego recuperarlo
movlw d'61
movwf TMR0 ; carga el valor 61 decimal para que se ejecuten 195 ciclos de tmr0
incf segundo,f ; Se incrementan los segundos
call ajuste ; En ajuste se cambia los incrementos a la bases numricas adecuadas
swapf STATUS2,w ; se recupera el valor del STATUS
movwf STATUS
swapf W2,f
swapf W2,w ; se recupera el valor de w
bcf INTCON,T0IF ; se borra el bit de interrupcin de TMR0
retfie ; Se regresa al programa principal. En la rutina ajuste, se pueden hacer
; todos los ajustes para llevar la cuenta del tiempo real
prepara movlw b'00000110 ; Seleccin del preescalador a TMR0 y divisin por 128
movwf TMR0 ; Se carga a TMR0 con un valor diferente de 0 0FF para no interrumpir an
bsf STATUS,RP0 ; Selecciona banco 1 para acceder a los registros OPTION y TRIS
movwf REG_OPTION ; Carga al registro OPTION la configuracin
movlw b11100000 ; Se habilita interrupcin global, la de TMR0 y la EEPROM
movwf INTCONT ; Despus de esta instruccin, contina otras inicializaciones y el programa
movlw bxxxxxxxx ; Palbra de configuracin del puerto A
movwf TRISA ; Configura puerto A
INICIO
239
6.8- La memoria EEPROM
En muchos equipos se hace necesario el uso de datos que deben mantener su valor
despus de haber quitado la energa del circuito. Un ejemplo de esto lo podemos ver
en equipos que necesiten calibracin. En estos equipos el ajuste de ciertos parmetros
se puede hacer por medio de resistencias ajustables o potencimetros, los cuales
pueden utilizarse para la calibracin del cero, la ganancia, la linealidad, los parmetros
de control y algunos otros ms. Si se dispone de una memoria que mantenga los datos
despus de apagarse el equipo, estos potencimetros se hacen innecesarios, ya que
estos factores de ajuste se pueden grabar en esta memoria y ser llamados por medio
de un simple programa que aproveche stas y otras constantes para poder introducirlas
en ecuaciones matemticas que compensen las calibraciones. Esto supone una reduccin
del espacio en el circuito; una mayor seguridad para la realizacin de los ajustes, ya
que se puede incluir una clave secreta que tambin puede ser grabada en la EEPROM
para la solicitud del ajuste; tambin se puede lograr ajustes con mucha mayor
precisin y en un tiempo mucho ms corto.
El uso de una EEPROM tiene semejanzas con el de la RAM; sin embargo, hay que
tomar en cuenta algunas consideraciones que se mencionarn a continuacin:
El tiempo de escritura de una EEPROM est en el orden de los 10mSeg.
El nmero de grabaciones en la EEPROM est limitado entre 10
5
y 10
7
veces.
Se debe utilizar un cdigo especial para la grabacin de datos, para evitar el
borrado accidental de la EEPROM en el momento de quitarle la alimentacin.
INICIO
240
Explicacin de los registros
relacionados con la EEPROM
Para acceder a las direcciones de la EEPROM en el PIC16F84A, se deber utilizar los
registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 08h y 09h en el
banco 0 y, 88h y 89h en el banco 1 respectivamente.
EEADR: Es el registro de 8 bits que tiene la direccin del dato de la EEPROM. El
PIC16F84, slo puede acceder a 64 bytes de la EEPROM, por lo tanto estas direcciones
estn comprendidas desde la direccin 0h hasta la 3Fh.
EEDATA: Es el registro de 8 bits en el cual se escribe o se lee el valor del dato a
guardar en la EEPROM en la direccin que est en el registro EEADR.
EECON1: Este registro contiene los bits de control de las operaciones en la EEPROM:
RD, Bit 0 (Lectura). Se escribir 1 cuando se va a realizar un ciclo de lectura
de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0.
WR, Bit 1 (Escritura). Se enviar 1 cuando se va a realizar un ciclo de escritura
de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0.
WREN, Bit 2 (Habilitacin de escritura). Si se escribe 1, se permitir la
escritura de la EEPROM. Si se coloca 0, no permitir la escritura en la EEPROM.
WRERR, Bit 3 (Indicador de error). Se lee un 1 si hubo error en la escritura
debido a una inicializacin del PIC. Un 0 indicar que la operacin se hizo
correctamente.
EEIF, Bit 4 (Indicador de finalizacin de escritura). Un 1 indicar que se
complet el ciclo de escritura. Se deber colocar en 0 por medio del programa.
EECON2: En este registro se coloca una secuencia clave para evitar grabaciones
accidentales.

INICIO
241
Escribir un dato en la EEPROM
El registro EECON2 se utiliza para colocar el cdigo de control en la escritura de datos
de la EEPROM y evitar una grabacin accidental de la misma. Para ello, despus de
habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deber
escribir en EECON2 el cdigo 55h y luego el cdigo AAh; finalmente, para grabar el dato
que est en el registro EEDATA en la direccin marcada por el registro EEADR que fija la
direccin de la EEPROM, se deber escribir un 1 en el bit WR del registro ECON1. Un
programa propuesto que realiza la escritura de un byte en la EEPROM es el que se
presenta a continuacin:
BCF STATUS, RP0 ; En el banco 0 estn los registros EEADR y EEDATA
MOVLW DIRECCION ; DIRECCION indica la posicin donde se guardar
MOVWF EEADR ; el dato en la EEPROM
MOVLW DATO ; DATO es el valor que ir a la EEPROM
MOVWF EEDATA ;
BSF STATUS, RP0 ; Selecciona banco 1 de la RAM
BCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROM
BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura
. BSF EECON1, WREN ; Habilita escritura en la EEPROM
MOVLW 55h ;
MOVWF EECON2 ; Escribe cdigo 55h en EECON2
MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental-
MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2
BSF EECON1,WR ; Comienza la grabacin del dato
BSF INTCON,GIE ; Habilitacin global de interrupciones
INICIO
242
Lectura de un dato en la EEPROM
Durante la seccin del programa que escribe en la EEPROM se recomienda deshabilitar las
interrupciones para que el proceso de escritura se realice correctamente. Despus de
iniciarse el proceso de escritura de la EEPROM, se podr habilitar las interrupciones por
medio de la instruccin BSF INTCON, GIE. En la escritura de la EEPROM el bit WR
de EECON1 se colocar en 0 automticamente. T podrs determinar cundo termina el
ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Despus de esto se
deber colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM.
Trata de volver a escribir el programa anterior como una rutina, de manera que la
direccin y el dato provengan de registros y no de valores constantes.
Para leer un dato en la EEPROM se podr utilizar la seccin de programa que se muestra
a continuacin:
BCF STATUS, RP0 ; Selecciona banco 0 para EEADR
MOVLW DIR_LECT ; Direccin de lectura en W
MOVWF EEADR ; Direccin de lectura en EEADR
BSF STATUS, RP0 ; Selecciona banco 1 para EECON1
BSF EECON1, RD ; Lectura de la EEPROM
BCF STATUS, RP0 ; Selecciona banco 0 para EEDATA
MOVF EEDATA, W ; Coloca dato ledo de EEPROM en W
Una buena prctica para escribir un dato en la EEPROM, consiste en verificar si ese dato
ha sido grabado correctamente mediante la lectura del dato escrito y comparacin con l
mismo por medio de una resta y al evaluar el bit Z del registro STATUS.
INICIO
243
Vimos que en los PIC16C5X los 8 bits de menos peso del contador de programa
ocupan la posicin 2h de la memoria RAM, y los bits de mayor peso se dividen en
pginas y se encuentran en el registro STATUS. En el caso de los PICs de la
gama media los bits de mayor peso estn en los 5 bits de menor peso del registro
PCLATCH que est ubicado en la posicin 0Ah u 8Ah. Debido a que el PIC16F84A
slo tiene acceso a 1024 direcciones de la memoria de programa (000h a 3FFh), se
necesitan 10 bits, de los cuales son efectivos los ocho del PCL y los dos bits
menos significativos del PCLATCH.
En las instrucciones GOTO y CALL se incluyen 11 bits para cargar la direccin del
PC, por tanto se puede tener acceso a 2048 posiciones. Como la capacidad del
PIC16F84A es 1024 bits no tiene sentido hacer divisiones por pginas.
6.9 Registro contador de programa
PIC16F84
12 11 10 9 8 7
0
PC PCL
Palabra de Instruccin
2
7 4
PCLATCH 4-3
PCLATCH
0
11
INICIO
244
Para aquellas instrucciones donde el PCL es el destino, en los bits 7 a 0 del PC se
obtienen del cdigo de la instruccin. Los bits superiores provienen del PCLATCH.
Algunas de las instrucciones donde el PCL es el destino, o se le modifica el
contenido, son: MOVWF PCL; ADDWF PCL; BSF PCL, 5; etc. Recuerda que la
direccin del PCL es la 2h

PIC16F84
12 11 10 9 8 7
0
PC PCL
Resultado de la ALU
5
7
PCLATCH
4-0
PCLATCH
0
INICIO
El vector de inicializacin del PIC16F84A est en la direccin 3FFh, esto significa
que la primera instruccin del programa se debe colocar en esa direccin.
245
El registro STACK guarda las direcciones de retorno de las rutinas que se llaman
por medio de la instruccin CALL o una interrupcin, y carga la direccin de retorno
al PC con la instruccin RETLW, RETURN o RETFIE. la longitud de palabra de la
pila es la misma que la del PC. La pila tiene ocho niveles, a diferencia de los dos
niveles que tienen los microcontroladores de la gama bsica:

Una instruccin CALL o una llamada de interrupcin coloca el contenido del nivel 7
de la pila, en el nivel 8, el nivel 6 lo coloca en el 7 y as sucesivamente hasta
colocar el valor del contador del programa actual, incrementando en uno, en el nivel
1 de la pila. Si se llama a ms de ocho subrutinas en una misma secuencia,
nicamente las direcciones de las ocho ms recientes sern almacenadas.

Una instruccin RETLW, RETURN o RETFIE cargar el contenido del nivel 1 de la
pila al PC y el del nivel 2 al nivel 1 y as sucesivamente, hasta colocar el nivel 8 al
7. Si ms de ocho instrucciones entre RETLW, RETURN o RETFIE se ejecutan, la
pila se llenar con la direccin almacenada previamente en el nivel 8.
6.10 Registro STACK (pila)
INICIO
246
6.11 Los Temporizadores y
algo ms de PORTB
El PIC16F84A, utiliza, al igual que los PIC de la gama bsica el temporizador TMR0 y
el WDT, los cuales, a su vez se programan segn el registro OPTION.
El registro OPTON del PIC16F84 agrega 2 bits que en los PIC de la gama bsica no
estn asignados. stos son: RBPO# (Bit 7) y INTEDEG (Bit 6). Si RBPO# = 0,
conecta resistencias de valor alto a Vdd (Pull up). En el caso de INTEDEG, ste
determina el tipo de transicin que llevar la interrupcin externa (RB0): 1=>
Transicin de subida, 0=> Transicin de bajada.
Los circuitos asociados a estos temporizadores son iguales a los de los PIC de la gama
bsica, con la diferencia de que si se utiliza el TMR0 como temporizador, la entrada
RA4/TOCKI se convierte en una lnea adicional del puerto A.
En el caso de los PIC16F84A la ubicacin del registro OPTION, en la memoria de
datos, se encuentra en la posicin 81H (banco 1).
Una posibilidad que ofrece los PIC de la gama media, es que cuando se detecta un
desbordamiento en el contador, se genera una seal de interrupcin, la cual se puede
verificar en el bit TOI, el cual es el bit 2 del registro INTCON. Esta interrupcin se
habilita al colocar un 1 al bit TOIE, que es el bit 5 del registro INTCON
Si deseas repasar el tema de los temporizadores de los PIC de la gama bsica,
selecciona el men siguiente:
TMR0
WDT
OPTION INTCON
INICIO
247
6.12 Los Bits de Configuracin
Al igual que los PICs de la gama bsica, los bits de configuracin del PIC16F84A se
acceden slo en el momento de grabar el programa en el microcontrolador.
Los bits de configuracin WDT, FOSC1 y FOSC0 del PIC 16F84 coinciden en lgica y
posicin con los de los PICs de la gama bsica (Repasar). En el caso del bit de
proteccin de programa, ste trabaja de la misma manera en ambos casos, pero la
lgica es invertida y la ubicacin es diferente, es decir que en el PIC16F84A este bit
se ubica en la posicin 4 de la palabra de configuracin y un 1 indicar que el
dispositivo no estar protegido, y un 0 indicar que no ser posible leer el contenido
del programa ni los datos de la EEPROM.
Finalmente el PIC16F84A tiene adicionalmente el bit PWRTE#, el cual, con un 0
activa un retardo en el reinicio por 72 ms. Este bit ocupa la posicin 3 en la palabra
de configuracin.

Palabra de Configuracin en el PIC16F84A:
CP CP CP CP CP CP CP CP PWRTE
WDTE FOSC0 FOSC1
Bit 11 10 9 8 7 6 5 4 3 2
1 Bit 0
INICIO
248
TEMA VII
MICROCONTROLADORES DE LA SERIE
PIC16F87X
E 7.1 Generalidades
E 7.2 La familia PIC16F87X
E 7.3 Registros de funciones especiales
E 7.4 Las interrupciones de los PIC16F87X
E 7.5 Las Memorias EEPROM y FLASH
E 7.6 El Puerto A, el Puerto E y el Convertidor A/D
E 7.7 El Puerto B
E 7.8 El Puerto C y los Temporizadores
E 7.9 El Puerto C y los mdulos de Captura, Comparacin y PWM
E 7.10 El Puerto C y el Mdulo de Comunicacin Serial Sncrona
E 7.11 El Puerto C y la Comunicacin I2C
E 7.12 El Puerto C y el USART
E 7.13 El Puerto D, el Puerto E y la Interfaz Paralela
E 7.14 Palabra de Configuracin


INICIO
249
Objetivos Terminales:

Establecer las diferencias de
hardware entre el
microcontrolador PIC16F84A y
los PIC16F87X
Describir las caractersticas de
los PIC16F87X
Explicar el uso de las
interrupciones en los
PIC16F87X
Describir cada uno de los
mdulos de hardware de los
PIC16F87X
Disear circuitos con
microcontroladores PIC16F87X
INICIO
250
7.1 Generalidades de
los PIC16F87X
INICIO
En el tema anterior hemos visto al PIC16F84A, con el cual nos iniciamos a los
microcontroladores PIC de la gama media. Qued todo bien claro? Es importante que lo
hayas comprendido todo bien hasta ahora, para continuar con los PIC16F87x. Estos
microcontroladores presentan una serie de caractersticas que permiten una mayor
versatilidad en un sinnmero de aplicaciones. Estas caractersticas se pueden resumir en
las siguientes:
* Mayor capacidad de memoria RAM y EEPROM.
* Manejo de hasta 14 fuentes de interrupcin.
* Lneas de entrada y salida adicionales.
* Dos temporizadores adicionales: TMR1 y TMR2.
* Mdulos de captura, comparacin y modulador de ancho de pulsos.
* Convertidor Analgico a Digital de 10 bits para varias entradas.
* Mdulos de comunicacin serial.
* Los modelos de 40 terminales tienen un mdulo de comunicacin paralela.

Todas estas caractersticas colocan a los PIC16F87X como la familia de
microcontroladores de la gama media de mayor cantidad de recursos, y que obviamente se
presentan como soluciones a una gran diversidad de desarrollos.
251
7.2 La familia de los PIC16F87X
INICIO
Anteriormente ya habamos presentado a la familia de los PIC16F87X. Conviene
volverlos a mostrar, y esta vez observa mejor las caractersticas que presentan cada
uno de sus miembros y la comparacin con el PIC16F84A:
Microcontrolador PIC16F84 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877
FLASH
(Programa)
1Kx14 2K x 14 2K x 14 2K x 14 4K x 14 4K x 14 8K x 14 8K x 14
RAM
(Datos)
64 bytes 128 bytes 128 bytes 128 bytes 192 bytes 192 bytes 368 bytes 368 bytes
EEPROM
(Datos
permanentes)
64 bytes 64 bytes 64 bytes 64bytes 128 bytes 128 bytes 256 bytes 256 bytes
Puertos A,B A, B, C A,B,C,D,E A, B, C A, B, C A,B,C,D,E A, B, C A,B,C,D,E
Entradas
Analgicas
No 5 canales 8 canales 5 canales 5 canales 8 canales 5 canales 8 canales
Captura,
Comparacin y
Modulador de
ancho de pulso
No 1 1 1 2 2 2 2
Puerto serial
No AUSART AUSART M
2
CSPI AUSART/
M
2
CSPI
AUSART/
M
2
CSPI
AUSART/
M
2
CSPI
AUSART/
M
2
CSPI
Temporizadores 1-8bits,
WDT
1-16bits
2-8bits, WDT
1-16bits,
2-8bits,WDT
1-16bits,
2-8bits, WDT
1-16bits,
2 8bits, WDT
1-16bits,
2-8bits, WDT
1-16bits,
2-8bits, WDT
1-16bits
2-8bits, WDT
252
Conexiones de los PIC16F870/72/73/76
INICIO
253
Conexiones de los PIC16F871/74/77
INICIO
254
7.3 Registros de
funciones especiales
INICIO
Sabemos que las instrucciones de los microcontroladores PIC16F87X, son las mismas
que las del PIC16F84, ya que todos pertenecen a la gama media. Sin embargo, para la
programacin se hace necesario conocer los nuevos registros de funciones especiales
que ofrecen los PIC16F87X con sus caractersticas mejoradas. Estos registros se
ubican en la memoria RAM del microcontrolador. Recordemos que para acceder a una
posicin de la RAM, contamos con 7 bits en la palabra de instruccin, que corresponden
directamente a 128 posiciones. Para seleccionar un banco de la memoria RAM se
cuenta con los bits RP1 y RP0 que se ubican en el registro STATUS. En el caso del
PIC16F84 slo se puede modificar el bit RP0, y por consiguiente, nicamente se puede
acceder a dos bancos de la RAM. En el caso de los PIC16F87X, podemos acceder a 4
bancos de la RAM.
Los registros de funciones especiales los podemos ubicar en las tablas de las pginas
siguientes, no hace falta que te lo aprendas todava, despus lo analizaremos con ms
detalle. En ellas encontraremos a los siguientes microcontroladores:
PIC16F870 y PIC16F871
PIC16F872
PIC16F873 y PIC16F874
PIC16F876 y PIC16F877
Bits de los registros de Funciones especiales
255
PIC16F870 y 871
Banco 0 Banco 1 Banco 2 Banco 3
En la siguiente tabla, se presentan
las direcciones y los nombres
de los registros de los
PIC16F870 y PIC16F871.
Notas:
(1) El registro indirecto INDF, no
corresponde a una posicin fija
en la RAM; al acceder a ese
registro, se lee o escribe en el
registro sealado en la
direccin indicada por el
registro FSR.

(2) Los espacios de la tabla en color
gris, corresponden a direcciones
no implementadas.

(3) El PIC16F870 no tiene los puertos
D y E ni los registros TRIS
correspondientes.

INICIO
256
PIC16F872
Banco 0 Banco 1 Banco 2 Banco 3
INICIO
En la siguiente tabla, se presentan
las direcciones y los nombres
de los registros del
PIC16F872.
Notas:
(1) El registro indirecto INDF, no
corresponde a una posicin fija
en la RAM; al acceder a ese
registro, se lee o escribe en el
registro sealado en la
direccin indicada por el
registro FSR.

(2) Los espacios de la tabla en color
gris, corresponden a direcciones
no implementadas.

257
PIC16F873 y 874
Banco 0 Banco 1 Banco 2 Banco 3
INICIO
En la siguiente tabla, se presentan
las direcciones y los nombres
de los registros de los
PIC16F873 y PIC16F874.
Notas:
(1) El registro indirecto INDF, no
corresponde a una posicin fija
en la RAM; al acceder a ese
registro, se lee o escribe en el
registro sealado en la
direccin indicada por el
registro FSR.

(2) Los espacios de la tabla en color
gris, corresponden a direcciones
no implementadas.

(3) El PIC16F873 no tiene los puertos
D y E ni los registros TRIS
correspondientes.

258
PIC16F876 y 877
Banco 0 Banco 1 Banco 2 Banco 3
INICIO
En la siguiente tabla, se presentan
las direcciones y los nombres
de los registros de los
PIC16F876 y PIC16F877.
Notas:
(1) El registro indirecto INDF, no
corresponde a una posicin fija
en la RAM; al acceder a ese
registro, se lee o escribe en el
registro sealado en la
direccin indicada por el
registro FSR.

(2) Los espacios de la tabla en color
gris, corresponden a direcciones
no implementadas.

(3) El PIC16F876 no tiene los puertos
D y E ni los registros TRIS
correspondientes.

259
Bits de los Registros de
Funciones Especiales (Banco 0)
INICIO
260
Bits de los Registros de
Funciones Especiales (Banco 1)
INICIO
261
Bits de los Registros de
Funciones Especiales (Bancos 2 y 3)
INICIO
262
Diferencias entre los registros de
funciones especiales de los PIC16F87X
Los PIC16F87X tienen ms registros de funciones especiales que el PIC16F84. En la
siguiente tabla, podemos observar aquellos registros diferentes entre ellos, sus
respectivas ubicaciones y a qu funcin est asociada:
INICIO
Funciones asociadas Registro PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877
PORTD ----- 08h ----- ----- 08h ----- 08h
Puerto TRISD ----- 88h ----- ----- 88h ----- 88h
Paralelo PORTE ----- 09h ----- ----- 09h ----- 09h
TRISE ----- 89h ----- ----- 89h ----- 89h
SSPBUF ----- ----- 13h 13h 13h 13h 13h
Mdulo de SSPCON ----- ----- 14h 14h 14h 14h 14h
Comunicacin SSPCON2 ----- ----- 91h 91h 91h 91h 91h
Serial SSPADD ----- ----- 93h 93h 93h 93h 93h
Sncrona SSPSTAT ----- ----- 94h 94h 94h 94h 94h
RCSTA 18h 18h ----- 18h 18h 18h 18h
Puerto TXTA 98h 98h ----- 98h 98h 98h 98h
de Comunicacin TXREG 19h 19h ----- 19h 19h 19h 19h
Serial Universal SPBRG 99h 99h ----- 99h 99h 99h 99h
USART RCREG 1Ah 1Ah ----- 1Ah 1Ah 1Ah 1Ah
Segundo mdulo CCPR2L ----- ----- ----- 1Bh 1Bh 1Bh 1Bh
de Comparacin, CCPR2H ----- ----- ----- 1Ch 1Ch 1Ch 1Ch
Captura y PWM CCP2CON ----- ----- ----- 1Dh 1Dh 1Dh 1Dh
263
7.4 Las Interrupciones de
los PIC16F87X
Los microcontroladores PIC de la serie 16F87X de 28 terminales tienen 13 fuentes
de interrupcin, y los de 40 terminales tienen 14 fuentes de interrupcin. Esta
cantidad de fuentes de interrupcin obedece a que estos microcontroladores cuentan
con ms perifricos que el PIC16F84. Entre ellos podemos nombrar: El convertidor
analgico a digital, el mdulo de comparacin, captura y modulador de ancho de pulso
(PWM), el mdulo de comunicacin serial y el mdulo de comunicacin paralela.
Los registros asociados a las interrupciones son los siguientes:
Registro Funcin Direcciones
INTCON Habilitacin y sealizado de interrupciones 0 0BH, 8BH, 10BH, 18BH
PIE1 Habilitacin de Interrupciones 1 8CH
PIE2 Habilitacin de Interrupciones 2 8DH
PIR1 Indicador de Interrupciones 1 0CH
PIR2 Indicador de Interrupciones 2 0DH
Bsicamente estos registros contienen los bits que permiten o no las interrupciones
en el microcontrolador (registros INTCON, PIE1 y PIE2) y los bits que se
establecen cuando se genera una interrupcin (registros INTCON, PIR1 y PIR2). El
registro INTCON es similar al del PIC16F84, con la diferencia de que se sustituye
la habilitacin de la escritura de la EEPROM por la de habilitacin de los dispositivos
que no estn en INTCON. Esto se podr ver mejor en la siguiente pgina.
INICIO
264
El registro INTCON
Control de interrupciones
El registro INTCON contiene algunas de las indicaciones de las fuentes de interrupcin y
las habilitaciones de interrupcin. En el caso de las habilitaciones de las interrupciones,
un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las indicaciones, un 1
seala que ocurri el evento, es decir que podr interrumpir si hay habilitacin y un 0 que
no ha ocurrido nada. Los bits del registro INTCON son:



GIE. Habilitacin global de interrupciones. Si GIE = 0, no se acepta ninguna de las
interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas.
PEIE. Habilitacin de interrupciones de dispositivos que no se controlan con INTCON.
T0IE. Habilitacin de interrupcin por desbordamiento de TMR0 (Temporizador 0).
INTE. Habilitacin de interrupcin por la activacin del terminal RB0/INT.
RBIE. Habilitacin de interrupcin por cambio de estado en RB7, RB6, RB5 RB4.
T0IF. Indicador de un desbordamiento en TMR0.
INTF. Indicador de la activacin en el terminal RB0/INT.
RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 RB4.
INICIO
INTCON (Acceso a todos los bancos por medio de la direccin 0BH)
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
265
Registro PIE1
BIT Funcin
PSPIE Habilitacin de interrupcin para escritura o lectura de la interfaz paralela
ADIE Habilitacin de interrupcin para indicar la finalizacin de una conversin A/D
RCIE Habilitacin de interrupcin que indica que se recibi un dato en del USART
TXIE Habilitacin de interrupcin que indica que se envi un dato desde el USART
SSPIE Habilitacin de interrupcin para el puerto serial sncrono
CCP1IE Habilitacin de interrupcin para CCP1 al producirse una captura o comparacin
TMR2IE Habilitacin de interrupcin para un desbordamiento del TMR2
TMR1IE Habilitacin de interrupcin para un desbordamiento del TMR1
PIE1 (8CH)
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
INICIO
El registro PIE1 contiene 8 bits que se utilizan para la habilitacin de ocho de las
interrupciones de los PIC16F87X.
266
Registro PIE2
BIT Funcin
EEIE Habilitacin de interrupcin para finalizacin de escritura en la EEPROM
BCLIE Habilitacin de interrupcin para indicar colisin de datos en el bus SSP
CCP2IE Habilitacin de interrupcin para CCP2 al producirse una captura o comparacin
PIE2 (8DH)
--- 0 --- EEIE BCLIE --- --- CCP2IE
bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0

(1) Este bit es reservado y deber mantenerse en 0
INICIO
El registro PIE2 contiene 3 bits que se utilizan para la habilitacin de tres de las
interrupciones de los PIC16F87X.
267
Registro PIR1
BIT Funcin
PSPIF Aviso de interrupcin por escritura o lectura de la interfaz paralela
ADIF Aviso de interrupcin para indicar la finalizacin de una conversin A/D
RCIF Aviso de interrupcin para indicar que indica que se recibi un dato en del USART
TXIF Aviso de interrupcin para indicar que indica que se envi un dato desde el USART
SSPIF Aviso de interrupcin por el puerto serial sncrono
CCP1IF Aviso de interrupcin por CCP1 al producirse una captura o comparacin
TMR2IF Aviso de interrupcin por un desbordamiento del TMR2
TMR1IF Aviso de interrupcin por un desbordamiento del TMR1
PIR1 (0CH)
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
INICIO
El registro PIR1 contiene 8 bits que se utilizan para la indicacin de ocho de las
interrupciones de los PIC16F87X.
268
Registro PIR2
BIT Funcin
EEIF Aviso de interrupcin por finalizacin de escritura en la EEPROM
BCLIF Aviso de interrupcin para indicar colisin de datos en el bus SSP
CCP2IF Aviso de interrupcin por CCP2 al producirse una captura o comparacin
PIR2 (0DH)
--- 0 --- EEIF BCLIF --- --- CCP2IF
bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0


(1) Este bit es reservado y deber mantenerse en 0

INICIO
El registro PIR2 contiene 3 bits que se utilizan para la indicacin de tres de las
interrupciones de los PIC16F87X.
269
Salvando los registros W y STATUS
al atender una interrupcin
Hay que tener un especial cuidado cuando se manejan las interrupciones, sobretodo
para recuperar el contenido de los registros W y STATUS en el programa principal, ya
que de lo contrario se pierde el control del programa. En los microcontroladores de la
serie PIC16F87X, encontramos que existen cuatro bancos de la memoria RAM, y si el
programa principal est accediendo a uno de ellos, en una interrupcin podramos
cambiar el acceso a otro banco de la RAM. El reto est en recuperar los valores de
W y STATUS que tena el programa principal antes de la interrupcin.
Si observamos los bancos de memoria en los PIC16F870, 871, 872, 876 y 877; se
puede ver que los registros ubicados en la parte final de cada banco, se acceden por
medio de las direcciones 70h hasta la 7Fh. Por lo tanto lo que tenemos que hacer, es
que en una interrupcin se salven W y STATUS en uno de esos registros:

Rut_interr ; Las direcciones de W2 y STATUS2 deben estar entre 70h y 7Fh
movwf W2 ; se guarda el valor de w en W2.
swapf STATUS,w ; se utiliza esta instruccin, ya que movf afecta al bit Z de STATUS
movwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados
; Se ejecuta la rutina de interrupcin
; Al final de la interrupcin se escribe lo siguiente
swapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posicin
movwf STATUS ; original, ya que se haba guardado con los nibbles intercambiados
swapf W2,f ; se toma el valor de W2 con los nibbles intercambiados
swapf W2,w ; se recupera el valor original de w.
retfie ; Retorno de la interrupcin


INICIO
270
En el caso de los
PIC16F873 y PIC16F874
En los PIC16F873 y 874, no encontramos registros que se acceden en los cuatro
bancos, sino en el 0 y 2 en el 1 y 3. Es decir que con el control de RP0, podemos
guardar y recuperar W y STATUS. Guardar W y STATUS se hace ms complejo que
en los otros PIC16F87X, y se sugiere hacerlo como se presenta a continuacin:

Push btfss STATUS,RP0 ; Chequea si el programa principal seala al banco 0
goto rp0_en_0
bcf STATUS,RP0 ; Si no estaba, selecciona el banco 0 para guardar
movwf W2 ; w y STATUS
swapf STATUS,w
movwf STATUS2
bsf STATUS2,1 ; Ntese que se cambia el bit guardado que corresponde
goto rutint ; a RP0, que pas de la posicin 5 a 1 con el swapf
rp0_en_0 movwf W2 ; Si el programa principal seala el banco 0 no se
swap STATUS,w ; realizan modificaciones
movwf STATUS2
rutint ; Rutina de interrupcin

pop swapf STATUS2,w
movwf STATUS ; se recupera el status, pero como pudo haber cambiado
btfss STATUS,RP0 ; RP0, se chequea para recuperar correctamente a W2
goto recup_w ; en el banco 0
bcf STATUS,RP0
swap W2,f
swap W2,w
bsf STATUS,RP0 ; se coloca como estaba RP0 en el programa principal
retfie
recup_w swapf W2,f ; si RP0 era 0, no se hace cambios y se recupera w
swapf W2,w
retfie
INICIO
271
Actividades
Ya hemos visto cmo funcionan las interrupciones, y cmo hacer un programa para
salvar los registros W y STATUS cuando se atiende una interrupcin. Debes
considerar siempre estos programas que se han mostrado anteriormente, por tanto te
recomendamos que los escribas, o los copies, y lo guardes en tus archivos personales
de tus programas.
Por los momentos, no te proponemos alguna otra actividad. Pensamos que
comprenders mejor acerca del manejo de interrupciones, a medida que vayas
conociendo cada mdulo de los PIC16F87X, los cuales vers, poco a poco en las
siguientes secciones.
Recuerda que es importante que sepas que bsicamente en el manejo de las
interrupciones, cuentas con bits que te habilitan o no cada una de las interrupciones,
y que adems puedes acceder a los bits que te avisan cul fue la interrupcin que se
gener mientras se ejecutaba el programa principal.
INICIO
272
7.5 Las Memorias
EEPROM y FLASH
En los PIC16F87X, se pueden escribir o leer datos, tanto en la EEPROM, como en la
memoria FLASH. Para escribir o leer la EEPROM, bsicamente se ejecutan los mismos
pasos que con el PIC16F84, con la diferencia de que en los PIC16F87X hay que
colocar en 0 el bit EEPGD (bit 7) del registro EECON1 (direccin 18CH), para
seleccionar la EEPROM. Para leer o escribir la memoria FLASH necesitaremos que los
registros de direccin y de datos tengan mayor longitud, porque la FLASH es de 14
bits de contenido, y entre 11 y 13 bits de direccin. Por lo tanto se agregarn los
registros EEADRH, para los bits ms significativos de la direccin, y EEDATAH, para
los bits ms significativos del contenido a grabar en la FLASH.
La escritura en la FLASH puede protegerse por reas o totalmente, por medio de los
bits de configuracin. Estos bits se acceden en el momento de grabar el programa, al
utilizar un programador de microcontroladores.
INICIO
273
Registros asociados para la lectura y
escritura de la EEPROM y la FLASH
En la siguiente tabla se presentan los registros asociados para la lectura y escritura
de las memorias EEPROM y la FLASH.
Direccin Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor en POR
y BOR
Otros
Resets
0BH (todos
los bancos)
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10DH EEADR Registro Direccin EEPROM y la FLASH xxxx xxxx uuuu uuuu
10FH EEADRH ---- ---- ---- Direccin Alta de la FLASH xxxx xxxx uuuu uuuu
10CH EEDATA Registro de Dato de la EEPROM y la FLASH xxxx xxxx uuuu uuuu
10EH EEDATAH ---- ---- Dato Alto de la FLASH xxxx xxxx uuuu uuuu
18CH EECON1 EEPGD ---- ---- ---- WRERR WREN WR RD x--- x000 x--- u000
18DH EECON2 Registro de control de la EEPROM y la FLASH
8DH PIE2 ---- 0 ---- EEIE BCLIE ---- ---- CCP2IE -r-0 0--0 -r-0 0--0
0DH PIR2 ---- 0 ---- EEIF BCLIF ---- ---- CCP2IF -r-0 0--0 -r-0 0--0
INICIO
274
Explicacin de los registros
relacionados con la EEPROM
Para acceder a las direcciones de la EEPROM en los PIC16F87X, se deber utilizar los
registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 10Ch y 10Dh en
el banco 2, y 18Ch y 18Dh en el banco 3 respectivamente.
EEADR: Es el registro de 8 bits que tiene la direccin del dato de la EEPROM.
EEDATA: Es el registro de 8 bits en el cual se escribe o se lee el valor del dato a
guardar en la EEPROM en la direccin que est en el registro EEADR.
EECON1: Este registro contiene los bits de control de las operaciones en la EEPROM:
RD, Bit 0 (Lectura). Se escribir 1 cuando se va a realizar un ciclo de lectura
de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0.
WR, Bit 1 (Escritura). Se enviar 1 cuando se va a realizar un ciclo de escritura
de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0.
WREN, Bit 2 (Habilitacin de escritura). Si se escribe 1, se permitir la
escritura de la EEPROM. Si se coloca 0, no permitir la escritura en la EEPROM.
WRERR, Bit 3 (Indicador de error). Se lee un 1 si hubo error en la escritura
debido a una inicializacin del PIC. Un 0 indicar que la operacin se hizo
correctamente.
EEPGD, Bit 7 (Acceso a EEPROM o FLASH). Un 1 indicar que la operacin se
relaciona con la FLASH, un 0 indicar que la operacin se relaciona con la
EEPROM.
EECON2: En este registro se coloca una secuencia clave para evitar grabaciones
accidentales.

INICIO
275
Escribir un dato en la EEPROM
El registro EECON2 se utiliza para colocar el cdigo de control en la escritura de datos
de la EEPROM y evitar una grabacin accidental de la misma. Para ello, despus de
habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deber
escribir en EECON2 el cdigo 55h y luego el cdigo 0AAh; finalmente, para grabar el
dato que est en el registro EEDATA en la direccin marcada por el registro EEADR
que fija la direccin de la EEPROM, se deber escribir un 1 en el bit WR del registro
ECON1. Un programa propuesto que realiza la escritura de un byte en la EEPROM es
el que se presenta a continuacin:
BCF STATUS, RP0 ; En el banco 2 estn los registros EEADR y EEDATA
BSF STATUS, RP1 ;
MOVF DIRECCION,W ; En DIRECCION est la posicin donde se guardar
MOVWF EEADR ; el dato en la EEPROM
MOVF DATO,W ; En DATO est el valor que ir a la EEPROM
MOVWF EEDATA ;
BSF STATUS, RP0 ; Selecciona banco 3 de la RAM
BCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROM
BCF EECON1, EEPGD ; Selecciona acceso a la EEPROM
BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura
. BSF EECON1, WREN ; Habilita escritura en la EEPROM
MOVLW 55h ;
MOVWF EECON2 ; Escribe cdigo 55h en EECON2
MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental-
MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2
BSF EECON1,WR ; Comienza la grabacin del dato
BSF INTCON,GIE ; Habilitacin global de interrupciones
INICIO
276
Lectura de un dato en la EEPROM
Durante la seccin del programa que escribe en la EEPROM se recomienda deshabilitar las
interrupciones para que el proceso de escritura se realice correctamente. Despus de
iniciarse el proceso de escritura de la EEPROM, se podr habilitar las interrupciones por
medio de la instruccin BSF INTCON, GIE. En la escritura de la EEPROM el bit WR
de EECON1 se colocar en 0 automticamente. T podrs determinar cundo termina el
ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Despus de esto se
deber colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM.
Para leer un dato en la EEPROM se podr utilizar la seccin de programa que se muestra
a continuacin:

BCF STATUS, RP0 ; Selecciona banco 2 para EEADR
BSF STATUS, RP1 :
MOVLW DIR_LECT ; Direccin de lectura en W
MOVWF EEADR ; Direccin de lectura en EEADR
BSF STATUS, RP0 ; Selecciona banco 3 para EECON1
BCF EECON1, EEPGD ; Selecciona acceso a la EEPROM
BSF EECON1, RD ; Lectura de la EEPROM
BCF STATUS, RP0 ; Selecciona banco 2 para EEDATA
MOVF EEDATA, W ; Coloca dato ledo de EEPROM en W
Una buena prctica para escribir un dato en la EEPROM, consiste en verificar si ese dato
ha sido grabado correctamente mediante la lectura del dato escrito y comparacin con l
mismo por medio de una resta y al evaluar el bit Z del registro STATUS.
INICIO
277
Escribir un dato en la FLASH
Para escribir un dato en la FLASH, la direccin de acceso no debe estar protegida. Por
otro lado, despus del proceso de escritura, el microcontrolador no lee las siguientes dos
instrucciones, y ste se inhibe durante la operacin de escritura. A continuacin se
presenta una seccin de programa para escribir un dato en la FLASH.

BCF STATUS, RP0 ; En el banco 2 estn los registros EEADR, EEADRH,
BSF STATUS, RP1 ; EEDATA y EEDATAH
MOVF DIRECCIONH,W ; En DIRECCIONH est la posicin ms significativa donde
MOVWF EEADRH ; se guardar el dato en la FLASH
MOVF DIRECCIONL,W ; En DIRECCIONL est la posicin menos significativa donde
MOVWF EEADR ; se guardar el dato en la FLASH
MOVF DATOH,W ; En DATOH est el valor ms significativo del dato
MOVWF EEDATAH ;
MOVF DATOL,W ; En DATOL est el valor menos significativo del dato
MOVWF EEDATA
BSF STATUS, RP0 ; Selecciona banco 3 de la RAM
BCF INTCON, GIE ; Deshabilita interrupciones al escribir en la FLASH
BSF EECON1, EEPGD ; Selecciona acceso a la FLASH
BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura
. BSF EECON1, WREN ; Habilita escritura en la EEPROM
MOVLW 55h ;
MOVWF EECON2 ; Escribe cdigo 55h en EECON2
MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental-
MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2
BSF EECON1,WR ; Comienza la grabacin del dato
NOP ; El microcontrolador ignora estas dos instrucciones y contina
NOP ; despus de terminar el proceso de grabacin
BSF INTCON,GIE ; Habilitacin global de interrupciones
BCF EECON1, WREN ; Se deshabilita la escritura para prevenir un borrado accidental

INICIO
278
Lectura de un dato en la FLASH
Una seccin de programa para leer un dato de la FLASH, es la que se muestra a
continuacin:

BCF STATUS, RP0 ; Selecciona banco 2 para EEADR
BSF STATUS, RP1 :
MOVLW DIR_LECTH ; Direccin ms significativa de lectura en W
MOVWF EEADRH ; DIR_LECTH en EEADRH
MOVLW DIR_LECTL ; Direccin menos significativa de lectura en W
MOVWF EEADR ; DIR_LECTL en EEADR
BSF STATUS, RP0 ; Selecciona banco 3 para EECON1
BSF EECON1, EEPGD ; Selecciona acceso a la FLASH
BSF EECON1, RD ; Lectura de la FLASH
NOP ; Despus de esta instruccin, la memoria de programa
NOP ; es leda en los siguientes dos ciclos
BCF STATUS, RP0 ; Selecciona banco 2 para EEDATA
MOVF EEDATA, W ; Coloca dato bajo ledo de la FLASH en W
MOVWF DATOL ; Parte menos significativa del dato en DATOL
MOVF EEDATAH,W ; Coloca dato alto ledo de la FLASH en W
MOVWF DATOH ; Parte ms significativa del dato en DATOH

Al igual que en el caso de la EEPROM, se considera buena prctica leer los datos, depus
de que estos sean grabados.

INICIO
279
Proteccin de la FLASH
La memoria FLASH puede ser protegida totalmente o por secciones, tanto para la lectura
como para la escritura. Para ello, antes del proceso de grabacin o lectura, hay que
acceder a los bits CP1, CP0 y WRT de la palabra de configuracin del microcontrolador.
Si el bit WRT vale 1 se podr escribir en la memoria FLASH del microcontrolador, si
vale 0 no se podr escribir. A continuacin se presenta cmo se protege la escritura
de la FLASH segn los valores de CP1 y CP0 y el modelo del microcontrolador.
Modelo PIC CP1 CP0 Direccin inicial de
proteccin
Direccin final de
proteccin
PIC16F870/871/872 0 0 TODO PROTEGIDO
PIC16F873/874 0 0 0000H 0FFFH
PIC16F873/874 0 1 0800H 0FFFH
PIC16F873/874 1 0 0F00H 0FFFH
PIC16F876/877 0 0 0000H 1FFFH
PIC16F876/877 0 1 1000H 1FFFH
PIC16F876/877 1 0 1F00H 1FFFH
Todos los modelos 1 1 NO PROTEGIDO
INICIO
280
Actividades
Hemos visto cmo puedes guardar y leer datos de la EEPROM, por supuesto que las lneas
de programa mostradas anteriormente necesitan ser completadas para que pueda trabajar
bien en un programa.
La primera actividad propuesta para esta seccin, es que puedas introducir un dato de 8
bits, a travs del puerto B, lo guardes en la EEPROM. Despus apagues el dispositivo, y
puedas leer el dato que habas guardado en ese puerto. Para ello debers colocar un
interruptor de control en una lnea del puerto C, de manera que en un momento dado el
puerto B trabaje como entrada, lea el dato y lo guarde en una posicin de la EEPROM, y
en la otra posicin de esa lnea del puerto C, el puerto B trabaje como salida y aparezca
el dato desde la posicin donde guardaste el dato anteriormente.
La segunda actividad propuesta es hacer un contador de dos dgitos 7 segmentos, que
tenga un pulsador para la cuenta ascendente, otro para la cuenta descendente y uno ms
para almacenar el valor de la cuenta en la EEPROM, de manera que al encender el
dispositivo, el valor que aparezca en pantalla, sea el que se almacen en la EEPROM, y
desde all se seguir el conteo.

INICIO
281
7.6 El Puerto A, el Puerto E
y el Convertidor A/D
INICIO
En vista de que los microcontroladores de la serie PIC16F87X tienen muy diversas
aplicaciones, los terminales de los puertos pueden poseer varias funciones de manera
multiplexada. Por otro lado, los dispositivos de 28 terminales tienen 22 lneas de
entrada-salida (PORTA, PORTB y PORC) y los microcontroladores de 40 terminales
tienen 33 lneas E/S (PORTA, PORTB, PORTC, PORTD y PORTE). Recuerda que cada
terminal de un puerto, si est configurado como E/S digital, se puede programar como
entrada o salida, al colocar el bit asociado del registro TRIS en 1 0
respectivamente.
El puerto A (PORTA) dispone de 6 terminales. La funcin que puede realizar cada
terminal se resume en la siguiente tabla:
Cada terminal se puede configurar como entrada o salida de manera individual
mediante el registro TRISA, ubicado en la direccin 85h de la RAM, tal como se hace
con el PIC16F84A. Para configurar una funcin relacionada con el convertidor
analgico a digital, se deber acceder a los registros ADCON0 y ADCON1 (direcciones
1FH y 9FH respectivamente).

RA5/AN4/SS# RA4/TOCKI RA3/AN3/Vref RA2/AN2 RA1/AN1 RA0/AN0
E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL
ENTRADA
ANALGICA 4
ENTRADA
ANALGICA 3
ENTRADA
ANALGICA 2
ENTRADA
ANALGICA 1
ENTRADA
ANALGICA 0
MODO ESCLAVO EN
COMUNICACIN
SERIAL SNCRONA
ENTRADA DE
RELOJ DEL
TMRO
VOLTAJE DE
REFERENCIA A/D C
282
Registros asociados
a PORTA
INICIO
La siguiente tabla muestra los registros asociados al puerto A y la ubicacin de los
mismos en la memoria RAM.
Las lneas PCFG0 PCFG3 del registro ADCON1 configuran las lneas del puerto A y
el puerto E para que trabajen como entradas analgicas o digitales (los PIC16F870,
872, 873 y 876 no tienen puerto E). Debemos observar que los bits de estos
registros son puestos a 0 despus de un RESET, un POR (inicializacin por encendido)
o un BOR (inicializacin por baja de Vdd). Esto significa, como se ver ms
adelante, que la configuracin inicial de las lneas de los puertos A y E estarn como
entradas analgicas. Si se desea que todas ellas trabajen en forma digital, deber
escribirse el valor 011x en los cuatro bits menos significativos del registro
ADCON1.
0--- 0000 0--- 0000 PCFG0 PCFG1 PCFG2 PCFG3 --- --- --- ADFM
ADCON1 9Fh
0000 00-0
--11 1111
--0u 0000
Otros
Resets
0000 00-0
--11 1111
--0x 0000
Valor en
POR y BOR
CHS2
RA5
Bit 5
ADCS0
---
---
Bit 6
ADCS1
---
---
Bit 7
ADCON0
TRISA
PORTA
Registro
ADON ---
GO/
DONE#
CHS0 CHS1
1Fh
85h
RA0 RA1 RA2 RA3 RA4 05h
Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin
Registro de Configuracin de PORTA
283
El Puerto E y las entradas
analgicas AN5, AN6 y AN7
Los microcontroladores PIC16F871, 874 y 877 tienen tres entradas analgicas
adicionales, las cuales se encuentran en el puerto E (PORTE, direccin 09H).
En la tabla se indica que cada lnea del puerto E, puede trabajar como
Entrada/Salida Digital, como entrada analgica o como control del puerto paralelo.
En esta seccin, slo veremos las dos primeras funciones, y cuando se estudie el
puerto paralelo, se ver la tercera funcin.
En la direccin 89H se encuentra TRISE, que es el que configura las lneas
digitales del puerto E y la interfaz paralela (Bits 4 a 7). La configuracin como
entrada analgica o E/S digital, se hace por medio del registro ADCON1.
Direccin Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor en
POR y BOR
Otros
Resets
89h TRISE
IBF OBF IBOV PSP
MODE
--- 0000 -111 0000 -111
Registro de
Configuracin de PORTE
INICIO
Lectura en el modo PSP
(RD)
Entrada Analgica 5
E/S DIGITAL
RE0/RD#/AN5
Escritura en el modo PSP
(WR)
Entrada Analgica 6
E/S DIGITAL
RE1/WR#/AN6
Seleccin de Chip en el
modo PSP (CS)
Entrada Analgica 7
E/S DIGITAL
RE2/CS#/AN7
c
c
284
El Convertidor Analgico a Digital
Los microcontroladores PIC16F87X poseen un convertidor analgico digital de 10 bits de
resolucin y cinco canales de entrada en los modelos de 28 terminales (puerto A) y ocho
canales en los que tienen 40 terminales (puertos A y E).
Este convertidor puede aceptar slo seales positivas comprendidas entre V
ref
+
y V
ref
-
.
La resolucin que tiene cada bit que procede de la conversin es funcin de la tensin de
referencia segn la siguiente ecuacin:

Resolucin = (V
ref
+
- V
ref
-
)/1024bits

En el caso de que la tensin de referencia positiva (V
ref
+
) sea igual a 5 voltios y la
negativa sea 0V, la resolucin ser de 4,8mV/bit. La tensin de referencia determina
los lmites mximo y mnimo de la tensin analgica que puede leer el microcontrolador, y
puede seleccionarse externamente por medio de RA3 (V
ref
+
) y RA2 (V
ref
-
) o emplearse la
fuente de alimentacin del microcontrolador (Vdd y Vss).
El convertidor analgico digital es el nico dispositivo que puede seleccionarse para que
est activo en el modo de reposo, para ello, los pulsos del convertidor debern
conectarse al oscilador RC interno.
Los cinco primeros canales de entradas analgicas del PIC16F87X estn en el puerto A.
Por lo tanto se deben configurar dichas lneas para expresar aqullas que se utilizarn
como entradas analgicas.
El convertidor analgico a digital utiliza la tcnica de aproximaciones sucesivas y requiere
una tensin mayor a 2V y menor a Vdd Vss como voltaje de referencia.
INICIO
285
Descripcin del
funcionamiento del AD/C
Para que funcione el convertidor analgico a digital (AD/C), se necesita configurarlo
inicialmente. Esto significa que hay que definir las lneas que se utilizarn como
entradas analgicas, cules van a ser las tensiones de referencia a emplear, la
velocidad de conversin del AD/C, cul oscilador se va a emplear, cmo se escribir el
valor digital en los registros ADRESH y ADRESL, y la habilitacin o no de la
interrupcin por convertidor. Despus de esto, en el programa se seleccionar cada
canal a convertir seguido de la orden de conversin.
En principio, el AD/C utiliza la tcnica de aproximaciones sucesivas y est controlado
por un oscilador. Estos pulsos pueden ser una seal proveniente del oscilador de
cristal, dividida entre 2, 8 32, o el oscilador RC interno del microcontrolador. Si se
selecciona esta ltima opcin, se podrn hacer conversiones durante el modo de reposo.
Es importante tomar en cuenta que el tiempo del AD/C para cada bit, no debe ser
menor de 1,6Seg, para que las conversiones se hagan correctamente. En el caso de
utilizar el oscilador RC, este tiempo es de aproximadamente 4Seg.
La seal a convertir se selecciona por medio del multiplexer analgico, luego va al
circuito de muestreo y retencin y despus al convertidor A/D. El tiempo total de
lectura est dado por el tiempo de adquisicin mas el tiempo que emplea el convertidor.
Un dato importante es conocer el tiempo de lectura de cada seal, para el empleo de
circuitos de control. En la siguiente pgina se muestra el clculo del tiempo de lectura
y la frecuencia de muestreo para la seal correspondiente a un canal.
INICIO
286
Tiempo de lectura del
convertidor A/D
El tiempo de lectura para la seal de cada canal, est dado por el tiempo de
adquisicin mas el tiempo de conversin del convertidor A/D.
El tiempo de adquisicin est dado por la siguiente ecuacin:
t
adq
= t
amp
+ t
cc
+ t
cT
Donde: t
amp
es el tiempo de establecimiento del amplificador, 2Seg.
t
cc
es el tiempo de carga del condensador del circuito de
muestreo y retencin (sample & hold), 16,5Seg.
t
cT
es el tiempo debido al coeficiente de temperatura:
t
cT
= (T-25C)0,05Seg
El tiempo de conversin est dado por 12t
AD
, donde t
AD
es el tiempo de conversin de
cada bit.
El tiempo de lectura mnimo a 25C est dado para t
AD
= 1,6Seg:
t
lect
= 2Seg + 16,5Seg + 0 + 12x1,6Seg = 37,7Seg
La mxima velocidad de muestreo se dar para 40Seg, dando un margen de 2Seg
para la espera del convertidor y la realizacin de instrucciones de lectura y
ordenamiento, es decir que estar en el orden de las 25K muestras por segundo.
INICIO
287
Configuracin del Convertidor A/D
En resumen, los pasos necesarios para configurar el convertidor A/D son:
Determinar las lneas que se utilizarn como entradas analgicas.
Seleccionar las tensiones de referencia.
Seleccionar el oscilador del convertidor.
Seleccionar el modo de escritura en los registros ADRESH-L del convertidor
A/D.
Activar la interrupcin para el convertidor A/D.

INICIO
288
Seleccin de las entradas analgicas
y las de referencia
Para seleccionar las lneas que se utilizarn como entradas analgicas y las tensiones de
referencia, se selecciona el cdigo apropiado de PCFG3-0 en el registro ADCON1, para
ello se busca en la siguiente tabla la opcin ms conveniente:
Notas:
1: Estos canales no son disponibles en los PIC16F870, 872, 873 y 876.
2: Esta columna indica el nmero de canales analgicos y el nmero de entradas de referencia.
INICIO
289
El oscilador del convertidor A/D
ADCS1 - ADCS0 Frecuencia
00 fosc/2
01 fosc/8
10 fosc/32
11 Osilador RC interno
Para seleccionar el oscilador, se debe acceder a los bits ADCS1 y ADCS0 del registro
ADCON0. En la siguiente tabla podrs escoger la opcin adecuada:
Debe tomarse en cuenta que el tiempo de conversin de cada bit debe ser mayor o
igual a 1,6Seg. La frecuencia mxima del cristal segn los valores de ADCS1-ADCS0
se muestra a continuacin:
Nota 1: El tiempo tpico de conversin, al utilizar el oscilador interno, es
aproximadamente 4Seg, aunque ste puede estar comprendido entre 2 y 6Seg.
INICIO
290
Seleccin de la escritura en los
registros ADRESH y ADRESL
En los registros ADRESH y ADRESL se escribe el resultado de la conversin analgica
a digital. Por medio del bit ACFM (bit7) que est en el registro ADCON1 (direccin
9FH). Un 1 en el bit ACFM alnea la lectura hacia la derecha, y un 0 lo alnea
hacia la izquierda.
INICIO
291
Configuracin de los registros de
interrupciones para el convertidor A/D
El tiempo de conversin puede variar segn la frecuencia del oscilador del convertidor
A/D y la temperatura. Al estar lista la conversin analgica de un dato digital, se
activan las lneas ADON a 0 del registro ADCON0 y se coloca en 1 la lnea ADIF
del registro PIR1. Si las interrupciones estn habilitadas por medio de un 1 en el
bit GIE del registro INTCON y la interrupcin del convertidor A/D est habilitada por
medio de un 1 en la lnea ADIE del registro PIE1, al finalizar la conversin del dato
analgico a digital, provocar una interrupcin en el microcontrolador y se cargar el
vector de interrupcin al contador de programa (direccin 4H). Para atender la rutina
de interrupcin debida al convertidor A/D, bastar con leer el bit ADIF del registro
PIR1.
INICIO
PIE1 (8CH)
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
c c
PIR1 (0CH)
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
c c
292
Manejo del Convertidor A/D
En la siguiente figura se
muestra un esquema de las
conexiones internas del
convertidor analgico a digital.
Podemos observar que las
entradas analgicas van a un
multiplexer analgico, y la
seleccin del canal a convertir
se realiza por medio de los bits
CHS2, CHS1 y CHS0 del
registro ADCON0.
Por otro lado, vemos que es
posible sacrificar las entradas
AN3 y AN2, para colocar las
tensiones de referencia
externas, y con ello mejorar la
exactitud en las lecturas del
convertidor A/D.
Nota 1: No disponible en los PIC16F870, 872,
873 y 876
INICIO
293
Ejemplo de un programa que
configura al convertidor A/D
INICIO
De acuerdo a lo que hemos visto hasta ahora, presentamos a continuacin un programa
que configura al convertidor A/D, a partir de los siguientes criterios:
N canales de entrada = 4, tensin de referencia = 2,5V (referida a tierra), Fosc =
20MHz, tiempo de lectura = 40Seg, lectura alineada a la derecha.

CONFIGAD
BCF RP1 ; Selecciona el banco 1 de la RAM
BSF RP0
MOVLW 3F ; Configuracin de las lneas del puerto A como entradas
MOVWF TRISA
MOVLW B10000011 ; Configura: RA0, RA1, RA2 y RA4 como entradas analgicas; RA3 ser
MOVWF ADCON1 ; la entrada de Vref y los 10 bits de lectura del A/D se alnean a la derecha
BSF PIE1,ADIE ; Habilita la interrupcin para el AD/C
BCF RP1 ; Selecciona el banco 0 de la RAM
MOVLW B10000001 ;
MOVWF ADCON0 ; Se configura el oscilador de 20MHz para dividir por 32 y enciende el ADC

El convertidor A/D queda configurado. Para hacer lecturas de cada canal, se deber
seleccionar los canales por medio de los bits CHS2, CHS1 y CHS0 del registro ADCON0,
y colocar en 1 el bit Go/Done del mismo registro ADCON0.
294
Actividades
INICIO
Para una mejor comprensin del manejo del convertidor analgico a digital, te
proponemos las siguientes actividades:
Hacer un programa y montar un circuito con un microcontrolador PIC, que lea el canal 0,
y coloque el valor binario en los 8 bits del puerto B, y en 2 bits del puerto C.
Hacer un programa y montar un circuito que haga las veces de voltmetro digital, en
donde se muestre la lectura de un canal a seleccionar y se haga la conversin a BCD, y
luego a 7 segmentos, para presentarlo en un indicador de tres dgitos y medio (0,000 a
1,998), para ello la tensin de referencia deber ser de 2V.
295
7.7 El Puerto B
INICIO
0000 000x 0000 000x RBIF INTF TOIF RBIE INTE TOIE PEIE GIE
INTCON 0Bh, 8Bh,
10Bh,18Bh
1111 1111
1111 1111
uuuu uuuu
Otros
Resets
1111 1111
1111 1111
xxxx xxxx
Valor en
POR y BOR
TOCS
RB5
Bit 5
INTEDEG
RB6
Bit 6
RBPU
#
RB7
Bit 7
OPTION_REG
TRISB
PORTB
Registro
PS0 PS1 PS2 PSA TOSE
81h,181h
86h,186h
RB0 RB1 RB2 RB3 RB4 06h,106h
Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin
Registro de Configuracin de PORTB
El puerto B dispone de 8 lneas bidireccionales que se utilizan para entradas o salidas
digitales. Cada lnea se puede programar como salida o entrada al colocar en 0 o
en 1 respectivamente el bit asociado en el registro TRISB. Dos de las lneas de
este puerto se utilizan en el momento de grabar la memoria de programa del
microcontrolador. Estas dos entras son: RB6/PGC (Program Clock) y RB7/PGD
(Program Data) para ms detalles, ver el anexo 7. El terminal RB0 se puede emplear
como entrada de interrupcin externa. Por otro lado, es posible hacer la conexin de
cada terminal RBn a una resistencia interna asociada a Vdd (Pull-up), al colocar un 0
en el bit RBPU# del registro OPTION REG. Por otro lado, si seleccionas a RB0 como
entrada de interrupcin, podrs escoger el tipo de transicin a la cual se activar
sta. Un 0 en el bit INTEDEG del registro OPTION_REG, har que la interrupcin
en el microcontrolador sea por medio de una transicin de bajada y un 1, por una
transicin de subida. En la siguiente tabla se resume los registros asociados a PORTB.
296
7.8 El Puerto C y los
Temporizadores
INICIO
RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/
SDA
RC3/SCK/
SCL
RC2/CCP1 RC1/T10SC1/
CCP2
RC0/T1OSC0/
T1CKI
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
RECEPCIN
USART
TRANSMIS.
USART
SALIDA
DATOS
SPI
ENTRADA
DATOS
SPI
RELOJ SPI ENTRADA
CAPTURA 1
ENTR. TMR1
ENTR. CAPT2
ENTRADA TMR1

DATOS
TRANS
SINCRONA
RELOJ
TRANS
SINCRONA
ENTRADA
DATOS
I2C
RELOJ I2C SAL COMP1
SAL PWM1
SAL COMP2
SAL PWM2
SALIDA TMR1
Debemos tomar en cuenta que los PIC16F870/871/872 slo tienen un mdulo de
comparacin, captura y PWM. Por otro lado, los PIC16F870/871 no poseen el mdulo
SPI y el PIC16F872 no tiene el mdulo de comunicacin USART. Por lo tanto es
conveniente tomar en consideracin esto al programar el puerto C.
El puerto C dispone de 8 lneas bidireccionales, que estn multiplexadas con otras
funciones relacionadas con los temporizadores TMR1 y TMR2, la transmisin-recepcin
serial, la captura, la comparacin y la modulacin de ancho de pulsos.
Los PIC16F87x tienen tres temporizadores TMR0, TMR1 y TMR2. El funcionamiento de
TMR0 es bsicamente igual al de los PIC16C54 y PIC16F84A. TMR1 es un temporizador
con 16 bits de capacidad y TMR2 contiene 8 bits con pre y post escalamiento.
En la siguiente tabla se muestra las funciones de los terminales del puerto C.
297
El Temporizador TMR1
INICIO
TMR1 es un temporizador con preescalamiento de conteo ascendente, con una capacidad
de 16 bits. Esto significa que se necesitan dos registros para cargar un valor entre
0000H y 0FFFFH: TMR1H (direccin 0FH) y TMR1L (direccin 0EH). Al igual que con
TMR0 en el PIC16F84A, al haber un desbordamiento en la cuenta, puede generar una
interrupcin por medio del bit TMR1IF del registro PIR1. La habilitacin de esta
interrupcin se hace por medio del bit TMR1IE del registro PIE1.
Los pulsos de conteo de TMR1 pueden provenir del oscilador del microcontrolador (f
osc
/4)
o externamente a travs de los terminales RC0 o RC1. El registro de control de TMR1
es el T1CON y se ubica en la posicin 10H. El diagrama de bloques de TMR1 es el que
se muestra en la siguiente figura:
298
Registro de control del TMR1:
T1CON
INICIO
BIT Funcin
TMR1ON Un 1 en este bit enciende el TMR1
TMR1CS Seleccin de pulsos del TMR1: 0 f
osc
/4; 1 Entrada externa (RC0, RC1)
TISYNC# Sincronizacin con externa con oscilador interno: 0 Sincronizado;
1 No sincronizado
T1OSCEN Habilitacin de circuito oscilador. Si T1OSCEN es 1, Al colocar un cristal de valor
inferior a 200KHz entre RC0 (T1OSC0) y RC1 (T1OSC1) generar la base de tiempo
del TMR1. Si TOSCEN vale 0 TMR1 funcionar como contador de eventos de RC0
T1CKPS0 Bits del preescalador. Relacin de frecuencia segn T1CKPS1 - T1CKPS0:
T1CKPS1 0-0 1:1; 0-1 1:2; 1-0 1:4; 1-1 1:8
T1CON (10CH)
---- ---- T1CKPS1 T1CKPS0 T1OSCEN TISYNC# TMR1CS TMR1ON
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
En la figura anterior hemos visto cmo se controla el TMR1 por medio de los bits del
registro T1CON. A continuacin se describe el funcionamiento de cada uno de estos
bits.
299
Algo ms sobre TMR1
INICIO
El TMR1 es colocado automticamente en 0 cuando en la cuenta hay un desbordamiento
al pasar de 0FFFFh. Otra forma de hacer 0 a TMR1 automticamente, es por medio de
los mdulos CCPs (Comparacin, captura y modulacin de ancho de pulso). Para ello,
alguno de los mdulos CCP1, CCP2 o ambos se deben configurar como comparadores.
Se debe tener cuidado al leer o escribir en TMR1 mientras ste se est incrementando,
ya que podra suceder que haya un desbordamiento de uno de los 8 bits, y el valor
cambie para uno de los registros. Para evitar esto, se recomienda que, durante una
operacin de lectura o escritura, se detenga a TMR1. En el caso de que ste no se
pueda detener, ya que lleva la cuenta del tiempo real del programa, se recomienda hacer
la lectura de la siguiente forma:
LEETMR1 MOVF TMR1H, W ; Lee el byte de mayor peso de TMR1 a W
MOVWF TEMPH ; El valor va a un registro temporal TEMPH
MOVF TMR1L, W ; Lee el byte de menor peso de TMR1
MOVF TEMPL ; El valor va a TEMPL
MOVF TMR1H, W ; S vuelve a leer el byte de mayor peso
SUBWF TEMPH, W ; Se restan ambas lecturas
BTFSC STATUS, Z ; Si el resultado es cero, no hubo cambio en TMR1H mientras se lea
GOTO CONTINUA ; Por lo tanto, el programa contina
GOTO LEETMR1; ; Sino, se vuelve a leer TMR1
CONTINUA ; Contina con el programa principal
Al escribir un valor en TMR1, se deber tambin tener cuidado de que no haya un
incremento en TMR1H mientras se ejecuta la operacin. Para evitar esto se podra
iniciar la escritura borrando inicialmente a TMR1L.
300
Actividades
INICIO
Hemos visto la operacin del temporizador 1, y que ste tiene una resolucin de 16 bits.
Por otro lado, vimos una seccin de programa que permite hacer la lectura del TMR1 sin
necesidad de detenerlo. Te proponemos que hagas un circuito y programa de un reloj
digital, que tenga como base de tiempo a la frecuencia del oscilador del PIC y el
temporizador TMR1.
301
El Temporizador TMR2
INICIO
El temporizador TMR2 es un contador ascendente de 8 bits, que se puede leer y
escribir, y tambin puede realizar funciones con el mdulo de comunicacin serial SSP y
los mdulos de captura y comparacin. TMR2 se ubica en la posicin 11H de la memoria
RAM, utiliza la seal f
osc
/4, la cual pasa por un pre-escalador, y luego su salida pasa
por un post-escalador. El registro de control de TMR2 es T2CON. A continuacin se
muestra el diagrama de bloques de TMR2.
El encendido del TMR2 se hace al colocar un 1 en el bit TMR2ON del registro T2CON.
La salida de TMR2 puede seleccionarse por software, para que en el puerto de
comunicacin serial trabaje como generador de baudios. El bit TMR2IF del registro
PIR1 se coloca en 1 al haber un desbordamiento del post-escalador de TMR2 y puede
ser utilizado como interrupcin al habilitarla por medio del bit TMR2IE del registro
PIE1.
El registro PR2 (direccin 92H) se utiliza para fijar un valor de conteo mximo del TMR2
cuando se trabaja en modulacin de ancho de pulsos (PWM).
302
Registro de control del TMR2:
T2CON
T2SCKPS1 - T2CKPS0 Relacin del predivisor
00 1:1
01 1:4
1x 1:16
INICIO
A continuacin se describe el funcionamiento de cada uno de los bits del registro
T2CON.
T2CON (12CH)
---- - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPS1 T2SCKPS0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
Los bits T2SCKPS1 y T2CKPS0
sirven para seleccionar la frecuencia
del pre-escalador segn la siguiente
tabla:
Los bits TOUTPS3 hasta TOUTPS0
sirven para seleccionar la frecuencia del
post-escalador segn la siguiente tabla:
funcionamiento de cada uno de los bits.
TOUTPS3 - TOUTPS0 Relacin del postdivisor
0000 1:1
0001 1:2
0010 1:3
..... 1:Bn + 1
1110 1:15
1111 1:16
El bit TMR2ON se utiliza para
encender con un 1 al TMR2. Un
0 deshabilitar al TMR2.
303
7.9 El Puerto C y los Mdulos de
Captura, Comparacin y PWM
INICIO
Los PIC16F870-872 disponen de un mdulo CCP1, mientras que los otros PIC de las serie
16F87x tienen dos mdulos CCP: CCP1 y CCP2, los cuales son prcticamente iguales.
Las funciones que realizan los mdulos CCP son las que se muestran a continuacin:
Modo Captura. Dos registros de un mdulo CCP capturan el valor de TMR1 cuando
ocurre un evento especial en el terminal RC2/CCP1 o en el terminal RC1/CCP2.
Modo Comparacin. Se compara el valor de TMR1 con el de los dos registros de un
CCP, y cuando coinciden ocurre un evento en el terminal RC2/CCP1 o en RC1/CCP2.
Modo Modulacin de Ancho de Pulsos (PWM). Se mantiene un nivel alto en la salida
RC2/CCP1 o en RC1/CCP2, segn se determina en el mdulo CCP correspondiente.
CCP1 utiliza los registros CCPR1H y CCPR1L (posiciones 15H y 16H), y para la
configuracin se utiliza el registro CCP1CON (17H). Para CCP2 estn CCPR2H, CCPR2L y
CCP2CON. En la siguiente tabla se muestran los terminales involucrados del puerto C:
SALIDA TMR1
ENTRADA TMR1

E/S
DIGITAL
RC0/T1OSC0/
T1CKI
SAL COMP2
SAL PWM2
ENTR. TMR1
ENTR. CAPT2
E/S
DIGITAL
RC1/T10SC1/
CCP2
SAL COMP1
SAL PWM1
RELOJ I2C ENTRADA
DATOS I2C
RELOJ
TRANS
SINCRONA
DATOS
TRANS
SINCRONA
ENTRADA
CAPTURA 1
RELOJ SPI ENTRADA
DATOS SPI
SALIDA
DATOS
SPI
TRANSMIS.
USART
RECEPCIN
USART
E/S
DIGITAL
E/S DIGITAL E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S DIGITAL
RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
c
c
c
304
El Registro CCP1CON
INICIO
En el registro CCP1CON se utilizan 4 bits para configurar la funcin del mdulo CCP1,
los cuales son CCP1M3-CCP1M0. Por otro lado, los bits CCP1X y CCP1Y slo se utilizan
en el modo PWM y representan los bits menos significativos del valor de un ciclo de
trabajo. Los 8 bits ms significativos del ciclo de trabajo, se encuentran en el registro
CCPR1L. A continuacin se presenta la disposicin de los bits de CCP1CON y en la tabla
se describe el modo de trabajo de CCP1, segn los valores de CCP1M3 CCP1M0.
CCP1M3-CCP1M0 Funcin
0000 Mdulo CCP1 desconectado
0100 Modo captura con cada flanco descendente en RC2/CCP1
0101 Modo captura con cada flanco ascendente en RC2/CCP1
0110 Modo captura con cada 4 flancos ascendentes en RC2/CCP1
0111 Modo captura con cada 16 flancos ascendentes en RC2/CCP1
1000 Modo comparacin que activa el terminal RC2/CCP1 al coincidir valores
1001 Modo comparacin que desactiva el terminal RC2/CCP1 al coincidir valores
1010 Modo comparacin que genera una interrupcin (no afecta al terminal RC2/CCP1)
1011 Modo comparacin que pone a 0 TMR1 y provoca interrupciones peridicas
11xx Modo PWM
CCP1CON (17H)
---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
305
El Registro CCP2CON
INICIO
Al igual que CCP1CON, en el registro CCP2CON se utilizan 4 bits para configurar la
funcin del mdulo CCP2, los cuales son CCP2M3-CCP2M0; los bits CCP2X y CCP2Y slo
se utilizan en el modo PWM y representan los bits menos significativos del valor de un
ciclo de trabajo. Los 8 bits ms significativos de ese ciclo de trabajo se encuentran en
el registro CCPR2L. A continuacin se presenta la disposicin de los bits de CCP2CON y
el modo de trabajo de CCP2 segn los valores de CCP2M3 CCP2M0.
CCP1M3-CCP1M0 Funcin
0000 Mdulo CCP2 desconectado
0100 Modo captura con cada flanco descendente en RC1/CCP2
0101 Modo captura con cada flanco ascendente en RC1/CCP2
0110 Modo captura con cada 4 flancos ascendentes en RC1/CCP2
0111 Modo captura con cada 16 flancos ascendentes en RC1/CCP2
1000 Modo comparacin que activa el terminal RC1/CCP2 al coincidir valores
1001 Modo comparacin que desactiva el terminal RC1/CCP2 al coincidir valores
1010 Modo comparacin que genera una interrupcin (no afecta al terminal RC1/CCP2)
1011 Modo comparacin que pone a 0 TMR1 y provoca interrupciones peridicas
11xx Modo PWM
CCP2CON (1DH)
---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
306
Modo Captura
INICIO
En este modo, si ocurre un evento en los terminales RC2/CCP1 o RC1/CCP2, el valor
del temporizador se carga a los registros CCPR1H-L o CCPR2H-L respectivamente.
Esto podra utilizarse para la medicin de intervalos de tiempo entre pulsos o para la
medicin de la duracin de un pulso. Sin estos mdulos, las mediciones de intervalos
de tiempo habran que hacerla con un temporizador al detectar una interrupcin
externa, el problema est en que la lectura no ser precisa debido a que el
temporizador sigue contando mientras se ejecuta la rutina de interrupcin que va a
leer su contenido.
En el modo de captura es importante que el TMR1 est configurado como
temporizador o como contador sincrnico para que la transferencia se haga
correctamente.
Como se vio en las tablas de los registros CCP1CON y CCP2CON, los eventos pueden
darse como: una deteccin de una transicin de subida, una deteccin de una
transicin de bajada, una deteccin de 4 pulsos de transicin ascendente o una
deteccin de 16 pulsos de transicin ascendente. La seleccin se hace por medio de
los bits CCP1M3-0 CCP2M3-0, segn el mdulo que se vaya a utilizar.
La resolucin en la medicin del tiempo de captura y el perodo mximo estn dados
por el ancho de los pulsos que activan al TMR1. Por ejemplo si selecciona a f
OSC
/4
como entrada del TMR1, el escalamiento es 1:1, y la frecuencia f
OSC
es igual a
20MHz, entonces la resolucin de la medicin del intervalo ser igual a 200nSeg. El
perodo mximo en el cual se podr hacer la captura, ser igual a 13,107mSeg. Por
qu?
307
Esquema del Modo Captura
INICIO
En el momento de ocurrir una captura, se activa el indicador CCP1IF del registro PIR1 o
el bit CCP2IF del registro PIR2, segn el evento que se registra. La interrupcin se
realizar si estn activos el bit GIE del registro INTCON y el bit CCP1IE o CCP2IE de
los registros PIE1 o PIE2. Esta interrupcin puede ser utilizada para leer el contenido
de CCPR1H-L o CCPR2H-L, ya que si ocurre un nuevo evento, entonces se carga el valor
de TMR1 despus de que este nuevo evento ocurra.
En la siguiente figura se puede observar el diagrama de bloques de cmo funcionan los
PIC16F87X en el modo de captura para el mdulo CCP1.
308
Inicializacin en el modo Captura
INICIO
A continuacin se presenta la seccin de un programa para la inicializacin del mdulo
CCP1, para que ste trabaje en el modo Captura.

CLRF CCP1CON ; El mdulo CCP es apagado
CLRF TMR1L ; Borra byte de menor peso del temporizador 1
CLRF TMR1H ; Borra byte de mayor peso del temporizador 1
CLRF INTCON ; Deshabilita interrupciones y borra TOIF
BSF STATUS, RP0 ; Selecciona Banco 1
BSF TRISC, CCP1 ; Configura CCP como terminal de entrada
CLRF PIE1 ; Deshabilita interrupciones
BCF STATUS, RP0 ; Selecciona Banco 0
CLRF PIR1 ; Borra avisos de interrupciones
MOVLW 0x06 ; Configura modo de captura, cada 4 transiciones ascendente
MOVWF CCP1CON ;
BSF T1CON, TMR1ON ; Arranca el temporizador 1
; Al estar la interrupcin de CCP1 deshabilitada se evala
; el bit CCP1IF continuamente
CAPTURA
BTFSS PIR1, CCP1IF
GOTO CAPTURA
; Ocurre la captura
BCF PIR1, CCP1IF ; Este bit debe borrarse antes de la prxima comparacin
309
Modo Comparacin
INICIO
En este modo se compara continuamente los valores de los registros CCPR1H-L o
CCPR2H-L con el de TMR1H-L. En el caso de haber coincidencia, ocurre un evento
segn se haya programado en los registros CCP1CON y CCP2CON. Estos eventos
pueden ser: Colocar un 1 en el terminal RC2/CCP1 o RC1/CCP2; colocar un 0 en
uno de esos terminales; activar una interrupcin por medio de los bits CCP1IF de
PIR1 o CCP2IF de PIR2, sin afectar a los terminales mencionados; o poner en 0 al
TMR1. En este ltimo caso, si la comparacin ocurre con CCPR1H-L, puede activar
una interrupcin mediante el bit CCP1IF, y si la comparacin ocurre con CCPR2H-L,
entonces activa una conversin del mdulo convertidor analgico a digital.
Al trabajar el mdulo CCP en el modo comparacin, el mdulo TMR1 deber trabajar
en modo temporizador o como contador sincrnico para que se haga la comparacin
correctamente.
Al haber en TMR1H-L un valor igual al de CCPR1H-L o CCPR2H-L, se coloca en 1 el
bit CCP1IF del registro PIR1 o el indicador CCP2IF del registro PIR2, segn la
igualdad que se registre. La interrupcin se realizar si estn activos el bit GIE del
registro INTCON y el bit CCP1IE o CCP2IE de los registros PIE1 o PIE2. Esta
interrupcin puede ser utilizada para disparar con precisin algn tiristor que controle
la velocidad de un motor de corriente alterna. Al igual que en el modo de captura, la
precisin del disparo y el tiempo en que ste ocurre, est dada por la frecuencia del
oscilador que enva los pulsos a TMR1.
310
Modo Comparacin
INICIO
En la siguiente figura se muestra el esquema de funcionamiento en el modo Comparacin
para el mdulo CCP1.
311
Inicializacin en el
modo Comparacin
INICIO
La siguiente seccin de programa presenta la configuracin del mdulo CCP1 para
trabajar en el modo Comparacin.

CLRF CCP1CON ; El mdulo CCP es apagado
CLRF TMR1L ; Borra byte de menor peso del temporizador 1
CLRF TMR1H ; Borra byte de mayor peso del temporizador 1
CLRF INTCON ; Deshabilita interrupciones y borra TOIF
BSF STATUS, RP0 ; Selecciona Banco 1
BSF TRISC, CCP1 ; Configura CCP como terminal de entrada
CLRF PIE1 ; Deshabilita interrupciones
BCF STATUS, RP0 ; Selecciona Banco 0
CLRF PIR1 ; Borra avisos de interrupciones
MOVLW 0x08 ; Configura modo comparacin, establece terminal
MOVWF CCP1CON ; para la comparacin
BSF T1CON, TMR1ON ; Arranca el temporizador 1
; Al estar la interrupcin de CCP1 deshabilitada se evala
; el bit CCP1IF continuamente
COMPARA
BTFSS PIR1, CCP1IF
GOTO COMPARA
; Ocurre la comparacin
BCF PIR1, CCP1IF ; Este bit debe borrarse antes de la prxima comparacin
312
Modo Modulacin de Ancho
de Pulsos (PWM)
INICIO
En este modo se obtienen pulsos lgicos cuyo ancho en el nivel 1 tiene una duracin
programable con respecto a un perodo fijo. La relacin entre el tiempo que dura el
nivel 1 y el perodo total, se denomina ciclo de trabajo. Los PWMs tienen aplicaciones
en convertidores digitales a analgicos (D/A), control de velocidad de motores DC,
disparos de Transistores de potencia en el manejo de motores AC y disparos de rels en
el control de temperatura, entre otras. El promedio del valor DC de salida en un PWM
es igual al ciclo de trabajo multiplicado por el valor de la tensin de la fuente de
alimentacin.
La siguiente explicacin del funcionamiento del mdulo PWM de CCP1 aplica tambin al
mdulo CCP2 para los PIC16F873-77. El valor alto que se ha de mantener en el
terminal RC2/CCP1 est determinado por un tiempo de 10 bits de resolucin, donde los 8
bits ms significativos del valor que dura el 1 se escribe en el registro CCPR1L y los
otros dos bits se escriben en CCP1X-Y del registro CCP1CON. Los 8 bits ms
significativos del perodo total, estn determinados por el valor que est en el registro
PR2. Para ello el TMR2 (8 bits ms significativos) y los dos bits de un contador que
est conectado entre el preescalador y TMR2, al comenzar a contar, colocan a R2/CCP1
en 1. Cuando el valor del temporizador coincide con el valor que CCPR1L transfiri a
CCPR1H, la salida RC2/CCP1 se hace 0, y ste se mantiene hasta que los bits ms
significativos del temporizador coincidan con el valor de PR2. Cuando esto ocurre, se
reinicia TMR2, se vuelve a establecer en 1 RC2/CCP1, exceptuando si el ciclo de
trabajo es 0. El valor de CCPR1L se carga a CCPR1H, de esta manera es posible
escribir en cualquier momento el valor en CCPR1L, ya que la comparacin con ese valor se
efectuar despus de reiniciarse TMR2.
313
Duracin del ciclo en el PWM
INICIO
En el modo PWM, el bit RC2/CCP1 deber programarse como salida mediante el registro
TRISC. El valor del perodo que entra al contador menos significativo que est antes de
TMR2 es igual a Tosc multiplicado por la relacin del preescalador. De esta manera, el
perodo del ciclo es:

T
CICLO
= (PR2 + 1) X 4 X T
OSC
X preescalador de TMR2

Para el mdulo CCP1, el ancho del pulso estar dado por la siguiente ecuacin:

T1 = (CCPR1L,CCP1X,CCP1Y) X Tosc X preescalador de TMR2

La resolucin del PWM ser mejor cuando mayor es el valor de PR2. Para obtener una
precisin de 10bits, PR2 deber valer 255, ya que de esta manera el valor a escribir en
CCPR1L, y los bits CCP1X y CCP1Y corresponden a 10 bits.
La misma explicacin dada hasta ahora se aplica para el CCP2 para los
microcontroladores que tienen dos mdulos CCP.

314
Diagramas de bloques del PWM
INICIO
A continuacin se presenta el diagrama de bloques del modulador de ancho de pulsos
para el mdulo CCP1.
315
Configuracin del PWM
INICIO
La siguiente seccin de programa presenta la configuracin del PWM.

CLRF CCP1CON ; El mdulo CCP es apagado
CLRF TMR2 ; Borra contenido del temporizador 2
MOVLW 0x7F ;
MOVWF PR2 ;
MOVLW 0x1F ;
MOVWF CCPR1L ; Configura ciclo de trabajo al 25% del perodo de PWM
CLRF INTCON ; Deshabilita interrupciones y borra TOIF
BSF STATUS, RP0 ; Selecciona Banco 1
BSF TRiSC, PWM1 ; terminal RC2/PWM1 como terminal de salida
CLRF PIE1 ; Deshabilita interrupciones
BCF STATUS, RP0 ; Selecciona Banco 0
CLRF PIR1 ; Borra avisos de interrupciones
MOVLW 0x2C ; Configura modo PWM, 2 bits de bajo peso del ciclo
MOVWF CCP1CON ; de trabajo = 10
BSF T2CON, TMR2ON ; Arranca el temporizador 2
; Al estar la interrupcin de CCP1 deshabilitada se evala
; el bit CCP1IF continuamente
PER_PWM
BTFSS PIR1, TMR2IF
GOTO PER_PWM
; Se actualiza este perodo del PWM y sigue siguiente ciclo
BCF PIR1, TMR2IF ; Este bit debe borrarse antes de la prxima comparacin
316
Actividades
INICIO
Las actividades a realizar en esta seccin correspondern a las funciones del mdulo de
captura, comparacin y modulacin de anchos de pulso.
Con respecto al modo captura, te proponemos que hagas un programa y un circuito capaz
de medir el tiempo que tarda en hacer una revolucin un motor. Para ello debers
colocar una marca al eje del motor y un sistema de emisin y recepcin infrarroja o
magntica, de manera que cada vez que se detecte esa marca, se medir el tiempo
transcurrido entre una y otra aparicin de la lectura. Por medio de este mtodo,
podrs calcular las revoluciones por minuto del motor.
Para la parte de comparacin, te proponemos mejorar la precisin del reloj digital
propuesto en la actividad con el temporizador 1. En este caso, la propuesta es cargar
automticamente un valor al temporizador, por medio de los registros CCPR1H y CCPR1L,
de manera que el TMR1 se inicialice automticamente. Esto te permitir contar con un
contador de tiempo fiel, al cual no tendrs que cargar un valor cada vez que se ponga en
0. Para ello podramos fijar que la inicializacin del temporizador se efecte cada 10
mSeg, y utilices este valor como base para el contador de tiempo.
En cuanto a la modulacin de ancho de pulsos, te proponemos hacer un convertidor digital
a analgico que tenga una precisin de 10 bits. Para ello colocars una resistencia y un
condensador como filtro pasa bajo a la salida del modulador de ancho de pulsos, de
manera que promedie la seal de salida. El valor DC a la salida del circuito RC ser
igual a la relacin entre el tiempo en que dura el 1 a la salida del PWM y el perodo
total. Debers en este caso calcular los valores de R y C para que el rizado sea
mnimo.
317
7.10 El Puerto C y el Mdulo de
Comunicacin Serial Sncrona
La comunicacin serial es una manera muy utilizada para la transferencia de datos entre
equipos digitales, esto se debe a la cantidad reducida de lneas que utiliza. Los
PIC16F87X, con excepcin de los PIC16F870 y PIC16F871, tienen un mdulo MSSP
(Master Synchronous Serial Port) el cual proporciona una interfaz entre el
microcontrolador y otros dispositivos electrnicos tales como: otros microcontroladores,
memorias seriales, pantallas de cristal lquido, convertidores A/D, etc. Para ello
disponen de los terminales: RC3/SDO (Datos de salida), RC4/SDI (Datos de entrada) y
RC5/SCK (seal de sincronizacin o reloj).
El mdulo serial, entre otras cosas, puede trabajar en uno de los siguientes modos de
comunicacin: SPI (Serial Peripheral Interface) e I2C (Inter Integrated Circuit), los
cuales son muy utilizados actualmente.
INICIO
En la figura anexa se presenta el diagrama de
bloques del mdulo MSSP. El funcionamiento de
este mdulo est basado en el registro de
desplazamiento SSPSR, el cual transmite y recibe
los datos en serie, por medio de las lneas SDO y
SDI respectivamente. La sincronizacin de SSPSR
se ejecuta mediante la seal SCK. La carga y
recepcin de estos datos se realiza por medio del
registro SSPBUF, el cual tiene conexin con el bus
interno del microcontrolador. La seleccin del tipo
de transicin y el control del desplazamiento de
datos del registro SSPSR, se hace por medio de
otros registros internos del PIC16F87X.
318
La comunicacin SPI
La comunicacin en el modo SPI (Serial Peripheral
Interface) permite la transferencia de datos de 8 bits
en serie, los cuales se transmiten y reciben en forma
sncrona y simultneamente. El microcontrolador en este
tipo de transmisin puede trabajar como maestro o
como esclavo. En el caso de trabajar como esclavo,
adems de utilizar los terminales SDO, SDI y SCK,
utilizar una lnea adicional de seleccin de esclavo, la
cual se ubica en el terminal RA5/SS# y que deber ser
puesta a nivel 0.
Para que un dispositivo trabaje como maestro, se
deber configurar la lnea RC5/SCK como salida. Cuando
se trabaja en modo esclavo, las lneas RC5/SCK y
RA5/SS# se debern configurar como entradas; esta
ltima se colocar a 0V. Para ambos casos, la lnea
RC3/SDO se configurar como salida y la lnea RC4/SDI
se configurar como entrada.
La transferencia de informacin entre el maestro y el
esclavo se suele hacer de la siguiente manera:
Escritura: El maestro enva la direccin, luego el
comando de escritura y despus el dato.
Lectura: El maestro enva la direccin, luego el
comando de lectura y despus el esclavo enva el dato.

INICIO
319
Formas de onda en modo Maestro
En la figura siguiente se presentan las formas de ondas para la comunicacin en el modo
SPI. Ntese las diversas combinaciones que se pueden obtener con la seal de
sincronizacin SCK, segn los valores de los bits CKP y CKE, los cuales se ubican en los
registros SSPCON y SSPSTAT respectivamente. Tambin se observa cundo un dato
en la entrada SDI se tomar como vlido segn el valor del bit SMP, ubicado en el
registro SSPSTAT. Esto es importante para la compatibilidad en la comunicacin con
otros dispositivos seriales. Finalmente, podemos ver la lnea SSPIF del registro PIR1,
la cual se utilizar para interrumpir al programa principal cuando un dato se haya
transmitido o recibido.
INICIO
320
Formas de onda en modo Esclavo

Similarmente podemos observar a continuacin las formas do onda en modo esclavo.
Para CKE=0
INICIO
Para CKE=1
321
Registros asociados

En el modo SPI los registros asociados son los que se presentan en la siguiente tabla.
Para mayor detalles de los registros SSPCON y SSPSTAT, nos referiremos a las
pginas siguientes en donde se presenta el funcionamiento de cada bit.
INICIO
322
Registro SSPSTAT
Registro de Estatus del MSSP

SMP: Modo de muestreo.
Maestro: 1 muestreo al final del dato de salida.
0 muestreo a la mitad del dato de salida.
Esclavo: Debe ponerse en 0.
CKE: Seleccin de transicin de la seal se sincronizacin.
Si CKP=0: 1 La transmisin ocurre desde el estado de activacin hasta el
de reposo de la seal de sincronizacin.
0 La transicin ocurre desde el estado de reposo hasta el de
activacin de la seal de sincronizacin.
Si CKP=1: 1 El dato es transmitido en la transicin de bajada de SCK.
0 El dato es transmitido en la transicin de subidad de SCK.
BF: Registro SSPBUF lleno.
1 Recepcin terminada. SSPBUF est lleno.
0 No ha finalizado la recepcin. SSPBUF est vaco.
INICIO
c
323
Registro SSPCON
Registro de control del MSSP

WCOL: Deteccin de colisin de bits.
1 Hay colisin; 0 No hay colisin.
SSPOV: Indicador de desbordamiento en la recepcin.
1 Se recibi dato sin haber ledo SSPBUF; 0 No hay desbordamiento.
SSPEN: Habilitacin del puerto serial. Los terminales del puerto serial deben ser
configurados apropiadamente como entradas y salidas.
1 Puerto serial habilitado. 0 Terminales configurados como E/S.
CKP: Seleccin de polaridad de la seal de sincronizacin (SCK).
1 Estado de reposo de SCK = 1; 0 Estado de reposo de SCK = 0.
SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial
SSPM0: sncrono, ver la tabla de la pgina siguiente.
INICIO
324
Bits SSPM3-SSPM0
INICIO
Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 10bits
1111
Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 7bits
1110
Modo maestro I2C controlado por firmware 1011
Modo maestro I2C con sincronizacin = Fosc/(4(SSPAD+1)) 1000
Modo esclavo I2C con direccin de 10 bits 0111
Modo esclavo I2C con direccin de 7 bits 0110
Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo) 0101
Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0) 0100
Modo maestro SPI con sincronizacin igual a la salida de TMR2/2 0011
Modo maestro SPI con sincronizacin a Fosc/64 0010
Modo maestro SPI con sincronizacin a Fosc/16 0001
Modo maestro SPI con sincronizacin a Fosc/4 0000
Modo de trabajo SSPM3-SSPM0
c
325
Programa ejemplo
INICIO
Configuracin y transmisin y recepcin en Modo maestro
CLRF STATUS ; Seleccin del banco 0
CLRF SSPSTAT, CKE ; SMP = 0, CKE = 0, bits de STATUS en 0
MOVLW 0x31 ; Activa puerto SPI, modo maestro y CLK/16
MOVWF SSPCON ; Los datos se transmiten en transicin de bajada
; Los datos se leen en la mitad del pulso (SMP = 0)
BSF STATUS, RP0 ; Seleccin del banco 1
BSF PIE, SSPIE ; Habilitacin de la interrupcin SSP
BCF STATUS, RP0 ; Seleccin del banco 0
BSF INTCON, GIE ; Habilitacin global de interrupciones
MOVLW DATOTX ; Se coloca el dato a ser transmitido
MOVWF SSPBUF ; Comienza la transmisin

; Lectura de un dato
MOVF SPBUF,W ; Dato pasa a W
MOVWF DATORX ; Se guarda dato en la RAM
MOVF TRANSM,W ; El dato a transmitir va a W
MOVWF SPBUF ; Se carga SPBUF y se transmite el
; dato automticamente
326
Ejercicio: Transmitir un dato en
modo SPI
INICIO
Configurar el PIC16F87x que vayas a utilizar (con excepcin de los PIC16F870 y 871),
para que transmita un dato de 8 bits a un registro de desplazamiento 74xx164. Para
ello debers buscar las caractersticas de este dispositivo, de manera de hacer
compatible la transmisin de datos.


74XX164
SI
Clock



PIC16F87X



SDO
SCK

327
7.11 El Puerto C y la
Comunicacin I
2
C
Este protocolo de comunicacin fue desarrollado por Philips en la dcada de 1980.
Utiliza dos lneas para la transferencia de informacin entre varios elementos; stas
son: La SDA, la cual se encarga de la transferencia de datos en forma bidireccional, y la
lnea SCL la cual es generada por un dispositivo maestro hacia los esclavos, y lleva los
pulsos de sincronizacin. La interconexin entre dispositivos es la que se muestra en la
figura siguiente, en donde puede haber en cada caso, ms de un dispositivo maestro y
no se necesita que todos los dispositivos tengan la misma tecnologa digital.
Los dispositivos involucrados en la comunicacin I
2
C se conectan formando un AND
cableado con las lneas SDA y SCL, ya que las salidas de cada uno es del tipo drenador
abierto o colector abierto (open drain or open collector). De all que sea necesario
colocar resistencias a una de las alimentaciones en las lneas SDA y SCL. Esta
configuracin, a la vez evita que ocurra fallas, en el caso de haber colisin de datos
cuando dos dispositivos traten de enviar seales al mismo tiempo. Observa las conexiones
de varios elementos y las resistencias Rp en la figura siguiente.
INICIO
NMOS
VDD1
328
Funcionamiento del protocolo I
2
C
INICIO
Cuando el bus est libre, las lneas SDA y SCL se encuentran en 1, es decir, los
transistores de salida se encuentran en estado abierto. Cuando comienza una
transmisin, el dispositivo maestro enva una seal 0 en la salida SDA, luego la salida
SCL se coloca en 0 y despus se enva el conjunto de 8 bits en modo serial por la lnea
SDA, los cuales corresponden a 7 bits de la direccin del esclavo con el cual se va a
comunicar y un bit de R/W, segn la operacin que se va a realizar (lectura o escritura);
simultneamente se envan los pulsos de sincronizacin. Los valores de los bits de la lnea
SDA se considerarn vlidos, en los momentos en que la seal de sincronizacin est en
1. Despus de enviada la direccin, se enva el bit de parada, el cual corresponde a un
1. Entonces el dispositivo esclavo enva una seal de reconcimiento, que corresponde
a un 0, lo cual indica que se ha recibido la informacin. A continuacin, dependiendo
de si la operacin es escritura o lectura, se enviar el dato serial del maestro al
esclavo o viceversa. Observa las formas de ondas en la figura anexa. En las figuras
de la pgina siguiente, se observa con mayor detalle, el proceso de comunicacin serial
I
2
C en los PIC16F87X, en los que se detallan las seales de estado de este
microcontrolador.
(RC4)
(RC3)
329
Formas de ondas en la transmisin
y recepcin en el protocolo I
2
C
Formas de onda para la escritura de datos al esclavo:
INICIO
Formas de onda para la lectura de datos desde el esclavo:
330
Colisin de datos
Existe la posibilidad de que en un bus I
2
C dos dispositivos maestros puedan generar
una transmisin simultneamente. Para resolver este problema los dispositivos
maestros leen el valor en la lnea SDA y lo compara con el valor enviado. En el caso
de que enve un 1 y lee un 0, querr decir que otro maestro tiene dominio del bus
y por tanto el primero tendr que ceder e inhibir su salida SDA. Podra suceder que
en este conflicto, el maestro que toma el control est enviando informacin al maestro
que cedi el bus. En este caso el maestro que cedi el bus deber pasarse a la
condicin de esclavo.
La figura siguiente muestra en un diagrama de tiempo de cmo un primer maestro cede
el bus al segundo maestro, ya que el tiempo en 0 del segundo se mantiene por ms
tiempo que el del primero.

INICIO
331
Diagrama de bloques del mdulo
I
2
C en los PIC16F87X
Los PIC16F87X, con excepcin de los PIC16F870 y 871, cuentan con un mdulo de
comunicacin serial que puede configurarse con el protocolo I
2
C. Este mdulo genera
todas las secuencias necesarias para este protocolo, con un mnimo de programacin. La
configuracin se puede realizar para que trabaje tanto en modo maestro, como
esclavo.
INICIO
332
Registros asociados al I2C
La siguiente tabla muestra los registros asociados al puerto I
2
C. En cada uno de los
registros se podrn encontrar la funcin de cada bit.
INICIO
0000 0000 0000 0000 A0 A1 A2 A3 A4 A5 A6 A7 SSPADD 93h
0000 0000 0000 0000 TC0 TC1 TC2 TC3 TC4 TC5 TC6 TC7 TRISC 87h
0000 0000 0000 0000 RC0 RC1 RC2
RC3/SCl RC4/SDA
RC5 RC6 RC7 PORTC 07h
333
Registro SSPSTAT
(Registro de Estatus del MSSP)

INICIO
SMP: Modo de muestreo.
1 Control de transicin deshabilitado para velocidad estndar (100KHz).
0 Control de transicin habilitado para alta velocidad (400KHz).
CKE: Seleccin de transicin de la seal se sincronizacin.
1 Compatibilidad con SMBUS. 0 Compatibilidad con I
2
C.
D/A: Dato/Direccin
1 ltimo byte fue un dato. 0 ltimo byte fue una direccin.
P Bit de parada.
1 Deteccin de bit de parada al final. 0 No se detect bit de parada.
S Bit de arranque.
1 Deteccin de bit de arranque al final. 0 No se detecto el arranque.
R/W Bit de informacin de lectura y escritura.
Modo esclavo: 1 Lectura. 0 Escritura.
Modo maestro: 1 Hay una transmisin en proceos. 0 No hay transmisin.
UA Actualizacin de la direccin.
1 Debe actualizarse la direccin. 0 La direccin no se necesita actualizar.
BF Registro SPBUF lleno.
Recepcin: 1 Recepcin completa, SPBUF lleno. 0 Recepcin incompleta, SPBUF vaco.
Transmisin: 1 Transmisin en proceso, SPBUF lleno. 0 Transmisin finalizada.
334
Registro SSPCON
(Registro de control del MSSP)

WCOL: Deteccin de colisin de bits.
1 Hay colisin; 0 No hay colisin.
SSPOV: Indicador de desbordamiento en la recepcin.
1 Se recibi dato sin haber ledo SPBUF; 0 No hay desbordamiento.
SSPEN: Habilitacin del puerto serial. Los terminales del puerto serial deben ser
configurados apropiadamente como entradas y salidas.
1 Puerto serial habilitado, configura a SDA y SCL.
0 Terminales configurados como E/S.
CKP: Seleccin de polaridad de la seal de sincronizacin (SCL, slo en modo
maestro).
1 Habilita sincronizacin (reloj); 0 Estado de reposo de SCL = 0.
SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial
SSPM0: sncrono, ver la tabla de la pgina siguiente.
INICIO
335
Bits SSPM3-SSPM0
INICIO
Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 10bits
1111
Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 7bits
1110
Modo maestro I2C controlado por firmware 1011
Modo maestro I2C con sincronizacin = Fosc/(4(SSPADD+1)) 1000
Modo esclavo I2C con direccin de 10 bits 0111
Modo esclavo I2C con direccin de 7 bits 0110
Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo) 0101
Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0) 0100
Modo maestro SPI con sincronizacin igual a la salida de TMR2/2 0011
Modo maestro SPI con sincronizacin a Fosc/64 0010
Modo maestro SPI con sincronizacin a Fosc/16 0001
Modo maestro SPI con sincronizacin a Fosc/4 0000
Modo de trabajo SSPM3-SSPM0
c
336
Registro SSPCON2
(Registro de control 2 del MSSP)

GCEN: Habilitacin de llamada general (slo en modo esclavo).
1 Habilita interrupcin al detectar direccin 0000H; 0 Deshabilitado.
ACKSTAT: Bit de reconocimiento de estatus (Slo en modo maestro).
1 No se recibi reconocimiento del esclavo; 0 Si hubo reconocimiento.
ACKDT: Bit de reconocimiento de dato (Slo en modo maestro).
1 No reconocido. 0 Reconocido.
ACKEN: Reconocimiento de habilitacin de secuencia (Slo en modo maestro).
1 Reconoce secuencia en SDA y SCL y transmite bit de reconocimiento = 0
0 Secuencia de reconocimiento en reposo.
RCEN Bit de habilitacin de recepcin (Slo en modo maestro).
1 Habilita modo de recepcin; 0 Recepcin en reposo.
PEN: Habilitacin de la condicin de parada (Slo en modo maestro).
1 Habilita condicin de parada en SDA y SCL. 0Condicin de parada en reposo.
RSEN: Condicin de arranque repetido (Slo en modo maestro).
1 Inicia condicin repetida de arranque en SDA y SCL. 0 Arranque en reposo.
SEN: Habilitacin de condicin de arranque (Slo en modo maestro).
1 Inicia condicin de arranque en SDA y SCL. 0 Condicin de arranque en reposo.
INICIO
337
Configuracin del puerto I
2
C
A continuacin se presenta una seccin de un programa que configura al puerto I
2
C en el
modo maestro.
movlw b00101000 ; Carga a w el valor de la configuracin
clrf STATUS ; Seleccin del banco 0
movwf SPCON1 ; Configuracin en modo maestro
Para configurar la frecuencia de transmisin a 400KHz, asumiendo que la frecuencia del
oscilador del microcontrolador es 16MHz, recurrimos a la ecuacin:
ftrsm = fosc/(4(SSPADD+1))
movlw b00001001 ; Carga a w el valor de configuracin
bsf STATUS,RP0 ; Seleccin del banco 1
movwf SSPADD ; Configuracin de la frecuencia de transmisin a 400KHz
La configuracin del control de la transicin y fase de la sincronizacin se hace por medio
del registro SSPSTAT.
movlw b00000000 ; Carga a W el valor de la configuracin del registro SSPTAT
movwf SSPSTAT
Finalmente, se deben programar las lneas SCL y SDA como entradas, para que stas
trabajen en el modo I2C.
movlw b00000110 ; Carga a W el valor de la configuracin del puerto C
movwf TRISC ; Configura a SCL y SDA como entradas
INICIO
338
Implementacin y control del puerto I
2
C
Otro aspecto que debemos tomar en cuenta, es si se va a configurar las interrupciones
en el caso de que ocurran eventos tales como si hay un dato en SPBUF (bit SSPIE en el
registro PIE1) y si hay una colisin al tratar de enviar un dato (bit BCLIE en el registro
PIE2).
Una vez configurado el puerto I
2
C, entonces vendra la parte de implementacin y
control. Para ello se deber seguir los siguientes pasos:
1) Arranque (Start).
2) Continuacin (Restart).
3) Parada (Stop).
4) Lectura (recepcin).
5) Reconocimiento (Acknowlege, despus de una lectura).
ACK (Reconocimiento)
NACK (No reconocimiento)
6) Escritura.
Hasta aqu te hemos dado una introduccin relacionada con el puerto I
2
C. Si deseas
saber ms detallada sobre este tema, te recomendamos que leas la nota de aplicacin
AN735,

INICIO
339
Actividad
Para esta seccin, te proponemos que ubiques componentes que se comuniquen en el
modo I
2
C y desarrolles programas que establezcan la comunicacin con esos
dispositivos. Si por alguna razn no te es posible ubicarlos, entonces te proponemos
que hagas la comunicacin entre dos microcontroladores PIC, de manera que
transfieran datos entre uno y otro... Utiliza tu imaginacin.
INICIO
340
7.12 El Puerto C y el USART
INICIO
Un USART es un Transmisor y Receptor Serial Asncrono o Sncrono Universal. ste es
un dispositivo de suma importancia para la comunicacin con una diversidad de equipos
electrnicos, entre los cuales destacan: Computadores Personales, monitores,
programadores, controles industriales, MODEM, etc. Los PICs de la serie 16F87X, con
excepcin del PIC16F872, tienen un mdulo USART que puede trabajar en modo
bidireccional asncrono (full duplex) o en modo sncrono unidireccional (half duplex).
Veamos en la siguiente tabla, los terminales del puerto C involucrados con este mdulo.
En una transmisin sincrnica el terminal RC7/RX/DT se utiliza para la transferencia de
datos en forma serial (DT) y en el terminal R6/TX/CK estn los pulsos de sincronizacin
(CK). En modo sncrono, el PIC podr trabajar en los modos maestro o esclavo.
En una transmisin asncrona, el terminal RC7/RX se utiliza para la recepcin de datos
(RX), mientras que el terminal RC6/TX se emplea para la transmisin de datos (TX).
SALIDA TMR1
ENTRADA
TMR1

E/S
DIGITAL
RC0/T1OSC0
/T1CKI
SAL COMP2
SAL PMW2
ENTR. TMR1
ENTR. CAPT2
E/S
DIGITAL
RC1/T10SC
1/CCP2
SAL COMP1
SAL PMW1
RELOJ I2C ENTRADA
DATOS I2C
RELOJ
TRANS
SINCRONA
DATOS
TRANS
SINCRONA
ENTRADA
CAPTURA 1
RELOJ SPI ENTRADA
DATOS
SPI
SALIDA
DATOS
SCPI
TRANSMIS.
USART
RECEPCIN
USART
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
RC2/CCP1 RC3/SCK/
SCL
RC4/SDI/
SDA
RC5/SDO RC6/TX/CK RC7/RX/DT
c
c
341
Transmisin Asncrona
INICIO
En la siguiente figura se muestra un esquema de dos equipos que se comunican de manera
serial asincrnica.
La comunicacin serial asncrona es muy utilizada en una gran variedad de aplicaciones,
tanto en equipos de computacin, como en equipos industriales. Su ventaja radica en que
slo necesita de dos o tres cables para interconectar dos equipos, y por medio de ellos
transmitir mensajes. Adems de esto, debido a que la comunicacin se realiza en forma
serial, se adapta muy bien a sistemas de transmisin inalmbrica.
Al USART tambin se le suele llamar SCI por las siglas Serial Comunications Interface,
y para el protocolo de transmisin de datos, es muy utilizada la norma RS-232-C.
La configuracin del USART se hace mediante los registros: TXSTA (direccin 98h),
RCSTA (direccin 18h) y SPBRG (direccin 99h), los cuales corresponden al control del
transmisor, el control del receptor y el generador de baudios respectivamente.
RS-
232C
Tx
Rx
Gnd
Rx
Tx
Gnd
PIC 1 PIC 2
342
Diagrama de bloques
de la transmisin del USART
INICIO
En la siguiente figura se muestra el diagrama de funcionamiento de la seccin de
transmisin serial del USART que se encuentra en los PIC16F87X.
En una transmisin serial asncrona, para enviar un dato de 8 bits, ste se coloca en el
registro TXREG; ese dato se transfiere al registro de desplazamiento TSR, el cual har
que los datos salgan por el terminal de salida RC6/TX/CK. El dato a enviar, podr tener
un bit adicional, el cual se utiliza normalmente para colocar la paridad de los datos
transmitidos, segn se habilite o no el bit 8 por medio de TX9. Cuando se desea hacer
la transmisin se coloca en 1 el bit TXEN (habilitacin de transmisin) y con ello, el
oscilador del generador de velocidad de transmisin enva los pulsos para que se produzca
el desplazamiento de los datos del registro TSR y salgan por el terminal RC6/TX/CK. El
bit TXIF, el cual se puede utilizar para interrumpir el programa principal para colocar un
nuevo dato en TXREG, se activa cuando un dato se transfiere de TXREG a TSR al
iniciarse una nueva transmisin, entonces TXREG est listo para recibir un nuevo dato.
343
Bits de configuracin
de la transmisin del USART
INICIO
De acuerdo a la explicacin anterior, podemos nombrar los bits que configuran al
transmisor del USART ubicados en el registro TXSTA.



CSRC: Seleccin de la fuente del oscilador.
1 Modo Maestro (oscilador interno). 0 Modo esclavo (Oscilador externo)
TX9: Habilitacin del bit 9 de transmisin.
1 Transmisin de 9 bits. 0 Transmisin de 8 bits.
TXEN: Habilitacin de la transmisin.
1 Transmisin habilitada. 0 Transmisin inhabilitada.
SYNC: Seleccin del modo de operacin del USART.
1 Modo sncrono. 0 Modo asncrono.
BRGH: Velocidad de transmisin:
1 Velocidad alta. 0 Velocidad baja.
TRMT: Estado del registro de transmisin:
1 Registro vaco (transmiti los datos). 0 Registro no vaco.
TX9D: Bit 9 del dato a transmitir. Usualmente se utiliza para el bit de paridad.

344
Formas de onda en la
transmisin asncrona
Otra manera de observar el funcionamiento de esta interfaz serial, la podemos analizar
de acuerdo al diagrama de las formas de onda involucradas.
Vemos que la seal BRG es una oscilacin libre, la cual determinar la velocidad de
transmisin. En un segmento de transmisin, podemos ver que el envo comienza con un
bit de arranque (start bit) que comienza con valor 0, luego se enva el dato de 8 9
bits y finaliza con un bit de parada (stop bit) el cual es de valor 1. Un dato se puede
escribir en el registro TXREG despus de haberse transmitido el bit de parada (stop bit)
de un dato previo, es decir, que mientras se est transmitiendo un dato, por medio del
registro TSR, se puede cargar otro en el registro TXREG. El bit TXIF del registro
PIR1 es el que nos indicar cundo se puede cargar un dato a transmitir en el registro
TXREG. El bit TRMT indicar si el registro TSR est vaco.
INICIO
345
Diagrama de bloques
de la recepcin del USART
INICIO
Conociendo el funcionamiento de un dispositivo de transmisin serial asncrona, ser ms
fcil comprender el receptor serial. En principio, el receptor serial deber ser un
dispositivo que lea los datos enviados por el transmisor serial. En la siguiente figura se
muestra el diagrama de funcionamiento de la seccin de recepcin serial del USART que
se encuentra en los PIC16F87X.
Los datos entran por el terminal RC7/RX/DT, y de all pasan al registro RSR cuando el
bit CREN est en 1. El circuito de control de datos de entrada y el generador de
baudios, se encargan de transferir el dato al registro RSR. Al llenarse el registro RSR,
se activa el bit RCIF del registro PIR1, el cual se puede utilizar como interrupcin, y se
transfiere el dato a una memoria FIFO con dos datos de capacidad, la cual se podr leer
por medio del PIC16F87X al acceder al registro RCREG.
346
Bits de configuracin
de la recepcin del USART
INICIO
Veamos a continuacin la descripcin de los bits de configuracin del registro RCSTA:



SPEN: Habilitacin del puerto serial.
1 Puerto serial habilitado. 0 Puerto serial deshabilitado.
RX9: Habilitacin del bit 9 de Recepcin.
1 Recepcin de 9bits. 0 Recepcin de 8 bits.
SREN: Configuracin de la recepcin sencilla en modo sncrono maestro.
1 Habilita la recepcin sencilla. 0 Deshabilita la recepcin sencilla.
CREN: Configura la recepcin continua.
1 Habilita la recepcin continua. 0 Deshabilita la recepcin continua.
ADDEN: Habilitacin de la deteccin de direccin:
1 Activa la deteccin de direccin e interrupcin.
0 Inhibe la deteccin de direccin y el bit 9 puede ser utilizado.
FERR: Error de trama:
1 Hay error de trama. 0 No hay error de trama.
OERR: Error de desbordamiento
1 Hay error de desbordamiento. 0 No hay error de desbordamiento.
RX9D: Bit 9 del dato Recibido. Usualmente se utiliza para el bit de paridad.

347
Formas de onda en la
transmisin asncrona
Otra manera de observar el funcionamiento del receptor serial, la podemos analizar de
acuerdo al diagrama de las formas de ondas involucradas.
En la figura se muestra una recepcin de tres datos simultneos. Cada vez que se
activa el bit de parada, se transfiere un dato a la FIFO, que es leda como el registro
RCREG, y se activa el bit RCIF de PIR1, que puede utilizarse para interrumpir al
programa principal del microcontrolador. Si la lectura del registro RCREG no se realiza,
y se llena la FIFO, Se colocar el bit OERR en 1, para indicar que hay un
desbordamiento, y que podran perderse datos.
INICIO
348
Velocidad de transmisin
La cantidad de datos que se pueden enviar por unidad de tiempo depende de la velocidad
de transmisin. A mayor velocidad, podremos transferir ms rpidamente los datos de
un dispositivo a otro, pero esto podra llevar algunos inconvenientes, tales como la
incompatibilidad de velocidad con el otro equipo, una mayor probabilidad de error, una
menor distancia de transmisin y una mayor dedicacin del microcontrolador al manejo de
los datos enviados y recibidos. El compromiso est en poder transmitir a la mayor
velocidad posible, sin que ocurra algn inconveniente de importancia, lo cual amerita un
estudio de mayor profundidad.
En los PIC16F87X, la velocidad de transmisin se puede obtener en base al oscilador
interno del microcontrolador o algn oscilador externo. Adems se cuenta con el
registro SPBRG, el cual fija la relacin de velocidad de transmisin en funcin de la
frecuencia del oscilador y el bit BRGH del registro TXSTA. A continuacin se presenta
esta relacin:

Velocidad de transmisin (Baudios o Bits/Seg) = f
osc
/K(X + 1)

Donde: X es el valor cargado en el registro SPBRG
K = 64 si BRGH = 0, y K = 16 si BRGH = 1

En las tablas de la siguiente pgina, podemos obtener las velocidades de transmisin
estandarizadas para la norma RS-232-C, en funcin de la frecuencia del oscilador y el
valor del registro SPBRG y el bit BRGH.
INICIO
349
Determinar la velocidad
de transmisin
En el caso de que BGRH=1, obtenemos la siguiente tabla:
En el caso de que BGRH=0, obtenemos la siguiente tabla:
INICIO
350
Pasos para configurar al mdulo
de transmisin serial asncrono
Para configurar el mdulo USART para una transmisin serial asncrona, se deber seguir
los siguientes pasos:
Configurar R6/TX/CK como salida y R7/RX/DT como entrada por medio de TRISC.
Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH.
Colocar SYNC = 0, para indicar que la transmisin es asncrona.
Colocar SPEN = 1, para habilitar al puerto serial.
Colocar los bits GIE y TXIE en 1 si se va a habilitar las interrupciones del
transmisor y el receptor.
Si el dato es de 9 bits, hacer TX9 = 1.
Se activa la transmisin con TXEN = 1, TXIF se colocar en 1, ya que TXREG se
encuentra vaco.
Se carga en TXREG el dato a transmitir, y comienza la transmisin.
Al comenzar la transmisin, si TSR estaba vaco, ste se cargar con el contenido de
TXREG, por tanto se podr colocar otro dato a enviar en TXREG. Para saber si se
puede cargar ese dato, bastar con evaluar el bit TXIF.
INICIO
351
Bits utilizados para la
transmisin asncrona
A continuacin se presentan los bits utilizados para configurar la transmisin asncrona
en el USART.
INICIO
En la siguiente pgina se muestra un programa ejemplo para seguir los pasos
mencionados anteriormente.
352
Pasos para configurar al mdulo
de recepcin serial asncrono
Para configurar el mdulo USART para una recepcin serial asncrona, en el caso en el
que no se haya configurado el bloque transmisor, se deber seguir los siguientes pasos:
Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH.
Colocar SYNC = 0, para indicar que la transmisin es asncrona.
Colocar SPEN = 1, para habilitar al puerto serial.
Colocar los bits GIE y RCIE en 1 si se va a habilitar las interrupciones del transmisor
y el receptor.
Si el dato es de 9 bits, hacer RX9 = 1.
Habilitar la recepcin al hacer CREN = 1
El mdulo de recepcin serial quedar configurado. Cuando un dato se recibe, el bit de
aviso RCIF se colocar en 1, y si el bit RCIE est habilitado, habr una interrupcin.
En ese momento se podr leer el registro RCSTA obtener el noveno bit (RX9D) y
determinar si hubo algn error en la recepcin (bits FERR y OERR). Para leer un
prximo dato, estos dos bits debern ser borrados al colocar en 1 el bit CREN.
Si no se encuentra errores, se leer el dato en el registro RCREG.
INICIO
353
Bits utilizados para la
recepcin asncrona
A continuacin se presentan los bits utilizados para configurar la recepcin asncrona
en el USART.
INICIO
En la siguiente pgina se muestra un programa ejemplo para seguir los pasos
mencionados anteriormente.
354
Programa de configuracin
del USART en modo asncrono
; Configuracin del USART para transmisin y recepcin serial asncrona
BCF STATUS, RP1
BSF STATUS, RP0 ; Seleccin del banco 1 para configurar TRISC
MOVLW b10xxxxxx ; Palabra de configuracin del puerto C
MOVWR TRISC ; Configura las lneas RC7 como entrada y RC6 como salida
MOVLW BAUDIOS ; Establece la velocidad de transmisin, el valor de
MOVWF SPBRG ; BAUDIOS se calcula segn la tablas de SPBRG
MOVLW 0x40 ; Transmisin de 8 bits, modo baja velocidad
MOVWF TXTA ; Modo asincrnico, habilitacin del USART
BSF PIE1,TXIE ; Habilita interrupcin del transmisor
BSF PIE1,RCIE ; Habilita interrupcin del receptor
BCF STATUS,RP0 ; Seleccin del banco 0
MOVLW 0x90 ; Recepcin de 8 bits, receptor habilitado,
MOVWF RCSTA ; Puerto serial habilitado
INICIO
355
Configuracin para la recepcin
de una direccin
La deteccin de direcciones en un mdulo de comunicacin serial tiene aplicaciones en
sistemas en donde varios equipos se conectan juntos. Para configurar el mdulo USART
para la recepcin de una direccin, se siguen prcticamente los mismos pasos que en la
recepcin de un dato, con la diferencia de que en el caso de detectar una direccin, se
deber habilitar el bit ADDEN del registro RCSTA:
Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH.
Colocar SYNC = 0, para indicar que la transmisin es asncrona.
Colocar SPEN = 1, para habilitar al puerto serial.
Colocar los bits GIE y RCIE en 1 si se va a habilitar las interrupciones del transmisor
y el receptor.
Si el dato es de 9 bits, hacer RX9 = 1.
Colocar en 1 el bit ADDEN para habilitar la lectura de la direccin.
Habilitar la recepcin al hacer CREN = 1
El mdulo de recepcin serial quedar configurado. Cuando una direccin se recibe, el
bit de aviso RCIF se colocar en 1, y si el bit RCIE est habilitado, habr una
interrupcin. En ese momento se podr leer el registro RCSTA obtener el noveno bit
(RX9D) y determinar si hubo algn error en la recepcin (bits FERR y OERR). Para leer
un prximo dato, estos dos bits debern ser borrados al colocar un 1 en CREN. Si se
obtuvo la direccin al leer el registro RCREG, se deber borrar el bit ADDEN, para la
lectura de datos.
INICIO
356
Algunos formatos de utilizados
en la transmisin asncrona
Quizs las interfaces ms comunes de comunicacin serial que utilizan el USART, son la
RS-232 y la RS-485. La mayora de los computadores personales tiene uno o ms
puertos que utilizan la interfaz RS-232, la cual sirve para comunicarte con otro
dispositivo, tales como un ratn, un mdem o un programador de PICs. En el caso de la
interfaz RS-485, sta es muy utilizada en la industria, y permite comunicar un
dispositivo maestro con varios esclavos por medio de un par trenzado.
Entre las caractersticas del RS-232, se puede mencionar que utiliza comnmente dos
lneas de seal y la referencia o tierra. Las abreviaciones utilizadas para estas lneas
son: GND que es la referencia, TXD que es la salida a transmitir y RXD que es la
entrada a recibir. Existen tambin otras lneas que pueden ser utilizadas en algunos
casos para el protocolo. Sin embargo, lo comn es que se utilicen slo estas tres lneas.
Los conectores ms comunes utilizados para las interfaces RS-232 son los de 9
terminales y un poco menos los de 25 terminales. En la parte posterior de tu
computador podrs observar si tienes una interfaz de 9 terminales machos, similar a la
que se presenta en la siguiente figura:



A pesar de las nueve lneas que se presentan en el conector, bastara con utilizar
solamente tres. En la figura de la siguiente pgina se muestra un esquema de la
conexin de dos elementos con la interfaz RS-232.
INICIO
357
Conexin RS-232
La figura muestra las lneas de transmisin y recepcin, ya que se sobreentiende que
stas estn referidas a tierra (GND) y representa el sistema ms sencillo de transmisin
bidireccional RS-232.
INICIO
Por lo general, una tensin positiva (mayor que +3Vdc) representa un 0 y una negativa
(menor que -3Vdc) representa un 1. Los elementos que se representan por medio de
un rectngulo a trazos, se les conoce con el nombre de Transceiver, y se utiliza para
convertir los niveles lgicos de 0 a 5V en los niveles de voltaje RS-232. Un ejemplo de
esta interfaz es el circuito integrado SN75155.
La comunicacin RS232 podra ser sencilla, ya que el USART transmite y recibe datos en
el formato de bytes. Esta transmisin se podr hacer ms compleja, si se incluye la
paridad, las seales de protocolo y el estado de break, el cual consiste en una salida
cero que se mantiene por un perodo en el orden de 100mS a 500mS.
INTERFAZ o TRANSCEIVER
2
3
358
Asignacin de terminales en un
conector RS-232
N Terminal Nombre DTE-DCE Funcin
1 DCD Detector de portadora de dato
2 RD Recepcin de datos
3 TD Transmisin de datos
4 DTR Terminal listo
5 SG Tierra de seales
6 DSR Dato listo en el DCE
7 RTS Responde para enviar
8 CTS Borrar envo
9 RI Indicador de llamada
INICIO
De estos terminales, los que se utilizan con ms frecuencia son: RD, TD y SG; es decir:
recepcin de datos, transmisin de datos y tierra de seales. Debemos recordar que en
el equipo de comunicacin, el tipo de conector es hembra y el terminal 2 corresponde al
de transmisin de datos y el 3 al de recepcin de datos.
5 4 3 2 1
9 8 7 6
A continuacin, en la siguiente tabla, se presenta la asignacin de cada terminal en la
mayora de los conectores macho RS-232-C de 9 pines que emplean terminales o
computadores. Adems se muestran las abreviaciones y los nombres de cada terminal, y
el sentido de flujo de datos entre un DTE (computador o terminal) y DCE (equipo de
comunicacin).
359
Utilizacin y configuracin del
puerto RS-232-C de tu PC
INICIO
Para hacer utilizacin del puerto serial de tu computador personal, podrs entrar en el
modo Hiperterminal. Para ello debers acceder a: Inicio, Programas, Accesorios,
Comunicaciones y luego a Hyper Terminal.
Aparecer entonces la siguiente ventana: En ella debers hacer doble clic en
Hypertrm
360
Utilizando tu PC en modo
Hyper Terminal
INICIO
Al acceder al Hyper Terminal, debers hacer la configuracin. Aparecer la ventana
que est a la izquierda, en ella podrs escoger algn icono y colocar un nombre como por
ejemplo Puerto Serial 1. Luego tendrs que hacer clic en Aceptar. Despus
aparecer la ventana que est a la derecha, en la cual podrs seleccionar el puerto
serial que utilizars.
Al hacer esto, aparecer un cuadro para configurar el puerto serial, en el cual debers
seleccionar los parmetros adecuados para la comunicacin con tu microcontrolador.
361
Configuracin del puerto RS-232-C
INICIO
En la siguiente ventana introducirs los parmetros del puerto de comunicacin serial de
tu computadora, y debers seleccionar los valores que sean compatibles con el del puerto
USART del PIC16F87X que t irs a programar.
Despus de configurar el puerto serial, tendrs lista tu PC para utilizar su puerto
serial. Lo que escribas desde el teclado, ser enviado por el terminal TX del puerto
serial, y los caracteres que veas en pantalla, sern aqullos que entran por el terminal
RX del mismo puerto.
Es importante que utilices la interfaz que convierta las seales del PIC a los niveles
establecidos por la norma RS-232C. Al final de este aparte te proponemos una
actividad en la que debers utilizar el puerto RS-232C.
362
Conexin RS-485
La interfaz RS-485 utiliza seales de transmisin en modo diferencial, de esta manera
hay dos seales de voltaje que indican su valor por su diferencia de potencial relativa.
Las salidas del RS-485 pueden ser tres estados, lo cual permite la conexin de varios
dispositivos para transmitir o recibir con el mismo par de seales. Los dispositivos se
configuran en un arreglo de un maestro y varios esclavos, y la transmisin puede
hacerse mediante un par de cables o dos pares de cables. La figura muestra el esquema
de conexin en una transmisin con dos pares de cables en donde las lneas son
conectadas a varios dispositivos.
INICIO
363
Implementacin RS-485
El software para la interfaz RS-485 puede ser significativamente ms complejo que el
de la interfaz RS-232. Se requiere un protocolo de comunicacin para arbitrar el bus,
y no exista colisin de datos al tratar de transmitir dos dispositivos a la vez.
Los buses RS-485 se suelen implementar con un maestro y varios esclavos. El
maestro es el nico dispositivo que inicia la comunicacin en el bus, para as evitar
problemas de colisiones. Esta comunicacin se comienza al enviar una direccin y un
comando, entonces el esclavo que est siendo seleccionado responder. Cada esclavo
deber tener una direccin diferente, y debe entender el formato de los datos que se
le envan. Adicionalmente cada dispositivo debe controlar la habilitacin de la seal de
salida en su transceiver.
Debido a que en el bus se conectan varios dispositivos esclavos, el USART debe utilizar
el modo de deteccin de direcciones, al habilitar el bit ADDEN del registro RCSTA.
Esto permitir que en una transmisin, los esclavos no seleccionados previamente
ignoren los bits de datos recibidos. Si en una transmisin, el maestro coloca en 1 el
bit ADDEN, se indica que se est transmitiendo una direccin a ellos. En el momento de
detectar el bit ADDEN, cada esclavo har la comparacin de la direccin recibida con
la que ellos tienen establecidas, y en el caso de coincidir, ese esclavo sabr que los
datos y comandos siguientes correspondern a l. Esto reducir y facilitar el software
de comunicacin entre varios dispositivos conectados en un mismo par de lneas.
Para ms detalles, debers conocer los formatos de cada protocolo, para que puedas
programar el USART en tu PIC. Algunos de los protocolos industriales que utilizan la
interfaz RS485 son: el ASCII ANSI X3 28-2.5-A4, el BSAP y el MODBUS, entre
otros.
INICIO
364
Transmisin Sncrona en
modo maestro
La transmisin sncrona con el USART se realiza en modo Half Duplex, es decir, la
transmisin y la recepcin no ocurren al mismo tiempo. Al transmitir un dato, la
recepcin se inhibe y viceversa, ya que stas se hacen por una misma lnea. La otra
lnea es utilizada para sincronizar los datos, es decir, saldrn los niveles del oscilador si
el transmisor es maestro o los recibir si es un dispositivo esclavo. La ventaja de la
transmisin sncrona, es que sta es ms sencilla y no requiere de una lgica complicada.
Para configurar el mdulo USART en la comunicacin serial sncrona en modo maestro
se colocarn en 1 los bits SYNC (modo sncrono) y CSRC (oscilador interno) del registro
TXSTA. Al habilitar el bit SPEN del registro RCSTA, se configuran los terminales
RC6/TX/CK como el que produce la seal de sincronizacin o reloj, y el terminal
RC7/RX/DT se utilizar como la lnea que enva y recibe datos.
La transmisin serial sncrona ocurre de manera similar a la asncrona. La gran
diferencia est en que la seal del oscilador de sincronizacin, la cual es producida por
el generador de baudios, se transmite simultneamente con la seal de datos.
Para configurar el mdulo USART para la transmisin sncrona en modo maestro, se
deber hacer pasos similares para la configuracin en modo asncrono. La nica
diferecncia ser que hay que hacer 1 los bits SYNC y CSRC del registro TXSTA.
En la siguiente pgina se muestran los bits involucrados en la transmisin serial sncrona
en modo maestro y las formas de ondas.

INICIO
365
Bits y formas de ondas relacionados
con la transmisin sncrona
INICIO
366
Comunicacin Sncrona en
modo esclavo
La transmisin sncrona en modo esclavo se diferencia de la del modo maestro en
que, en modo esclavo el oscilador que produce la sincronizacin de datos es externo al
dispositivo. Para especificar que el dispositivo trabaja en modo esclavo, se deber
colocar el bit CSRC = 0, el cual est en el registro TXSTA.
En el caso de la recepcin sncrona en modo esclavo, se siguen los mismos pasos que
en modo maestro.
Debido a que la sincronizacin en modo esclavo es externa, el dispositivo podr
trabajar en modo reposo. En este caso habr diferencias en la configuracin con
respecto al modo maestro.
INICIO
367
Registros asociados en la comunicacin
sncrona en modo esclavo
INICIO
368
Programa de configuracin
del USART en modo sncrono
; Configuracin de la transmisin serial sncrona

BCF STATUS,RP1
BSF STATUS,RP0 ; Seleccin del Banco 1
MOVLW BAUDIOS ; Establece la velocidad de transmisin
MOVWF SPBRG
MOVLW 0xB0 ; Transmisin de 8 bits, modo baja velocidad
MOVWF TXTA ; Modo sincrnico, habilitacin del USART
BSF PIE1,TXIE ; Habilita interrupcin del transmisor
BSF PIE1,RCIE ; Habilita interrupcin del receptor
BCF STATUS,RP0 ; Seleccin del banco 0
MOVLW 0x90 ; Recepcin de 8 bits, receptor habilitado,
MOVWF RCSTA ; Puerto serial habilitado
INICIO
369
Actividades
Ya hemos visto el funcionamiento del puerto universal sincrnico-asincrnico (USART).
En principio, te habamos mencionado la importancia de este puerto para realizar la
comunicacin con otros equipos, entre ellos, el computador.
La actividad que se propone, es la de que hagas un programa y montes un circuito que
sea capaz de leer una seal analgica, la convierta a digital y la enve al puerto RS-232
de tu computadora. Claro est, que debers utilizar una interfaz que convierta la seal
de 0 a 5V que maneja tu microcontrolador, en la de 12V a -12V que se emplea en el
estndar RS-232-C. Para ello, te proponemos que emplees el dispositivo de la figura
anexa, o uno similar. Por otro lado, debers adquirir un cable para la conexin RS-232,
el cual podrs comprar en una tienda de electrnica o computacin.
INICIO
SN75155
Recepcin
RS232C
Transmisin
RS232C
RC7/RX
del PIC
-12V
+12V
RC6/TX
del PIC
370
Registros asociados al Puerto C
INICIO
0000 0000 0000 0000 BF R/W UA S P D/A CKE SMP SSPSTAT 94h
0000 0000 0000 0000 SSPADD 93h
0000 0000 0000 0000 SEN RSEN PEN RCEN ACKEN ACKDT
ACKSTAT
GCEN SSPCON2 91h
0000 0000 0000 0000 SSPM0 SSPM1 SSPM2 SSPM3 CKP SSPEN SSPOV WCOL SSPCON 14h
uuuu uuuu xxxx xxxx SSPBUF 13h
0000 0000 0000 0000 RCREG 1Ah
0000 0000 0000 0000 SPBRG 99h
0000 0000 0000 0000 TXREG 19h
0000 -010 0000 -010 TX9D TRMT BRGH --- SYNC TXEN TX9 CSRC TXTA 98h
0000 000x 0000 000x RX9D OERR FERR ADDEN CREN SREN RX9 SPEN RCSTA 18h
--00 0000 --00 0000
CCP2M0 CCP2M1 CCP2M2 CCP2M3 CCP2Y CCP2X --- --- CCP2CON


1Dh
uuuu uuuu xxxx xxxx CCPR2H 1Ch
uuuu uuuu xxxx xxxx CCPR2L 1Bh
--00 0000 --00 0000
CCP1M0 CCP1M1 CCP1M2 CCP1M3 CCP1Y CCP1X --- --- CCP1CON 17h
uuuu uuuu xxxx xxxx CCPR1H 16h
uuuu uuuu xxxx xxxx CCPR1L 15h
1111 1111
1111 1111
uuuu uuuu
Otros
Resets
1111 1111
1111 1111
xxxx xxxx
Valor en
POR y BOR
TOCS
RC5
Bit 5
INTDG
RC6
Bit 6
RBPU#
RC7
Bit 7
OPTION_REG
TRISC
PORTC
Registro
PS0 PS1 PS2 PSA TOSE 81h, 181h
87h
RC0 RC1 RC2 RC3 RC4 07h
Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin
Registro de Configuracin de PORTC

Registro 1 de Captura, Comparacin y PWM menos significativo
Registro 1 de Captura, Comparacin y PWM ms significativo

Registro 2 de Captura, Comparacin y PWM menos significativo
Registro 2 de Captura, Comparacin y PWM ms significativo



Registro de datos a transmitir del USART
Registro de generacin de la velocidad de transmisin (Baudios)
Registro de datos recibidos del USART
Registro de datos transmitidos y recibidos del puerto serial sincrnico


Registro de Direcciones del puerto serial sincrnico en modo I
2
C
371
7.13 El Puerto D, el Puerto E
y la Interfaz Paralela
RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
E/S
DIGITAL
Bit 7 PSP Bit 6 PSP Bit 5 PSP Bit 4 PSP Bit 3 PSP Bit 2 PSP Bit 1 PSP Bit 0 PSP
INICIO
Los PIC16F870/872/873/876 no tienen los puertos D y E, as que la tabla aplica
solamente a los PIC16F871, PIC16F874 y PIC16F877.
El puerto D slo lo tienen los dispositivos de 40 terminales o ms. Dispone de 8 lneas
bidireccionales multiplexadas y, las que se usan como entradas, tienen un disparador
de Schmitt. El puerto D o PORTD, se ubica en la direccin 08h, mientras que TRISD
se encuentra en la 88h.
El puerto D puede utilizarse como puerto paralelo esclavo de 8 lneas (PSP). Para que
trabaje de esta manera, se deber colocar el bit PSMODE en 1. Este bit se ubica
en la posicin 4 del registro TRISE. Las lneas de control del puerto paralelo PSP, las
cuales son RD, WR y CS se encuentran en el puerto E
En la siguiente tabla, podemos observar la funcin de cada terminal del puerto D.
372
Diagrama de bloques del
Puerto Paralelo
INICIO
El puerto paralelo opera con palabras de 8 bits
cuando el bit de control PSPMODE, ubicado en
TRISE, se coloque en 1. En el caso de que el
puerto trabaje en modo esclavo, se podr leer
o escribir de manera asncrona por medio de los
terminales RE0/RD y RE1/WR respectivamente.
La interfaz paralela puede hacer del
microcontrolador, un dispositivo de comunicacin
con microprocesadores de 8bits. Para ello se
debern configurar los bits RE2/CS, RE1/WR y
RE0/RD como entradas de control que se
conectaran a la seleccin del dispositivo (CS), la
lectura RD y la escritura WR. Los datos se
conectarn a las lneas del puerto D, que al ser
bidireccionales, no tendr efecto el registro
TRISD en el puerto D.
En la siguiente figura se presenta el diagrama de
bloques del puerto paralelo. Al analizar este
diagrama, se podr comprender el funcionamiento
de las lneas del puerto D y las lneas de control
que se encuentran en el puerto E.
373
Formas de onda para
la escritura de datos
INICIO
La escritura en el puerto PSP ocurre al colocar en 0 las lneas CS y WR. Cuando
estas lneas pasan a 1, el bit IBF, el cual indica que el registro de entrada est
lleno, y est ubicado en el registro TRISE se establece en el perodo Q4 del siguiente
ciclo del oscilador del microcontrolador. La seal estar escrita cuando aparece el
pulso Q2 de ese ciclo. El bit de aviso de interrupcin PSPIF, ubicado en PIR1, se
establecer tambin en el perodo Q4 y se podr utilizar para interrumpir al
microcontrolador. Este bit se borrar al leer el dato en el puerto D en el programa
del microcontrolador. El bit de desbordamiento, IBOV, ubicado en TRISE, se
colocar en 1, si una nueva escritura se hace en el registro del PSP antes de
haberse ledo el dato que estaba en ese registro. En la siguiente figura se presentan
las formas de onda para la escritura de datos en el PSP.
374
Formas de onda para
la lectura de datos
INICIO
La lectura del PSP ocurre cuando se detecta un 0 en cada una de las lneas CS y
RD. El bit que indica que el registro de salida est lleno (OBF), ubicado en el registro
TRISE, se coloca en cero inmediatamente, para indicar que el puerto D est a la
espera de ser ledo por el bus externo. Al colocar el bit CS o RD en 1, el bit de
interrupcin PSPIF se coloca en 1 en el perodo Q4 del ciclo del oscilador del
microcontrolador, para indicar que la lectura ha sido realizada. En la siguiente figura
se presentan las formas de onda para la lectura de datos.
375
Registros asociados al
Puerto Paralelo
INICIO
La ventaja de utilizar al puerto paralelo como elemento controlado por otro dispositivo
externo, es que nos permite hacer transferencias de datos de un dispositivo a otro de
manera ms rpida e independiente, y para ello se utilizaran las interrupciones.
En la siguiente tabla se encuentran los bits asociados al puerto paralelo.
376
Registros Asociados a PORTD
INICIO
0000 -111
1111 1111
uuuu uuuu
Otros
Resets
0000 -111
1111 1111
xxxx xxxx
Valor en
POR y BOR
IBOV
RD5
Bit 5
OBF
RD6
Bit 6
IBF
RD7
Bit 7
TRISE
TRISD
PORTD
Registro
PSP
MODE
89h
88h
RD0 RD1 RD2 RD3 RD4 08h
Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin
Registro de Configuracin de PORTD
Registro de
Configuracin de PORTE
377
El Puerto E
INICIO
El puerto E o PORTE ocupa la direccin 09h, dispone de 3 lneas bidireccionales,
multiplexadas con otras funciones relacionadas con el control del puerto paralelo
esclavo (PSP) y las entradas del Convertidor Analgico a Digital.
Los PIC16F870/872/873/876 no tienen los puerto D y E, as que la tabla aplica
solamente a los PIC16F871, PIC16F874 y PIC16F877.
La configuracin del puerto E se realiza por medio del registro TRISE.
Lectura en el modo
PSP (RD)
Entrada Analgica
5
E/S DIGITAL
RE0/RD#/AN5
Escritura en el modo
PSP (WR)
Entrada Analgica
6
E/S DIGITAL
RE1/WR#/AN6
Seleccin de Chip en
el modo PSP (CS)
Entrada Analgica
7
E/S DIGITAL
RE2/CS#/AN7
0000 -111
Otros
Resets
0000 -111
Valor en POR
y BOR
IBOV
Bit 5
OBF
Bit 6
IBF
Bit 7
TRISE
Registro
---
PSP
MODE
89h
Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin
Configuracin de las
Entradas/Salida Digitales
378
Actividades
INICIO
Con este aparte finalizamos la descripcin de los mdulos de los PIC16F87X. La
primera actividad propuesta, relacionada con el puerto paralelo, ser la de conectar
dos microcontroladores entre s por medio del puerto paralelo. Debers enviar datos
desde uno a otro, mediante un programa que t mismo elaborars. Recuerda utilizar
las lneas de control RD, WR y CS, para el control del flujo de datos.
Otra actividad que podrs realizar, es la de transferir datos desde el puerto paralelo
de tu computadora. Para ello, debers buscar informacin de cmo se conectan las
lneas de este puerto.
379
7.14 Palabra de Configuracin
La palabra de configuracin es una posicin reservada en la memoria de programa, que
se ubica en la posicin 2007h, y slo se puede acceder a ella en el momento de la
grabacin del PIC. Los bits de esta palabra determinarn algunas caractersticas de
funcionamiento del microcontrolador.
B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
CP1 CP0 - Debug WRT CP0 LVP BODEN CP1 CP0 PWRTE# WDTE FOSC1 FOSC0
Los bits FOSC0, FOSC1, WDTE y PWRTE# se configuran de la misma manera que en
los PIC16F84A y PIC16C54 (repasar). CP1 y CP0 se utilizan para proteger secciones de
la memoria de programa, y stas dependen de los modelos del PIC que se va a utilizar.
Para ms detalles, vase la tabla de la pgina siguiente.
BODEN. Habilitacin de inicializacin por cada de tensin. 1 Habilitada, 0 Deshabiltada.
LVP. Habilitacin para programar en bajo voltaje. 1 RB3 habilitada, 0 RB3 funciona
como E/S digital y la programacin se realizar por alto voltaje.
CPD. Proteccin de la memoria EEPROM de datos. 1 No protegida, 0 Protegida
WRT. Habilitacin para la escritura de la memoria de programa FLASH. 1 Se podr
escribir en la parte no protegida de la FLASH, 0 No se permitir la escritura.
Debug. Modo de depuracin del circuito. 1 Desactivado. RB7 y RB6 actuarn como lneas
de E/S. 0 Activado. RB7 y RB6 actan en modo de depuracin. La depuracin
se podr hacer desde el MPLAB.

INICIO
380
Proteccin de la memoria de
programa de los PIC16F87X
Modelo PIC CP1 CP0 Direccin
inicial de
proteccin
Direccin final
de proteccin
PIC16F870/871/872 0 0 TODO PROTEGIDO
PIC16F873/874 0 0 0000H 0FFFH
PIC16F873/874 0 1 0800H 0FFFH
PIC16F873/874 1 0 0F00H 0FFFH
PIC16F876/877 0 0 0000H 1FFFH
PIC16F876/877 0 1 1000H 1FFFH
PIC16F876/877 1 0 1F00H 1FFFH
Todos los modelos 1 1 NO PROTEGIDO
INICIO
Conclusin
E Hemos hablado acerca de lo que puedes hacer con los microcontroladores PIC y has visto
la descripcin de algunos de ellos, desde el ms bsico, el PIC16C54, hasta los de la gama
media de la serie PIC16F87X. Entre ellos podrs considerar sus potencialidades a la hora
de hacer algn diseo.
E Has aprendido las instrucciones del lenguaje ensamblador y la forma en que puedes
desarrollar programas y grabarlos para realizar varias aplicaciones.
E Has visto cmo trabajan los mdulos de circuitos incluidos en los diferentes
microcontroladores y cmo acceder a sus registros de configuracin. Pudiste observar
tambin la importancia de estos mdulos para el desarrollo de interfaces con el mundo
exterior.
E En el anexo 5 te presentamos algunos circuitos, notas de aplicacin y direcciones de
Internet, los cuales te ayudarn a ampliar los conocimientos sobre los microcontroladores
PIC.
E Tu estudio siguiente lo podrs hacer en los microcontroladores PIC18FXXX, lenguaje C, y
los procesadores de seal dsPIC o TMS320.
E Finalmente, te deseamos el mejor de los xitos, y si encuentras alguna sugerencia para
mejorar y promocionar este material, podrs escribir un correo electrnico a la direccin:
calvarezluz@cantv.net
INICIO
ANEXOS
E ANEXO 1. GLOSARIO
E ANEXO 2. EXPLICACIN DETALLADA DE LAS INSTRUCCIONES
E ANEXO 3. DIRECTIVAS DEL LENGUAJE ENSAMBLADOR
E ANEXO 4. REGISTROS Y BITS DE FUNCIONES ESPECIALES
E ANEXO 5. INTERFACES Y PROYECTOS CON
MICROCONTROLADORES PIC
E ANEXO 6. ACTUALIZACIN DEL PICSTART PLUS
E ANEXO 7. GRABACIN DE UN PROGRAMA EN LOS PIC16F87X
INICIO
383
INICIO
384
Smbolo matemtico que indica mayor o igual que.

Smbolo matemtico que indica menor o igual que.

<> Los valores que estn encerrados en estos smbolos, indican bits que
estn asignados a un registro.

El valor que est debajo de una lnea continua, indica que est
negado o invertido lgicamente.
INICIO
385
Acceso: Entrada de datos a un lugar de memoria o puerto.

Actuador: Elemento de accin final en un sistema de control.

A/DC: Convertidor Analgico a digital.

ADD: Instruccin que ejecuta la operacin suma o adicin.

Analgico: Se dice a aquella seal o funcin que vara de forma
continua en el tiempo.

AND: Instruccin que ejecuta la operacin lgica AND, la cual
tiene como resultado 0, cuando cualquiera de sus entradas
es 0.

INICIO
386
Aritmtica: Operacin matemtica, normalmente se refiere a una
instruccin que ejecuta una suma, resta, incremento o
decremento.
Arquitectura: Estructura interna de un microcontrolador donde se ubica
sus elementos y la interconexin entre ellos.
ASCII: Se refiere a un formato internacional de caracteres, en los
que un cdigo binario corresponde a una letra, nmero o
signo utilizado en un idioma. Tambin corresponde a un
protocolo de comunicacin entre varios dispositivos. El
protocolo ASCII ANSI X3 28-2.5-A4, corresponde a una
norma de comunicacin industrial en los que varios
dispositivos se conectan a un par de cables.
Asincrnico: Que no est sincronizado con otra seal.
Atmel: Fabricante de semiconductores.
INICIO
387
B (b): Posicin de un bit en un registro.

Bajo consumo: Que absorbe poca potencia.

Bsica: Se refiere a la gama de los microcontroladores con
palabras de instruccin de 12 bits.

Bidireccional: Que puede transferir datos en las dos direcciones.

Bit: Es la mnima unidad de informacin. Puede valer 0
1.

Booleano: Se refiere a la lgica o los elementos digitales.

Boole: Matemtico que desarroll el lgebra que lleva su
nombre y los postulados de lgica que se usa como
base para la elaboracin de funciones digitales.
INICIO
388
Borrado: Accin de colocar los datos con valor 0. En el caso de
las memorias EPROM, EEPROM y FLASH, la accin de borrar
significa colocar todos los datos en 1.

BSAP: Se refiere a las siglas Bristol Synchronous Asynchronous
Protocol. Es un protocolo utilizado para el control y
supervisin de sistemas de control.

Bus: Lneas que agrupan direccin, datos o seales de control.

Byte: Octeto o agrupacin de 8 bits.
INICIO
389

C: Lenguaje de programacin de alto nivel. Es muy utilizado
para compilar programas a lenguaje de mquina.
CAN: Protocolo de comunicacin serial utilizado en la industria.
Call: Instruccin que consiste en llamar a una rutina o
subprograma.
Capacitor: Condensador elctrico.
Carry o C: Es el bit 0 del registro STATUS, que indica cundo en una
operacin de suma se lleva un acarreo, o en una resta se
lleva un dbito.
Cero: Valor nulo.
C
ext
: Condensador externo.
Chip: Circuito integrado.
Ciclo: Perodo en el cual transcurre una instruccin.

CLEAR: Instruccin de borrado o puesta a cero de un dato.


INICIO
390
CLK: Reloj o seal de oscilacin que define la frecuencia de
trabajo del microcontrolador.

CMOS: Tecnologa digital de bajo consumo, basada en el uso de transistores
MOS complementarios (Complementary Metal Oxide Semiconductor).

CLKOUT: Seal de salida del reloj o CLK.

Comparador: Elemento que lee dos magnitudes y las compara.

Complemento: Obtencin del valor opuesto.

Configuracin: Efecto de establecer unas condiciones que definen algunas
funciones permanentes de un dispositivo.

Contador: Registro que efecta la accin de contar.

Control: Organizacin de determinada informacin.

CPU: Central Processor Unit Unidad central de
Procesamiento. Microprocesador.
INICIO
391
D/AC: Convertidor Digital a Analgico.

Dallas: Fabricante de Semiconductores

Dato: Cualquier valor que puede leerse o escribirse en un registro
o memoria o puerto

DC: Corriente Directa. Acarreo decimal (Decimal Carry)

Decimal Carry: Acarreo decimal referido a un nibble. Corresponde al bit 1
del registro STATUS. Cuando en una operacin suma (o
resta) se excede el valor 1111, se activa el Decimal Carry.

Decremento: Disminucin en una unidad el valor de un dato especfico.

Deshabilitar: Inhabilitar o inhibir las funciones de un elemento.
INICIO
392
Direccin: Valor numrico o etiqueta en donde se puede ubicar un
determinado dato o instruccin en una posicin de memoria.

Disparador de
Schmitt: Elemento que incorpora a su entrada un detector de
histresis, es decir que compara con dos valores, segn si la
seal a detectar tiene pendiente positiva o negativa.

DRT: Temporizador interno que retarda la inicializacin del
microcontrolador en aproximadamente 18 mseg.
INICIO
393
EEPROM: Memoria para lectura solamente, a la que se le puede grabar
con pulsos elctricos. Esta memoria se puede usar para
guardar datos, que deben mantenerse, aun al quitar la
alimentacin de la memoria.

Ejecucin: Accin de realizar la instruccin o instrucciones de un
programa.

Embedded: Elemento dentro de otro, normalmente se refiere al
microcontrolador como un sistema dentro de un chip

Emulador: Elemento que imita al microcontrolador, y que posee los mismos
terminales que ste, y una conexin a la computadora.
ste se inserta en el conector destinado al
microcontrolador en un prototipo, y mediante
la computadora se puede observar y corregir
el programa que est en el sistema diseado
INICIO
394
Entrada: Terminal de conexin cuya seal se dirige hacia un dispositivo.

Entrada-Salida: Terminales de conexin al microcontrolador que pueden
emplearse como entrada o salida.

EPROM: Eraseble Programable Read Only Memory Memoria de
slo lectura, que puede ser borrada con luz ultravioleta,
y luego puede ser regrabada.

Escalamiento: Efecto de cambiar de escala a un valor.

Escribir: Almacenar un dato en una memoria, registro o puerto.

Escritura: Almacenamiento de un dato en una memoria, registro
o puerto.

EXOR: Instruccin que ejecuta la funcin lgica o exclusivo. Esta
instruccin definida para dos entradas tiene como resultado 0,
si las dos entradas son iguales. Tiene como resultado 1 si las
dos entradas son diferentes.
INICIO
395
F: Apuntador de direcciones de los registros de la memoria de
datos.
FIFO: De las siglas First In First Out (Primero entrado, primero
salido. Se refiere a las memorias cuyos datos van a una pila,
y el dato que se lee es el que entr de primero.
Flash: Memoria de programa que puede borrar grupos de datos por
medio de pulsos elctricos.
F
OSC
: Frecuencia del oscilador del microcontrolador (reloj).
FSR: Registro apuntador de direcciones de la memoria de datos.
Gama: Grupo.
GOTO: Instruccin utilizada para cambiar la direccin de
ejecucin del programa.
y
INICIO
396
e
Handbook: Manual del fabricante.
Harvard: Arquitectura que consiste en separar la memoria de programa
de la de datos.
Hitachi: Fabricante japons de semiconductores.
Hz: Unidad de frecuencia que indica Hertz o ciclo por segundo.
I2C I
2
C: Protocolo de comunicacin serial desarrollado por Philips. Este
protocolo permite comunicar varios dispositivos utilizando
nicamente dos lneas y el comn.
I/O: Entrada/Salida.
Incremento: Aumenta en una unidad el valor de un dato especfico.
IND: Registro de acceso indirecto, cuya direccin est dada
por el registro FSR.
INICIO
397
Inicializacin: Accin y efecto de dar valores iniciales a un dispositivo.

Instruccin: Accin que se desea que ejecute una lnea de un programa.

INTCON: Registro de control de interrupciones

Intel: Fabricante estadounidense de microprocesadores y otros
semiconductores.

Interfaz: Punto de enlace entre dos medios. Normalmente se aplica a las
entradas y salidas de una computadora con el medio.

Interrupcin: Detencin momentnea de un programa, debido al llamado de
un elemento que necesita ser atendido por medio de una
rutina.

IOR: Instruccin que ejecuta la funcin lgica OR (inclusivo).

INICIO
398
y
K: Prefijo que significa 1000. Letra que se utiliza para designar
a una constante.

K: Unidad de resistencia elctrica equivalente a 1000 ohmios.

LCD: Pantalla de cristal lquido (Liquid Crystal Display).

Lectura: Obtencin de un dato de una memoria, registro o puerto.

Leer: Accin y efecto de obtener un dato desde una memoria,
registro o puerto.

Literal: Valor constante o etiqueta.

Lgica: Que se relaciona con el lgebra de Boole o elementos
digitales. Slo toma dos valores: 0 1.

LSB: Bit menos significativo o de menor peso.
(Least Significant bit).

INICIO
399
MCLR: Entrada de inicializacin del dispositivo. Se activa con 0. Este
terminal tambin tiene la funcion Vpp, que es la tensin de
programacin els microcontrolador.
MCS: Micro-Computer System. Se refiere a un sistema realizado
con microcomputador e interfaces.
MCU: Microcontroller Unit. Se refiere a un microcontrolador.
Media: Se refiere a la gama de los microcontroladores que tienen
palabras de instruccin de 14 bits.
Memoria Memory: Elemento capaz de almacenar informacin (datos o programas).
Programming: Grabacin o programacin de una memoria.
MHz: Unidad de frecuencia equivalente a un milln de Hertz.
Microchip: Fabricante estadounidense de semiconductores.
Microcomputadora: Computadora pequea, antes se refera as a un microcontrolador.
Microcontrolador: Dispositivo que est compuesto de un microprocesador,
memorias, puertos, temporizadores y algunos otros
elementos,que ejecuta una o ms funciones
especficas de acuerdo a su programacin y conexin.


INICIO
400
Microprocesador: Elemento que consta de una unidad de control, registros y
unidad de lgica y aritmtica, capaz de realizar funciones de
procesamiento y cmputo.
MIPS: Millones de instrucciones por segundo, esto da una idea de la
velocidad de procesamiento de un microprocesador o
microcontrolador.
MODBUS: Protocolo industrial utilizado para el control de procesos.
MODEM: Se refiere al trmino Modulador Demodulador, y es un
dispositivo que se emplea para transmitir y recibir seales por
medio de la modulacin y demodulacin de la misma.
Motorola: Fabricante estadounidense de semiconductores y equipos de
comunicacin.
MOVE: Instruccin que transfiere un dato de un lugar a otro.
MPLAB: Software de ambiente de desarrollo para los PIC.
MSb: Bit ms significativo o de mayor peso. (More Significant bit).
mseg o ms: Unidad de tiempo que representa una milsima de segundo.
Mux: Multi-seleccionador o multiplexer, elemento que conmuta varias
seales.
INICIO
401

National
Semiconductor: Fabricante estadounidense de semiconductores.

NEC: Fabricante japons de semiconductores.

Nibbles: Agrupacin de 4 bits.

NMOS: Tecnologa digital basada en transistores MOSFET canal N.

NOP: Instruccin que no ejecuta ninguna operacin.

nSeg: Unidad de tiempo que representa una milmillonsima parte de
segundo.


INICIO
402
OPTION: Registro que configura el escalamiento del TMRO o el WDT.

OR: Funcin lgica cuyo resultado es 1, cuando cualquiera de sus
entradas es 1.

Oscilador: Circuito capaz de producir una seal cclica a una frecuencia
estable.

OSC1/CLKIN: Es una de las conexiones para un cristal resonador, que fije
la frecuencia de oscilacin. En el caso de no utilizar un
cristal resonador, ese terminal se podr conectar a la
entrada de un oscilador externo.

OSC2/CLKOUT: Es la otra conexin para un cristal resonador. En modo RC,
sta es la salida de oscilacin que tiene un valor de
de la frecuencia de OSC1, y determina el tiempo de
duracin de un ciclo de instruccin.
OTP: Dispositivo programable una sola vez.

INICIO
403
PA: Puerto A (PORTA).

Paralelo: Se aplica a un conjunto de datos que se envan o reciben en
forma simultnea por un medio de transmisin que utiliza un
grupo de lneas.

PB: Puerto B. (PORTB).

PC: Contador de programa. Puerto C (PORTC).

PD: PD Bit 5 del registro STATUS que indica que el dispositivo
est en el modo SLEEP o Reposo. Puerto D (PORTD).

Perro Guardin: Watchdog, trmino con el que se le designa al temporizador
que hace la inicializacin del microcontrolador, cuando detecta
una condicin anormal.

Philips: Fabricante de semiconductores. Entre otras cosas es una
empresa considerada un gigante en productos electrnicos.

INICIO
404
PIC: Peripheral Interface Controller Sigla que identifica a los
microcontroladores de Microchip.

PICSTART PLUS: Programador para cualquier microcontrolador PIC.

Pila: Stack, registros donde se guardan las direcciones de retorno
de rutinas.

POR: Power on reset, circuito de inicializacin por encendido.

PORT: Nombre con el que se designa a cada puerto, el cual es una
interfaz o registro de conexin externa del microcontrolador.

Programa: Secuencia y efecto de escribir instrucciones que realizan una
funcin especfica.

Programador: Dispositivo que graba un programa en el microcontrolador.
Persona que desarrolla un programa.
INICIO
405
PROM: Programble Read Only Memory Memoria programable slo
para lectura.
PS: Bit que se encuentra en el registro OPTION, y que est
relacionado con el escalamiento. El bit PSA (Bit 3 de
OPTION), es el bit de asignacin al escalamiento, y los bits
PS0 - PS2 (Bits 0 al 2 de OPTION) estn relacionado con el
valor del escalamiento.
Puerto: Interfaz o registro de conexin externa a un microcontrolador.
Puerto Serial: Interfaz que transmite o recibe datos en una sola lnea. Los
datos se envan de manera secuencial en grupos de varios bits
y adems se incluyen bits de control.
Pull up: Conexin a la fuente de alimentacin positiva. Se refiere
normalmente a las resistencias que se conectan al voltaje de
alimentacin (V
DD
).
PWM: Pulse With Modulator Modulador de ancho de pulsos.
INICIO
406
RA0 RA4: Terminal de conexin del puerto A, el sufijo indica el bit que
corresponde a ese puerto.
RAM: Random Access Memory Memoria para escritura y lectura.
RB0 RB7: Terminal de conexin del puerto B, el sufijo indica el bit que
corresponde a ese puerto.
RC: Resistencia - Condensador. Terminal de conexin del puerto C,
el sufijo indica el bit que corresponde a ese puerto.
Registro: Elemento electrnico que almacena un dato.
Reloj: Seal producida por un oscilador que se utiliza como referencia
del tiempo.
Reset: Inicializacin. Efecto de dar condiciones iniciales a algo

INICIO
407
Resistencia: Elemento elctrico que se opone parcialmente al paso de la
corriente elctrica.

Resonante: Que tiene una frecuencia natural de oscilacin.

RET, RETURN: Instruccin de retorno. Se aplica cuando una rutina finaliza.

R
EXT
: Resistencia externa.

RISC: Conjunto reducido de instrucciones (Reduced Instruction Set).
Se utiliza en microprocesadores de alta velocidad.

Rodar: Desplazar los bits de un registro.

ROM: Read Only Memory Memoria slo para lectura.

Rotacin: Accin y efecto de desplazar los bits de un registro.

Rutina: Subprograma que se ejecuta en forma separada al
programa principal.

INICIO
408
Salida: Terminal de conexin cuya seal es generada por un dispositivo.

Salto: Cambio de direccin de la memoria de programa en forma no
secuencial.

Sensor: Elemento que detecta una variable fsica y la convierte en seal
elctrica.

Serial: Se aplica a los datos que entran o salen uno por uno o bit por
bit en una sola lnea de transmisin.

SGS-THOMSON: Fabricante europeo de semiconductores.

Siemens: Fabricante europeo de semiconductores.

INICIO
409
Sincrnico: Que ocurre a la par de otra seal gua.

Sleep: Dormir. Se emplea para decir que un dispositivo est en reposo,
y por tanto disminuye el consumo de potencia.

Stack: Pila de registros donde se almacenan las direcciones de retorno
de las rutinas.

STATUS: Registro donde se guarda los bits de control de un
microprocesador.

SUB: Instruccin que ejecuta la resta de dos valores.

Subrutina: Subprograma de una rutina.

SWAP: Instruccin que intercambia la posicin de los nibles
(agrupacin de 4 bits) de un registro.

INICIO
410
INICIO
Tecnologa Se refiere al tipo de semiconductor utilizado en los dispositivos
Dgital: lgicos. Destacan: TTL, CMOS, NMOS, ECL, PMOS, etc.

Temporizador: Timer, elemento que contabiliza el tiempo.

Terminal: Conexin fsica de un elemento.

Texas Fabricante estadounidense de semiconductores. Son muy
Instruments: conocidos los DSPs que fabrica esta compaa.

Tiempo Tiempo por el cual no se ejecutar una accin alguna, hasta que
de espera: ste se acabe.

Timer: Temporizador, elemento que contabiliza el tiempo.

TMRO: Temporizador 0. Contiene una longitud de 8 bits.

TO: Tiempo de espera (time out). TO corresponde al bit 4 del
registro STATUS, e indica si la ejecucin del programa
de un microcontrolador, ha sido interrumpido por el WDT.

411
TOCKI: Es el terminal que corresponde a la base de tiempo del
temporizador 0 (TMR0). Debe colocarse a Vss o VDD en el caso
de no utilizarse, para reducir el consumo de energa.

TOCS: Bit 5 del registro OPTION, que se utiliza como seleccin de la
fuente del temporizador 0.
TOSE: Bit 4 del registro OPTION, que se utiliza como seleccin de la
transicin de la fuente del temporizador 0.
Toshiba: Fabricante japons de semiconductores.
Transferencia: Mover un dato de un registro, memoria o puerto a otra posicin.
Tres estados: Son salidas de dispositivos lgicos que tienen, adems de los
estados 0 y 1, un tercer estado que es el de alta
impedancia o desconexin. Esto es til para la transferencia de
datos de forma bidireccional.
TRIS: Registro de programacin de los puertos del microcontrolador.


INICIO
412
y
USART: Transmisor y receptor universal sincrnico o asincrnico.

V
DD
: Terminal que se conecta al voltaje de alimentacin positiva en
circuitos MOS. En el caso de los microcontroladores PIC, la
tensin a aplicar en este terminal deber estar comprendida
entre 3V y 6V.

Verify
Specification: Verificacin de especificacin.

V
SS
: Terminal que se conecta al voltaje de referencia o nulo (0V) en
circuitos electrnicos MOS.

Vpp: Tensin de programacin

INICIO
413
a
W: Registro de trabajo de los microcontroladores PIC.

Watchdog: Perro guardin, trmino con el que se le designa al
temporizador que hace la inicializacin del microcontrolador,
cuando detecta una condicin anormal.

WDT: Temporizador perro guardin o Watchdog timer.

XOR: Instruccin que ejecuta la funcin lgica o exclusivo, la cual
consiste en obtener un 0 si las dos entradas son iguales, y un
1 si stas son diferentes.

Z: Bit 2 del registro STATUS que se activa cuando un resultado es
igual a cero.

Zero: Cero o valor nulo.


INICIO
414
INICIO
415
Conjunto de instrucciones de los PIC16C5X,
PIC16F5X y 12C5X (Gama Bsica):
Cdigo En- Operadores
samblador
Descripcin
Notas
Bits STATUS
afectados
Cdigo de Operacin
Msb Lsb
Ciclos
ADDWF f,d Suma W con f 1 0001 11df ffff C, DC, Z 1,2,4
ANDWF f,d AND de W con f 1 0001 01df ffff Z 2,4
CLRF f Borra f 1 0000 011f ffff Z 4
CLRW - Borra W 1 0000 0100 0000 Z
COMF f,d Complementa f 1 0010 01df ffff Z
DECF f,d Decremento f 1 0000 11df ffff Z 2,4
DECFSZ f,d Decrementa f, salta si es 0 1(2) 0010 11df ffff 2,4
INCF f,d Incremento f 1 0010 10df ffff Z 2,4
INCFSZ f,d Incremento f, salta si es 0 1(2) 0011 11df ffff 2,4
IORWF f,d OR inclusivo de W con f 1 0001 00df ffff Z 2,4
MOVF f,d Mueve f 1 0010 00df ffff Z 2,4
MOVWF f Mueve W a f 1 0000 001f ffff 1,4
NOP - No operacin 1 0000 0000 0000
RLF f,d Rotacin izqu. a travs del Carry 1 0011 01df ffff C 2,4
RRF f,d Rotacin der. a travs del Carry 1 0011 00df ffff C 2,4
SUBWF f,d Resta W de f 1 0000 10df ffff C,DC,Z 1,2,4
SWAPF f,d Intercambia nibles de f 1 0011 10df ffff 2,4
XORWF f,d OR exclusivo de W con f 1 0001 10df ffff Z 2,4
OPERACIONES ORIENTADAS A BYTES
INICIO
416
OPERACIONES ORIENTADAS A BITS DE REGISTROS
Cdigo Ensamblador
Operadores Descripcin Notas
Bits de
STATUS
afectados
Cdigo de Operacin
Msb Lsb
Ciclos
BCF f,b Borra bit de f 1 0100 bbbf ffff 2,4
BSF f,b Pone un 1 a bit de f 1 0101 bbbf ffff 2,4
BTFSC f,b Salta si bit de f es 0 1(2) 0110 bbbf ffff
BTFSS f,b Salta si bit de f es 1 1(2) 0111 bbbf ffff
OPERACIONES CON LITERAL Y CONTROL
ANDLW K AND de K con W 1 1110 kkkk kkkk Z
CALL K Llamar a subrutina 2 1001 kkkk kkkk 1
CLRWDT K Borra temporizador WDT 1 0000 0000 0100 TOPD
GOTO K Salto incondicional 2 101k kkkk kkkk
IORLW K OR inclusivo de k con W 1 1101 kkkk kkkk Z
MOVLW K Mover valor k hacia W 1 1100 kkkk kkkk
OPTION K Mover valor k a OPTION 1 0000 0000 0010
RETLW K Retornar, asignar valor k a W 2 1000 kkkk kkkk
SLEEP - Habilita modo de bajo consum. 1 0000 0000 0011 TO, PD
TRIS f Mover valor de W a TRIS 1 0000 0000 0fff 3
XORLW k EXOR DE k con W 1 1111 kkkk kkkk Z
INICIO
417
Conjunto de instrucciones de los
PIC16CXXX, 16FXXX, 12C6XX, 12F6XX
Y 14CXXX (Gama media).
Cdigo Ensamblador
Operadores Descripcin Notas
Bits de
STATUS
afectados
Cdigo de Operacin
Msb Lsb
Ciclos
ADDWF f,d Suma W con f 1 00 0001 11df ffff C, DC, Z 1,2,4
ANDWF f,d AND de W con f 1 00 0001 01df ffff Z 2,4
CLRF f Borra f 1 00 0000 011f ffff Z 4
CLRW - Borra W 1 00 0000 0100 0000 Z
COMF f,d Complementa f 1 00 0010 01df ffff Z
DECF f,d Decremento f 1 00 0000 11df ffff Z 2,4
DECFSZ f,d Decrementa f, salta si es 0 1(2) 00 0010 11df ffff 2,4
INCF f,d Incremento f 1 00 0010 10df ffff Z 2,4
INCFSZ f,d Incremento f, salta si es 0 1(2) 00 0011 11df ffff 2,4
IORWF f,d OR inclusivo de W con f 1 00 0001 00df ffff Z 2,4
MOVF f,d Mueve f 1 00 0010 00df ffff Z 2,4
MOVWF f Mueve W a f 1 00 0000 001f ffff 1,4
NOP - No operacin 1 00 0000 0000 0000
RLF f,d Rotacin izq. a travs del Carry 1 00 0011 01df ffff C 2,4
RRF f,d Rotacin der. a travs del Carry 1 00 0011 00df ffff C 2,4
SUBWF f,d Resta W de f 1 00 0000 10df ffff C,DC,Z 1,2,4
SWAPF f,d Intercambia nibles de f 1 00 0011 10df ffff 2,4
XORWF f,d OR exclusivo de W con f 1 00 0001 10df ffff Z 2,4



OPERAECIONES ORIENTADAS A BYTES
INICIO
418
OPERACIONES ORIENTADAS A BITS DE REGISTROS
Cdigo Ensamblador
Operadores Descripcin Notas
Bits de
STATUS
afectados
Cdigo de Operacin
Msb Lsb
Ciclos
BCF f,b Borra bit de f 1 01 00bb bfff ffff 1,2
BSF f,b Pone un 1 a bit de f 1 01 01bb bfff ffff 1,2
BTFSC f,b Salta si bit de f es 0 1(2) 01 10bb bfff ffff 3
BTFSS f,b Salta si bit de f es 1 1(2) 01 11bb bfff ffff 3
OPERACIONES CON LITERAL Y CONTROL
ADDLW K Suma K con W 1 11 111x kkkk kkkk C,DC,Z
ANDLW K AND de K con W 1 11 1001 kkkk kkkk Z
CALL K Llamar a subrutina 2 10 0kkk kkkk kkkk
GOTO K Salto incondicional 2 10 1kkk kkkk kkkk
IORLW K OR inclusivo de k con W 1 11 1000 kkkk kkkk Z
MOVLW K Mover valor k hacia W 1 11 00xx kkkk kkkk
RETRE - Retorno de interrupcin 2 00 0000 0000 1001
RETLW K Retornar, asignar valor k a W 2 11 01xx kkkk kkkk
SLEEP - Habilita modo de bajo consum. 1 00 0000 0110 0011 TO, PD
SUBLW K Restar W del valor K 1 11 110k kkkk kkkk C,DC,Z
XORLW k EXOR de k con W 1 11 1010 kkkk kkkk Z
INICIO
419
ADDLW
Suma valor literal con W
Nota: Esta instruccin no est incluida en los PIC de la gama bsica
Cdigo Ensamblador: (Etiqueta) ADDLW K
Operadores: 0 K 255
Operacin: (W) + (K) (W)
Bits de estado que se afectan: C, DC, Z
Descripcin: Se suma el contenido del
registro W con el valor K
El resultado se coloca en W.

Ejemplo: ADDLW 0 x 15
Antes de la Instruccin
W = 0x10
Despus de la Instruccin
W = 0x25
INICIO
420
ADDWF Suma W y f
Cdigo Ensamblador: (Etiqueta) ADDWF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d (0,1)
Operacin: (W) + (f) (dest)
Bits de estado que se afectan: C, DC, Z
Descripcin: Suma los contenidos de los
registros W y f
Si d es 0, el resultado se coloca en
W, si d es 1, se coloca en f

Ejemplo: ADDWF FSR, 0
Antes de la Instruccin
W = 0x17
FSR = 0xC2
Despus de la Instruccin
W = 0xD9
FSR = 0xC2
INICIO
421
Cdigo Ensamblador: (Etiqueta) ANDLW k
Operadores: 0 K 255
Operacin: (W). AND.(K) (W)
Bits de estado que se afectan: Z
Descripcin: Se realiza la funcin lgica AND entre
los bits del registro W y el valor K.
El resultado se coloca en W.

Ejemplo: ANDLW 0x5F
Antes de la Instruccin
W = 0xA3
Despus de la Instruccin
W = 0x03

And del valor
literal con W
ANDLW
INICIO
422
ANDWF AND W con f
Cdigo Ensamblador: (Etiqueta) ANDWF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d (0,1)
Operacin: (W).AND. (f) (dest)
Bits de estado que se afectan: Z
Descripcin: Se ejecuta la funcin lgica AND entre
los bits del registro W y los bits del
registro f
Si d es 0, el resultado se coloca en
W, si d es 1, se coloca en f

Ejemplo: ANDWF FSR, 1
Antes de la Instruccin
W = 0x17
FSR = 0xC2
Despus de la Instruccin
W = 0x17
FSR = 0x02
INICIO
423
BCF Borra bit en f
Cdigo Ensamblador: (Etiqueta) BCF f,b
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7
Operacin: 0 (f<b>)
Bits de estado que se afectan: Ninguno
Descripcin: Se coloca en 0 bit b en registro f


Ejemplo: BCF FLAG_REG, 7
Antes de la Instruccin
FLAG_REG = =0xC7
Despus de la Instruccin
FLAG_REG = 0x47
INICIO
424
BSF Establece en 1 bit en f
Cdigo Ensamblador: (Etiqueta) BSF f,b
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7
Operacin: 1 (f<b>)
Bits de estado que se afectan: Ninguno
Descripcin: Se coloca en 1 bit b del registro f


Ejemplo: BSF FLAG_REG, 7
Antes de la Instruccin
FLAG_REG = =0x0A
Despus de la Instruccin
FLAG_REG = 0x8A
INICIO
425
Cdigo Ensamblador: (Etiqueta) BTFSC f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7
Operacin: Salta si (f<b>) = 0
Bits de estado que se afectan: Ninguno
Descripcin: Si bit b en el registro f es 0, entonces
se salta la siguiente instruccin, la cual
se haba preparado para ejecutar, pero se
descarta y se ejecuta un NOP, lo cual hace
que la instruccin dure dos ciclos. Si bit b
en f es 1, entonces la instruccin actual
se ejecuta en un ciclo, luego se ejecuta la
siguiente instruccin
Prueba bit en f,
salta si es cero
BTFSC
Ejemplo: AQU BTFSC FLAG, 1
FALSO GOTO COD_PROCESO
CIERTO
Antes de la Instruccin
PC = direccin (AQU)
Despus de la Instruccin
Si FLAG<1> = 0,
PC = direccin (CIERTO); Ejecucin en dos ciclos
Si FLAG<1> = 1,
PC = direccin (FALSO); Ejecucin en un ciclo
INICIO
426
Cdigo Ensamblador: (Etiqueta) BTFSS f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7
Operacin: Salta si (f<b>) = 1
Bits de estado que se afectan: Ninguno
Descripcin: Si bit b en el registro f es 1, entonces
se salta la siguiente instruccin, la cual
se haba preparado para ejecutar, pero se
descarta y se ejecuta un NOP, lo cual hace
que la instruccin dure dos ciclos. Si bit b
en f es 0, entonces la instruccin actual
se ejecuta en un ciclo, luego se ejecuta la
siguiente instruccin

BTFSS Prueba bit en f, salta si es 1
Ejemplo: AQU BTFSS FLAG, 1
FALSO GOTO COD_PROCESO
CIERTO
Antes de la Instruccin
PC = direccin (AQU)
Despus de la Instruccin
Si FLAG<1> = 0,
PC = direccin (FALSO); Ejecucin en un ciclo
Si FLAG<1> = 1,
PC = direccin (CIERTO); Ejecucin en dos ciclos

INICIO
427
CALL
Llamar a subrutina
Cdigo Ensamblador: (Etiqueta) CALL K
Operadores: 0 K 255
Operacin: (PC) +1 Tope de la pila (Stack);
K PC<7:0>;
(STATUS <6:5>) PC <10:9>;
0 PC <8>
Bits de estado que se afectan: Ninguno
Descripcin: Llama a subrutina. Primero la direccin de
retorno (PC+1) se coloca en la pila (Stack).
Los bits 8 de K se colocan en los bits
<7:0> del PC. Los bits <10:9> del PC toman
los valores de los bits <6:5> del STATUS.
El bit 8 del PC es colocado en 0. Esta
instruccin dura dos ciclos.

Ejemplo: AQU CALL ALLA

Antes de la Instruccin
PC = direccin (AQU)
Despus de la Instruccin
PC = direccin (ALLA)
TOS = direccin (AQU + 1)
INICIO
428
CLRF Borra f
Cdigo Ensamblador: (Etiqueta) CLRF f
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
Operacin: 00h (f);
1 Z
Bits de estado que se afectan: Z
Descripcin: El contenido del registro f es borrado
y el bit Z es puesto en 1
Ejemplo: CLRF FLAG_REG
Antes de la Instruccin
FLAG_REG = =0x5A
Despus de la Instruccin
FLAG_REG = 0x00
z = 1
INICIO
429
Cdigo Ensamblador: (Etiqueta) CLRW
Operadores: Ninguno
Operacin: 00h (W);
1 Z
Bits de estado que se afectan: Z
Descripcin: El registro W es borrado y el bit Z es
puesto en 1.

Ejemplo: CLRW
Antes de la Instruccin
W = 0x5A
Despus de la Instruccin
W = 0x00
z = 1
INICIO
430
Cdigo Ensamblador: (Etiqueta) CLRWDT
Operadores: Ninguno
Operacin: 00h WDT;
0 Escalamiento WDT (si es asignado
a ste);
1 TO;
1 PD
Bits de estado que se afectan: TO, PD
Descripcin: Borra el registro WDT y tambin al
escalamiento, si ste es asignado al
WDT y no al temporizador Timer0.
Los bits de estado TO y PD se ponen en 1

Ejemplo: CLRWDT
Antes de la Instruccin
Contador WDT = ?
Despus de la Instruccin
Contador WDT = 0x00
Escalamiento de WDT = 0
TO = 1
PD = 1
CLRWDT
Borra temporizador
perro guardin (WDT)
INICIO
431
Cdigo Ensamblador: (Etiqueta) COMF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) - 1 (dest)
Bits de estado que se afectan: Z
Descripcin: Se complementa el contenido del registro
f. Si d es 0, el resultado se coloca en
W, si d es 1, el resultado se coloca en
f.

Ejemplo: COMF REG1, 0
Antes de la Instruccin
REG1 = 0x13
Despus de la Instruccin
REG1 = 0x13
W = 0xEC
Complementa f
INICIO
432
Cdigo Ensamblador: (Etiqueta) DECF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) - 1 (dest)
Bits de estado que se afectan: Z
Descripcin: Decrementa el contenido del registro f.
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.

Ejemplo: DECF CNT, 1
Antes de la Instruccin
CNT = 0x01
Z = 0
Despus de la Instruccin
CNT = 0x00
Z = 1


Decremento de f
INICIO
433
Cdigo Ensamblador: (Etiqueta) DECFSZ f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) - 1 d; salta si el resultado = 0
Bits de estado que se afectan: Ninguno
Descripcin: Decrementa el contenido del registro f.
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.
Si el resultado es 0, entones se salta la siguiente
instruccin, la cual se haba preparado para ejecutar,
pero se descartta y se ejecuta un NOP, lo cual
hace que la instruccin dure dos ciclos.
Si el resultado es diferente de cero, en un ciclo, y luego
entonces la instruccin actual se ejecuta
se ejecuta la siguiente instruccin.

Decremento de f,
salta si es 0
Ejemplo: AQUI DECFSZ CNT, 1
GOTO LAZO
CONTI =
=
Antes de la Instruccin
PC = direccin (AQU)
Despus de la Instruccin
CNT = CNT - 1;
Si CNT = 0,
PC = direccin (CONTI); Ejecucin en dos ciclos
Si CNT 0,
PC = direccin (AQU+1); Ejecucin en un ciclo


INICIO
434
Cdigo Ensamblador: (Etiqueta) GOTO k
Operadores gama bsica: 0 k 512
Operadores gama media: 0 k 2047
Operacin gama bsica: k PC <8:0>
(STATUS <6:5> PC <10:9>
Operacin gama media: k PC <10:0>
(PCLATCH <4:3>) PC <12:11>
Bits de estado que se afectan: Ninguno
Descripcin: Salto incondicional. Los 9 bits de k se
colocan en los bits <8:0> del PC. Los
bits <10:9> del PC toman los valores de
los bits <6:5> del registro STATUS.
Esta instruccin dura dos ciclos

Ejemplo: GOTO ALLA

Despus de la Instruccin
PC = direccin (ALLA)


Salto Incondicional
INICIO
435
Cdigo Ensamblador: (Etiqueta) INCF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) + 1 (dest)
Bits de estado que se afectan: Z
Descripcin: Se incrementa el contenido de f
Si d es 0, el resultado se coloca
en W, si d es 1, el resultado se coloca
en f

Ejemplo: INCF CNT, 1

Antes de la Instruccin
CNT = 0xFF
Z = 0
Despus de la Instruccin
CNT = 0x00
Z = 1
Incremento de f
INICIO
436
Cdigo Ensamblador: (Etiqueta) INCFSZ f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) + 1 (dest), salta si el resultado = 0
Bits de estado afectados: Ninguno
Descripcin: Incrementa el contenido del registro f.
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.
Si el resultado es 0, entones se salta la siguiente
instruccin, la cual se haba preparado para ejecutar,
pero se descarta y se ejecuta un NOP, lo cual hace
que la instruccin dure dos ciclos. Si el resultado es
diferente de cero, entonces la instruccin actual se
ejecuta en un ciclo, y luego se ejecuta la siguiente
instruccin.

Ejemplo: AQUI INCFSZ CNT, 1
GOTO LAZO
CONTI =
=
Antes de la Instruccin
PC = direccin (AQU)
Despus de la Instruccin
CNT = CNT - 1;
Si CNT = 0,
PC = direccin (CONTI); Ejecucin en dos ciclos
Si CNT 0,
PC = direccin (AQU+1); Ejecucin en un ciclo



Incremento de f
salta si es 0
INICIO
437
Cdigo Ensamblador: (Etiqueta) IORLW k
Operadores: 0 K 255
Operacin: (W).OR.(K) (W);
Bits de estado que se afectan: Z
Descripcin: Se ejecuta la funcin lgica OR
(inclusivo) entre los bits del registro W
y los bits del valor literal k. El
resultado se coloca en W.
Ejemplo: IORLWF 0x35
Antes de la Instruccin
W = 0x9A
Despus de la Instruccin
W = 0xBF
Z = 0
OR Inclusivo de
valor literal con W
INICIO
438
Cdigo Ensamblador: (Etiqueta) IORWF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (W).OR.(F) (dest),
Bits de estado que se afectan: Z
Descripcin: Se ejecuta la funcin lgica OR
(inclusivo) entre los bits del registro W
y los bits del registro f.
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.
Ejemplo: IORWF RESULT, 0
Antes de la Instruccin
RESULT = 0x13
W = 0x91
Despus de la Instruccin
RESULT = 0x13
W = 0xBF
Z = 0

OR Inclusivo de W
con f
IORWF
INICIO
439
MOVF Mueve f
Cdigo Ensamblador: (Etiqueta) MOVF f,d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d 0,1
Operacin: (f) (dest)
Bits de estado que se afectan: Z
Descripcin: El valor de f se mueve hacia d. Si d
es 0, el valor se coloca en W, si d es 1,
el valor se coloca en f. Esta instruccin
es til para saber si el contenido de f es
cero, ya que se afecta al bit Z.

Ejemplo: MOVF FSR, 0

Despus de la Instruccin
W = Valor en el registro FSR
INICIO
440
Cdigo Ensamblador: (Etiqueta) MOVLW k
Operadores: 0 K 255
Operacin: K (W);
Bits de estado que se afectan: Ninguno
Descripcin: Se carga el valor de k en el
registro W.

Ejemplo: MOVLW 0x5A
Despus de la Instruccin
W = 0x5A
MOVLW
Mueve valor literal a W
INICIO
441
Cdigo Ensamblador: (Etiqueta) MOVWF f
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
Operacin: (W) (f)
Bits de estado que se afectan: Ninguno
Descripcin: Mueve el dato desde W a f

Ejemplo: MOVWF TEMP_REG

Antes de la Instruccin
TEMP_REG = 0xFF
W = 0x4F

Despus de la Instruccin
TEMP_REG = 0x4F
W = 0x4F

MOVWF
Mueve W a f
INICIO
442
Cdigo Ensamblador: (Etiqueta) NOP
Operadores: Ninguno
Operacin: No operacin
Bits de estado que se afectan: Ninguno
Descripcin: No hay operacin.
Simplemente se ejecuta un ciclo,
sin afectar nada.

Ejemplo: NOP
NOP No operacin
NO
INICIO
443
Nota: Esta instruccin no se recomienda utilizar en los PIC de la gama media.
Cdigo Ensamblador: (Etiqueta) OPTION
Operadores: Ninguno)
Operacin: (W) OPTION
Bits de estado que se afectan: Ninguno
Descripcin: El contenido de W es cargado al Registro
OPTION.

Ejemplo: OPTION

Antes de la Instruccin
W = 0x07
Despus de la Instruccin
OPTION = 0x07

OPTION
Carga el registro OPTION
INICIO
444
RETFIE
Retorno de Interrupcin
Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica
Cdigo Ensamblador: (Etiqueta) RETFIE
Operadores: Ninguno)
Operacin: TOS PC
Bits de estado que se afectan: 1 GIE
Descripcin: Retorno de una Interrupcin. El valor del
tope de la pila (TOS) es cargado en el
contador de programa (PC).
Las interrupciones se habilitan al poner
en 1 el bit de habilitacin global de
interrupciones (GIE). Este bit se encuentra
ubicado en el registro INTCON (bit 7).
Esta instruccin dura dos ciclos.
Ejemplo: RETFIE

Despus de la Instruccin
PIC = TOS
GIE = 1

INICIO
445
Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica

Cdigo Ensamblador: (Etiqueta) RETURN
Operadores: Ninguno)
Operacin: TOS PC
Bits de estado que se afectan: Ninguno
Descripcin: Retorno de una subrutina. El valor del
tope de la pila (TOS) es cargado en el
contador de programa (PC).
Esta instruccin dura dos ciclos.

Ejemplo: RETURN

Despus de la Instruccin
PC = TOS

RETURN Retorno de Interrupcin
INICIO
446
RETLW Retorno con valor literal en W
Cdigo Ensamblador: (Etiqueta) RETLW K
Operadores: 0 K 255
Operacin: K (W)
TOS PC
Bits de estado afectados: Ninguno
Descripcin: El registro W se carga con el valor del literal k. El
contador de programa PC se carga con el tope de la
pila (STACK, direccin de retorno). Esta instruccin
es til para convertir valores por medio de una tabla
de equivalencia, vase ejemplo. Esta instruccin dura
dos ciclos.
Ejemplo: CALL TABLA ;W contiene tabla de valores de la
;conversin. Despus de ejecutar la
;rutina, W tendr el valor convertido

TABLA ADDWF PCL ;W = desplazamiento
RETLW k0 ;Comienza tabla
RETLW k1

RETLW kn ;Final de la tabla
Antes de la Instruccin
W = 0x07
Despus de la Instruccin
W = valor de k7

INICIO
447
Cdigo Ensamblador: (Etiqueta) RLF f, d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d [0,1]
Operacin: Ver descripcin abajo
Bits de estado que se afectan: C
Descripcin: Los bits de f son rodeados (desplazados)
en un bit hacia la izquierda, pasando por el
bit Carry. El bit 0 de f, forma el valor
anterior del bit 7 de f.
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.
Ejemplo: RLF REG1, 0

Antes de la Instruccin
REG1 = 1110 0110
C = 0
Despus de la Instruccin
REG1 = 1110 0110
W = 1100 1100
C = 1

RLF
Rodar f a la Izquierda a
travs del Carry
INICIO
448
Cdigo Ensamblador: (Etiqueta) RRF f, d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d [0,1]
Operacin: Ver descripcin abajo
Bits de estado que se afectan: C
Descripcin: Los bits de f son rodeados (desplazados)
en un bit hacia la derecha, pasando por el
bit Carry. El bit 7 de f, toma el valor
anterior del bit Carry, y el bit Carry
toma el valor anterior del bit 0 de f
Si d es 0, el resultado se coloca en W,
si d es 1, el resultado se coloca en f.

Ejemplo: RRF REG1, 0
Antes de la Instruccin
REG1 = 1110 0110
C = 0
Despus de la Instruccin
REG1 = 1110 0110
W = 0111 0011
C = 0

RRF
Rodar f a la Derecha a
travs del Carry
INICIO
449
Cdigo Ensamblador: (Etiqueta) SLEEP
Operadores: Ninguno
Operacin: 00h WDT
0 Escalamiento del WDT;
1 TO
0 PD
Bits de estado que se afectan: TO, PD
Descripcin: Se coloca en 1 el bit TO del registro de
estado. Los bits de estado de: potencia
baja. El WDT y el escalamiento se colocan
en 0.
El procesador se coloca en estado
de reposo (SLEEP), el oscilador se
detiene y el consumo es mnimo.
Ejemplo: SLEEP

SLEEP
Entra en el modo de reposo
INICIO
450
Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica

Cdigo Ensamblador: (Etiqueta) SUBLW K
Operadores: 0 K 255
Operacin: K - (W) (W)
Bits de estado que se afectan: C, DC, Z
Descripcin: Se resta el contenido de W con el de
los 8 bits de k (en complemento a 2).
El resultado se coloca en W
Ejemplo 1: SUBLW 0x02
Antes de la Instruccin
W = 1
C = ?
Despus de la Instruccin
W = 1
C = 1; el resultado es positivo
Ejemplo 2: Antes de la Instruccin
W = 2
C = ?
Despus de la Instruccin
W = 0
C = 1; el resultado es 0
Ejemplo 3: Antes de la Instruccin
W = 3
C = ?
Despus de la Instruccin
W = FF
C = 0; el resultado es negativo



Resta W de Valor Literal
INICIO
451
Cdigo Ensamblador: (Etiqueta) SUBWF f, d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d [0,1]
Operacin: (f) - (W) (dest)
Bits de estado que se afectan: C, DC, Z
Descripcin: Se resta el contenido de W con el del
registro f (en complemento a 2).
Si d es 0, el resultado se coloca en W
Si d es 1, el resultado se coloca en f
Ejemplo 1: SUBWF REG, 1
Antes de la Instruccin
REG1 = 3, W = 2, C = ?
Despus de la Instruccin
REG1 = 1, W = 2, C = 1; el resultado es positivo
Ejemplo 2: Antes de la Instruccin
REG1 = 2, W = 2, C = ?
Despus de la Instruccin
REG1 = 0, W = 2, C = 1; el resultado es 0
Ejemplo 3: Antes de la Instruccin
REG1 = 1, W = 2, C = ?
Despus de la Instruccin
REG1 = FF, W = 2, C = 1; el resultado es negativo


Resta W de f
INICIO
452
Cdigo Ensamblador: (Etiqueta) SWAPF f, d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d [0,1]
Operacin: (f<3:0>) (dest<7:4>)
(f<7:4>) (dest<3:0>)
Bits de estado que se afectan: Ninguno
Descripcin: Los nibles (grupo de 4 bits) superiores e
inferiores de f son intercambiados
Si d es 0, el resultado se coloca en W
Si d es 1, el resultado se coloca en f.
Ejemplo: SWAPF REG1, 0

Antes de la Instruccin
REG1 = 0xA5
Despus de la Instruccin
REG1 = 0xA5
W = 0x5A

Intercambio de Nibles in f
INICIO
453
Nota: Esta instruccin no se recomienda utilizar en los PIC de la gama media.
Cdigo Ensamblador: (Etiqueta) TRIS f
Operadores: f = 5, 6 7
Operacin: (W) TRIS registro f
Bits de estado que se afectan: Ninguno
Descripcin: El registro TRIS f (f = 5, 6, 7) toma
el valor del contenido de W. El registro
TRIS es el de programacin de los
puertos como entrada o salida

Ejemplo: TRIS PORTA

Antes de la Instruccin
W = 0xA5
Despus de la Instruccin
TRISA = 0xA5

Carga valor al registro TRIS con W
INICIO
454
Cdigo Ensamblador: (Etiqueta) XORLW K
Operadores: 0 K 255
Operacin: (W).XOR.K (W)
Bits de estado que se afectan: Z
Descripcin: Se ejecuta la operacin lgica OR
Exclusivo entre el contenido W y el
valor literal k. El resultado se
guarda en W.

Ejemplo: XORLW 0xAF
Antes de la Instruccin
W = 0xB5
Despus de la Instruccin
W = 0x1a

OR Exclusivo valor literal con W
INICIO
455
Cdigo Ensamblador: (Etiqueta) XORWF f, d
Operadores: 0 f 31 (Gama bsica)
0 f 127 (Gama media)
d [0,1]
Operacin: (W).XOR.(f) (dest)
Bits de estado que se afectan: Z
Descripcin: Se ejecuta la operacin lgica OR
Exclusivo del contenido con el contenido
del registro f.
Si d es 0, el resultado se coloca en W
Si d es 1, el resultado se coloca en f.
Ejemplo: XORWF REG1, 0

Antes de la Instruccin
REG = 0xAF (B10101111)
W = 0xB5 (B10110101)
Despus de la Instruccin
REG = 0x1A (B00011010)
W = 0xB5 (B10110101)


OR Exclusivo de W con f
INICIO
456
INICIO
457
El lenguaje ensamblador provee una plataforma para desarrollar los cdigos
de los programas en los microcontroladores. En este anexo se expondr
una explicacin acerca de las opciones de comandos y las directivas que
ofrece este lenguaje.
En el momento en el que te dispones a ensamblar un programa editado, en
el MPLAB tendrs acceso a una ventana, tal como la que se muestra en la
siguiente pgina. All podrs establecer una serie de comandos de opcin
para que tengas la posibilidad de generar o no diferentes archivos que
provendrn de tu archivo editado o archivo fuente, el cual deber tener
un nombre y la extensin .asm. Por ejemplo, si el archivo que editaste
tiene como nombre miprog.asm, entonces podrs generar los siguientes
archivos:
miprog.lst, el cual te muestra una lista de los cdigos y smbolos
generados.
miprog.err, el cual te muestra una lista de los errores.
miprog.hex. Este archivo es el que contiene los cdigos del programa en
hexadecimal y es el que vas a grabar en el microcontrolador.
miprog.cod. Este archivo te muestra los smbolos y la depuracin.
miprog.hxl o .hxh, el cual separa los bytes del archivo hexadecimal.
INICIO
458
Opciones de las lneas
de comando
Para ensamblar un programa en el MPLAB seleccionas Project en el me principal y
luego Build Node, tendrs acceso a la ventana con las opciones de las lneas de
comando, tal como se muestra en la figura de abajo. En la siguiente pgina se
explica el significado de estos comandos que se establecern los archivos generados.
INICIO
459
Opcin Por defecto Descripcin
/a INHX8M Establece el formato del archivo .hex
/c On Habilita/deshabilita la sensitividad del caso
/d Ninguno Define smbolo: /dDebug /dMax=5 /dString=abc
/e On Habilita/Deshabilita la generacin del archivo de error
/l On Habilita/Deshabilita la generacin del archivo de listado
/m On Habilita/Deshabilita la expansin macro
/o On Habilita/Deshabilita la generacin del archivo .obj
/p Ninguno Selecciona el tipo de microcontrolador
/q Off Habilita/Deshabilita el modo de salida de pantalla
/r Hexadecimal Selecciona el tipo de formato numrico
/t 8 Coloca el nmero de espacios por Tabulacin
/w 0 Selecciona los mensajes: 0 = todos, 1 = errores y advertencias
2 = solamente errores
/x Off Habilita/Deshabilita la generacin de la tabla de referencia
Descripcin de las opciones
INICIO
460
Te recordamos que las directivas del lenguaje ensamblador son comandos que aparecen
en el lenguaje que t editas, pero que no se convierten en cdigos del programa del
microcontrolador. Ellas se utilizan para controlar la compilacin del programa que vas a
utilizar en el microcontrolador, es decir, dnde vas a colocar las direcciones de los
datos segn su nombre, en cul lnea comenzar una parte del programa, dnde termina
el programa, cules son las entradas y salidas, y otras especificaciones ms.
Las directivas del ensamblador se clasifican en:
Directivas de Control, que colocan secciones condicionales en el cdigo ensamblado.
Directivas de Datos, que asignan nombres a posiciones de memoria.
Directivas de Listado, que controlan el archivo de listado (.lst).
Directivas de macro, que controlan un grupo de comandos.
A continuacin te mostraremos una tabla de las directivas que puedes utilizar en el
lenguaje ensamblador.
INICIO
461
Directiva Descripcin Sintaxis Ejemplo
_ _BADRAM Especifica localidades invlidas en la RAM _ _badram <exp> _ _badram 87-89,91
CBLOCK

ENDC
Define un bloque de constantes, la
directiva ENDC debe colocarse al final
cblock[<exp>]
<etiq> <,etiq>
endc
cblock 0x20
nomb1, nomb2...
endc
_ _CONFIG Especifica bits de configuracin. Ver p 4-3 _ _config<exp> _ _config HFFFF
CONSTANT Declara constante de smbolo constant <etiq> constant long=125
DATA Crea Datos numricos y de texto <etiq> data <exp> data 1, 2, externa
DB Declara datos de un Byte <etiq> db <exp> db t, 0xd, e, 3
DE Define datos en EEPROM <etiq> de <exp> de miprog, 0
#DEFINE Define etiqueta de sustitucin de texto #define<nomb>
[<tex>]
#define long 20
DT Define tabla <etiq> dt <exp> dt val1, val2
DW Declara datos de una palabra <etiq> dw <exp> dw 27, W27, W29
ELSE Comienza alternativa despus de un IF
IF es un si condicional, ELSE = sino
else else
dw frio
END Finaliza bloque de programa end end
INICIO
462
Directiva Descripcin Sintaxis Ejemplo
ENDC Finaliza un bloque de constantes endc endc ;ver CBLOCK
ENDIF Finaliza un bloque condicional IF endif endif ;ver IF
ENDM Finaliza la definicin de una macro endm endm ;ver MACRO
ENDW Finaliza un lazo condicional While
Loop
endw endw ;ver WHILE
EQU Define una constante <etiq> equ <exp> portb equ 0x5
ERROR Crea un mensaje de error error <texto> error fuera escala
ERRORLEVEL Especifica los tipos de mensajes de
error en los archivos .lst y .err
errorlevel
0|1|2<+|-><num>
errorlevel 1, -212
EXITM Sale de una macro exitm exitm ;ver MACRO
EXPAND Escribe las macros en el archivo .lst expand expand
FILL Llena memoria <etiq> fill <exp> fill 0x100, 5
_ _IDLOCS Especifica localizaciones ID _ _idlocs <exp> idlocs 1234
INICIO
463
Directiva Descripcin Sintaxis Ejemplo
IF

ELSE

ENDIF
Comienza un bloque condicional. Se pregunta
por una condicin, si sta es cierta se ejecuta
la accin, sino se ejecuta la lnea siguiente. Si
en esa lnea aparece ELSE entonces se asigna
la accin que le sigue. El bloque IF se cierra
con ENDIF
if <exp>
<instruc>
<else <exp>>
<instruc>
endif
if temper > 100
dw caliente
else
dw frio
endif
IFDEF

IFNDEF
Se ejecuta si los smbolos se han definido

Se ejecuta si los smbolos no se han definido
ifdef <etiq>
<instruc>
endif
ifndef cierto
dw no_cierto
endif
#INCLUDE Incluye un archivo fuente adicional. Ver p2-
15
include <arch> include p16f84.inc
LIST Lista opciones. Ver tabla de opciones A3-3 list |<lista>| list p=16c71,r=dec
LOCAL Declara variable como macro local. Ver macro local <etiq> local
MACRO

ENDM
Declara definicin de macro. Una macro son
un conjunto de instrucciones que pueden ser
insertadas como cdigo fuente.
<etiq> macro
<instruc>
endm
leer macro d1, d2
movlw d1...
endm
_ _MAXRAM Especifica mxima direccin de la RAM _ _maxram<exp> _ _maxram 0x0bf
MESSG Crea un mensaje definido por el usuario messg <text> messg error 1
NOEXPAND Elimina macros del archivo .lst noexpand noexpand
INICIO
464
Directiva Descripcin Sintaxis Ejemplo
NOLIST Elimina lista de salida nolist nolist
ORG Especifica direccin de origen <etiq> org <exp> org 50 ;ver p2-18
PAGE Inserta salto de pgina en la lista page page
PROCESSOR Especifica el tipo de microcontrolador processor<tipo> processor 16f84
RADIX Especifica la base numrica a utilizar radix<base num> radix dec ;(hex, oct)
RES Reserva memoria <etiq>res <num> menres res 64
SET Define una variable en el ensamblador <label> set<exp> long set 0x12;
SPACE Inserta lneas vacas en el archivo .list space <exp> space 3
SUBTITLE Especifica subttulo del programa subtitle <texto> subtitle lazo
TITLE Especifica ttulo del programa title <texto> title comienzo
#UNDEFINE Borra una etiqueta de sustitucin #undefine <etiq> #undefine long
VARIABLE Declara variable de smbolo variable
<etiq>=>exp>
variable grablong=64
constant parclong=512
WHILE

ENDW
Hace un lazo si una condicin es cierta while <exp> while i<contador
i+=1
endw
INICIO
465
INICIO
466
PIC16C54 y 56
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
1Fh
REGISTROS
DE
PROPSITOS
GENERALES
MEMORIA DE DATOS DE LOS
PIC16C54 Y 56
INICIO
467
PIC16C55
MEMORIA DE DATOS DEL
PIC16C55
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
1Fh
REGISTROS
DE
PROPSITOS
GENERALES
PORTC
INICIO
468
PIC16C57
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
08h
0Fh
REGISTROS
DE
PROPSITOS
GENERALES
PORTC
00 01 10 11
REGISTROS
DE
PROPSITOS
GENERALES
10h
1Fh
FSR<6:5>
Direccin
de registro
REGISTROS
DE
PROPSITOS
GENERALES
30h
3Fh
REGISTROS
DE
PROPSITOS
GENERALES
50h
5Fh
REGISTROS
DE
PROPSITOS
GENERALES
70h
7Fh
20h
40h
60h
Este Mapa de Direcciones
retoma a las direcciones
del Banco 0
2Fh 4Fh
6Fh
Banco 0 Banco 1 Banco 2 Banco 3
INICIO
469
PIC16C58
INDF
(1)

TMRO
PCL
STATUS
FSR
PORTA
PORTB
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
REGISTROS
DE
PROPSITOS
GENERALES
00 01 10 11
REGISTROS
DE
PROPSITOS
GENERALES
10h
1Fh
FSR<6:5>
Direccin
de registro
REGISTROS
DE
PROPSITOS
GENERALES
30h
3Fh
REGISTROS
DE
PROPSITOS
GENERALES
50h
5Fh
REGISTROS
DE
PROPSITOS
GENERALES
70h
7Fh
20h
40h
60h
Este Mapa de Direcciones
retoma a las direcciones
del Banco 0
2Fh 4Fh
6Fh
Banco 0 Banco 1 Banco 2 Banco 3
INICIO
470
Registros de funciones
especiales y bits de los PIC16C5X
Valor despus Valor despus
Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR
N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111
N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111
00h INDF Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx uuuu uuuu
01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu
02h

PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111
03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx
04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx
05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu
06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
07H PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu
INICIO
471
PIC16F84
Banco 0 Banco 1
INICIO
472
INICIO
473
BANCO 0 PIC16F87X
INICIO
474
BANCO 1 PIC16F87X
INICIO
475
BANCOS 2 y 3 PIC16F87X
INICIO
476
INICIO
477
Algunas Interfaces
INICIO
En las siguientes figuras se mostrarn algunos circuitos que podrs emplear como
interfaces de entrada y salida, para que ellos acten con los microcontroladores. En
s, no se dan detalles del funcionamiento; sin embargo, con tus conocimientos de
electrnica, esperamos que sepas interpretar cmo trabajan.
El hecho de que estas interfaces se presenten aqu, de ninguna manera significa que
sean las nicas soluciones para poder conectar tu microcontrolador al mundo exterior.
Simplemente los presentamos, para darte una idea de cmo convertir seales de 0 a
5v, las cuales generan los microcontroladores, en rdenes que pueden manejar
elementos que trabajen a tensiones diferentes. Por otro lado, tambin podrs
observar cmo seales de tensiones diferentes a la de los niveles lgicos, puedan ser
adaptadas para que la lean los microcontroladores.
En la siguiente parte, se presenta una lista de proyectos propuestos, y al lado se
presenta el nmero de nota de aplicacin que puedes consultar para que los puedas
desarrollar. Las notas de aplicacin fueron obtenidas del sitio www.microchip.com,
por lo tanto las encontrars en ingls. Otros sitios web que podrs consultar, los
podrs acceder mediante algn motor de bsqueda al colocar palabras claves, tales
como: microcontroladores, pic, proyectos, entre otras. (p.e. en
www.google.com). De todas formas, al final de este anexo te presentamos alguanas
direcciones en espaol que t podrs acceder donde se describen algunos proyectos
en espaol.
478
Encendido de un diodo
emisor de luz (LED)
INICIO
Encendido con un 1 lgico Encendido con un 0 lgico
Terminal
del Puerto
Terminal
del Puerto
479
Lectura de interruptores
o pulsadores

PIC16C54

18 17 16 15 14 13 12 11 10
5V
1 2 3 4 5 6 7 8 9
5V
4 Resistencias de 4,7K
Vss
PIC
16F84A

INICIO
480
Control de la Lnea
de Corriente Alterna
INICIO
Rel
NC
C
NA
0 a 5V
481
Control de la Lnea de
Corriente Alterna 1
INICIO
0 a 5V 0 a 5V
482
Control de la Lnea de
Corriente Alterna 2
INICIO
0 a 5V
483
Control de la Lnea de
Corriente Alterna 3
INICIO
0 a 5V
484
Detector de Cruces
por Cero
0 a 5V
0 a 5V
INICIO
485
Encendido de un Indicador de 7
Segmentos nodo Comn (Display)
INICIO
Salida de los terminales de un Puerto.
Los segmentos encendern con un 0
lgico. El nodo se conectar a una
tensin positiva Vdd.

Segmento a
Segmento b
Segmento c
Segmento d
Segmento e
Segmento f
Segmento g
0 a 5V
486
Encendido de un Indicador 7
Segmentos de varios dgitos
INICIO
Dgito 0
Dgito 1
Dgito 2
Dgito 3



Segmento a
Segmento b
Segmento c
Segmento d
Segmento e
Segmento f
Segmento g
0 a 5V
0 a 5V
487
MATRIZ DE LEDS
INICIO
Valores
de cada
Columna
Seleccin de
columna
0 a 5V
0 a 5V
488
Lectura de un teclado
matricial
INICIO
0 a 5V
Entradas
0 a 5V
Salidas
Rb3
Rb2
Rb1
Rb0
Ra0
Ra1
Ra2
Ra1
S1 S2
S5 S6
S9 S10
S13 S14
S3 S4
S7 S8
S11
S12
S15
S16
R1
10k
R2
10k
R3
10k
R4
10k
489
Aplicacin de un reloj con bajo
consumo en el modo Reposo
INICIO
490
Interruptor Analgico
INICIO
0 a 5V
491
Notas de Aplicacin
PIC16C5X y PIC16F84
AN712 Detector Autobaudio RS-232 para dispositivos PIC16C5X.
AN619 Interfaces para un PIC16C5X con las memorias 93XX76 y 93XX86.
AN657 Decodificador de un control remoto Infrarrojo con un PIC16C5X.
AN526 Rutinas de utilidad matemtica para los PIC16C5x/PIC16Cxx.
AN541 Utilizacin de un PIC16C5x como un perifrico inteligente IIC.
AN530 Interfaz para un PIC16C5X con la EEPROM serial 93CX6.
AN563 Utilizacin de los microcontroladores PIC16C5x como manejadores de LCD.
AN592 Contador de frecuencia con un PIC16C5x.
AN515 Comunicacin con un bus IIC por medio de un PIC16C5X.
TB050 Lectura de varios puntos de temperatura con sensores TC74 y un PIC16C5x.
AN558 Uso de los dispositivos 24XX65 y 24XX32 con los cdigos del PIC16C54.
AN567 Interfaz para un PIC16C54 con una EEPROM serial 24LCXXB.
AN590 Diseo de un reloj con pantalla de leds e interruptores con el PIC16C54.
AN648 Interfaz del microcontrolador PIC16C54 con una EEPROM serial SPI.
AN577 Resultados EMI del PIC16C54A.
AN661 Decodificador Hopping para un codificador KeeLoq por medio de un PIC16C56
AN715 Medida de sincronizacin usando un PIC16F84A y un ADXL202.
AN689 Asistente de ingeniero por medio de un PIC16F84A.
INICIO
492
Notas de Aplicacin
PIC16F87X
AN686 Circuitos Supervisores.
AN246 Manejo de las entradas analgicas de un Convertidor SAR A/D.
AN236 Automatizacin del hogar X-10 usando el PIC16F877A.
AN826 Conceptos para el oscilador de cristal en un rfPIC y un PICmicro.
TB052 Monitorizacin de temperatura multizona.
TB051 Medicin de temperatura.
AN670 Conversin coma flotante a ASCII.
AN777 Multitarea para el PIC16F877 con el Salvo RTOS.
AN732 Implementacin de un cargador boot para el PIC16F87X.
AN693 Entendiendo las especificaciones de un convertidor A/D.
AN656 Programador para calibracin de parmetros.
AN582 Reloj de tiempo real de baja potencia.
TB028 Tcnica para calcular el da de la semana.
TB033 Uso del PIC16F877 para desarrollar cdigos del PIC16CXXX.
AN709 Consideraciones de diseo a nivel de sistema.
TB026 Clculo de chequeo de la memoria de programa con el PIC16F87X.
TB025 Carga de archivos HEX al PIC16F87X.
TB029 Manejador complementario de LEDs.
AN690 Autodeteccin de memoria de IC.

INICIO
493
Notas de Aplicacin
PIC16F87X

TB004 Calibracin automtica del tiempo de espera del WDT.
TB008 Tcnicas para fuentes de alimentacin sin transformador.
AN597 Implementacin a frecuencias ultrasnicas.
AN587 Interfaz de un microcontrolador PIC a un mdulo LCD.
AN607 Detector de fallas de la alimentacin.
AN660 Rutinas de coma flotante.
AN595 Mejora de la Susceptibilidad de una aplicacin.
AN591 Bus de escritorio de la Apple.
AN594 Uso de los mdulos CCP.
AN655 Conversin D/A por medio de un PWM y una red R-2R.
AN667 Cargador inteligente de bateras con interfaz SMBus.
AN617 Rutinas de coma flotante.
AN893 Control de un motor DC con escobillas por medio del PIC16F684.
AN892 Monitor de seguridad contra falla e interruptor de frecuencia con un PIC16F684.
AN889 Control VF de motores de induccin trifsicos por medio del PIC16F7X7.
AN880 Referencia rpida de cdigos de conversin entre un 8051 y un PIC.
AN879 Uso de un PIC de bajo consumo para un mdulo reloj despertador.
AN258 Programador de microcontroladores con interfaz USB de bajo costo.
AN774 Comunicacin asncrona con el mdulo USART.
AN212 Sensor inteligente de nodo CAN utilizando el MCP2510 y el PIC16F876.

INICIO
494
Notas de Aplicacin
Otros PIC
AN239 Nodo esclavo LIN para PIC16 y PIC18.
AN240 Nodo esclavo LIN en un PIC16C433.
AN237 Implementacin de un nodo esclavo LIN en un PIC16F73.
AN851 Transferencia de datos a la FLASH para dispositivos PIC16 y PIC18.
AN844 Interfaces simplificadas para termocuplas en microcontroladores PIC.
AN847 Control de motor en aeromodelismo.
AN821 Encriptacin avanzada estndar por medio de un PIC16XXX.
TB053 Generacin de alto voltaje por medio de los PIC16C781/782.
AN756 Uso de un MCP2120 para comunicaciones por infrarrojo.
AN758 Uso de un MCP2150 para aadir una conectividad inalmbrica IrDA.
TB045 Rutinas de codificacin de recepcin Manchester para dispositivos Keeloq.
AN744 Decodificador Keeloq modular con PIC de la gama media en lenguaje C.
AN746 Interfaz de los potencimetros digitales MCP41XXX/42XXX con microcontroladores PIC.
AN747 Comunicacin con protocolo para los potencimetros digitales MCP42XXX.
AN217 Programador para los KeeLoQ HCS30X, HCS200.
AN742 Decodificador Hopping modular con microcontroladores PIC de la gama media.
TB043 Rutinas de verificacin CRC para KeeLoq.
AN823 Diseo analgico en el mundo digital por medio de controladores de seales mezcladas.
AN220 Medidor de vatios-hora por medio de un PIC16C923 y un CS5460.
AN735 Utilizacin del mdulo MSSP para comunicaciones I2C.



INICIO
495
Notas de Aplicacin
Otros PIC
AN734 Utilizaci{on del mdulo SSP en modo esclavo para la comunicacin I2C.
AN216 Controlador de convertidor DC/DC con un microcontrolador PIC.
AN214 Compatibilidad de un transductor inteligente IEEE 1451.2 con un PIC.
AN731 Incrustacin de un microcontrolador PIC en el Internet.
AN730 Chequeo y generacin CRC.
TB016 Implementacin de un ICSP con un PIC16F8X.
TB013 Implementacin de un ICSP con un PIC16CXXX.
AN585 Sistema operativo en tiempo real para un PIC16/17.
AN724 Utilizacin de un PIC para conectar a Internet va PPP.
AN656 Uso de parmetros de calibracin para la programacin serial en los PIC.
AN703 Conexin de un PIC con el convertidor serial de 12 bits MCP320X.
AN580 Utilizacin del temporizador 1 en modo de reloj asncrono.
AN578 Uso del mdulo SSP en el ambiente multimaestro IIC.
AN579 Utilizacin del puerto paralelo de 8 bits.
AN714 Implementacin de sistema de seguridad inalmbrico con Keeloq y un PIC.
AN716 Migracin de diseos desde el PIC16C74A/74B hacia el PIC18C442
AN719 Interfaz del convertidor analgico a digital MCP3201 con un microcontrolador PIC.
TB028 Tcnica para calcular el da de la semana.
AN701 Eliminador de batera en modo de conmutacin basado en un PIC16C72A.
AN700 Convertidor Delta-Sigma por medio de un mdulo de comparacin analgica.


INICIO
496
Notas de Aplicacin
Otros PIC
PICREF-3 Medidor de vatios hora.
PICREF-2 Cargador de bateras inteligente.
PICREF-5 Cargador de bateras nivel 3 del SMBus para el PIC16C73A.
TB020 Emulacin del PIC12C67X con el PIC16C72.
AN672 Decodificador de cdigo Hopping con PIC del la gama media.
TB004 Calibracin automtica del perodo de espera del temporizador WDT.
TB008 Fuente de alimentacin sin transformadores.
AN668 Interfaz de un PIC16C92x a una EEPROM serial SPI.
AN514 Tcnicas de interrupcin por Software.
AN654 El PWM, una solucin de software mediante los PIC16CXXX.
TB010 Un convertidor A/D de 4 canales de 8bits a un PIC17C4X.
AN546 Utilizacin del Convertidor Analgico a Digital.
AN597 Implementacin en el rango ultrasnico.
AN615 Diseo de un reloj econmico mediante tcnicas de baja potencia.
AN511 Reemplazo de PLD.
AN589 Desarrollo de un programador basado en un PC para el PIC16C84.
TB011 Utilizacin de la SRAM con un PIC16CXX.
AN588 Gua de diseo de osciladores para los PIC16/17.
AN607 Determinacin de fallas de encendido.
AN663 Decodificador sencillo de cdigo Hopping con Keeloq.
INICIO
497
Notas de Aplicacin
Otros PIC

AN529 Manejador de LED y teclado 4x4 por muestreo.
AN606 Utilizacin de diseos de baja potencia con PIC16/17.
AN566 Utilizacin del las interrupciones del puerto B como interrupciones externas.
AN576 Tcnicas para deshabilitar interrupciones globales.
AN616 Procesamiento digital de seales con el PIC16C74.
AN662 Decodificador de Cdigo Hopping con KeeLoq por medio de aprendizaje seguro.
Fact 2 Convertidor A/D del PIC16C7X.
AN552 Implementacin de un despertador con teclado.
AN520 Comparaciones entre microcontroladores de 8 bits.
AN556 Implementacin de una tabla de lectura.
AN522 Consideraciones durante el encendido.
AN595 Mejoramiento de la susceptibilidad en una aplicacin a ESD.
AN649 Caracterssticas del reloj del PIC16C924.
AN531 Posicionador remoto inteligente.
AN575 Rutinas de coma flotante compatibles con la norma IEEE 754.
AN658 Fundamentos de los LCD con los PIC16C92X.
AN613 Uso de las EEPROMs seriales de la serie 93 con el puerto SPI.
AN513 Conversin Analgica a Digital.
AN600 Control de flujo de aire con lgica difusa.
AN527 Software administrador de la pila (Stack).
INICIO
498
Notas de Aplicacin
Otros PIC
AN528 Implementacin de un despertador con teclado.
AN557 Voltmetro digital de cuatro canales con teclado y pantalla.
AN560 Uso de las EEPROM seriales 93LC56 y 93LC66.
AN535 Lgica a utilizar con EEPROM seriales.
AN655 Conversin D/A por medio del PWM y una red R-2R para generar ondas seno y DTMFL.
AN643 Modulacin de Cdigo de Pulso Diferencial Adaptable.
AN647 Interfaz entre un PIC16C64/74 con una EEPROM Serial.
Fact 3 Cuidado y alimentacin del PIC16C74.
AN584 Soporte de PICMASTER en Microsoft Windows(TM) DDE.
AN521 Intefaz con lneas de potencia AC.
AN554 Implementacin de Software del bus of IC maestro.
AN611 Medicin de Resistencia y Capacitancia cou un PIC 16C622.
AN667 Cargador de batera inteligente con la interfaz SMBus.
AN555 Implementacin de Software para el puerto serial asncrono.
AN519 Desarrollo de un ratn serial.
Fact 1 Gua de diseo de osciladores para los PIC.
INICIO
499
http://www.comunidadelectronicos.com/sitios2.htm
http://www.siste.com.ar/enlacesarchivos/Micros.htm
http://www.sagitron.es
http://www.todorobot.com.ar
http://www.todopic.com.ar/
http://robotia.com.ar/rb/links/links.htm
http://www.abcdatos.com/tutoriales/electronicayelectricidad/electronica/microcon
troladorespic.html
http://perso.wanadoo.es/juanramon.villodas/favorite.htm
http://www.micropic.arrakis.es/marcos.htm
http://www.miguelo.com.ar/mchip/index.html
http://www.conket.com/modules.php?name=Topics
http://www.geocities.com/micramtechnologies/seteando.htm
http://www.hackemate.com.ar/mirrors/karpoff/manuales/topcite/archivos/hitechPI
C.htm
http://boards1.melodysoft.com/app?ID=creatronica.microcontroladores&DOC=1
21
http://www.geocities.com/alva_cesar/rutas.htm






Lista de algunos sitios web
relacionados con PIC
INICIO
500
INICIO
501
Equipo requerido para la actualizacin
del PICSTART PLUS
A medida que van fabricando nuevos modelos de microcontroladores, ser necesario
que t actualices el MPLAB IDE y el programador PICSTART PLUS, para que
puedas utilizarlos en los nuevos componentes ofrecidos. La versin nueva del
MPLAB IDE, la puedes bajar en www.microchip.com. El equipo requerido para
actualizar al PICSTART PLUS, es el siguiente:
Programador PICSTART PLUS, el cual debe estar encendido y conectado al
computador con el puerto serial.
ltima versin del Software MPLAB IDE.
Microcontrolador PIC17C44 (de 25MHz o ms veloz) borrado.
Archivo actualizado psf######.hex (donde ###### es el nmero de la
ltima versin). ste se encuentra en el software de instalacin del MPLAB IDE.
Un destornillador de estras.

Sin embargo, a partir del ao 2004, los PIC17C44 ya no tienen la capacidad
suficiente para aceptar esta actualizacin. Para ello, necesitars adquirir un
mdulo UK003010, y seguir las instrucciones para realizar la actualizacin del
PICSTART PLUS. Para ms detalles consulta en alguna de las direcciones
siguientes: http://www.sagitron.es o http://www.microchip.com.

Otro detalle, si tu PICSTART PLUS ya contiene el mdulo UK003010, ya sea porque
es nuevo (versin R20 o superior), o porque ya instalaste dicho mdulo, no
necesitars seguir los pasos de actualizacin que se presentan en las siguientes
pginas, simplemente descargars la actualizacin desde tu computador.

INICIO
502
Procedimiento para la actualizacin
del PICSTART PLUS
Seleccionar en el MPLAB al microcontrolador PIC17C44.
Habilitar al programador PICSTART PLUS.
Seleccionar en los bits de configuracin lo siguiente:
Oscillator: XT.
Processor Mode: Microcontroller.
Watchdog timer: TMR.
Seleccione en el men: File, Import y luego escoja el archivo
de actualizacin ######.hex.
Inserte al PIC17C44 borrado en el scalo del programador.
Verifique que el dispositivo est borrado.
Seleccione el botn Program para transferir el archivo al
PIC17C44.
Al terminar la transferencia, extraiga al PIC17C44.
Salga del MPLAB, desconecte la fuente y la conexin serial
del computador al programador... (Contina en la pgina
siguiente).
INICIO
503
Procedimiento para la actualizacin
del PICSTART PLUS (continuacin)
Extraiga la tapa posterior del programador.
Saque con cuidado al microcontrolador que est en el
programador y gurdelo, servir para otras actualizaciones.
Inserte cuidadosamente al PIC17C44 recin programado. El
terminal 1 del PIC debe estar hacia el conector serial.
Coloque la tapa posterior del programador y atornllela con
cuidado, sin aplicar un torque excesivo.
Vuelva a conectar el programador PICSTART PLUS a la
fuente y al puerto serial del computador.
Arranque al MPLAB IDE y habilite al programador.
Podrs verificar que se ha actualizado la versin del
programador al habilitarlo. Igualmente podrs verificar la
versin del MPLAB IDE en Help, About MPLAB IDE.
Tu programador PICSTART PLUS est actualizado.



INICIO
504
INICIO
505
Grabacin de un programa
en un PIC16F87X
La grabacin de un microcontrolador PIC16F87X se realiza en forma serial, y para ello
se puede hacer aplicando una tensin baja al terminal MCLR#/Vpp (5V) o con una
tensin alta aplicada a ese terminal (13V 5%). Para programar en ambos casos se
utilizan la lnea RB6/PGC para colocar los pulsos de sincronizacin o seal de reloj, y la
lnea RB7/PGD para colocar los bits datos en serie. En el caso de optarse por la
programacin de tensin baja, entonces se deber colocar el terminal RB3/PGM en
nivel alto.
A continuacin te presentamos los planos y las instrucciones para que hagas un
programador de los PIC16F84 y los de la serie PIC16F87X. Los programas para este
programador los podrs bajar en Internet en la direccin:
http://www.todorobot.com.ar.
INICIO
506
Diagrama del circuito
programador
INICIO
507
El PicProg
Descripcin:

PicProg
Programador para PIC 16F8xx
(Versin 2.0)
(c) TodoRobot - 2002

El PicProg est preparado para programar los siguientes modelos de la familia de
Microchip:

16F84, 16F870, 16F871, 16F872, 16F873, 16F874, 16F876, 16F877.

El PicProg le permite Programar, Verificar y Borrar todos los modelos anteriormente
detallados.
El archivo Hexadecimal (.hex) a grabar debe ser formato Intel INHX8M. ste es el
formato estndar generado por la herramienta de desarrollo MPLAB que puede
descargarse gratis en el sitio de Microchip.

Para ir al sitio web donde est el software de instalacin del PicProg haz clic aqu.


INICIO
508
Instrucciones para el PicProg
Programar
El PicProg verifica antes y despus de grabar cada direccin. De esta forma se evita
grabar el mismo dato ya grabado, prolongando la vida til de la Flash Memory. Y luego
realiza la verificacin posterior al grabado para asegurarse que el dato ha sido grabado
adecuadamente.

Verificar
Como se dijo en el punto anterior, el PicProg realiza una verificacin al grabar cada
direccin, por lo tanto no es necesario ejecutar este procedimiento luego de cada
programacin. Esta funcin es ms bien til cuando no se est seguro de cual es el
programa que ha sido o tiene cargado un determinado micro.

Borrar
Esta funcin es solamente necesaria cuando el PIC ha sido programado con cdigo de
proteccin (CP). En estos caso la nica forma de regrabar el micro es efectuando un
borrado general. Est funcin borra la memoria de programa y la de datos.

Poner el PIC en Modo RUN
Esta funcin haced qued la lnea MCLR/VPP pase a 5v y por lo tanto el PIC salgo del
modo Reset para pasar al modo de ejecucin normal.
Est funcionalidad solo es til cuando se est usando la modalidad In-Circuit o bien se
est trabajando en un diseo usando el PIC instalado en el Programador.

INICIO
509
Programacin Paso por paso
1) Seleccionar el puerto LPT a usar mediante el men desplegable correspondiente. Si
por algn motivo no se pudiese detectar el Hardware del programador, aparecer un
mensaje en rojo indicando el error y se bloquearn todos los controles hasta tanto no se
resuelva el problema. Generalmente la direccin 0x378 corresponde al LPT1 y 0x278 al
LPT2. Pero en contados casos, puede darse que el LPT1 tenga la direccin 0x3BC, en
cuyo caso el LPT2 asume la direccin 0x378.
2) Seleccionar el modelo de Microcontrolador que se desea programar. Esta funcin
puede dejarse tambin en Autodetectar para permitir que el PicProg lo detecte
automticamente.
3) Ingresar el archivo Hexadecimal (.hex) que contiene el programa a descargar al PIC.
Puede usarse el botn BUSCAR para encontrar el archivo a grabar o bien escribirlo
directamente en la ventana.
4) Pulsar el botn CONFIGURAR para establecer la configuracin deseada para el PIC
(Watchdog, Power Up Timer, etc). Todas las configuraciones estn por defecto
seteadas para detectar estos parmetros directamente desde el archivo hexadecimal
(.hex), para que esto funcione se debieron haber colocado previamente en el cdigo
fuente a fin de que el compilador genere el cdigo necesario en el archivo hexadecimal.
En ese caso este punto puede ser salteado y pasar directamente al punto siguiente.
5) Pulsar el botn PROGRAMAR para iniciar la descarga hacia el PIC. Aparecer una
ventana pidiendo confirmacin de los parmetros que se usarn en la programacin y, una
vez aceptado, si todo ha funcionado correctamente, aparecer una ventana indicando la
finalizacin del proceso.
INICIO
510
Algunas sugerencias
IMPORTANTE: Antes de insertar o extraer un micro del zcalo de programacin, se
debe tener la precaucin de retirar la alimentacin del programador, debido a que no se
ha previsto ningn circuito de aislamiento y podra resultar daado el chip o el puerto
paralelo de la PC. Asimismo es aconsejable no alimentar el programador hasta tanto el
programa PicProg no haya sido ejecutado y se encuentre activo en pantalla.

Reporte de errores a todorobot@yahoo.com.ar

http://www.todorobot.com.ar


INICIO

Potrebbero piacerti anche