Está en la página 1de 510

Escuela de Ingeniera Elctrica

BIENVENIDO AL MUNDO DE LOS


MICROCONTROLADORES PIC:
GAMAS BSICA Y MEDIA

Contenido

AUTOR: Csar lvarez


DISEO INSTRUCCIONAL:
Maril Snchez y Csar lvarez

Instrucciones

INSTRUCCIONES

Botn para avanzar..........................


Botn para retroceder......................
INICIO
Botn para ir al contenido
principal..
Botn para retornar..........................
Para ir a un tema del contenido,
Tema..
hacer clic en ttulo del tema............. Esc
Para salir, presione la tecla..............
2

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.

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.
TEMA I. GENERALIDADES DE LOS MICROCONTROLADORES PIC
TEMA 2. PROGRAMACIN DEL PIC16C54.
TEMA 3. MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y
TEMPORIZADORES
TEMA 4. CARACTERSTICAS ESPECIALES DEL HARDWARE
TEMA 5. OTROS MICROCONTROLADORES DE LA GAMA BSICA
TEMA 6. MICROCONTROLADOR PIC 16F84A
TEMA 7. MICROCONTROLADORES DE LA SERIE PIC16F87X
CONCLUSIN
ANEXOS

INTRODUCCIN

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

INICIO

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

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

INICIO

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

INICIO

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

INICIO

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

11

INICIO

TEMA I
Generalidades de los Microcontroladores PIC
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

INICIO

Tema I: Generalidades de los


Microcontroladores PIC16C54

Objetivos Terminales:
Describir
cmo
surgido
microcontroladores
travs del tiempo.

han
los
a

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

1.1.- Contexto histrico de los


Microcontroladores
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

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.

14

INICIO

El primer microcontrolador
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.
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.
15

INICIO

Surgimiento de los PICs


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

Controller).

destinado

controlar

los

puertos:

el

PIC

(Peripheral

Interface

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

INICIO

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.

17

INICIO

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.

18

INICIO

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.

19

INICIO

1.2.- Definiciones de Microcontrolador

Es un computador completo dedicado, aunque con limitadas prestaciones, que


est contenido en un circuito integrado y se destina a gobernar una sola tarea.

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.

20

INICIO

1.3.- Funciones de los


Microcontroladores
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.
Microcontrolador
100
80
60
40

Interfaces

20
0

AUTOR: Csar lvarez


DISEO INSTRUCCIONAL:
M. Snchez y C. lvarez

21

INICIO

1.4.- Aplicaciones de los


Microcontroladores

Los

microcontroladores

cantidad

de

tienen

aplicaciones;

una

gran

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.

22

INICIO

1.5.- Algunos Fabricantes de


Microcontroladores
Fabricante
Intel
Siemens
Dallas, Atmel
Motorola

Texas Instruments
NEC
Toshiba
Hitachi
SGSTHOMSON
(ST-Micro)
National
Semiconductor
Zilog
Microchip

Microcontroladores
MCS51, 151, 251
C540U (8051)
8051-52
68HC05
68HC08
68HC11
TMS370
PD7890xxx
PD780xxx
TLCS-870
TLCS-90
H8/300
ST-6
ST-7
ST-9
COP820, 840, 880C, 912
COP884xx, 888xx
Z8
16Cxx
18Fxx

Capacidad de Memoria

8KB - 16KB ROM, 256B - 1KB RAM


4KB - 8KB ROM, 256B RAM
2KB - 16KB ROM, 256B - 16KB RAM
0 - 16KB ROM, 176B 512B RAM
16KB - 32KB ROM, 512B - 1KB RAM
4KB - 32KB ROM, 256B - 2KB RAM
0KB - 64KB ROM, 128B - 2KB RAM
2KB - 24KB ROM, 128B 512B RAM
8KB - 60KB ROM, 256B - 2KB RAM
4KB - 60KB ROM, 256B - 2KB RAM
0 - 60KB ROM, 0 - 2KB RAM
8KB- 60KB ROM, 256B - 2KB RAM
1KB- 8KB ROM, 64B 320B RAM
4KB- 60KB ROM, 256B - 2KB RAM
0KB-128KB ROM, 512B - 4KB RAM
1KB- 4KB ROM, 64B 128B RAM
4KB-32KB ROM, 128B 1088B RAM
0,5KB - 32KB ROM, 61B 237B RAM
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

1.6.- Consideraciones a tomar antes


de seleccionar un Microcontrolador:
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.

Software

Hardware

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

de

herramientas

de

En este mdulo instruccional hemos seleccionado a los microcontroladores PIC de


Microchip, ya que ofrecen una gran variedad de productos para muchas aplicaciones.
25

INICIO

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

INICIO

1.7.- Familia de los


Microcontroladores PIC
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
Series
PIC 12C5XX
PIC 12C6XX

Memoria de
Caractersticas Principales
Programa

0,5 - 1K x 12
2K x 14

Opcin EEPROM, Velocidad: 1 a 2 MIPS


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
PIC 16CXXX

0,5K -2K x 12 Velocidad: 5 MIPS, Disponibilidad en


14, 18 y 28 terminales
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.
27

INICIO

PIC 16FXXX

0,5K - 8K x 14A/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.

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

1K x 12
1K x 14

Similar a la serie PIC 12XXX, pero incluye


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

INICIO

1.8.- Principales caractersticas del


PIC16C54

Facilita la labor de depuracin de programas.

Permite el desarrollo de aplicaciones en poco tiempo.

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.

Circuito de inicializacin incluido.

Presenta cuatro configuraciones programables para el oscilador.

Modo Reposo (sleep) para el ahorro de energa.

Temporizador perro guardin (Watchdog), para prevenir que un programa se


cuelgue.

Proteccin de programas.

29

INICIO

1.9.- Descripcin del Microcontrolador


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

CONTINA CON TU LECTURA

30

INICIO

1.10.- Arquitectura del


Microcontrolador PIC16C54
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:

31

INICIO

Diagrama de Bloques del Microcontrolador


PIC16C54
9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

12
DECODIFICADOR
DE
INSTRUCCIONES

8
DIRECCIN
DIRECTA

TIEMPO DE
ESPERA DEL
WDT

6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

5-7

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
(SRAM)
25 BYTES

F
BUS DE DATOS
8

TRIS 5

ESCALAMIENTO
DE TMRO Y WDT

STATUS

OSC1 OSC2 MCLH

TIPO DE
OSCILAD.

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

PALABRA DE
CONFIGURACIN

TRISA

PUERTO A
4

RA3 RA0

32

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

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
instruccin, que son las lneas del programa codificadas en binario, van
Instrucciones.
En este registro se almacena temporalmente el
instruccin a ejecutar, la cual es interpretada por el Decodificador de

los cdigos de
al Registro de
cdigo de la
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.
33

INICIO

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

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

35

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

36

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

37

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

38

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

39

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

40

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

41

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

OSCILADOR,
TIEMPO Y
CONTROL

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

SLEEP
F

REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

42

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

43

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

44

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

45

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

46

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

47

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

48

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

49

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

50

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

51

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

9-11

9-11

EPROM-ROM
512x12

PC

ENTRADA
TOCKI

PILA 1
PILA 2

INHABILITA

TEMPORIZADOR
PROTECCIN
WDT
DE CODIGOS

12
REGISTRO DE
INSTRUCCIONES

12
8

DECODIFICADOR
DE
INSTRUCCIONES

DIRECCIN
DIRECTA

PALABRA DE
CONFIGURACIN

TIEMPO DE
ESPERA DEL
WDT

TIPO DE
OSCILAD.

ESCALAMIENTO
DE TMRO Y WDT
6
REG. OPTION

RAM DE
DIRECCIN DIRECTA

OPTION

STATUS

OSC1 OSC2 MCLH

OSCILADOR,
TIEMPO Y
CONTROL

SLEEP
REGISTROS DE
PROPOSITOS
GENERALES
(SRAM)
25 BYTES

TMRO
W

UNIDAD
LGICA Y
ARITMTICA
8

BUS DE DATOS
8
4

TRIS 5

TRISA

PUERTO A
4

RA3 RA0

52

TRIS 6

TRISB

8
PUERTO B
8

RB7 RB0

INICIO

Diagrama de conexiones del


Microcontrolador PIC16C54

A continuacin, se presenta la interconexin del los PIC 16C54

PIC
16C54
Cada conexin tiene su propia funcin especfica.
Haz clic en el terminal
deseado para encontrar la funcin correspondiente en el glosario.

53

INICIO

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

INICIO

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

INICIO

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

INICIO

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

INICIO

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.

58

INICIO

Operaciones entre W y f
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
ADDWF
f,d
Indicarsumar
sumar(ADD)
(ADD)elelregistro
registrode
detrabajo
trabajoW,
W,
Indicar
conelelregistro
registrode
dedireccin
direccinf.f.ElElresultado
resultadose
se
con
colocar
en
W
si
d=W,
o
en
f
si
d=f.
Si
no
colocar en W si d=W, o en f si d=f. Si no
colocasningn
ningndestino,
destino,elelensamblador
ensamblador
colocas
guardar
el
resultado
en
el
registrode
de
guardar el resultado en el registro
direccinffyyte
tedar
darun
unmensaje
mensajede
de
direccin
advertencia.
advertencia.

Digamos que la instruccin:


ADDWF

12,W
;Suma en binario el contenido del registro
;W con el contenido del registro 12 y el
Registro
;resultado se guardar en el registro W
Destino

Cdigo de la instruccin

59

INICIO

Operaciones con literales y bits


IORLW

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

GOTOK

; (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).

60

INICIO

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

INICIO

Instrucciones de transferencia
de datos y aritmticas
INSTRUCCIONES DE TRANSFERENCIA DE DATOS
MOVF

f,d

; Mueve el contenido de f hacia el destino d (W o f)

MOVLW

; Se asigna a W el valor K

MOVWF

; 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

62

INICIO

Instrucciones lgicas y de borrado

INSTRUCCIONES LGICAS
ANDLW

; 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

; 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

; 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

; Borra el contenido del registro W

63

INICIO

Instrucciones de rotacin
y manejo de bits
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

64

INICIO

Instrucciones de Salto

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

; 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

; Retorno de subrutina, W toma el valor de K

65

INICIO

Instrucciones de Control

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.

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.

66

INICIO

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.

67

INICIO

TEMA 2
Programacin del PIC 16C54
Contenido
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

INICIO

TEMA II: Programacin del microcontrolador


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

69

INICIO

2.1.- Programacin de
Microcontroladores
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.

70

INICIO

Software

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.

71

Hardware

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

2.2.- Pasos para programar un


Microcontrolador:
Despus de seleccionar un microcontrolador para una aplicacin especfica, para
programarlo ser necesario:
Hacer pruebas en el circuito
Grabar el programa en el microcontrolador
Simular el programa
Despus de cada fase, se
Ensamblar el programa

deber corregir los errores


hasta que todo funcione bien.

Editar el programa
Representar el circuito
72

INICIO

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

INICIO

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)
74

INICIO

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

75

INICIO

2.4.- Edicin del Programa


con el MPLAB
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: Alt
y
(Tab)
La primera vez que se abre este programa, aparecer la siguiente pantalla:
Llamada:
Microchip
MPLAB IDE

76

INICIO

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:

77

INICIO

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.

2
78

INICIO

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

TRIS

BSF f,b

CLRW
BTFSS

BCF f,b
f,b

BTFSC

f,b

En la pgina siguiente encontrars la primera parte de la edicin del programa.


Fjate bien en los comentarios escritos.
79

INICIO

Comentarios

80

INICIO

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'
W
EQU H'0000'
STATUS
EQU H'0003'
F
EQU H'0001
FSR EQU H'0004'
INDF EQU H'0000'
PORTA
EQU H'0005'
TMR0
EQU H'0001'
PORTB
EQU H'0006'
81

INICIO

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
Hexadecimal
Binaria
Decimal

Representacin
0B / 0BH / H0B / 0x0B
B1011
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:
82

INICIO

Divisin por columnas


Colu. 1 Colu. 2 Colu. 3

Columna 4

{Instruccion
es}

{Etiquetas
}

{Comentarios}

{Operadores
}

83

INICIO

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.

84

INICIO

Si no estuvo claro el comienzo, lee


esto detenidamente
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.
85

INICIO

Continuacin del programa

86

INICIO

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),

87

INICIO

Ensamblando el archivo editado


Para ensamblar un archivo, debers seleccionar en Project y luego Quickbuilt nombre.asm:

88

INICIO

Resultados del ensamblaje

Si al final aparece la frase:


BUILD SUSCCEEDED, significa
Que ha sido exitosa la compilacin.

89

INICIO

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:

Cambio
90

INICIO

Listado de errores

Al tratar de ensamblar nuevamente, nos encontraremos con un error, tal como lo


muestra la siguiente figura:

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.

91

INICIO

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.
Indicacin
de la lnea
con 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.
92

INICIO

2.6.- Simulacin
Corregiste todo?
prximo paso.

Es importante que lo hagas, y que te fijes bien, para dar el

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:

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

INICIO

Ventanas para verificar el programa

Registros
Memoria de
programa
Registro de
funciones
especiales

94

INICIO

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.

95

INICIO

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:

96

INICIO

Explicacin de los estmulos


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

INICIO

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:

98

INICIO

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:
Ejecucin del
programa
Detencin
del programa

Reinicio

Paso que se
ejecuta

Ejecucin
paso a paso

Verificacin
de estados

Ejecucin
animada

Estimulacin
de entradas

99

INICIO

Revisin de resultados
Los resultados no los podrs ver en el momento del aplicar los estmulos.
observar los cambios, debers detener el programa.

Para

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.

100

INICIO

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:

101

INICIO

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.

102

INICIO

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

103

INICIO

Comenzando a Grabar
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
est borrado
Flash

Leer
memoria

104

Grabar
programa

Verificar
programacin

Borrar
memoria

INICIO

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.

105

INICIO

Estableciendo las condiciones de Hardware y


grabacin en la memoria del microcontrolador

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
106

INICIO

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

INICIO

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.

108

INICIO

Circuito final
5V

10K
f680KHz
100 pF
5V

8 Resistencias de 300

4 Resistencias de 4,7K

5V

18 17 16 15 14 13 12 11 10

PIC16C54
1 2 3 4 5

6 7 8 9

5V

109

INICIO

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?

110

INICIO

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

MOVF

DECF

f,d

INCF f,d

DECFSZ

f,d

INCFSZ

RRF f,d

f,d
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.

111

INICIO

Programa reducido para la


lectura de interruptores

112

INICIO

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)
113

INICIO

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

INICIO

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
COND2
COND3
COND4
ADGEN

=
=
=
=
=

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

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


RA0
RA1
RA2
RA3
RB7

=
=
=
=
=

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

Donde RAn son las lneas que corresponde al puerto A y RBn son las lneas que
corresponden al puerto B.
115

INICIO

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"
MOTOR
PCOND
PACOM
CINTU
LLAVE
LUCES
COND1
COND2
COND3
COND4
ALGEN

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

10
11
12
13
14
15
16
17
18
19
1A

; INCLUYE ETIQUETAS DE P16C5X.INC


;MOTOR
;PUERTA DEL CONDUCTOR
;PUERTA DEL ACOMPAANTE
;CINTURON DE SEGURIDAD
;LLAVE DE ENCENDIDO
;LUCES
;CONDICION 1
;CONDICION 2
;CONDICION 3
;CONDICION 4
;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.

116

INICIO

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
PCOND
PACOM
CINTU
LLAVE
LUCES
COND1
COND2
COND3
COND4
ALGEN

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

10
;MOTOR
MOTOR+1
;PUERTA DEL CONDUCTOR
MOTOR+2
;PUERTA DEL ACOMPAANTE
MOTOR+3
;CINTURON DE SEGURIDAD
MOTOR+4
;LLAVE DE ENCENDIDO
MOTOR+5
;LUCES
MOTOR+6
;CONDICION 1
MOTOR+7
;CONDICION 2
MOTOR+8
;CONDICION 3
MOTOR+9
;CONDICION 4
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.

117

INICIO

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.

118

INICIO

Asignacin de detectores a registros

119

INICIO

Asignacin de advertencias

120

INICIO

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.

121

INICIO

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):
OPER2 (Otros):

Motor
(Llave. Pcond)

Condicin4

Motor

Motor

Luces

Cintu

Condicin3

Condicin2

Motor
(Pcond+Pacom)
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"
ORG

; INCLUYE ETIQUETAS DE P16C5X.INC

PREPAR
CLRW
TRIS PORTA
MOVLW 7F
TRIS PORTB

; EL PUERTO A SERA UTILIZADO COMO ENTRADA


; RB7 SERA UTILIZADO COMO SALIDA Y EL RESTO
; DE LOS BITS DEL PUERTO B SERAN ENTRADAS

122

INICIO

Programa de advertencia reducido

123

INICIO

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.

124

INICIO

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

125

INICIO

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

126

INICIO

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
STTUSPA
ORG
PREPAR
TRIS
CLRW
TRIS
MOVLW
MOVWF
CLRF
CLRF
INICIO
GOTO
BCF
GRUPO1
GOTO
BCF
GRUPO2
GOTO
BCF
GRUPO3
GOTO
BCF
SIGCICL
GOTO

EQU
EQU

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

0
MOVLW 0F
PORTA ; PUERTO A SERA ENTRADA
PORTB ; PUERTO B SERA SALIDA
55
PORTB ; SE ALTERNAN 1 Y 0 EN LAS LINEAS DE SALIDA DEL PUERTO B
PBANTES
; PALABRA DE ESTATUS QUE INDICA EN CADA GRUPO QUE LOS
; LEDS ROJOS ESTAN ENCENDIDOS Y LOS VERDES APAGADOS
STTUSPA
; PALABRA DE CONTROL PARA MANTENER VALOR EN LA ENTRADA
BTFSS PORTA,0
CAMBIO0
;
STTUSPA,0
;
BTFSS PORTA,1
CAMBIO1
;
STTUSPA,1
BTFSS PORTA,2
CAMBIO2
;
STTUSPA,2
BTFSS PORTA,3
CAMBIO3
;
STTUSPA,3
CALL RETARDO
INICIO

; CONDICION BIT 0 DEL PUERTO A: SI ES 1 => PULSADOR NO PRESIONADO


SI ES CERO HACE EL CAMBIO EN EL GRUPO 0
PONE UN 0 PARA MANTENER CONDICION MIENTRAS SE PRESIONA PULSADOR
; CHEQUEA CONDICION BIT 1 DEL PUERTO A
SI ES CERO HACE EL CAMBIO EN EL GRUPO 1
; CHEQUEA CONDICION BIT 2 DEL PUERTO A
SI ES CERO HACE EL CAMBIO EN EL GRUPO 2
; CHEQUEA CONDICION BIT 3 DEL PUERTO A
SI ES CERO HACE EL CAMBIO EN EL GRUPO 3
; LLAMA RUTINA DE RETARDO PARA ESPERAR TIEMPO DE REBOTE

127

INICIO

Cambio de estado en dos de los grupos

128

INICIO

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:

129

INICIO

2.11.- Ejemplo de un programa


para sumar
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:
ADDWF
CALL K
CLRF

f,d

SUBWF
RETLW
K
SWAPF
f,d

130

f,d

INICIO

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
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
PREPAR

131

INICIO

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

132

INICIO

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:
1

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

133

INICIO

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.

134

INICIO

TEMA 3
MEMORIA DE PROGRAMA, REGISTROS,
PUERTOS Y TEMPORIZADORES
CONTENIDO
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)

INICIO

TEMA III:
MEMORIA DE PROGRAMA, REGISTROS, PUERTOS
Y TEMPORIZADORES
Objetivos Terminales:
Describir
los
registros
funciones
especiales
microcontrolador PIC16C54.

de
del

Mencionar la utilidad
temporizadores
en
microcontro-ladores.

los
los

de

136

INICIO

3.1- Organizacin de las memorias


del PIC16C54
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:

Memoria de Programa
Se almacenan todas las instrucciones
del programa de control. El tamao
de esta memoria es de 512
palabras.

137

Memoria de Datos
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.

INICIO

3.2.- Organizacin de la memoria de


programa del PIC 16C54
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>
CALL, RERLW

NIVEL DE PILA 1
NIVEL DE PILA 2
Espacio
para
memoria
del
usuario

MEMORIA
DE
PROGRAMA
VECTOR DE INICIALIZACIN

000h
0FFh
100h
1FFh

Memoria de programa del PIC16C54

138

INICIO

3.3.- Organizacin de la memoria de


datos del microcontrolador PIC 16C54
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
propsitos
generales

Registros de
funciones
especiales
Estos incluyen:

El registro STATUS (Estado)


El Registro FSR (Registro

Se utilizan para guardar


informacin de datos y control
por medio de las instrucciones
del programa.

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)
139

INICIO

MEMORIA DE DATOS DEL


PIC16C54
00h

INDF(1)

01h
02h

TMRO
PCL

03h

STATUS

04h
05h

FSR
PORTA

06h

PORTB

07h
0Fh
10h

REGISTROS
DE
PROPSITOS
GENERALES

1Fh
(1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est
contenida en el registro FSR.

140

INICIO

Tipos de Registros

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.

141

INICIO

Funcin de cada bit de los registros


de funciones especiales
Valor despus Valor despus

Direcc Nombre Bit7


Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
N/A
Tris
Registros de control de Entrada y Salida (TRISA,TRISB)

de encender

WDT y MCLR

1111 1111 1111 1111

N/A

OPTION Contiene los bits de configuracin del escalamiento, TMRO y WDT --11 1111 --11 1111

00h

INDF

01h

TMRO

02h

PCL

03h

STATUS PA2

04H

FSR

05h

PORTA

RA3

RA2

RA1

RA0

---- xxxx ---- uuuu

06H

PORTB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

xxxx xxxx uuuu uuuu

Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx


Temporizador contador de tiempo real de 8 bits

xxxx xxxx

8 bits de bajo orden del Contador de Programa (PCL)


PA1

PA0

TO

PD

DC

uuuu uuuu
uuuu uuuu

1111 1111 1111 1111


C

Apuntador de la memoria de datos para acceso indirecto

0001 1xxx
1xxx xxxx

Nota: x significa cualquier cosa y u significa no cambia


142

INICIO

3.4 Registro STATUS

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

143

INICIO

Bits del Registro STATUS


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

DC

bit7 bit6

bit5

bit4

bit3

bit2

bit1

bit0

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

INICIO

El bit C o bit de acarreo (Carry)

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.

145

INICIO

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

146

INICIO

3.5 Registros INDF y FSR,


Modo de acceso indirecto
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

INCF

INDF ; Borra registro cuya direccin est en FSR

FSR, F

; Incremento del apuntador

BTFSS

FSR,5

; Borrado completo? (Examina bit 5 de FSR)

GOTO

Prximo

; No, borra siguiente

147

INICIO

3.6 Registro contador de programa PC


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:

PIC16C54

PC

PCL
Palabra de Instruccin

148

INICIO

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

PC

7
PCL

Inicializacin Palabra de Instruccin


A 0

PIC16C54

149

INICIO

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

GOTOFINAL ; 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

; 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.
150

INICIO

3.7 Registro STACK (pila)


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
nivel 2 al nivel
llenar con la
problemas en el

RETLW, cargar el contenido del nivel 1 de la pila al PC y el del


1. Si ms de dos instrucciones RETLW se ejecutan, la pila se
direccin almacenada previamente en el nivel 2, y podra dar
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.

151

INICIO

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
valorBCD
org
INICIO movf
call
goto
BCD7SEG
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
end

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

152

a (RB0)
f (RB5)

b (RB1)
g (RB6)

e (RB4)

c (RB2)
d (RB3)

INICIO

3.8 Puertos de Entrada y Salida

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

153

INICIO

Registro de control de puerto TRIS

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

INICIO

Interfaces de Entrada y Salida


Cada terminal de un puerto, puede ser utilizado como entrada o salida.
operaciones de entrada, estos puertos no guardan la condicin.

Para

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:

155

INICIO

Bus de
Datos

Escribe
en puerto

Registro
W

Q
Registro
Tipo D

Vdd

CK

terminal de
Entrada/Salida

Vss

Registro
TRIS
TRIS f

CK

Q
Inicializacin
Lee de Puerto
156

INICIO

La siguiente tabla presenta un resumen de la posicin de las lneas en cada uno de los
puertos:
Valor despus Valor despus

Direcc Nombre Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Registros de control de Entrada y Salida (TRISA,TRISB, TRISC)

de encender

WDT y MCLR

N/A

Tris

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

Nota: x significa cualquier cosa y u significa no cambia

157

INICIO

Escritura en un Indicador
7 segmentos
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.
RB0
RB1
RB2
PIC 16C54

RB3
RB4
RB5
RB6

158

INICIO

Escritura en Dgitos Multiplexados


La siguiente figura muestra
una configuracin de una
salida de cuatro dgitos
controlados por los puertos
A y B.

RA0
RA1

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.

RA2
RA3

PIC16C54
RB0

Los dgitos se encendern


con un 0 en la entrada
del
transistor
que
le
corresponde
manejar
al
dgito correspondiente.

RB1

En la siguiente pgina se
muestra una rutina para el
control de varios dgitos.

RB5

RB2
RB3
RB4

RB6

159

INICIO

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
TRIS
TRIS

CLRW
PORTA
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

160

INICIO

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
GOTOPROXDIG ; SINO VA AL PROXIMO DIGITO

161

INICIO

3.9 Registro OPTION


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
7

U-0
6

W1
TOCS

W1
TOSE

W1
PSA
3

W1
PS2
2

W1
PS1

W1
PS0

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
162

INICIO

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

163

INICIO

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
OPTION

B00xx1xxx ; SE ESTABLECE EL PREESCALADOR AL VALOR DESEADO


; PARA EL WDT

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


CLRWDT
MOVLW
OPTION

; BORRA EL WDT Y EL PREESCALADOR


Bxxxx0xxx ; SELECCIONA EL NUEVO ESCALAMIENTO PARA TMR0 Y LA
; FUENTE QUE ACTIVA ESTE TEMPORIZADOR

164

INICIO

3.10 Temporizador contador

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:

Registro contador - temporizador de 8 bits de lectura y escritura.

Escalamiento programable (Vase registro Option).

Seleccin de entrada de oscilador interna o externa.

Seleccin del tipo de transicin que activa la cuenta.

165

INICIO

Modo Temporizador
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:
Ciclos del Temporizador 0, para el oscilador interno sin escalamiento:

PC (Contador de
programa)
Preparacin de
instruccin

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
MOVWF TMR0

MOVF TMR0,W

MOVF TMR0,W

MOVF TMR0,W MOVF TMR0,W

MOV TMR0,W

MOVF TMR0, W

Temporizador 0
Instruccin
Ejecutada

Escribir
TRMRO
Ejecutado

166

Leer TMRO Leer TMRO Leer TMRO Leer TMRO Leer TMRO
Lee NTO

Lee NTO

Lee NTO

Lee NTO+1 Lee NTO+2

INICIO

Ciclos del Temporizador 0:


Oscilador interno con escalamiento 1 a 2

PC (Contador de
programa)
Preparacin de
instruccin

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
MOVWF TMR0

MOVF TMR0,W

MOVF TMR0,W

MOVF TMR0,W

MOVF TMR0,W

MOV TMR0,W

MOVF TMR0,W

Escribir
TRMRO
Ejecutado

Leer TMRO Leer TMRO Leer TMRO Leer TMRO Leer TMRO

Temporizador 0
Instruccin
Ejecutada

Lee NTO

Lee NTO

Lee NTO

Lee NTO

Lee NTO+1

El programador debe considerar este retardo en la escritura para ajustar el valor


deseado en TMR0.
167

INICIO

Modo Contador
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:

TOCKI

Entrada con
Disparador de
Schmitt

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

INICIO

En la tabla siguiente, se muestra un resumen de los registros asociados con


el temporizador TMR0.

Valor al

Valor despus

Direcc Nombre Bit7


Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
N/A
TMRO
Temporizador 0 - Contador/reloj de tiempo real de 8 bits
N/A

OPTION

TOCS

169

TOSE

PSA

PS2

PS1

PS0

Encender

de TMR0 y TO

xxxx xxxx uuuu uuuu


11 1111

1111 1111

INICIO

Contador de tiempo
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.
170

INICIO

El Contador de segundos
y minutos
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.

171

INICIO

Una consideracin respecto


al programa anterior
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.

172

INICIO

Uso de un oscilador externo


para TMR0
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:

01 02
Entrada de un
Oscilador Externo o
Salida del
Escalamiento
Salida del Oscilador
Externo/Escalamiento
Despus del muestreo

03

04 01 02

03

04

01 02

03

04

03 04
01 02
Un pequeo pulso se
pierde en el muestreo

(1)
(3)

Incremento del temporizador TMR0 (Q4)


Temporizador TMR0

173

INICIO

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.

174

INICIO

3.11 Temporizador WDT


(Perro Guardin)
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.

175

INICIO

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.

176

INICIO

Perodo del temporizador WDT

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.

177

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.

REGISTROS ASOCIADOS CON EL TEMPORIZADOR WDT (PERRO GUARDIN):


Direcc Nombre Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Valor al

Valor despus de

--11 1111

--11 1111

Encender TMR0 y MCLR

N/A

OPTION

TOCS

TOSE

178

PSA

PS2

PS1

PS0

INICIO

Programa que utiliza el WDT


para prevenir lazos infinitos
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.
179

INICIO

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.

180

INICIO

TEMA 4
Caractersticas Especiales del
Hardware
4.1.- Configuracin de la serie PIC16C5X

CONTENIDO

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

TEMA IV:
CARACTERSTICAS ESPECIA
DEL HARDWARE
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.

182

INICIO

4.1.- Configuracin de
la serie PIC16C5X
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.

183

INICIO

Diagrama de la palabra de configuracin

CP
Bit 11 10

Bits 11-4: No utilizados: Se leen 0


Bit 3:

WDTE FOSC1 FOSC0


2

Bit 0

Registro CONFG
Direccin FFFH

CP: Bit de proteccin de cdigos

1-> No protegido
0-> Protegido
Bit 2:

WDTE: Habilitacin del temporizador WDT (Perro Guardin)

1-> Habilitado
0-> Inhabilitado
184

INICIO

Proteccin de cdigos

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.

185

INICIO

Seleccin del Oscilador

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)

186

INICIO

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

OSC1
Abierto

OSC2

187

PIC 16C5X

INICIO

OSC1

C1(1)

PIC16C5X
SLEEP
XTAL

RF(3)
Hacia lgica
interna

RS(2)

Tabla de Seleccin

OSC2

C2(1)

Tipo de
Frecuencia
Oscilador
resonante

NOTAS:
1.- Ver tabla de seleccin de C1 y
C2

LP

2.- Puede ser necesario colocar una


resistencia en cristales sin blindajes

XT

3.- El valor de RF depende del cristal


seleccionado

32KHz
100KHz
200KHz
455KHz
1MHz
2MHz
4MHz

HS

188

4MHz
8MHz
20MHz

C1

C2

15 pF

15pF

15-30 pF
200-300 pF
15-30 pF
100-200 pF
15-30 pF
15-100 pF
15-30 pF
15-30 pF
15 pF
15 pF
15 pF
15 pF
15 pF
15 pF
15 pF

15 pF
15 pF
15 pF

INICIO

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 Rext, el condensador Cext, 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 Cext 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
Rext

Reloj Interno
OSC1
N

PIC16C5X

Cext
Vss

FOSC/4

189

OSC2/ClkOUT

INICIO

Valores tpicos de frecuencia que se


pueden obtener en el modo RC

Cext

20pF

100pF

300pF

190

Rext

Frecuencia
Vdd= 5V, Tamb=25C

3.3K
5K
10K
100K
3.3K
5K
10K
100K
3.3K
5K
10K
160K

5,0MHz
3,8MHz
2,2MHz
260KHz
1,6MHz
1,2MHz
680KHz
72KHz
660KHz
480KHz
270KHz
29KHz

INICIO

4.2.- Modo SLEEP (Reposo)

Los microcontroladores PIC,


de bajo nivel de consumo.
instrucciones, tal como si
funcionar en el modo normal,

tienen la posibilidad de estar en un modo de operacin


Sin embargo, durante ese tiempo, no podr ejecutar
estuviera durmiendo.
Luego podr despertar para
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 (VDD o VSS) y la entrada MCLR/Vpp deber colocarse a un nivel
alto.

191

INICIO

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.

192

INICIO

4.3.- Inicializacin de los PIC16C5X

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.

193

INICIO

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

Inicializacin WDT
(operacin normal)

1111 1111

Inicializacin WDT al
despertar (desde modo
Reposo)

1111 1111

Condicin

0001 0uuu

0000 1uuu
0000 0uuu

Nota: x significa cualquier valor; u significa que mantiene el valor anterior


194

INICIO

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:

Encendido (POR)

Inicializacin MCLR (Operacin Normal)

Inicializacin MCLR al despertar

Inicializacin WDT (Operacin Normal)

Inicializacin WDT Al despertar

195

INICIO

Estados de los registros,


despus de una inicializacin
Registro

Direccin

Inicializacin por
Encendido

Inicializacin por
MCLR o WDT

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

Nota: x significa cualquier valor.


u significa que mantiene el valor anterior.
196

INICIO

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

Registros de
propsitos generales

07h-7Fh

xxxx xxxx

uuuu uuuu

197

INICIO

En la siguiente figura, se muestra el diagrama de bloques del circuito de


inicializacin:

VDD

Detector de
POR
Encendido (Inicializacin
por Encendido)
z

MCLR/VDD
Oscilador RC

Tiempo de espera
del WDT

Contador de 8 Bits
Asincrnico
(Temporizador de
Arranque)

Interno

Inicio

S
R

Q
Q

Inicializacin
del Chip

198

INICIO

4.4. El Temporizador de
Inicializacin (DRT)
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.

199

INICIO

4.5. Inicializacin por


encendido (POR)
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/Vpp al voltaje de alimentacin Vpp.
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:

200

INICIO

V1
VDD
MCLR
TDRT

POR INTERNO
ESPERA DRT
INICIALIZACIN INTERNA

El VDD 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.

201

INICIO

La siguiente figura muestra el caso en que MCLR se conecta a V DD.


V1
VDD
MCLR
POR INTERNO

TDRT

ESPERA DRT
INICIALIZACIN INTERNA

El caso conveniente se consigue cuando MCLR se conecta a V DD. El valor


de VDD permanece estable antes de que se cumpla el tiempo de espera en el
DRT, y no hay problemas en obtener la inicializacin adecuada.
202

INICIO

Para los casos en los que la alimentacin sube de manera muy lenta, ocurre una
situacin problemtica. Vase la siguiente figura:

V1
VDD
MCLR
POR INTERNO

TDRT

ESPERA DRT
INICIALIZACIN INTERNA
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.
203

INICIO

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

VDD
R
R1
MCLR
C

PIC16C5X

Si se desea mayor informacin, consultar la nota de aplicacin AN522 en el


Embedded Control Handbook o en www.microchip.com.
204

INICIO

TEMA V
Otros Microcontroladores de la Gama Bsica
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

INICIO

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

INICIO

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:
Producto

MCU

Memoria de programa
Bytes OTP/EPROM

RAM Lneas
Encapsulado
ROM
Bytes E/S

207

Temporizadores Veloc.
y WDT

Otras caractersticas
Mx.

INICIO

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:
Producto

RAM

Lneas

MCU

Memoria de
programa FLASH

Bytes

E/S

PIC16F54

512X12

25

12

PIC16F57

2KX12

72

20

Encapsulado

18/PDIP
18/SOIC
20/SSOP

Temporizadores y
WDT

Velocidad

Otras

Mx.

Caractersticas

1-8 bits

20MHz

Memoria FLASH

20MHz

Memoria FLASH

1-WDT
1-8 bits
1-WDT

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.

208

INICIO

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

209

INICIO

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.
PC<8:0>

CALL, RERLW
NIVEL DE PILA 1
NIVEL DE PILA 2
Espacio
para
memoria
del
usuario

MEMORIA
DE
PROGRAMA
VECTOR DE INICIALIZACIN

000h
0FFh
100h
1FFh

Memoria de programa de los PIC16C54 y 55


210

INICIO

Organizacin de las memorias de los


microcontroladores PIC16C56, 57 y 58
PC<10:0>
CALL, RERLW

11

PC<9:0>

NIVEL DE PILA 1
NIVEL DE PILA 2
MEMORIA DE
PROGRAMA
(pgina 0)
MEMORIA DE
PROGRAMA
(pgina 1)
Espacio
para
memoria
del
usuario

MEMORIA DE
PROGRAMA
(pgina 2)
MEMORIA DE
PROGRAMA
(pgina 3)
VECTOR DE INICIALIZACIN

CALL, RERLW

NIVEL DE PILA 1
NIVEL DE PILA 2

000h
0FFh
100h
1FFh
200h
2FFh
300h
3FFh
400h
4FFh
500h
5FFh
600h
6FFh
700h
7FFh

10

Espacio
para
memoria
del
usuario

MEMORIA DE
PROGRAMA
(pgina 0)
MEMORIA DE
PROGRAMA
(pgina 1)
VECTOR DE INICIALIZACIN

000h
0FFh
100h
1FFh
200h
2FFh
300h
3FFh

Memoria de programa del PIC16C56

Memoria de programa del PIC16C57 y 58


211

INICIO

5.5 Registro STATUS


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

DC

bit7 bit6

bit5

bit4

bit3

bit2

bit1

bit0

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:
00 = Pg. 0 =
01 = Pg. 1 =
10 = Pg. 2 =
11 = Pg. 3 =

Pgina
(000h
(200h
(400h
(600h

seleccionada de la memoria de programa (PIC 16C56/57/58)


- 1FFh)
- 3FFh)
- 5FFh) PIC16C57/58
- 7FFh) PIC16C57/58
212

INICIO

5.6 Registro Contador de


Programa PC
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:

PIC16C56

9 8
PC

PCL
Palabra de Instruccin
0

PA0

STATUS
8
PC

PIC16C54/55

PCL

10 9 8 7
PC
PA1 PA0
2
7

PCL
Palabra de Instruccin
0
STATUS

PIC16C57/58

Palabra de Instruccin

213

INICIO

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.

214

INICIO

8
PC

9 8 7

PC

PCL

PCL
Palabra de Instruccin

Inicializacin Palabra de Instruccin


A 0
7

PIC16C54/55

Inicializacin
A 0
PA0

STATUS

PIC16C56

10 9 8 7
PC

PCL
2

PA1 PA0
7

Palabra de Instruccin
0

STATUS

PIC16C57/58
215

INICIO

Efectos de la inicializacin

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.

216

INICIO

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.

217

INICIO

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

218

INICIO

5.7 Memoria de datos


PIC16C54, 55 y 56
MEMORIA DE DATOS DE LOS
PIC16C54 Y 56
00h
01h
02h
03h

INDF(1)

05h
06h

PORTB

04h

07h
0Fh
10h

00h
01h
02h
03h

TMRO
PCL
STATUS
FSR
PORTA

MEMORIA DE DATOS DEL


PIC16C55

04h
05h
06h
07h

REGISTROS
DE
PROPSITOS
GENERALES

0Fh
10h
1Fh

1Fh

INDF(1)
TMRO
PCL
STATUS
FSR
PORTA
PORTB
PORTC
REGISTROS
DE
PROPSITOS
GENERALES

(1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est
contenida en el registro FSR.

219

INICIO

Memoria de datos PIC16C57


MEMORIA DE DATOS DEL PIC16C57
FSR<6:5>

Direccin
de registro00h

01h
02h
03h
04h
05h
06h
07h
08h
0Fh

00
INDF(1)
TMRO
PCL
STATUS
FSR
PORTA
PORTB
PORTC
REGISTROS
DE
PROPSITOS
GENERALES
10h REGISTROS
DE
PROPSITOS
GENERALES
1Fh

Banco 0

01

10

20h

40h

11
60h

Este Mapa de Direcciones


retoma a las direcciones
del Banco 0

2Fh

4Fh

50h
30h REGISTROS
DE
PROPSITOS
GENERALES
5Fh
3Fh

Banco 1

220

6Fh

REGISTROS 70h
DE
PROPSITOS
GENERALES
7Fh

Banco 2

REGISTROS
DE
PROPSITOS
GENERALES

Banco 3

INICIO

Memoria de datos PIC16C58


MEMORIA DE DATOS DEL PIC16C58
FSR<6:5>

Direccin
de registro00h

01h
02h
03h
04h
05h
06h
07h

0Fh

00
INDF(1)
TMRO
PCL
STATUS
FSR
PORTA
PORTB
REGISTROS
DE
PROPSITOS
GENERALES
10h REGISTROS
DE
PROPSITOS
GENERALES
1Fh

Banco 0

01

10

20h

40h

11
60h

Este Mapa de Direcciones


retoma a las direcciones
del Banco 0

2Fh

4Fh

50h
30h REGISTROS
DE
PROPSITOS
GENERALES
5Fh
3Fh

Banco 1

221

6Fh

REGISTROS 70h
DE
PROPSITOS
GENERALES
7Fh

Banco 2

REGISTROS
DE
PROPSITOS
GENERALES

Banco 3

INICIO

TEMA VI
Microcontrolador PIC16F84A
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

INICIO

Tema 6: Microcontrolador PIC 16F84A

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

INICIO

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

INICIO

6.2- Familia de la serie PIC16F8X


A continuacin, se presenta la familia PIC16F8X con sus caractersticas principales:
Producto
MCU

Memoria. de programa
FLASH

EEPROM
Bytes

RAM Lneas
Bytes
E/S

Encapsulado

Canales
A/D C

Comparadores
Analgicos

225

PWM
16bits

Temporizadores
y WDT

Puertos
seriales

Veloc.
ICSP
Mxima

BOR/
CCP/
PBOR ECCP

Otras caractersticas

INICIO

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

25 bytes tipo RAM

64 bytes tipo
EEPROM
Manejo de interrupciones

Nmero de lneas de E/S


digitales

13

12

Nmero de temporizadores

2: TMR0 y WDT

2: TMR0 y WDT

226

INICIO

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

INICIO

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

K
; Suma W con K, donde K es constante y el resultado va a W. SUBLW
; 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
TRIS f

MOVWF
MOVWF

OPTION_REG ; Las posiciones de estos registros estn en


TRISF
; el banco 1 de la RAM (BSF STATUS,RP0)
228

INICIO

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

INICIO

Ubicacin de los registros del


microcontrolador PIC16F84A

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.
Banco 0
230

Banco 1

INICIO

Asignacin de bits en cada registro

Direccin

Valor despus
Valor despus
de otra
de encender
inicializacin

Nombre

231

INICIO

6.6- Registro STATUS


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

DC

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)
232

INICIO

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.

233

INICIO

100
80

AUTOR: Csar lvarez


DISEO
INSTRUCCIONAL:
M. Snchez y C. lvarez

60

Interrupcin:

40

Lee la seal

Programa Principal:

Convierte a digital

Lee posicin de la memoria

Guarda en memoria

Convierte a 7 segmentos

20
0

Escribe valor en el indicador

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

INICIO

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.


causas pueden ser:

Para el PIC16F84A estas

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

INICIO

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.

INTCON
GIE

EEIE T0IE INTE RBIE T0IF INTF RBIF

bit7 bit6

bit5

bit4

bit3

bit2

bit1

236

bit0

INICIO

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

237

INICIO

Ejemplo de interrupcin
por TMR0
include

org
goto
org
interrupt
goto
btfsc

tmr0full movwf
swapf
movwf
movlw
movwf
incf
call
swapf
movwf
swapf
swapf
bcf
retfie

prepara movlw
movwf
bsf
movwf
movlw
movwf
movlw
movwf

"P16F84A.INC" ; Incluye los smbolos del PIC16F84A


; Definicin de smbolos, tales como: segundo, minuto, hora, da, etc.
0
; Direccin inicial del programa en el microcontrolador
prepara ; En prepara se establece la seleccin de TMR0, interrupciones, puertos, etc.
4
; Direccin donde comienza la rutina de interrupcin
btfsc INTCON,T0IF ; Evala si la interrupcin fue del TMR0
tmr0full ; si es 1 atiende rutina de TMR0
eecon1,eeif
; Evala si la interrupcin fue de la EEPROM
W2
; se guarda el valor de w en W2, para recuperarlo al retorno
STATUS,w
STATUS2
; Se guarda el STATUS en STATUS2, para luego recuperarlo
d'61
TMR0 ; carga el valor 61 decimal para que se ejecuten 195 ciclos de tmr0
segundo,f
; Se incrementan los segundos
ajuste ; En ajuste se cambia los incrementos a la bases numricas adecuadas
STATUS2,w
; se recupera el valor del STATUS
STATUS
W2,f
W2,w ; se recupera el valor de w
INTCON,T0IF ; se borra el bit de interrupcin de TMR0
; Se regresa al programa principal. En la rutina ajuste, se pueden hacer
; todos los ajustes para llevar la cuenta del tiempo real
b'00000110
; Seleccin del preescalador a TMR0 y divisin por 128
TMR0 ; Se carga a TMR0 con un valor diferente de 0 0FF para no interrumpir an
STATUS,RP0 ; Selecciona banco 1 para acceder a los registros OPTION y TRIS
REG_OPTION ; Carga al registro OPTION la configuracin
b11100000
; Se habilita interrupcin global, la de TMR0 y la EEPROM
INTCONT
; Despus de esta instruccin, contina otras inicializaciones y el programa
bxxxxxxxx
; Palbra de configuracin del puerto A
TRISA ; Configura puerto A

238

INICIO

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 105 y 107 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.
239

INICIO

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

INICIO

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 accidentalMOVWF
EECON2
; mente un dato) Escribe cdigo AAH en EECON2
BSF
EECON1,WR
; Comienza la grabacin del dato
BSF INTCON,GIE
; Habilitacin global de interrupciones

241

INICIO

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.

242

INICIO

6.9 Registro contador de programa


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

12 11 10 9 8 7
PC

PCL

PCLATCH 4-3
2
7
4

11
Palabra de Instruccin
0

PIC16F84

PCLATCH

243

INICIO

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
12 11 10 9

PC

PCLATCH
4-0
7

PCL
5

Resultado de la ALU
0
PCLATCH

PIC16F84
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.
244

INICIO

6.10 Registro STACK (pila)


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.

245

INICIO

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:
OPTION

TMR0
246

WDT

INTCON

INICIO

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

Bit 11 10

CP
9

CP
8

CP

CP

247

CP
5

CP
4

PWRTE WDTE FOSC1 FOSC0


3

Bit 0

INICIO

TEMA VII
MICROCONTROLADORES DE LA SERIE
PIC16F87X

7.1 Generalidades
7.2 La familia PIC16F87X
7.3 Registros de funciones especiales
7.4 Las interrupciones de los PIC16F87X
7.5 Las Memorias EEPROM y FLASH
7.6 El Puerto A, el Puerto E y el Convertidor A/D
7.7 El Puerto B
7.8 El Puerto C y los Temporizadores
7.9 El Puerto C y los mdulos de Captura, Comparacin y PWM
7.10 El Puerto C y el Mdulo de Comunicacin Serial Sncrona
7.11 El Puerto C y la Comunicacin I2C
7.12 El Puerto C y el USART
7.13 El Puerto D, el Puerto E y la Interfaz Paralela
7.14 Palabra de Configuracin
248

INICIO

Tema 7: Microcontroladores PIC 16F87X

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
249

INICIO

7.1 Generalidades de
los PIC16F87X
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.

250

INICIO

7.2 La familia de los PIC16F87X


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

64 bytes

128 bytes

128 bytes

128 bytes

192 bytes

192 bytes

368 bytes

368 bytes

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

Puerto serial

No

AUSART

AUSART

M2CSPI

AUSART/
M2CSPI

AUSART/
M2CSPI

AUSART/
M2CSPI

AUSART/
M2CSPI

Temporizadores

1-8bits,
WDT

1-16bits

1-16bits,

1-16bits,

1-16bits,

1-16bits,

1-16bits,

1-16bits

2-8bits, WDT

2-8bits,WDT

2-8bits, WDT

2 8bits, WDT

2-8bits, WDT

2-8bits, WDT

2-8bits, WDT

(Datos)
EEPROM
(Datos
permanentes)

251

INICIO

Conexiones de los PIC16F870/72/73/76

252

INICIO

Conexiones de los PIC16F871/74/77

253

INICIO

7.3 Registros de
funciones especiales
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
254

INICIO

PIC16F870 y 871

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.

Banco 0
255

Banco 1

Banco 2

Banco 3

INICIO

PIC16F872

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.

Banco 0
256

Banco 1

Banco 2

Banco 3

INICIO

PIC16F873 y 874

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.

Banco 0
257

Banco 1

Banco 2

Banco 3

INICIO

PIC16F876 y 877

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.

Banco 0
258

Banco 1

Banco 2

Banco 3

INICIO

Bits de los Registros de


Funciones Especiales (Banco 0)

259

INICIO

Bits de los Registros de


Funciones Especiales (Banco 1)

260

INICIO

Bits de los Registros de


Funciones Especiales (Bancos 2 y 3)

261

INICIO

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

18h

18h

-----

18h

18h

18h

18h

RCSTA

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

Segundo mdulo

CCPR2L

-----

2621Ah

-----

1Bh

1Bh

1Bh

-----

INICIO
1Ah
1Bh

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

INICIO

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:

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

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.


264

INICIO

Registro PIE1

El registro PIE1 contiene 8 bits que se utilizan para la habilitacin de ocho de las
interrupciones de los PIC16F87X.

PIE1 (8CH)
PSPIE

ADIE RCIE TXIE SSPIE CCP1IE

bit7 bit6

bit5

bit4

bit3

bit2

BIT

bit1

TMR2IE

TMR1IE

bit0

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

265

INICIO

Registro PIE2

El registro PIE2 contiene 3 bits que se utilizan para la habilitacin de tres de las
interrupciones de los PIC16F87X.

PIE2 (8DH)
---

---

bit7 bit6 (1)

EEIE BCLIE
bit5

bit4

bit3

---

---

bit2

bit1

CCP2IE
bit0

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


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

266

INICIO

Registro PIR1

El registro PIR1 contiene 8 bits que se utilizan para la indicacin de ocho de las
interrupciones de los PIC16F87X.

PIR1 (0CH)
PSPIF

ADIF RCIF TXIF SSPIF CCP1IF

bit7 bit6

bit5

bit4

bit3

bit2

BIT

bit1

TMR2IF

TMR1IF

bit0

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

267

INICIO

Registro PIR2

El registro PIR2 contiene 3 bits que se utilizan para la indicacin de tres de las
interrupciones de los PIC16F87X.

PIR2 (0DH)
---

---

bit7 bit6 (1)

EEIF BCLIF --bit5

bit4

bit3

--bit2

CCP2IF
bit1

bit0

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

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

268

INICIO

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

269

movwf

INICIO

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

270

INICIO

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.

271

INICIO

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.

272

INICIO

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.
Direcci
n

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

xxxx xxxx

uuuu uuuu

10FH

EEADRH

la FLASH

xxxx xxxx

uuuu uuuu

10CH

EEDATA

FLASH

xxxx xxxx

uuuu uuuu

10EH

EEDATAH

----

----

xxxx xxxx

uuuu uuuu

18CH

EECON1

EEPGD

----

----

----

x--- x000

x--- u000

18DH

EECON2

Registro

de

control

8DH

PIE2

----

----

EEIE

BCLIE

----

----

CCP2IE

-r-0 0--0

-r-0 0--0

0DH

PIR2

----

273
----

EEIF

BCLIF

----

----

CCP2IF

-r-0 0--0

Registro Direccin EEPROM

----

----

----

Registro

de Dato

la

FLASH

Direccin Alta de

de la

EEPROM

la

Dato Alto de la FLASH

WRERR
de

la

WREN
EEPROM

WR
y

la

RD
FLASH

-r-0 0--0
INICIO

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

INICIO

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 accidentalMOVWF
EECON2
; mente un dato) Escribe cdigo AAH en EECON2
BSF
EECON1,WR
; Comienza la grabacin del dato
BSF INTCON,GIE
; Habilitacin global de interrupciones

275

INICIO

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
; 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

MOVWF

EEADR

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.

276

INICIO

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 accidentalMOVWF
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

277

INICIO

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.

278

INICIO

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

TODO

PROTEGIDO

PIC16F873/874

0000H

0FFFH

PIC16F873/874

0800H

0FFFH

PIC16F873/874

0F00H

0FFFH

PIC16F876/877

0000H

1FFFH

PIC16F876/877

1000H

1FFFH

PIC16F876/877

1F00H

1FFFH

Todos los modelos

NO

PROTEGIDO

279

INICIO

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.

280

INICIO

7.6 El Puerto A, el Puerto E


y el Convertidor A/D
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.
terminal se resume en la siguiente tabla:

La funcin que puede realizar cada

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 3

ENTRADA
ANALGICA 2

ENTRADA
ANALGICA 1

ENTRADA
ANALGICA 0

ENTRADA
ANALGICA 4
MODO ESCLAVO EN
COMUNICACIN
SERIAL SNCRONA

ENTRADA DE
RELOJ DEL
TMRO

VOLTAJE DE
REFERENCIA A/D C

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).
281

INICIO

Registros asociados
a PORTA
La siguiente tabla muestra los registros asociados al puerto A y la ubicacin de los
mismos en la memoria RAM.
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

05h

PORTA

---

---

RA5

RA4

RA3

RA2

RA1

RA0

--0x 0000

--0u 0000

85h

TRISA

---

---

--11 1111

--11 1111

1Fh

ADCON0

ADCS1

ADCS0

CHS2

CHS1

CHS0

9Fh

ADCON1

ADFM

---

---

---

PCFG3

Registro de Configuracin de PORTA


GO/

---

ADON

0000 00-0

0000 00-0

PCFG2

PCFG1

PCFG0

0--- 0000

0--- 0000

DONE#

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

INICIO

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).
RE2/CS#/AN7

RE1/WR#/AN6

RE0/RD#/AN5

E/S DIGITAL

c
E/S DIGITAL

E/S DIGITAL

Entrada Analgica 7

Entrada Analgica 6

Entrada Analgica 5

Seleccin de Chip en el
modo PSP (CS)

Escritura en cel modo PSP


(WR)

Lectura en el modo PSP


(RD)

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

89h

TRISE

IBF

OBF

IBOV

PSP

---

MODE

283

Bit 0

Valor en
POR y BOR

Otros
Resets

Registro de
Configuracin de PORTE

0000 -111

0000 -111

Bit 2

Bit 1

INICIO

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 Vref-.
La resolucin que tiene cada bit que procede de la conversin es funcin de la tensin de
referencia segn la siguiente ecuacin:

Resolucin = (Vref+ - Vref-)/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 (Vref-) 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.
284

INICIO

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

INICIO

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:

tadq = tamp + tcc + tcT


Donde:

tamp es el tiempo de establecimiento del amplificador, 2Seg.

tcc es el tiempo de carga del condensador del circuito de


muestreo y retencin (sample & hold), 16,5Seg.
tcT es el tiempo debido al coeficiente de temperatura:
tcT = (T-25C)0,05Seg
El tiempo de conversin est dado por 12tAD, donde tAD es el tiempo de conversin de
cada bit.
El tiempo de lectura mnimo a 25C est dado para tAD = 1,6Seg:

tlect = 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.
286

INICIO

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.

287

INICIO

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.

288

INICIO

El oscilador del convertidor A/D


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:
ADCS1 - ADCS0

Frecuencia

00

fosc/2

01

fosc/8

10

fosc/32

11

Osilador RC interno

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,


aproximadamente 4Seg, aunque ste puede estar comprendido entre 2 y 6Seg.
289

es

INICIO

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.

290

INICIO

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.

PIE1 (8CH)
PSPIE
c

ADIE RCIE TXIE SSPIE CCP1IE

bit7 bit6

bit5

bit4

bit3

bit2

bit1

TMR2IE c

TMR1IE

TMR2IF

TMR1IF

bit0

PIR1 (0CH)
PSPIF
c

ADIF RCIF TXIF SSPIF CCP1IF

bit7 bit6

bit5

bit4

bit3

bit2

291

bit1

bit0

INICIO

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

292

INICIO

Ejemplo de un programa que


configura al convertidor A/D
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.

293

INICIO

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

294

INICIO

7.7 El Puerto B
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.
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

06h,106h

PORTB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

xxxx xxxx

uuuu uuuu

86h,186h

TRISB

1111 1111

1111 1111

81h,181h

OPTION_REG

RBPU#

INTEDEG

TOCS

TOSE

PSA

PS2

PS1

PS0

1111 1111

1111 1111

0Bh, 8Bh,
10Bh,18Bh

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

0000 000x

0000 000x

Registro de Configuracin de PORTB

295

INICIO

7.8 El Puerto C y los


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

E/S

DIGITAL

DIGITAL

RECEPCIN
USART

TRANSMIS.
USART

SALIDA
DATOS
SPI

ENTRADA
DATOS
SPI

RELOJ SPI

ENTRADA
CAPTURA 1

ENTR. TMR1

ENTRADA TMR1

ENTR. CAPT2

DATOS
TRANS
SINCRONA

RELOJ
TRANS
SINCRONA

ENTRADA
DATOS
I2C

RELOJ I2C

SAL COMP1

SAL COMP2

SAL PWM1

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

INICIO

El Temporizador TMR1
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:

297

INICIO

Registro de control del TMR1:


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

T1CON (10CH)
----

----

bit7 bit6

T1CKPS1
bit5

bit4

T1CKPS0
bit3

bit2

T1OSCEN

TISYNC#

bit1

BIT

TMR1CS

TMR1ON

bit0

Funcin

TMR1ON

Un 1 en este bit enciende el TMR1

TMR1CS

Seleccin de pulsos del TMR1: 0 fosc/4; 1 Entrada externa (RC0, RC1)

TISYNC#

Sincronizacin con externa con oscilador interno: 0 Sincronizado;


1 No sincronizado

T1OSCEN

T1CKPS0

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
Bits del preescalador. Relacin de frecuencia segn T1CKPS1 - T1CKPS0:

T1CKPS1

0-0 1:1;

0-1 1:2;

298

1-0 1:4;

1-1 1:8

INICIO

Algo ms sobre TMR1


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
GOTOCONTINUA ; Por lo tanto, el programa contina
GOTOLEETMR1; ; 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.
299

INICIO

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

300

INICIO

El Temporizador TMR2
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 fosc/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).
301

INICIO

Registro de control del TMR2:


T2CON
A continuacin se describe el funcionamiento de cada uno de los bits del registro
T2CON.

T2CON (12CH)
---- -

TOUTPS3

bit7 bit6

bit5

TOUTPS2

bit4

bit3

TOUTPS1

bit2

bit1

Los bits T2SCKPS1 y T2CKPS0


sirven para seleccionar la frecuencia
del pre-escalador segn la siguiente
tabla:

TOUTPS0

TMR2ON

T2SCKPS1 T2SCKPS0

bit0

Los bits TOUTPS3 hasta TOUTPS0


sirven para seleccionar la frecuencia del
post-escalador segn la siguiente tabla:
funcionamiento de cada uno de los bits.

T2SCKPS1 - T2CKPS0

Relacin del predivisor

TOUTPS3 - TOUTPS0

Relacin del postdivisor

00

1:1

0000

1:1

01

1:4

0001

1:2

1x

1:16

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

INICIO

7.9 El Puerto C y los Mdulos de


Captura, Comparacin y PWM
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:
RC7/RX/DT

RC6/TX/CK

RC5/SDO

RC4/SDI/SDA

RC3/SCK/SCL

RC2/CCP1

E/S DIGITAL

E/S
DIGITAL

E/S
DIGITAL

E/S
DIGITAL

E/S DIGITAL

E/S
DIGITAL

RECEPCIN
USART

TRANSMIS.
USART

c
SALIDA
DATOS
SPI

ENTRADA
DATOS SPI

RELOJ SPI

DATOS
TRANS
SINCRONA

RELOJ
TRANS
SINCRONA

ENTRADA
DATOS I2C

RELOJ I2C

303

RC1/T10SC1/
CCP2

RC0/T1OSC0/
T1CKI

E/S
DIGITAL

E/S
DIGITAL

ENTRADA
CAPTURA 1

ENTR. TMR1
ENTR. CAPT2

c TMR1
ENTRADA

SAL COMP1
SAL PWM1

SAL COMP2
SAL PWM2

SALIDA TMR1

INICIO

El Registro CCP1CON
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.
CCP1CON (17H)
----

----

CCP1X CCP1Y CCP1M3

bit7

bit6

bit5

bit4

bit3

CCP1M2
bit2

CCP1M3-CCP1M0

bit1

CCP1M1

CCP1M0

bit0
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

304

INICIO

El Registro CCP2CON
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.
CCP2CON (1DH)
----

----

CCP1X CCP1Y CCP1M3

bit7

bit6

bit5

bit4

bit3

CCP1M2
bit2

CCP1M3-CCP1M0

bit1

CCP1M1

CCP1M0

bit0
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

305

INICIO

Modo Captura
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?
306

INICIO

Esquema del Modo Captura


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.

307

INICIO

Inicializacin en el modo Captura


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
GOTOCAPTURA
; Ocurre la captura
BCF PIR1, CCP1IF
; Este bit debe borrarse antes de la prxima comparacin

308

INICIO

Modo Comparacin

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

INICIO

Modo Comparacin

En la siguiente figura se muestra el esquema de funcionamiento en el modo Comparacin


para el mdulo CCP1.

310

INICIO

Inicializacin en el
modo Comparacin
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
GOTOCOMPARA
; Ocurre la comparacin
BCF PIR1, CCP1IF
; Este bit debe borrarse antes de la prxima comparacin

311

INICIO

Modo Modulacin de Ancho


de Pulsos (PWM)
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.
312

INICIO

Duracin del ciclo en el PWM

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:
TCICLO = (PR2 + 1) X 4 X TOSC 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.

313

INICIO

Diagramas de bloques del PWM

A continuacin se presenta el diagrama de bloques del modulador de ancho de pulsos


para el mdulo CCP1.

314

INICIO

Configuracin del PWM


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
GOTOPER_PWM
; Se actualiza este perodo del PWM y sigue siguiente ciclo
BCF PIR1, TMR2IF
; Este bit debe borrarse antes de la prxima comparacin

315

INICIO

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

316

INICIO

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

INICIO

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
esclavo se suele hacer de la siguiente manera:

Escritura: El maestro enva la direccin, luego


comando de escritura y despus el dato.

Lectura: El maestro enva la direccin, luego


comando de lectura y despus el esclavo enva
dato.
318

el
el
el
el

INICIO

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.

319

INICIO

Formas de onda en modo Esclavo


Similarmente podemos observar a continuacin las formas do onda en modo esclavo.
Para CKE=0

Para CKE=1

320

INICIO

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.

321

INICIO

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

INICIO

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.

323

INICIO

Bits SSPM3-SSPM0

SSPM3-SSPM0

Modo de trabajo

0000

Modo maestro SPI con sincronizacin a Fosc/4

0001

Modo maestro SPI con sincronizacin a Fosc/16

0010

Modo maestro SPI con sincronizacin a Fosc/64

0011

Modo maestro SPI con sincronizacin igual a la salida de TMR2/2

0100

Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0)

0101

Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo)

0110

Modo esclavo I2C con direccin de 7 bits

0111

Modo esclavo I2C con direccin de 10 bits

1000

Modo maestro I2C con sincronizacin = Fosc/(4(SSPAD+1))

1011

Modo maestro I2C controlado por


firmware
c

1110

Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 7bits

1111

Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 10bits

324

INICIO

Programa ejemplo
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

; Habilitacin global de interrupciones

INTCON, GIE

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

325

INICIO

Ejercicio: Transmitir un dato en


modo SPI
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.

PIC16F87X

74XX164
SDO
SCK

SI
Clock

326

INICIO

7.11 El Puerto C y la
Comunicacin I2C
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 2C 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.
VDD1

NMOS

327

INICIO

Funcionamiento del protocolo I2C


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 I2C en los PIC16F87X, en los que se detallan las seales de estado de
este microcontrolador.

(RC4)

(RC3)

328

INICIO

Formas de ondas en la transmisin


y recepcin en el protocolo I2C
Formas de onda para la escritura de datos al esclavo:

Formas de onda para la lectura de datos desde el esclavo:

329

INICIO

Colisin de datos
Existe la posibilidad de que en un bus I2C 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.

330

INICIO

Diagrama de bloques del mdulo


I2C 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 2C. 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.

331

INICIO

Registros asociados al I2C

La siguiente tabla muestra los registros asociados al puerto I 2C.


registros se podrn encontrar la funcin de cada bit.

En cada uno de los

93h

SSPADD

A7

A6

A5

A4

A3

A2

A1

A0

0000 0000

0000 0000

87h

TRISC

TC7

TC6

TC5

TC4

TC3

TC2

TC1

TC0

0000 0000

0000 0000

07h

PORTC

RC7

RC6

RC5

RC4/SDA

RC3/SCl

RC2

RC1

RC0

0000 0000

0000 0000

332

INICIO

Registro SSPSTAT
(Registro de Estatus del MSSP)

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

333

INICIO

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.

334

INICIO

Bits SSPM3-SSPM0

SSPM3-SSPM0

Modo de trabajo

0000

Modo maestro SPI con sincronizacin a Fosc/4

0001

Modo maestro SPI con sincronizacin a Fosc/16

0010

Modo maestro SPI con sincronizacin a Fosc/64

0011

Modo maestro SPI con sincronizacin igual a la salida de TMR2/2

0100

Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0)

0101

Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo)

0110

Modo esclavo I2C con direccin de 7 bits

0111

Modo esclavo I2C con direccin de 10 bits

1000

Modo maestro I2C con sincronizacin = Fosc/(4(SSPADD+1))

1011

Modo maestro I2C controlado por firmware

1110

Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 7bits

1111

Modo maestro I2C controlado por firmware, con bits de arranque y parada,
interrupcin activada y direccin de 10bits

335

INICIO

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.

336

INICIO

Configuracin del puerto I2C


A continuacin se presenta una seccin de un programa que configura al puerto I 2C en el
modo maestro.
movlw b00101000

; Carga a w el valor de la configuracin

clrf

; Seleccin del banco 0

STATUS

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

; Seleccin del banco 1

STATUS,RP0

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

337

INICIO

Implementacin y control del puerto I2C


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 I2C, 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 2C. Si deseas
saber ms detallada sobre este tema, te recomendamos que leas la nota de aplicacin
AN735,

338

INICIO

Actividad

Para esta seccin, te proponemos que ubiques componentes que se comuniquen en el


modo I2C 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.

339

INICIO

7.12 El Puerto C y el USART


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.
RC7/RX/DT

RC6/TX/CK

RC5/SDO

RC4/SDI/
SDA

RC3/SCK/
SCL

RC2/CCP1

RC1/T10SC
1/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

RECEPCIN
USART

TRANSMIS.
USART

SALIDA
DATOS
SCPI

ENTRADA
DATOS
SPI

RELOJ SPI

c
ENTRADA
CAPTURA 1

ENTR. TMR1
ENTR. CAPT2

ENTRADA
TMR1

DATOS
TRANS
SINCRONA

RELOJ
TRANS
SINCRONA

ENTRADA
DATOS I2C

RELOJ I2C

SAL COMP1
SAL PMW1

SAL COMP2
SAL PMW2

SALIDA TMR1

E/S
DIGITAL

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).
340

INICIO

Transmisin Asncrona
En la siguiente figura se muestra un esquema de dos equipos que se comunican de manera
serial asincrnica.

PIC 1
RS232C

PIC 2
Tx

Rx

Rx

Tx

Gnd

Gnd

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

INICIO

Diagrama de bloques
de la transmisin del USART
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.
342

INICIO

Bits de configuracin
de la transmisin del USART
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.

343

INICIO

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

INICIO

Diagrama de bloques
de la recepcin del USART
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.
345

INICIO

Bits de configuracin
de la recepcin del USART
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.

346

INICIO

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

INICIO

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
interno del microcontrolador o
registro SPBRG, el cual fija la
frecuencia del oscilador y el bit
esta relacin:

de transmisin se puede obtener en base al oscilador


algn oscilador externo.
Adems se cuenta con el
relacin de velocidad de transmisin en funcin de la
BRGH del registro TXSTA. A continuacin se presenta

Velocidad de transmisin (Baudios o Bits/Seg) = fosc/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.
348

INICIO

Determinar la velocidad
de transmisin
En el caso de que BGRH=0, obtenemos la siguiente tabla:

En el caso de que BGRH=1, obtenemos la siguiente tabla:

349

INICIO

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.

350

INICIO

Bits utilizados para la


transmisin asncrona

A continuacin se presentan los bits utilizados para configurar la transmisin asncrona


en el USART.

En la siguiente pgina se muestra un programa ejemplo para seguir los pasos


mencionados anteriormente.

351

INICIO

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.

352

INICIO

Bits utilizados para la


recepcin asncrona

A continuacin se presentan los bits utilizados para configurar la recepcin asncrona


en el USART.

En la siguiente pgina se muestra un programa ejemplo para seguir los pasos


mencionados anteriormente.

353

INICIO

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

354

INICIO

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

INICIO

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
terminales y un poco menos
computador podrs observar si
que se presenta en la siguiente

utilizados para las interfaces RS-232 son los de 9


los de 25 terminales.
En la parte posterior de tu
tienes una interfaz de 9 terminales machos, similar a la
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.
356

INICIO

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.
INTERFAZ o TRANSCEIVER

2
3

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

INICIO

Asignacin de terminales en un
conector RS-232
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).

54321

9876

N Terminal

Nombre

DTE-DCE

Funcin

DCD

Detector de portadora de dato

RD

Recepcin de datos

TD

Transmisin de datos

DTR

Terminal listo

SG

DSR

Dato listo en el DCE

RTS

Responde para enviar

CTS

Borrar envo

RI

Indicador de llamada

Tierra de seales

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

INICIO

Utilizacin y configuracin del


puerto RS-232-C de tu PC
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:


Hypertrm

359

En ella debers hacer doble clic en

INICIO

Utilizando tu PC en modo
Hyper Terminal
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.
360

INICIO

Configuracin del puerto RS-232-C


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

INICIO

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.

362

INICIO

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

INICIO

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.

364

INICIO

Bits y formas de ondas relacionados


con la transmisin sncrona

365

INICIO

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.

366

INICIO

Registros asociados en la comunicacin


sncrona en modo esclavo

367

INICIO

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

368

INICIO

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.
-12V
+12V
RC6/TX
del PIC

SN75155

Recepcin
RS232C

369

Transmisin
RS232C

RC7/RX
del PIC

INICIO

Registros asociados al Puerto C

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

07h

PORTC

RC7

RC6

RC5

RC4

RC3

RC2

RC1

RC0

xxxx xxxx

uuuu uuuu

87h

TRISC

1111 1111

1111 1111

81h, 181h

OPTION_REG

1111 1111

1111 1111

15h

CCPR1L

Registro 1 de Captura, Comparacin y PWM menos significativo

xxxx xxxx

uuuu uuuu

16h

CCPR1H

Registro 1 de Captura, Comparacin y PWM ms significativo

xxxx xxxx

uuuu uuuu

17h

CCP1CON

--00 0000

--00 0000

1Bh

CCPR2L

xxxx xxxx

uuuu uuuu

1Ch

CCPR2H

xxxx xxxx

uuuu uuuu

1Dh

CCP2CON

18h

RCSTA

Registro de Configuracin de PORTC


RBPU#

---

INTDG

---

TOCS

CCP1X

TOSE

CCP1Y

PSA

CCP1M3

PS2

CCP1M2

PS1

CCP1M1

PS0

CCP1M0

Registro 2 de Captura, Comparacin y PWM menos significativo


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

---

CCP2X

CCP2Y

CCP2M3

CCP2M2

CCP2M1

CCP2M0

--00 0000

--00 0000

SPEN

RX9

SREN

CREN

ADDEN

FERR

OERR

RX9D

0000 000x

0000 000x

CSRC

TX9

TXEN

SYNC

---

BRGH

TRMT

TX9D

0000 -010

0000 -010

0000 0000

0000 0000

0000 0000

0000 0000

0000 0000

0000 0000

xxxx xxxx

uuuu uuuu

98h

TXTA

19h

TXREG

99h

SPBRG

1Ah

RCREG

13h

SSPBUF

Registro de datos transmitidos y recibidos del puerto serial sincrnico

14h

SSPCON

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

0000 0000

0000 0000

91h

SSPCON2

GCEN

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

0000 0000

0000 0000

93h

SSPADD

0000 0000

0000 0000

94h

SSPSTAT

0000 0000

0000 0000

Registro de datos a transmitir del USART

Registro de generacin de la velocidad de transmisin (Baudios)


Registro de datos recibidos del USART

Registro de Direcciones del puerto serial sincrnico en modo I2C


SMP

CKE

D/A

370

UA

R/W

BF

INICIO

7.13 El Puerto D, el Puerto E


y la Interfaz Paralela
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.
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

Los PIC16F870/872/873/876 no tienen los puertos D y E, as que la tabla aplica


solamente a los PIC16F871, PIC16F874 y PIC16F877.

371

INICIO

Diagrama de bloques del


Puerto Paralelo
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.

372

INICIO

Formas de onda para


la escritura de datos
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.

373

INICIO

Formas de onda para


la lectura de datos
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.

374

INICIO

Registros asociados al
Puerto Paralelo

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.

375

INICIO

Registros Asociados a PORTD

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

08h

PORTD

RD7

RD6

RD5

RD4

RD3

RD2

RD1

RD0

xxxx xxxx

uuuu uuuu

88h

TRISD

1111 1111

1111 1111

89h

TRISE

0000 -111

0000 -111

Registro de Configuracin de PORTD


IBF

OBF

IBOV

376

PSP
MODE

Registro de
Configuracin de PORTE

INICIO

El Puerto E

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.
RE2/CS#/AN7

RE1/WR#/AN6

RE0/RD#/AN5

E/S DIGITAL

E/S DIGITAL

E/S DIGITAL

Entrada Analgica
7

Entrada Analgica
6

Entrada Analgica
5

Seleccin de Chip en
el modo PSP (CS)

Escritura en el modo
PSP (WR)

Lectura en el modo
PSP (RD)

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

Registro

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

89h

TRISE

IBF

OBF

IBOV

PSP
MODE

---

377

Bit 2

Bit 1

Bit 0

Configuracin de las
Entradas/Salida Digitales

Valor en POR
y BOR

Otros
Resets

0000 -111

0000 -111

INICIO

Actividades

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.

378

INICIO

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

Habilitacin para programar en bajo voltaje. 1 RB3 habilitada, 0 RB3


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.

379

INICIO

Proteccin de la memoria de
programa de los PIC16F87X

Modelo PIC

CP1

CP0

Direccin
inicial de
proteccin

Direccin final
de proteccin

PIC16F870/871/872

TODO

PROTEGIDO

PIC16F873/874

0000H

0FFFH

PIC16F873/874

0800H

0FFFH

PIC16F873/874

0F00H

0FFFH

PIC16F876/877

0000H

1FFFH

PIC16F876/877

1000H

1FFFH

PIC16F876/877

1F00H

1FFFH

Todos los modelos

NO

PROTEGIDO

380

INICIO

Conclusin

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.
Has aprendido las instrucciones del lenguaje ensamblador y la forma en que puedes
desarrollar programas y grabarlos para realizar varias aplicaciones.
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.
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.
Tu estudio siguiente lo podrs hacer en los microcontroladores PIC18FXXX, lenguaje C, y
los procesadores de seal dsPIC o TMS320.
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
ANEXO 1. GLOSARIO
ANEXO 2. EXPLICACIN DETALLADA DE LAS INSTRUCCIONES
ANEXO 3. DIRECTIVAS DEL LENGUAJE ENSAMBLADOR
ANEXO 4. REGISTROS Y BITS DE FUNCIONES ESPECIALES
ANEXO 5. INTERFACES Y PROYECTOS CON

MICROCONTROLADORES PIC
ANEXO 6. ACTUALIZACIN DEL PICSTART PLUS
ANEXO 7. GRABACIN DE UN PROGRAMA EN LOS PIC16F87X

INICIO

GL
OS
AR
I

ANEXO1: GLOSARIO

383

INICIO

SMBOLOS

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.

384

INICIO

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.

385

INICIO

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.

386

INICIO

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:
1.

Es la mnima unidad de informacin. Puede valer 0

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
para la elaboracin de funciones digitales.

387

base

INICIO

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:
Byte:

Lneas que agrupan direccin, datos o seales de control.


Octeto o agrupacin de 8 bits.

388

INICIO

C:

Lenguaje de programacin de alto nivel.


para compilar programas a lenguaje de mquina.

CAN:

Es muy utilizado

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:
Cext:

Valor nulo.
Condensador externo.

Chip:

Circuito integrado.

Ciclo:

Perodo en el cual transcurre una instruccin.

CLEAR:

Instruccin de borrado o puesta a cero de un dato.

389

INICIO

CLK:

Reloj o seal de oscilacin que define la frecuencia de


del microcontrolador.

CMOS:

trabajo

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.

390

INICIO

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.

391

INICIO

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.

392

INICIO

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:
programa.

Accin de realizar la instruccin o instrucciones de un

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

393

INICIO

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,
puede ser regrabada.

y luego

Escalamiento: Efecto de cambiar de escala a un valor.


Escribir:
Escritura:

Almacenar un dato en una memoria, registro o puerto.


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

INICIO

y
F:

datos.

Apuntador de direcciones de los registros de la memoria de

FIFO:

De las siglas First In First Out (Primero entrado, primero


salido. Se refiere a las memorias cuyos datos van a una pila,
dato que se lee es el que entr de primero.

y el

Flash:

Memoria de programa que puede borrar grupos de datos por


medio de pulsos elctricos.

FOSC:

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.

395

INICIO

e
Handbook:

Manual del fabricante.

Harvard:

Arquitectura que consiste en separar la memoria de programa


de la de datos.

Hitachi:
Hz:

Fabricante japons de semiconductores.


Unidad de frecuencia que indica Hertz o ciclo por segundo.

I2C I2C:

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.

396

INICIO

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

IOR:

rutina.

Instruccin que ejecuta la funcin lgica OR (inclusivo).

397

INICIO

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:
Literal:

Accin y efecto de obtener un dato desde una memoria,


registro o puerto.
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).

398

INICIO

MCLR:

Entrada de inicializacin del dispositivo. Se activa con 0.


terminal tambin tiene la funcion Vpp, que es la tensin de
programacin els microcontrolador.

MCS:

Micro-Computer System.
con microcomputador e interfaces.

MCU:
Media:

Este

Se refiere a un sistema realizado

Microcontroller Unit. Se refiere a un microcontrolador.

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.

399

INICIO

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.

400

INICIO

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.

401

INICIO

OPTION:
OR:

Registro que configura el escalamiento del TMRO o el WDT.

Funcin lgica cuyo resultado es 1, cuando cualquiera de sus


entradas es 1.

Oscilador:

estable.

Circuito capaz de producir una seal cclica a una frecuencia

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.

402

INICIO

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
de lneas.

PB:

Puerto B. (PORTB).

PC:

Contador de programa. Puerto C (PORTC).

grupo

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

INICIO

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

INICIO

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 (VDD).

PWM:

Pulse With Modulator Modulador de ancho de pulsos.

405

INICIO

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

406

INICIO

Resistencia: Elemento elctrico que se opone parcialmente al paso de la


corriente elctrica.

Resonante:

Que tiene una frecuencia natural de oscilacin.

RET, RETURN:
REXT:
RISC:

Instruccin de retorno. Se aplica cuando una rutina finaliza.

Resistencia externa.
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.

407

INICIO

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:

elctrica.

Elemento que detecta una variable fsica y la convierte en seal

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.

408

INICIO

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

INICIO

Tecnologa
Dgital:

Se refiere al tipo de semiconductor utilizado en los dispositivos


lgicos. Destacan: TTL, CMOS, NMOS, ECL, PMOS, etc.

Temporizador:
Terminal:

Timer, elemento que contabiliza el tiempo.

Conexin fsica de un elemento.

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

Tiempo por el cual no se ejecutar una accin alguna, hasta que


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.

410

INICIO

TOCKI:

Es el terminal que corresponde a la base de tiempo del


temporizador 0 (TMR0). Debe colocarse a Vss o VDD en el caso
utilizarse, para reducir el consumo de energa.

de no

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.

411

INICIO

y
USART:

Transmisor y receptor universal sincrnico o asincrnico.

VDD:

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.
VSS:

Terminal que se conecta al voltaje de referencia o nulo (0V) en


circuitos electrnicos MOS.

Vpp:

Tensin de programacin

412

INICIO

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,
detecta una condicin anormal.

WDT:

cuando

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.

413

INICIO

Anexo 2:
EXPLICACIN DETALLADA
DE LAS INSTRUCCIONES

414

INICIO

Conjunto de instrucciones de los PIC16C5X,


PIC16F5X y 12C5X (Gama Bsica):
OPERACIONES ORIENTADAS A BYTES
Cdigo En- Operadores
samblador

Ciclos Cdigo de Operacin Bits STATUS Notas


afectados
Msb Lsb

Descripcin

ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ

f,d
f,d
f
f,d
f,d
f,d

Suma W con f
1
AND de W con f
Borra f
1
Borra W
Complementa f
1
Decremento f
1
Decrementa f, salta si es 0

0001
11df ffff
C, DC, Z
1
0001
01df ffff
0000 011f ffff
Z
1
0000 0100 0000
0010 01df ffff
Z
0000 11df ffff
Z
1(2) 0010 11df ffff

INCF
INCFSZ

f,d
f,d

Incremento f
1
Incremento f, salta si es 0

0010
1(2)

IORWF
MOVF
MOVWF
NOP
RLF
2,4
RRF
2,4
SUBWF

f,d
f,d
f
f,d

OR inclusivo de W con f
1
0001 00df ffff
Mueve f
1
0010 00df ffff
Mueve W a f
1
0000 001f ffff
No operacin
1
0000 0000 0000
Rotacin izqu. a travs del Carry
1
0011

f,d

Rotacin der. a travs del Carry

f,d

Resta W de f

0000

10df ffff

SWAPF

f,d

Intercambia nibles de f

0011

10df ffff

XORWF

f,d

OR exclusivo de W con f

0001

10df

415

10df ffff
0011 11df ffff

0011

1,2,4

2,4

2,4

2,4

2,4

2,4

2,4
2,4

1,4

01df ffff

00df ffff

ffff

C
C

C,DC,Z

1,2,4
2,4

2,4

INICIO

OPERACIONES ORIENTADAS A BITS DE REGISTROS


Cdigo Ensamblador
Operadores
BCF f,b
BSF f,b
BTFSCf,b
BTFSS

Descripcin

Borra bit de f
1
Pone un 1 a bit de f
1
Salta si bit de f es 0 1(2)
f,b
Salta si bit de f es 1

Bits de
STATUS
afectados

Cdigo de Operacin
Ciclos
Msb Lsb
0100
bbbf
ffff
0101
bbbf
ffff
0110
bbbf
ffff
1(2) 0111
bbbf

ffff

kkkk

Notas

2,4
2,4

OPERACIONES CON LITERAL Y CONTROL


ANDLW

CALL
K
CLRWDT

Llamar a subrutina
2
1001
kkkk
kkkk
K
Borra temporizador WDT
1
0000
0000

GOTO

Salto incondicional

AND de K con W

1110

101k

kkkk

OR inclusivo de k con W

MOVLW

Mover valor k hacia W

OPTION
RETLW

K
K

Mover valor k a OPTION


Retornar, asignar valor k a W

SLEEP

Habilita modo de bajo consum.

0000

0000

0011

TRIS

Mover valor de W a TRIS

0000

0000

0fff

1111

kkkk

EXOR DE k con W

416

1100
1
2

Z
0100

1
TOPD

kkkk

kkkk

IORLW

XORLW

kkkk

1101
kkkk
0000
1000

kkkk
kkkk
0000
kkkk

kkkk

0010
kkkk
TO, PD
3
Z

INICIO

Conjunto de instrucciones de los


PIC16CXXX, 16FXXX, 12C6XX, 12F6XX
Y 14CXXX (Gama media).
Cdigo Ensamblador
Operadores

Cdigo de Operacin
Ciclos
Msb Lsb

Descripcin

Bits de
STATUS
afectados

Notas

OPERAECIONES ORIENTADAS A BYTES


ADDWF
ANDWF
2,4
CLRF
CLRW
COMF
DECF
DECFSZ
2,4
INCF
INCFSZ
2,4
IORWF
MOVF
MOVWF
NOP
RLF
2,4
RRF
2,4
SUBWF

f,d
f,d

Suma W con f
AND de W con f

f
f,d
f,d
f,d

Borra f
1
Borra W
Complementa f
1
Decremento f
1
Decrementa f, salta si es 0

00 0000 011f ffff


1
00 0000 0100 0000
00 0010 01df ffff
00 0000 11df ffff
1(2) 00 0010 11df ffff

f,d
f,d

Incremento f
1
Incremento f, salta si es 0

00 0010 10df ffff


1(2) 00 0011 11df ffff

f,d
f,d
f
f,d

OR inclusivo de W con f
1
00 0001 00df ffff
Mueve f
1
00 0010 00df ffff
Z
Mueve W a f
1
00 0000 001f ffff
No operacin
1
00 0000 0000 0000
Rotacin izq. a travs del Carry 1
00 0011 01df ffff

f,d

Rotacin der. a travs del Carry

f,d

Resta W de f

00 0000 10df ffff

SWAPF f,d

Intercambia nibles de f

00 0011

10df ffff

XORWF f,d

OR exclusivo de W con f

00 0001

10df ffff

417

00 0001 11df ffff


C, DC, Z
1
00 0001 01df ffff

00 0011

1,2,4
Z

Z
Z

2,4

Z
Z

2,4
2,4

2,4

1,4
C

00df ffff

C,DC,Z 1,2,4
2,4
Z

2,4

INICIO

OPERACIONES ORIENTADAS A BITS DE REGISTROS


Cdigo Ensamblador
Operadores
BCF f,b
BSF f,b
BTFSCf,b
BTFSS

Bits de
STATUS
afectados

Cdigo de Operacin
Ciclos
Msb Lsb

Descripcin

Borra bit de f
1
01 00bb bfff
ffff
Pone un 1 a bit de f
1
01 01bb bfff
ffff
Salta si bit de f es 0 1(2) 01 10bb bfff ffff
f,b
Salta si bit de f es 1 1(2) 01 11bb bfff ffff

1,2
1,2
3

Notas

OPERACIONES CON LITERAL Y CONTROL


ADDLW

ANDLW
CALL
K

K
AND de K con W
Llamar a subrutina

GOTO

Salto incondicional

Suma K con W

11 111x

kkkk

kkkk

1
2

11 1001
10 0kkk

kkkk
kkkk

kkkk
kkkk

10 1kkk

OR inclusivo de k con W

MOVLW

Mover valor k hacia W

RETRE RETLW

Retorno de interrupcin 2
00 0000
K
Retornar, asignar valor k a W 2

SLEEP

Habilita modo de bajo consum.

00 0000

0110 0011

SUBLW

Restar W del valor K

11 110k

kkkk

XORLW

EXOR de k con W

11 1010

418

11 1000

11 00xx

kkkk

IORLW

kkkk

C,DC,Z

kkkk

kkkk kkkk
kkkk

0000 1001
11 01xx
kkkk

kkkk

kkkk
kkkk

kkkk
TO, PD
C,DC,Z
Z

INICIO

ADDLW
Suma valor literal con W
Nota: Esta instruccin no est incluida en los PIC de la gama bsica
Cdigo Ensamblador:

(Etiqueta) ADDLW

Operadores:

0 K 255

Operacin:

(W) + (K) (W)

Bits de estado que se afectan:


Descripcin:

C, DC, Z

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

419

INICIO

ADDWF

Suma W y f

Cdigo Ensamblador:
Operadores:

(Etiqueta) ADDWF f,d


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
420

INICIO

And del valor


literal con W

ANDLW

Cdigo Ensamblador:

(Etiqueta) ANDLW k

Operadores:

0 K 255

Operacin:

(W). AND.(K) (W)

Bits de estado que se afectan:


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

421

INICIO

ANDWF

AND W con f

Cdigo Ensamblador:
Operadores:

(Etiqueta) ANDWF f,d


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:

Antes de la Instruccin
W = 0x17
FSR = 0xC2
Despus de la Instruccin
W = 0x17
FSR = 0x02

ANDWF FSR, 1

422

INICIO

BCF
Cdigo Ensamblador:
Operadores:

Borra bit en f

(Etiqueta) BCF f,b


0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7

Operacin:

0 (f<b>)

Bits de estado que se afectan:


Descripcin:

Ninguno

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

423

INICIO

BSF
Cdigo Ensamblador:
Operadores:

Establece en 1 bit en f

(Etiqueta) BSF f,b


0 f 31 (Gama bsica)
0 f 127 (Gama media)
0 b 7

Operacin:

1 (f<b>)

Bits de estado que se afectan:


Descripcin:

Ninguno

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

424

INICIO

BTFSC

Prueba bit en
salta si es cero

f,

Cdigo Ensamblador:
Operadores:

(Etiqueta) BTFSC f,d


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

Ejemplo:

AQUBTFSC
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
425

INICIO

BTFSS

Prueba bit en f, salta si es 1

Cdigo Ensamblador:
Operadores:

(Etiqueta) BTFSS f,d


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

Ejemplo:

AQUBTFSS
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
426

INICIO

CALL

Llamar

a subrutina

Cdigo Ensamblador:
Operadores:
Operacin:

(Etiqueta) CALL K
0 K 255
(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)

427

INICIO

CLRF

Borra f

Cdigo Ensamblador:
Operadores:

(Etiqueta) CLRF f
0 f 31 (Gama bsica)
0 f 127 (Gama media)

Operacin:

00h (f);
1 Z

Bits de estado que se afectan:


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

428

INICIO

CLRW
Borra W
Cdigo Ensamblador:

(Etiqueta) CLRW

Operadores:

Ninguno

Operacin:

00h (W);
1 Z

Bits de estado que se afectan:


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

429

INICIO

CLRWDT
Borra temporizador
perro guardin (WDT)

Cdigo Ensamblador:
Operadores:
Operacin:

(Etiqueta) CLRWDT
Ninguno
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

430

INICIO

COMF

Complementa f
f
Complementa

Cdigo Ensamblador:
Operadores:

(Etiqueta) COMF f,d


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

431

INICIO

DECF

Decremento de
de f
f
Decremento

Cdigo Ensamblador:
Operadores:

(Etiqueta) DECF f,d


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

432

INICIO

DECFSZ

Decremento de f,
salta si es 0

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.

Ejemplo:

AQUIDECFSZ 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
433

INICIO

GOTO

Salto Incondicional
Incondicional
Salto

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)
434

INICIO

INCF

Incremento de
de f
f
Incremento

Cdigo Ensamblador:
Operadores:

(Etiqueta) INCF f,d


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

435

INICIO

INCFSZ

Incremento de f
salta si es 0

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:

AQUIINCFSZ 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
436

INICIO

OR Inclusivo
Inclusivo de
de
OR
valor literal
literal con
con W
W
valor

IORLW
Cdigo Ensamblador:

(Etiqueta) IORLW k

Operadores:

0 K 255

Operacin:

(W).OR.(K) (W);

Bits de estado que se afectan:


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

437

INICIO

OR Inclusivo de W
con f

IORWF
Cdigo Ensamblador:
Operadores:

(Etiqueta) IORWF f,d


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
438

INICIO

MOVF Mueve f
Cdigo Ensamblador:
Operadores:

(Etiqueta) MOVF f,d


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

439

INICIO

MOVLW

Mueve valor literal a W

Cdigo Ensamblador:

(Etiqueta) MOVLW k

Operadores:

0 K 255

Operacin:

K (W);

Bits de estado que se afectan:


Descripcin:

Ninguno

Se carga el valor de k en el
registro W.

Ejemplo:

MOVLW 0x5A

Despus de la Instruccin
W = 0x5A

440

INICIO

MOVWF

Mueve W a f

Cdigo Ensamblador:
Operadores:

(Etiqueta) MOVWF f
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

441

INICIO

NOP

No operacin

Cdigo Ensamblador:

(Etiqueta) NOP

Operadores:

Ninguno

Operacin:

No operacin

Bits de estado que se afectan:


Descripcin:

NO

Ninguno

No hay operacin.
Simplemente se ejecuta un ciclo,
sin afectar nada.

Ejemplo:

NOP

442

INICIO

OPTION

Carga el registro OPTION

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

443

INICIO

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

444

INICIO

RETURN

Retorno de Interrupcin

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:


Descripcin:

Ninguno

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

445

INICIO

RETLW
RETLW

Retorno con
con valor
valor literal
literal en
en W
W
Retorno

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
RETLW
k0
RETLW
k1

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

PCL ;W = desplazamiento
;Comienza tabla
;Final de la tabla

446

INICIO

RLF
RLF

Rodar f
f aa la
la Izquierda
Izquierda aa
Rodar
travs del
del Carry
Carry
travs

Cdigo Ensamblador:
Operadores:

(Etiqueta) RLF f, d
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
447

INICIO

RRF
RRF

Rodar f a la Derecha a
travs del Carry

Cdigo Ensamblador:
Operadores:

(Etiqueta) RRF f, d
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
448

INICIO

SLEEP

Entra en el modo de reposo

Cdigo Ensamblador:

(Etiqueta) SLEEP

Operadores:

Ninguno

Operacin:

00h WDT
0 Escalamiento del WDT;
1 TO
0 PD

Bits de estado que se afectan:


Descripcin:

TO, PD

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

449

INICIO

SUBLW

Resta W de Valor Literal

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

450

INICIO

SUBWF

Resta W de f

Cdigo Ensamblador:
Operadores:

(Etiqueta) SUBWF f, d
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

451

INICIO

SWAPF

Intercambio de Nibles in f

Cdigo Ensamblador:
Operadores:

(Etiqueta) SWAPF f, d
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
452

INICIO

TRIS

Carga valor al registro TRIS con W

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:


Descripcin:

Ninguno

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
453

INICIO

X O R L W OR Exclusivo valor literal con


W

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

454

INICIO

XORWF

OR Exclusivo de W con f

Cdigo Ensamblador:
Operadores:

(Etiqueta) XORWF f, d
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)
455

INICIO

ANEXO 3
DIRECTIVAS DEL
LENGUAJE ENSAMBLADOR

456

INICIO

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


457

INICIO

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.

458

INICIO

Descripcin de las opciones


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

Coloca el nmero de espacios por Tabulacin

/w

Selecciona los mensajes: 0 = todos, 1 = errores y advertencias


2 = solamente errores

/x

Off

INICIO

Habilita/Deshabilita
459
la generacin de la tabla de referencia

Directivas del Ensamblador


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

INICIO

Directiva

Descripcin

Sintaxis

Ejemplo

_ _BADRAM

Especifica localidades invlidas en la RAM

_ _badram <exp>

_ _badram 87-89,91

CBLOCK

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

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

else

else

ENDC

dw

IF es un si condicional, ELSE = sino


END

Finaliza bloque de programa

end

461

long

20

frio

end

INICIO

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

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

462

;ver MACRO

INICIO

Directiva
IF
ELSE
ENDIF

IFDEF
IFNDEF

Descripcin

Sintaxis

Ejemplo

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

Se ejecuta si los smbolos se han definido

ifdef <etiq>
<instruc>
endif

ifndef cierto
dw no_cierto
endif

Se ejecuta si los smbolos no se han definido

#INCLUDE

Incluye un archivo fuente adicional. Ver p215

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

463

INICIO

Directiva

Descripcin

Sintaxis

Ejemplo

NOLIST

Elimina lista de salida

nolist

nolist

ORG

Especifica direccin de origen

<etiq> org <exp>

org

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

SET

Define una variable en el ensamblador

<label> set<exp>

long

set

SPACE

Inserta lneas vacas en el archivo .list

space <exp>

space

SUBTITLE

Especifica subttulo del programa

subtitle <texto>

subtitle

TITLE

Especifica ttulo del programa

title <texto>

title

#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

Hace un lazo si una condicin es cierta

while <exp>

while i<contador
i+=1
endw

ENDW

464

50

;ver p2-18

res

64
0x12;

lazo

comienzo

INICIO

ANEXO 4
REGISTROS Y BITS DE FUNCIONES ESPECIALES

465

INICIO

PIC16C54 y 56
MEMORIA DE DATOS DE LOS
PIC16C54 Y 56
00h
01h
02h
03h

INDF(1)
TMRO
PCL

05h

STATUS
FSR
PORTA

06h

PORTB

04h

07h
0Fh
10h

REGISTROS
DE
PROPSITOS
GENERALES

1Fh

466

INICIO

PIC16C55
MEMORIA DE DATOS DEL
PIC16C55
INDF(1)

00h
01h
02h
03h

TMRO
PCL
STATUS
FSR
PORTA

04h
05h
06h

PORTB
PORTC

07h
0Fh
10h
1Fh

REGISTROS
DE
PROPSITOS
GENERALES

467

INICIO

PIC16C57
FSR<6:5>

Direccin
de registro00h

01h
02h
03h
04h
05h
06h
07h
08h
0Fh

00
INDF(1)
TMRO
PCL
STATUS
FSR
PORTA
PORTB
PORTC
REGISTROS
DE
PROPSITOS
GENERALES
10h REGISTROS
DE
PROPSITOS
GENERALES
1Fh

Banco 0

01

10

20h

40h

11
60h

Este Mapa de Direcciones


retoma a las direcciones
del Banco 0

2Fh

4Fh

50h
30h REGISTROS
DE
PROPSITOS
GENERALES
5Fh
3Fh

Banco 1

468

6Fh

REGISTROS 70h
DE
PROPSITOS
GENERALES
7Fh

Banco 2

REGISTROS
DE
PROPSITOS
GENERALES

Banco 3

INICIO

PIC16C58
FSR<6:5>

Direccin
de registro00h

01h
02h
03h
04h
05h
06h
07h

0Fh

00
INDF(1)
TMRO
PCL
STATUS
FSR
PORTA
PORTB
REGISTROS
DE
PROPSITOS
GENERALES
10h REGISTROS
DE
PROPSITOS
GENERALES
1Fh

Banco 0

01

10

20h

40h

11
60h

Este Mapa de Direcciones


retoma a las direcciones
del Banco 0

2Fh

4Fh

50h
30h REGISTROS
DE
PROPSITOS
GENERALES
5Fh
3Fh

Banco 1

469

6Fh

REGISTROS 70h
DE
PROPSITOS
GENERALES
7Fh

Banco 2

REGISTROS
DE
PROPSITOS
GENERALES

Banco 3

INICIO

Registros de funciones
especiales y bits de los PIC16C5X
Valor despus Valor despus

Direcc Nombre Bit7


Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
N/A
Tris
Registros de control de Entrada y Salida (TRISA,TRISB, TRISC)

TOCS

TOSE PSA

PS2

PS1

PS0

de encender

WDT y MCLR

1111 1111 1111 1111

--11 1111 --11 1111

N/A

OPTION

00h

INDF

01h

TMRO

02h

PCL

03h

STATUS PA2

04H

FSR

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

Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx


Temporizador contador de tiempo real de 8 bits

xxxx xxxx

8 bits de bajo orden del Contador de Programa (PCL)


PA1

PA0

TO

PD

DC

uuuu uuuu

1111 1111 1111 1111


C

Apuntador de la memoria de datos para acceso indirecto

470

uuuu uuuu

0001 1xxx
1xxx xxxx

RC0

xxxx xxxx uuuu uuuu

INICIO

PIC16F84

Banco 0
471

Banco 1

INICIO

472

INICIO

BANCO 0 PIC16F87X

473

INICIO

BANCO 1 PIC16F87X

474

INICIO

BANCOS 2 y 3 PIC16F87X

475

INICIO

ANEXO 5
INTERFACES Y PROYECTOS CON
MICROCONTROLADORES PIC

476

INICIO

Algunas Interfaces
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.
477

INICIO

Encendido de un diodo
emisor de luz (LED)

Terminal
del Puerto

Terminal
del Puerto
Encendido con un 1 lgico

Encendido con un 0 lgico

478

INICIO

Lectura de interruptores
o pulsadores

4 Resistencias de 4,7K

5V

18 17 16 15 14 13 12 11 10

PIC16C54
1 2 3 4 5

Vss

PIC
16F84A

6 7 8 9

5V

479

INICIO

Control de la Lnea
de Corriente Alterna

Rel

NC
C
NA
0 a 5V

480

INICIO

Control de la Lnea de
Corriente Alterna 1

0 a 5V

0 a 5V

481

INICIO

Control de la Lnea de
Corriente Alterna 2

0 a 5V

482

INICIO

Control de la Lnea de
Corriente Alterna 3

0 a 5V

483

INICIO

Detector de Cruces
por Cero

0 a 5V

484

0 a 5V

INICIO

Encendido de un Indicador de 7
Segmentos nodo Comn (Display)

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
0 a 5V

Segmento d
Segmento e
Segmento f
Segmento g

485

INICIO

Encendido de un Indicador 7
Segmentos de varios dgitos

Dgito 0
0 a 5V

Dgito 1
Dgito 2
Dgito 3

Segmento a
Segmento b
Segmento c
Segmento d
0 a 5V

Segmento e
Segmento f
Segmento g

486

INICIO

MATRIZ DE LEDS

Valores
de cada
Columna

0 a 5V

Seleccin de
columna
0 a 5V

487

INICIO

Lectura de un teclado
matricial

R1
10k
Ra0
Ra1
0 a 5V
Ra2
Entradas Ra1

R2
10k

R4
10k

R3
10k

S1

S2

S3

S5

S6

S7

S8

S9

S10

S11

S12

S13

S14

S15

S16

S4

Rb0

Rb1

0 a 5V
Salidas

Rb2

Rb3

488

INICIO

Aplicacin de un reloj con bajo


consumo en el modo Reposo

489

INICIO

Interruptor Analgico

0 a 5V

490

INICIO

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.

491

INICIO

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.

492

INICIO

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.

493

INICIO

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.

494

INICIO

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.

495

INICIO

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.

496

INICIO

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

497

INICIO

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.

498

INICIO

Lista de algunos sitios web


relacionados con PIC

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/hitechP
IC.htm
http://boards1.melodysoft.com/app?ID=creatronica.microcontroladores&DOC=1
21
http://www.geocities.com/alva_cesar/rutas.htm

499

INICIO

ANEXO 6
ACTUALIZACIN DEL PICSTART PLUS

500

INICIO

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

INICIO

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).
502

INICIO

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.

503

INICIO

ANEXO 7
GRABACIN DE UN PROGRAMA EN LOS PIC16F87X

504

INICIO

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.

505

INICIO

Diagrama del circuito


programador

506

INICIO

El PicProg
Descripcin:
PicProg
Programador para PIC 16F8xx
(Versin 2.0)
(c) TodoRobot - 2002
El PicProg estpreparado 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.

507

INICIO

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.

508

INICIO

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 usarnen la programacin y,
una vez aceptado, si todo ha funcionado correctamente, aparecer una ventana
indicando la finalizacin del proceso.
509

INICIO

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

510

INICIO

También podría gustarte