Sei sulla pagina 1di 36

PIC BASIC_02.

qxp 06/08/2007 19:34 PÆgina 13

Capítulo 2

La familia de
microcontroladores PIC

La familia de microcontroladores PIC son fabricados por la firma Microchip Technology


Inc. Estos microcontroladores son muy populares y se utilizan en diversas aplicaciones
comerciales e industriales. Cada año se venden aproximadamente unos 120 millones de
dispositivos.

La arquitectura de los microcontroladores PIC es de tipo Harvard modificada, con un


repertorio de instrucciones reducido (RISC) y dos buses de acceso, lo que ha proporcio-
nado un diseño rápido y flexible, que ha evolucionado desde los dispositivos de 6 ter-
minales hasta los de 80 terminales, con memorias de programa desde 384 Bytes hasta
los 128 KBytes.

Los microcontroladores PIC se venden con diferentes especificaciones en función del:


Y Tipo de memoria:
- Flash.
- Programable una vez u OTP (One-time-programmable).
- Memoria de sólo lectura o ROM (Read-only-memory).
- Sin memoria ROM.
Y Número de terminales de entrada/salida (E/S):
- 4 a 18 terminales.
Copyright © 2007. Marcombo. All rights reserved.

- 20 a 28 terminales.
- 32 a 44 terminales.
- 45 y más terminales.
Y Tamaño de la memoria:
- 0,5 a 1 KByte.
- 2 a 4 KBytes.
- 8 a 16 KBytes.
- 24 a 32 KBytes.
- 48 a 64 KBytes.
- 96 a 128 KBytes.
Y Características especiales:
- Bus CAN.
- Bus USB.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 13
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:34 PÆgina 14

Programación de microcontroladores PIC

- LCD.
- Control de motores.
- Radiofrecuencia.
A pesar de que existen diversos modelos de microcontroladores PIC, un elemento posi-
tivo es que los nuevos modelos son compatibles con los precedentes. Así, un programa
desarrollado para un modelo, puede ejecutarse en otros modelos de la familia de una
forma muy fácil y, en la mayoría de los casos, sin modificaciones. El juego básico de ins-
trucciones en lenguaje ensamblador consta de tan sólo 33 instrucciones y varios miem-
bros de la familia (excepto los dispositivos más modernos) utilizan el mismo juego de
instrucciones. Esto garantiza que un programa desarrollado para un modelo pueda ser
ejecutado sin ningún cambio en otro modelo similar.

Todos los microcontroladores PIC presentan los siguientes recursos:


Y Juego de instrucciones reducido.
Y Puertos digitales de E/S.
Y Temporizador interno con prescalador de 8 bits.
Y Reset durante el encendido.
Y Temporizador watchdog.
Y Modo de reposo y de bajo consumo.
Y Alta corriente de entrega y absorción.
Y Modos de direccionamiento directo, indirecto y relativo.
Y Interfaz de reloj externa.
Y Memoria de datos RAM.
Y Memoria de programa EPROM o Flash.

Algunos dispositivos proporcionan los siguientes recursos adicionales:


Y Canales de entrada analógicos.
Y Comparadores analógicos.
Y Circuitos temporizadores adicionales.
Y Memoria de datos EEPROM.
Copyright © 2007. Marcombo. All rights reserved.

Y Interrupciones internas y externas.


Y Oscilador interno.
Y Salida modulada por tamaño del pulso.
Y Interfaz serie USART.

Algunos dispositivos más complejos poseen los siguientes recursos:


Y Interfaz con bus CAN (Controller Area Network).
Y Interfaz con bus I2C.
Y Interfaz con bus SPI.
Y Interfaz directa LCD.
Y Interfaz con bus USB (Universal Serial Bus).
Y Control de motores.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
14
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:34 PÆgina 15

La familia de microcontroladores PIC

A pesar de que existen varios cientos de modelos de microcontroladores PIC, la selec-


ción de un microcontrolador para una aplicación no es una tarea difícil y, para ello,
debe tener en cuenta los siguientes factores:
Y Número de terminales de E/S.
Y Periféricos requeridos (por ejemplo USART, USB).
Y Tamaño mínimo de la memoria del programa.
Y Tamaño mínimo de memoria RAM.
Y Necesidad del uso de memoria de datos no volátil de tipo EEPROM.
Y Velocidad.
Y Tamaño físico.
Y Coste.

Un aspecto importante a tener en cuenta es que pudieran existir muchos modelos que
satisfagan todos los requisitos anteriores. Entonces se deberá escoger el modelo que
satisfaga los requisitos mínimos y que no ofrezca más de lo que se pueda necesitar. Por
ejemplo, si se requiere un microcontrolador con sólo 8 terminales de E/S, y hay dos
microcontroladores idénticos: uno con 8 terminales y otro con 16 terminales de E/S, se
deberá seleccionar el de 8 terminales de E/S.

A pesar de que existen varios cientos de modelos de microcontroladores PIC, estos se


pueden clasificar en los tres grupos siguientes:

Y Los de palabras de instrucción de 12 bits (por ejemplo 12C5XX, 16C5X).


Y Los de palabras de instrucción de 14 bits (por ejemplo 16F8X, 16F87X).
Y Los de palabras de instrucción de 16 bits (por ejemplo 17C7XX, 18C2XX).

Los tres grupos comparten la misma arquitectura RISC y el mismo juego de instruccio-
nes, con la particularidad de que los modelos de 14 bits presentan algunas instruccio-
nes adicionales, y en los de 16 bits, el número de instrucciones es mucho mayor. Como
las instrucciones ocupan sólo una palabra en la memoria, así se aumenta la eficacia del
código y se reduce la memoria de programa requerida. Las instrucciones y los datos se
transfieren por buses separados, por lo que se incrementa el rendimiento global del sis-
Copyright © 2007. Marcombo. All rights reserved.

tema.

Las características de algunos microcontroladores de cada grupo se verán en los si-


guientes apartados.

2.1 Palabra de instrucción de 12 bits


En la tabla 2.1 se muestran algunos de los dispositivos de este grupo. El compilador
PicBasic no soporta estos dispositivos, debido a la sencillez de sus arquitecturas. El
compilador PicBasic Pro sí los soporta, aunque con limitaciones. No obstante, como los
precios de los dispositivos de 14 bits han disminuido tanto, no existe actualmente la
necesidad de usar un dispositivo de 12 bits, salvo que se requiera un menor tamaño
físico.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 15
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:34 PÆgina 16

Programación de microcontroladores PIC

Tabla 2.1: algunos microcontroladores PIC de 12 bits


Microcontrolador Memoria RAM Velocidad Puertos Conversor
programa de datos máxima (MHz) de E/S A/D

12C508 512 x 12 25 4 6 -
16C54 384 x 12 25 20 12 -
16C57 2048 x 12 72 20 20 -
16C505 1024 x 12 41 4 12 -
16C58A 2048 x 12 73 20 12 -

PIC12C508: este es un dispositivo de bajo coste, 8 terminales, una memoria de progra-


ma (EPROM) de 512 direcciones de 12 bits (512 × 12) y 25 Bytes de memoria de datos
RAM. El dispositivo puede operar con una frecuencia de reloj de hasta 4 MHz y tiene
un juego de sólo 33 instrucciones. El dispositivo posee 6 puertos de E/S, un temporiza-
dor de 8 bits, un circuito de reinicialización tras el encendido o Power-on reset, un tem-
porizador watchdog y la posibilidad de emplear un oscilador interno de 4 MHz. Una de
las mayores desventajas de este microcontrolador es que su memoria de programa, al
ser EPROM, no puede borrarse y programarse con facilidad. La memoria de programa
tiene que ser borrada usando un dispositivo para el borrado de EPROMs (con una
fuente de luz ultravioleta).

La versión “F” de esta familia (por ejemplo, PIC12F508) posee memoria de programa
de tipo Flash, la cual puede borrarse y reprogramarse empleando dispositivos progra-
madores de PIC convencionales. De forma similar, la versión “CE” de esta familia (por
ejemplo, PIC12CE518) dispone de 16 Bytes adicionales de memoria de datos no volátil
EEPROM.

En la figura 2.1 se muestra la configuración de terminales del microcontrolador PIC12-


F508.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.1: el microcontrolador PIC12F508

PIC16C5X: este es uno de los microcontroladores PIC más antiguos. El dispositivo tiene
18 terminales, memoria de programa EPROM de 384 × 12, 25 Bytes de memoria de
datos RAM, 12 puertos de E/S, un temporizador convencional y un temporizador
watchdog. Otros miembros de la familia, por ejemplo el PIC16C56, tienen la misma
arquitectura pero con más memoria de programa (1024 × 12). El PIC16C58A tiene más
memoria de programa (2048 × 12) y también más memoria de datos (73 Bytes de RAM).
En la figura 2.2 se muestra la configuración de terminales del microcontrolador PIC-
16C56.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
16
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:34 PÆgina 17

La familia de microcontroladores PIC

Figura 2.2: el microcontrolador PIC16C56

2.2 Palabra de instrucción de 14 bits


Esta es una familia numerosa que incluye a muchos modelos de microcontroladores
PIC. Los compiladores PicBasic y PicBasic Pro soportan estos dispositivos. La mayoría
de los dispositivos de esta familia pueden operar a una frecuencia de reloj de hasta 20
MHz. El juego de instrucciones consta de 35. Estos dispositivos presentan recursos
avanzados tales como fuentes de interrupción internas y externas. En la tabla 2.2 se
muestran algunos microcontroladores de este grupo.

Tabla 2.2: algunos microcontroladores de 14 bits


Microcontrolador Memoria RAM Velocidad Puertos Conversor
programa de datos máxima (MHz) de E/S A/D

16C554 512 x 14 80 20 13 -
16C64 2048 x 14 128 20 33 -
16F84 1024 x 14 36 10 13 -
16F627 1024 x 14 224 20 16 -
16F628 2048 x 14 224 20 16 -
16F676 1024 x 14 64 20 12 8
Copyright © 2007. Marcombo. All rights reserved.

16F73 4096 x 14 192 20 22 5


16F876 8192 x 14 368 20 22 5
16F877 8192 x 14 368 20 33 8

PIC16C554: este microcontrolador tiene una arquitectura similar al PIC16C54 pero sus
instrucciones son de 14 bits. La memoria de programa es de 512 × 14 y la memoria de
datos es de 80 Bytes de RAM. Posee 13 terminales de E/S, cada uno de los cuales puede
entregar o absorber una corriente de 25 mA. Adicionalmente, el dispositivo contiene un
temporizador y un watchdog.

PIC16F84: este ha sido uno de los microcontroladores PIC más populares durante
mucho tiempo. Es un dispositivo de 18 terminales, posee una memoria de programa

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 17
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:34 PÆgina 18

Programación de microcontroladores PIC

Flash de 1024 × 14, 36 Bytes de RAM de datos, 64 Bytes de memoria de datos EEPROM,
13 terminales de E/S, un temporizador, un watchdog y fuentes de interrupción internas
y externas. El temporizador tiene un ancho de 8 bits y puede programarse para gene-
rar interrupciones internas con fines de temporización. Si se desea una temporización
exacta, se suele programar al PIC16F84 con un cristal o con un resonador; en caso con-
trario, se puede emplear un resistor y un capacitor externo.

El PIC16F84 se empleará en algunos de los proyectos realizados en este libro. En la


figura 2.3 se muestra la configuración de terminales de este microcontrolador. En la ta-
bla 2.3 aparece la descripción de sus terminales.

Figura 2.3: la configuración de terminales del microcontrolador PIC16F84

Tabla 2.3 Descripción de los terminales del microcontrolador PIC16F84


Terminal Descripción Terminal Descripción

1 RA2 – Bit 2 del Puerto A 10 RB4 – Bit 4 del Puerto B


2 RA3 – Bit 3 del Puerto A 11 RB5 – Bit 5 del Puerto B
3 RA4/T0CK1 – Bit 4 del Puerto A/ 12 RB6 – Bit 6 del Puerto B
Reloj del contador
Copyright © 2007. Marcombo. All rights reserved.

4 MCLR – Master clear 13 RB7 – Bit 7 del Puerto B


5 Vss – Gnd: tierra 14 Vdd – Tensión positiva de ali-
mentación
6 RB0/INT – Bit 0 del Puerto B/ 15 OSC2 – Salida del oscilador
Entrada de interrupción
7 RB1 – Bit 1 del Puerto B 16 OSC1 – Entrada del oscilador
8 RB2 – Bit 2 del Puerto B 17 RA0 – Bit 0 del Puerto A
9 RB3 – Bit 3 del Puerto B 18 RA1 – Bit 1 del Puerto A

PIC16F877: este microcontrolador tiene 40 terminales y es uno de los más empleados


en aplicaciones complejas. El dispositivo tiene una memoria de programa Flash de 8192

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
18
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 19

La familia de microcontroladores PIC

× 14 bits, 368 Bytes de RAM, 256 Bytes de memoria EEPROM, 33 terminales de E/S, un
conversor A/D de 10 bits de resolución con 8 canales multiplexados, un generador
PWM, 3 temporizadores, un circuito comparador y de captura analógico, un puerto
USART y varias fuentes de interrupciones internas y externas.

El PIC16F877 se empleará en algunos de los proyectos realizados en este libro. En la


figura 2.4 se muestra la configuración de terminales de este microcontrolador.

Figura 2.4: la configuración de terminales del microcontrolador PIC16F877


Copyright © 2007. Marcombo. All rights reserved.

PIC16F627: este es un microcontrolador de 18 terminales con una memoria de progra-


ma Flash de 1024 × 14 bits. El dispositivo tiene 224 Bytes de RAM, 128 Bytes de memo-
ria EEPROM, 16 terminales de E/S, dos temporizadores de 8 bits, un temporizador de
16 bits, un watchdog y circuitos comparadores. Este microcontrolador es parecido al
PIC16F84 pero posee más terminales de E/S, más memoria de programa y mucha más
memoria RAM. Además, el PIC16F627 es más apropiado para las aplicaciones que
requieran más de un temporizador.

El PIC16F627 se empleará en algunos de los proyectos realizados en este libro. En la


figura 2.5 se muestra la configuración de terminales de este microcontrolador.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 19
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 20

Programación de microcontroladores PIC

Figura 2.5: la configuración de terminales del microcontrolador PIC16F627

PIC16F676: se trata de un microcontrolador de 14 terminales que se está haciendo muy


popular. Este dispositivo posee memoria de programa Flash de 1024 × 14 bits, 64 Bytes
de RAM, 12 terminales de E/S, 128 Bytes de EEPROM, un conversor A/D de 10 bits con
ocho canales multiplexados, un temporizador de ocho bits, un temporizador de 16 bits
y un watchdog. Una de las ventajas de este microcontrolador es la presencia de un con-
versor A/D integrado.

En la figura 2.6 se muestra la configuración de terminales de este microcontrolador.

Figura 2.6: la configuración de terminales del microcontrolador PIC16F676


Copyright © 2007. Marcombo. All rights reserved.

PIC16F73: potente microcontrolador de 28 terminales con una memoria de programa


Flash de 4096 × 14 bits, 192 Bytes de RAM, 22 terminales de E/S, un conversor A/D de 8
bits con 5 canales multiplexados, dos temporizadores de 8 bits, un temporizador de 16
bits, un watchdog, un puerto USART y es compatible con el bus I2C. Este dispositivo
posibilita que en un encapsulado de 28 terminales, se combine la posibilidad de la E/S
serie, E/S digital y un conversor A/D.

El PIC16F73 se empleará en algunos de los proyectos realizados en este libro. En la


figura 2.7 se muestra la configuración de terminales de este microcontrolador.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
20
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 21

La familia de microcontroladores PIC

Figura 2.7: la configuración de terminales del microcontrolador PIC16F73

2.3 Palabra de instrucción de 16 bits


Los microcontroladores de 16 bits son el tope superior de la familia de microcontrola-
dores PIC. En estos microcontroladores sólo se puede emplear el compilador PicBasic
Pro. La mayoría de los dispositivos de este grupo pueden funcionar a hasta 40 MHz,
poseen 33 terminales de E/S y 3 temporizadores. Tienen 23 instrucciones adicionales a
las 35 existentes en los microcontroladores de 14 bits. En la tabla 2.4 se muestran algu-
nos dispositivos de esta familia. En este libro no se desarrollarán proyectos empleando
los microcontroladores de 16 bits y, por tanto, no se profundizará en la descripción de
sus recursos. Los lectores interesados pueden consultar el sitio Web: www.micro-
chip.com.

Tabla 2.4: algunos microcontroladores de 16 bits


Copyright © 2007. Marcombo. All rights reserved.

Microcontrolador Memoria RAM Velocidad Puertos Conversor


programa de datos máxima (MHz) de E/S A/D

17C43 4096 x 16 454 33 33 -


17C752 8192 x 16 678 33 50 12
18C242 8192 x 16 512 40 23 5
18C252 16384 x 16 1536 40 23 5
18C452 16384 x 16 1536 40 34 8

En la familia de microcontroladores PIC, toda la memoria es interna y no es muy fácil


ampliar esta memoria externamente. No existen recursos de hardware ni de software
para ampliar la memoria de programa ni la memoria de datos. Normalmente la

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 21
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 22

Programación de microcontroladores PIC

memoria de programa existente es suficiente para los proyectos de pequeña y media-


na complejidad. Sin embargo, la memoria de datos es generalmente pequeña, y pudie-
ra no ser suficiente, para los proyectos de mediana a gran complejidad, a menos que
se escoja un miembro superior (y por tanto más caro) de la familia. Para proyectos aun
más complejos, lo anterior pudiera tener limitaciones por lo que el diseñador tendrá
que sacrificar algunos puertos de E/S para poder conectar alguna memoria externa de
datos al microcontrolador, o tal vez deberá seleccionar algún microcontrolador de otro
fabricante.

2.4 En el interior de un microcontrolador PIC


A pesar de que existen varios modelos de microcontroladores PIC, ellos comparten
algunos recursos comunes, tales como memoria de programa, memoria de datos, puer-
tos de E/S y temporizadores. Algunos dispositivos poseen recursos adicionales, tales
como conversores A/D, puertos USART y otros. A continuación, se describirá el funcio-
namiento de varios dispositivos de la familia, analizando sus principales recursos.

2.4.1 Memoria de programa (Flash)


La memoria de programa es el medio donde reside el programa realizado en PicBasic o
en PicBasic Pro. En los primeros microprocesadores y microcontroladores, la memoria
de programa era del tipo EPROM, por lo que se debía borrar con luz ultravioleta (UV)
antes de reprogramarla. La mayoría de los microcontroladores PIC actuales se basan en
la tecnología Flash, mediante la cual un chip de memoria puede borrarse o reprogramar-
se usando un dispositivo programador. Además, muchos microcontroladores PIC pue-
den ser programados sin ser extraídos de sus circuitos. Este proceso denominado “pro-
gramación serie dentro del circuito” o ISP (In-circuit serial programming), acelera el ciclo
de desarrollo, disminuyendo sus costes. A pesar de que la memoria de programa se usa
fundamentalmente para almacenar el programa, también puede ser utilizada para
almacenar las constantes de datos empleadas en los programas de aplicación.

Los microcontroladores PIC pueden tener memorias de programa desde 0,5 KBytes
hasta algo más de 16 KBytes. Un programa en PicBasic con varias páginas de código
Copyright © 2007. Marcombo. All rights reserved.

puede no ocupar más de un 1 KByte de memoria de programa. A pesar de que la


memoria de programa en los microcontroladores PIC tiene una anchura de 14 bits, se
les llama microcontroladores de 8 bits, debido a que a la anchura de su memoria de
datos es de tan sólo 8 bits. Microchip denomina palabra a los 14 bits, aun cuando real-
mente, una palabra tiene una anchura de 16 bits.

A pesar de que el tamaño de la memoria del programa puede ser mayor de 2 KBytes,
el compilador PicBasic sólo puede trabajar con los primeros 2 KBytes, lo cual puede ser
una limitación en proyectos grandes. En cambio, el compilador PicBasic Pro, puede usar
todo el espacio de memoria de programa disponible.

Cuando se aplica la tensión de alimentación al microcontrolador o cuando la entrada


de reset (MCLR) se pone 0, la ejecución del programa comienza a partir del vector de
reset que es la primera palabra de la memoria de programa. Así, la primera instrucción

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
22
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 23

La familia de microcontroladores PIC

ejecutada después de un reset, reside en la dirección 0 de la memoria del programa.


Cuando se escribe el programa en lenguaje ensamblador, el programador o usuario
debe usar una instrucción especial (denominada ORG) para que la primera instrucción
ejecutable se cargue en la dirección 0 de la memoria de programa. En los lenguajes de
alto nivel, como PicBasic o PicBasic Pro, los programas se compilan de forma que la pri-
mera instrucción ejecutable del programa se cargue en la primera localización de la
memoria de programa.

2.4.2 Memoria de datos (RAM)


La memoria de datos se usa para almacenar las variables de un programa. Ésta es una
RAM, por lo que todos los datos se perderán cuando se desconecte la fuente de alimen-
tación. La anchura de la memoria de datos es de 8 bits, razón por la cual a los micro-
controladores PIC se le denomina, microcontroladores de 8 bits.

La memoria de datos de un microcontrolador PIC se compone de bancos. En algunos


modelos se pueden tener sólo 2 bancos, en otros modelos 4 bancos, y así sucesivamen-
te. Los bancos activos de la memoria de datos se pueden seleccionar por programa.

2.4.3 Mapa de registros y registros de funciones especiales


Mapa de registros o RFM (Register File Map) es una representación gráfica de todos los
registros disponibles en un microcontrolador, lo cual es sumamente útil al programar
el dispositivo y, sobre todo, al usar el lenguaje ensamblador. El RFM se divide en dos
partes: los registros de funciones especiales (SFR, Special Function Registers) y los regis-
tros de propósito general (GPR, General Purpose Registers). En el microcontrolador PIC-
16F84 existen 68 GPR que se usan para almacenar temporalmente los datos. Cuando se
estudie la programación en PicBasic y en PicBasic Profesional se verá que en estos regis-
tros se almacenan las variables que han sido declaradas dentro del programa.

Los SFR son un grupo de registros que permiten controlar las operaciones internas del
microcontrolador. En dependencia de la complejidad de los microcontroladores, el
número de registros SFR varía. Es importante que el programador comprenda total-
Copyright © 2007. Marcombo. All rights reserved.

mente las funciones de los registros SFR puesto que se usan tanto en lenguaje ensam-
blador como en los lenguajes de alto nivel.

En dependencia del modelo de microcontrolador PIC empleado, podrían existir otros


registros. El usuario no necesita conocer detalladamente el funcionamiento de algunos
registros, ya que los compiladores PicBasic y PicBasic Profesional acceden automática-
mente a los mismos. Por ejemplo, la escritura y lectura de la EEPROM se controla a tra-
vés de los SFR siguientes: EECON1, EECON2, EEADR, y EEDATA. Afortunadamente,
los compiladores PicBasic y PicBasic Profesional ofrecen instrucciones de alto nivel sen-
cillas para la escritura y la lectura de la EEPROM y, de esta forma, el programador o
usuario no necesita conocer cómo acceder a estos registros.

Entre los registros SFR que son necesarios para configurar al microcontrolador, cuando
se emplea un lenguaje de alto nivel, se encuentran:

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 23
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 24

Programación de microcontroladores PIC

Y El registro OPTION.
Y Los registros de E/S.
Y Los registros temporizadores.
Y El registro INTCON.
Y Los registros del conversor A/D.

En los siguientes apartados se describen las funciones y las definiciones de los bits para
cada uno de estos registros.

Registro OPTION
Este registro permite configurar diversas características internas del microcontrolador
y se denomina OPTION_REG. Ocupa la dirección 81 (hexadecimal), se puede leer y
escribir y contiene varios bits de control para configurar el temporizador interno y al
watchdog. Las definiciones de sus bits se muestran en la figura 2.8. El registro OPTION-
_REG también se usa para controlar al terminal de interrupción externo RB0. Este ter-
minal puede ser configurado para que se genere una interrupción, por ejemplo, cuan-
do en el mismo ocurra un cambio del 0 lógico al 1. En este caso, el microcontrolador
detiene la ejecución del programa principal y salta a la rutina de atención a la interrup-
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.8: las definiciones de los bits del registro OPTION (OPTION_REG)

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
24
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 25

La familia de microcontroladores PIC

ción (ISR) para atender a la interrupción. Cuando se retorna de la interrupción, el pro-


cesamiento continúa normalmente.

Por ejemplo, para configurar al terminal INT para que las interrupciones externas lo
activen con el flanco ascendente, se debe cargar en el registro OPTION_REG el siguien-
te patrón de bits:

X1XXXXXX

X significa “irrelevante”, es decir, puede ser un 0 o un 1. En el apartado de proyectos,


se verá cómo configurar a los diversos bits de este registro.

Registros de entrada/salida (E/S)


Estos registros se usan para el control de la entrada/salida. Cada puerto de E/S en el
microcontrolador PIC tiene dos registros: el registro de datos del puerto y el registro de
control de la dirección del puerto.

El registro de datos del puerto tiene el mismo nombre del puerto que controla. Por
ejemplo, el microcontrolador PIC16F84 tiene dos registros de datos: PORTA (puerto A)
y PORTB (puerto B). El microcontrolador PIC16F877 tiene 5 registros de datos:
PORTA, PORTB, PORTC, PORTD, y PORTE. Se pueden escribir o leer datos de 8 bits
en cualquier puerto. También se puede leer o escribir en terminales individuales del
puerto. Por ejemplo, simultáneamente, se pueden poner a “1” o a “0” cualquier bit de
un puerto, al igual que se pueden leer los datos presentes en uno o más terminales de un
puerto.

Los puertos de un microcontrolador PIC son bidireccionales. De esta forma, cada ter-
minal de un puerto puede usarse como entrada o como salida. El registro de control de
la dirección del puerto define el sentido de la transferencia de los datos en cada termi-
nal del puerto, es decir, configura los terminales del puerto como entradas o salidas.
Este registro se llama registro TRIS y cada puerto tiene un registro TRIS seguido de una
letra en dependencia del puerto. Por ejemplo, TRISA es el registro de control de direc-
ción del puerto A. Asimismo, TRISB es el registro de control de dirección del puerto B,
Copyright © 2007. Marcombo. All rights reserved.

y así sucesivamente.

Cuando un bit del registro TRIS se pone a 1, el terminal correspondiente al bit en cues-
tión se define como entrada. Si el bit se pone a 0 en el registro TRIS, entonces se confi-
gura como salida. Por ejemplo, para que los bits 0 y 1 del puerto B sean terminales de
entrada y el resto sean salidas, se debe cargar en el registro TRISB el siguiente patrón
de bits:

00000011

En la figura 2.9 se muestra el registro TRISB y la dirección de cada terminal de entra-


da/salida del puerto B (PORTB).

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 25
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 26

Programación de microcontroladores PIC

Figura 2.9: el registro TRISB y la dirección de E/S de los terminales del puerto B

Con el compilador PicBasic se puede acceder directamente a los registros de datos y de


control del puerto. Por ejemplo, con las dos instrucciones del compilador PicBasic
Profesional que aparecen a continuación, se puede asignar el valor 3 al registro TRISB y
posteriormente se puede leer el dato presente en el puerto B hacia una variable llama-
da CNT. La explicación detallada de las instrucciones de los compiladores PicBasic y
PicBasic Profesional se verá en el capítulo 4:

TRISB = 3
CNT = PORTB

El compilador PicBasic no tiene instrucciones directas para el control de los registros y


como se verá posteriormente, será necesario usar las instrucciones PEEK y POKE. La
instrucción PEEK permite leer los datos de un registro y la instrucción POKE permite
enviar los datos a un registro.

Cuando se usan las instrucciones PEEK y POKE se debe especificar la dirección (en
hexadecimal) del registro al que se desea acceder. Las direcciones de los registros de los
puertos son (el carácter “$” especifica que el número está en formato hexadecimal):

Puertos Direcciones (Hexadecimal)

PORTA $05
PORTB $06
PORTC $07
PORTD $08
Copyright © 2007. Marcombo. All rights reserved.

PORTE $09
TRISA $85
TRISB $86
TRISC $87
TRISD $88
TRISE $89

Así, para el ejemplo anterior, se emplearán las instrucciones PicBasic siguientes:

POKE $86, 3
PEEK $06, CNT

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
26
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 27

La familia de microcontroladores PIC

En el próximo capítulo se estudiará cómo usar los símbolos en el lenguaje PicBasic para
hacer nuestros programas más claros y fáciles de mantener.

Los registros del temporizador


En función del modelo escogido, algunos microcontroladores PIC sólo tienen un tem-
porizador, y otros pueden tener hasta 3 temporizadores. En este apartado nos centra-
remos en el microcontrolador PIC16F84 que tiene un único temporizador. La generali-
zación a varios temporizadores es similar y se analizará en el apartado de proyectos
que tratará sobre cómo usar más de un temporizador.

El temporizador del microcontrolador PIC16F84 es un registro de 8 bits (denominado


TMR0) el cual puede usarse como temporizador o como contador. Cuando se emplea
como contador, el registro se incrementa cada vez que se aplica un pulso del reloj al ter-
minal T0CK1 del microcontrolador. Cuando se emplea como temporizador, el registro
se incrementa a una frecuencia igual a la frecuencia de reloj del sistema dividida por el
valor del prescalador (definido en el registro OPTION_REG). Los valores del prescala-
dor varían desde 1:2 hasta 1:256. Por ejemplo, si se usa un reloj a 4 MHz entonces el
ciclo de instrucción básico es de 1 µs (el reloj se divide internamente por cuatro). Si se
selecciona un valor del prescalador igual a 1:16, el contador se incrementará cada 16 µs.

El registro TMR0 ocupa la dirección 01 de la memoria RAM y, por ende, es accesible


mediante la instrucción POKE del PicBasic, o directamente con el PicBasic Profesional.

Cuando el conteo del temporizador se desborda de 255 a 0, se genera una interrupción


del temporizador. Esta interrupción puede habilitarse o deshabilitarse por programa.
Por ejemplo, si se desea generar interrupciones a intervalos de 200 ms usando un reloj
a 4 MHz, se deberá seleccionar un valor del prescalador igual a 1:4 y se deberán habi-
litar las interrupciones del temporizador. El período de reloj del temporizador será, en-
tonces, igual a 4 µs. Para que transcurra un tiempo de inactividad (time-out) de 200 µs,
el temporizador deberá contar 50 pulsos de reloj. Por lo tanto, se debe cargar el regis-
tro TMR0 con el valor de 206 (256 - 50), es decir, 50 conteos antes de que ocurra el des-
bordamiento del temporizador.
Copyright © 2007. Marcombo. All rights reserved.

El oscilador del temporizador watchdog es independiente del reloj de la CPU y su tiem-


po de inactividad es de 18 ms. Para evitar que transcurra el tiempo de inactividad del
watchdog, este debe ser reiniciado periódicamente por programa. Si el temporizador
watchdog no se reinicia antes de que transcurra su tiempo de inactividad, entonces pro-
vocará que el microprocesador salte a la dirección reset. El prescalador permite exten-
der el tiempo de inactividad del watchdog, en dependencia del valor que se cargue en
el primero (los valores permitidos son 1, 2, 4, 8, 16, 32, 64 y 128). Por ejemplo, cuando
el prescalador se carga con el valor de 128, el tiempo de inactividad será de 2 s aproxi-
madamente (18 × 128 = 2304 ms). Si no se desea utilizar al temporizador watchdog,
puede deshabilitarse por programa.

Como el temporizador es un elemento importante de los microcontroladores PIC, a


continuación se mostrará información más detallada de su funcionamiento.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 27
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 28

Programación de microcontroladores PIC

TMR0 y watchdog
El TMR0 y el watchdog aparecen en todos los microcontroladores PIC. En la figura 2.10
se muestra el esquema funcional del TMR0 y el circuito del watchdog. El funcionamien-
to del watchdog se ha descrito previamente, por lo que en este apartado sólo se explica-
rá el TMR0.

El origen de la señal de reloj a la entrada del TMR0 se selecciona mediante el bit T0CS
del registro OPTION_REG. Esta señal puede ser la del oscilador (fosc) dividida por 4, o
la señal externa aplicada al terminal de entrada RA4/T0CK1. A continuación sólo se
explicará lo referente al oscilador externo. Si se emplea un cristal de 4 MHz, la frecuen-
cia del oscilador interno es fosc /4 = 1 MHz, la cual se corresponde a un período T =1/f =
10-6 s, o 1µs. Si el bit PSA del registro OPTION_REG se pone a 0, entonces el prescala-
dor proporciona la señal de entrada al TMR0. A través de los bits PS0 a PS2 se fija el
valor deseado del prescalador como se muestra en la figura 2.8. Una vez configurados
los bits, entonces cada vez que el oscilador interno genera un pulso, el registro TMR0
se incrementa. El TMR0 es un registro de 8 bits que cuenta ascendentemente hasta 255,
luego se desborda, y comienza a contar a partir de 0. Si las interrupciones del tempori-
zador y la global están habilitadas (GIE = T0IE = 1 en el registro INTCON), entonces
cuando el TMR0 pasa de 255 a 0, generará una interrupción. Para mayor información
sobre las interrupciones, consulte el apartado 2.4.6.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.10: el temporizador TMR0 y circuito del watchdog

Cargando un valor en el registro TMR0 se puede controlar el tiempo de desbordamien-


to. La fórmula que aparece a continuación permite calcular el tiempo al cabo del cual
el temporizador se desborda, y genera una interrupción, en función del periodo del
oscilador, del valor cargado en el temporizador y del valor del prescalador.

Tiempo de desbordamiento = 4 × Tosc × prescalador × (256 – TMR0) (2.1)

donde:
el tiempo de desbordamiento se da en µs;
Tosc es el período del oscilador en µs;

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
28
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 29

La familia de microcontroladores PIC

prescalador es el valor del prescalador seleccionado mediante


OPTION_REG;
TMR0 es el valor cargado en el registro TMR0.

Por ejemplo, si el cristal empleado opera a 4 MHz, el valor del prescalador selecciona-
do es de 1:8 (PS2:PS0 = 010), y el valor cargado en el registro TMR0 es el 100 decimal,
entonces el tiempo de desbordamiento está dado por:

El reloj de 4 MHz tiene un periodo, T = 1/f = 0,25 µs.

Usando la expresión anterior:

Tiempo de desbordamiento = 4 × 0,25 × 8 × (256 - 100) = 1248 µs.

Así, el temporizador se desbordará después de 1,248 ms y generará una interrupción si


previamente se ha habilitado la interrupción del temporizador y la interrupción global.

En la práctica lo que se necesita conocer es qué valor hay que cargar en el registro
TMR0 para el tiempo de desbordamiento requerido. Esto puede calcularse modifican-
do la ecuación (2.1) como:

TMR0 = 256 - (Tiempo de desbordamiento)/(4 × Tosc × prescalador) (2.2)

Por ejemplo, supongamos que se quiere generar una interrupción al transcurrir 500 µs
y que los valores del reloj y del prescalador son los anteriores. El valor a cargar en el
registro TMR0 puede calcularse mediante la ecuación (2.2) como:

TMR0 = 256 - 500/(4 × 0,25 × 8) = 193,5.

El número más próximo que se puede cargar en el registro TMR0 es 193.

En la tabla 2.5 se muestran los valores que deben cargarse en el registro TMR0 para
diversos tiempos de desbordamiento. En esta tabla se asume un cristal que opera a 4
MHz y los valores del prescalador se cambian de 2 a 256.
Copyright © 2007. Marcombo. All rights reserved.

Tabla 2.5: los valores del TMR0 requeridos


para diversos tiempos de desbordamiento

PRESCALADOR
Tiempo para el
desbordamiento (µs)
2 4 8 16 32 64 128 256

100 206 231 243 250 253 254 - -


200 156 206 231 243 250 253 254 -
300 106 181 218 237 246 251 253 255
400 56 156 206 231 243 250 253 254
500 6 131 193 224 240 248 252 254
600 - 106 181 218 237 16 251 253
700 - 81 168 212 234 245 250 253

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 29
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 30

Programación de microcontroladores PIC

PRESCALADOR
Tiempo para el
desbordamiento (µs)
2 4 8 16 32 64 128 256

800 - 56 156 206 231 243 250 253


1,000 - 6 131 193 225 240 248 252
5,000 - - - - 100 178 77 236
10,000 - - - - - 100 178 217
20,000 - - - - - - 100 178
30,000 - - - - - - - 139
40,000 - - - - - - - 100
50,000 - - - - - - - 60
60,000 - - - - - - - 21

TMR1
Si bien el registro TMR0 es el temporizador básico presente en todos los microcontro-
ladores PIC, algunos dispositivos tienen varios temporizadores, por ejemplo TMR0,
TMR1 y TMR2. Los temporizadores adicionales incorporan una mayor funcionalidad a
un microcontrolador. En este apartado se describirá en detalles el funcionamiento del
TMR1.

El TMR1 es un temporizador de 16 bits que consta de dos registros de 8 bits: TMR1H y


TMR1L. Como se muestra en la figura 2.11, el TMR1 lleva asociado un prescalador
cuyos valores son 1, 2, 4 y 8.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.11: la estructura del temporizador TMR1

El registro T1CON controla el funcionamiento del TMR1. La definición de los bits de


este registro se muestra en la figura 2.12. El TMR1 puede operar como temporizador o
como contador, según el bit TMR1CS de T1CON. Cuando opera en el modo temporiza-
dor, el TMR1 se incrementa con cada pulso de la frecuencia de oscilador fosc/4. El TMR1
puede habilitarse o deshabilitarse poniendo a 1 o a 0, respectivamente, el bit TMR1ON.
El TMR1 puede contar de 0 a 65535 y se desborda al cambiar de 65535 a 0. Cuando esto
ocurre se genera una interrupción del temporizador si previamente se ha habilitado al
bit TMR1IE y se han habilitado las demás interrupciones globales del registro INTCON.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
30
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:35 PÆgina 31

La familia de microcontroladores PIC

Cuando el TMR1 opera en modo contador, éste se incrementa con cada flanco ascen-
dente (de 0 a 1 lógico) de la entrada del reloj.

Figura 2.12: la definición de los bits del registro T1CON

TMR2
El TMR2 es un temporizador de 8 bits con un prescalador, un post-escalador y un regis-
tro de período PR2 de 8 bits. Este temporizador se controla con el registro T2CON cuyas
Copyright © 2007. Marcombo. All rights reserved.

definiciones de bits se muestran en la figura 2.13. Las opciones del prescalador son
solamente 1, 4, y 16 y se seleccionan mediante los bits T2CKPS1 y T2CKPS0 de T2CON.
El TMR2 se incrementa desde 0 hasta que el conteo sea igual al valor en PR2, y luego
se pone a 0 con el siguiente pulso de reloj. El ciclo de conteo se repite posteriormente.
El TMR2 se puede desactivar poniendo a 0 al bit TMR2ON del registro T2CON, y de
esta forma se puede minimizar el consumo de energía.

(continúa)

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 31
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 32

Programación de microcontroladores PIC

Figura 2.13: las definiciones de los bits del registro T2CON

Registro INTCON
Este es el registro de control de las interrupciones. Este registro ocupa las direcciones 0
y 8B (en hexadecimal) de la memoria RAM del microcontrolador y las definiciones de
sus bits se muestran en la figura 2.14. Por ejemplo, si en un PIC16F84 se desea habilitar
la interrupción externa del terminal INT (RB0), se deberá cargar el siguiente patrón de
bits en el registro INTCON:

1XX1XXXX

De forma similar, para habilitar la interrupción del temporizador, el bit 5 de INTCON


(T0IE) deberá ponerse a 1.
Copyright © 2007. Marcombo. All rights reserved.

(continúa)

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
32
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 33

La familia de microcontroladores PIC

Figura 2.14: las definiciones de los bits del registro INTCON

Registros del conversor A/D


El conversor analógico digital (CAD) permite realizar la interfaz de señales analógicas
con el microcontrolador. El CAD convierte las señales analógicas (por ejemplo, tensión)
en señales digitales, de forma tal que estas puedan ser procesadas en el microcontrola-
dor. Los registros del CAD se usan para controlar los puertos del mismo. En la mayo-
ría de los microcontroladores PIC con conversores A/D internos, los terminales del
puerto A (PORTA) se usan como entradas analógicas y, de esta forma, comparten fun-
ciones analógicas y digitales.

El PIC16F876 incluye un CAD con un multiplexor analógico de 5 entradas. De forma


similar, el PIC16F877 incluye un CAD con un multiplexor analógico de 8 entradas como
se muestra en la figura 2.15. El número de bits del CAD puede ser 8 o 10. Tanto el
PIC16F876 como el PIC16F877 tienen conversores A/D de 10 bits. El PIC16F73 tiene un
CAD de 8 bits. Para que un CAD opere correctamente, debe disponer de una tensión
de referencia. Esta tensión de referencia se selecciona por programa y típicamente es
igual a +5 V. Así, si se emplea un CAD de 10 bits (1024 niveles de cuantificación) la reso-
lución del CAD será de 5/1024 = 0,00488 V, o 4,88 mV, es decir, se pueden medir tensio-
nes analógicas con una resolución de 4,88 mV. Por ejemplo, si la tensión de entrada ana-
lógica medida es de 4,88 mV se obtendrá el número digital de 10 bits “0000000001”, si
la tensión de entrada analógica es de 2 × 4,88 = 9,76 mV, el número digital convertido
Copyright © 2007. Marcombo. All rights reserved.

será “0000000010”, si la tensión de entrada analógica es de 3 × 4,88 = 14,64 mV, el núme-


ro convertido será “0000000011”, y así sucesivamente.

Figura 2.15: la estructura del conversor analógico y su multiplexor analógico

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 33
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 34

Programación de microcontroladores PIC

De forma similar, si la tensión de referencia es de +5 V y se está usando un CAD de 8


bits (256 niveles de cuantificación), la resolución del conversor será de 5/256 = 19,53 mV.
Por ejemplo, si la tensión de entrada medida es de 19,53 mV, se obtendrá el número de
8 bits “00000001”, si la tensión de entrada analógica es de 2 × 19,53 = 39,06 mV, se obten-
drá el número de 8 bits “00000010”, y así sucesivamente.

Los registros ADCON0 y ADCON1 controlan al CAD. En la figura 2.16 se muestra la


definición de los bits del registro ADCON0. El registro ADCON0 se subdivide en cua-
tro partes, la primera parte está compuesta por los dos bits más significativos: ADCS1
y ADCS0, los cuales se usan para seleccionar el reloj de conversión. Como reloj de con-
versión se puede seleccionar al oscilador RC interno o al reloj externo según muestra la
siguiente tabla:

00 Reloj externo/2
01 Reloj externo/8
10 Reloj externo/32
11 Reloj RC interno
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.16: la definición de los bits del registro ADCON0

La segunda parte de ADCON0 consta de tres bits: CHS2, CHS1 y CHS0. Éstos son los
bits de selección del canal y definen qué terminal de entrada se conecta al CAD. La se-
lección es la siguiente:

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
34
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 35

La familia de microcontroladores PIC

CHS2:CHS1:CHS0
000 Canal 0
001 Canal 1
010 Canal 2
011 Canal 3
100 Canal 4
101 Canal 5
110 Canal 6
111 Canal 7

La tercera parte de ADCON0 es el bit individual GO/DONE. Este bit tiene dos funcio-
nes: la primera (función GO) permite iniciar la conversión del CAD (bit en 1). La segun-
da (función DONE) permite verificar si la conversión ha finalizado (bit en 0).

La cuarta parte de ADCON0 también consta de un solo bit: ADON, el cual se pone a 1
para conectar la circuitería del CAD.

El resultado numérico de la conversión A/D se deposita en los registros ADRESH y


ADRESL. En ADRESL se almacena el Byte bajo o menos significativo y en ADRESH se
almacena el Byte alto con los 2 bits más significativos (si se usa un conversor de 10 bits).
Posteriormente, veremos cómo configurar el resultado de la conversión.

ADCON1 es el segundo registro de control del CAD. Este registro controla el formato
de los datos convertidos y el modo de las entradas del puerto A. El formato de los bits
de este registro se muestra en la figura 2.17. El bit 7 se llama ADFM y si es igual a 0, el
resultado de la conversión A/D queda justificado (alineado) a la izquierda y si es igual
a 1, el resultado de la conversión A/D queda justificado a la derecha. Si el conversor es
de 8 bits se puede poner ADFM a 0 y leer solamente ADRESH para obtener el dato con-
vertido de 8 bits. Si el conversor es de 10 bits se puede poner ADFM a 1 y, en este caso,
los 8 bits menos significativos del resultado estarán en ADRESL y los 2 bits más signi-
ficativos estarán en ADRESH. Los 6 bits no utilizados de ADRESH (bits 2 a 7) se ponen
Copyright © 2007. Marcombo. All rights reserved.

a cero automáticamente.

(continúa)

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 35
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 36

Programación de microcontroladores PIC

Figura 2.17: las definiciones de los bits del registro ADCON1

Los bits PCFG0-3 controlan a los terminales del puerto A. Como se observa en la figu-
ra 2.17, un terminal del puerto A puede programarse como analógico o como digital.
Por ejemplo, si se pusieran PCFG0-3 a “0110” todos los terminales del puerto A serán
líneas de E/S digitales. Los bits PCFG0-3 también se usan para definir la tensión de refe-
rencia del CAD. Como veremos en los apartados de proyectos de este libro, la tensión
de referencia Vref+ normalmente se conecta a la tensión de alimentación (Vdd), y Vref-
se conecta a Vss. Esto hace que la tensión de referencia del CAD sea igual a +5 V.

2.4.4 Circuitos osciladores


El circuito oscilador proporciona la señal de reloj al microcontrolador, la cual es
imprescindible para que este pueda ejecutar su programa.

Los microcontroladores PIC poseen circuitos osciladores internos que pueden operar
en uno de los cinco modos siguientes:
Copyright © 2007. Marcombo. All rights reserved.

Y LP – Low-power crystal, oscilador con cristal de bajo consumo.


Y XT – Crystal/resonator, oscilador con cristal o resonador.
Y HS – Hish-speed crystal/resonator, oscilador con cristal o resonador de alta velocidad.
Y RC – Resistor/capacitor, oscilador con resistor y capacitor.
Y Oscilador sin componentes externos (sólo en algunos microcontroladores PIC).

En los modos LP, XT o HS se debe conectar un oscilador externo a la entrada OSC1


como se muestra en la figura 2.18. Este puede ser un oscilador con cristal, o se puede
diseñar con puertas lógicas simples.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
36
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 37

La familia de microcontroladores PIC

Figura 2.18: el uso de un oscilador externo

Funcionamiento con cristal


Como se muestra en la figura 2.19, en este modo de funcionamiento se conecta un cris-
tal externo y dos condensadores a las entradas OSC1 y OSC2 del microcontrolador. Los
capacitores deben escogerse como se muestra en la tabla 2.6. Por ejemplo, con una fre-
cuencia del cristal de 4 MHz se pueden usar dos condensadores de 22 pF.

Figura 2.19: el circuito oscilador con cristal

Tabla 2.6: la selección del capacitor para el uso con cristal

Modo Frecuencia C1, C2


Copyright © 2007. Marcombo. All rights reserved.

LP 32 kHz 68-100 pF
LP 200 kHz 15-33 pF
XT 100 kHz 100-150 pF
XT 2 MHz 15-33 pF
XT 4 MHz 15-33 pF
HS 4 MHz 15-33 pF
HS 10 MHz 15-33 pF

Funcionamiento del resonador


Se ofertan resonadores desde 4 hasta alrededor de 8 MHz. Estos no son tan exactos
como los osciladores de cristal. Los resonadores normalmente son dispositivos de 3 ter-

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 37
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 38

Programación de microcontroladores PIC

minales, sus terminales laterales se conectan a las entradas OSC1 y OSC2 del microcon-
trolador. El terminal central se conecta a la toma de tierra. En la figura 2.20 se muestra
cómo emplear un resonador en un circuito microcontrolador PIC.

Figura 2.20: el circuito oscilador con resonador

Oscilador RC
En aplicaciones dónde la exactitud en la temporización no es importante, se puede
conectar un resistor y un capacitor externos a la entrada OSC1 del microcontrolador,
como se observa en la figura 2.21. La frecuencia del oscilador depende de los valores
del resistor, del capacitor (ver la tabla 2.7), de la tensión de alimentación y de la tempe-
ratura. Para la mayoría de las aplicaciones, se emplea un resistor de 5 K y un capacitor
de 20 pF con lo cual se obtiene una frecuencia de 4 MHz aproximadamente. Esto puede
ser aceptable en aplicaciones que no sean críticas en cuanto a tiempo.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.21: selección de los componentes del oscilador RC

Tabla 2.7: selección de los componentes para el oscilador RC


C R Frecuencia

20 pF 5K 4,61 MHz
10 K 2,66 MHz
100 K 311 kHz
100 pF 5K 1,34 MHz
10 K 756 kHz

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
38
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 39

La familia de microcontroladores PIC

C R Frecuencia

100 K 82,8 kHz


300 pF 5K 428 kHz
10 K 243 kHz
100 K 26,2 kHz

Oscilador interno
Algunos microcontroladores PIC (por ejemplo, el PIC12C672 y el PIC16F628) poseen
circuitos osciladores internos y no necesitan emplear ningún componente externo. El
oscilador interno se configura por programa para que funcione a 4 MHz. Por ejemplo,
la serie de microcontroladores PIC16F62X puede trabajar con un oscilador RC interno
a 4 MHz (denominado modo INTRC). Además, se puede conectar un resistor al termi-
nal RA7 del microcontrolador para lograr que la frecuencia del oscilador sea variable
(modo ER). Por ejemplo, en el microcontrolador PIC16F62X, los terminales OSC1 y
OSC2 son compartidos con los terminales RA7 y RA6, respectivamente. La frecuencia
del oscilador interno se puede definir conectando un resistor al terminal RA7 como se
muestra en la figura 2.22. En función del valor de este resistor se puede seleccionar la
frecuencia del oscilador desde 200 kHz hasta 10,4 MHz (ver la tabla 2.8). Cuando se tra-
baja en este modo, el terminal RA7 no está disponible como terminal de E/S digital.

Figura 2.22: cambio de la frecuencia del oscilador interno

Tabla 2.8: valores del resistor para el oscilador interno


Copyright © 2007. Marcombo. All rights reserved.

Resistencia Frecuencia

0 10,4 MHz
1K 10,0 MHz
10 K 7,4 MHz
20 K 5,3 MHz
47 K 3 MHz
100 K 1,6 MHz
220 K 800 kHz
470 K 300 kHz
1M 200 kHz

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 39
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 40

Programación de microcontroladores PIC

La frecuencia del oscilador interno de algunos microcontroladores (por ejemplo, el


PIC16F630) puede calibrarse, lo cual es útil para generar pulsos más exactos en aplica-
ciones críticas en tiempo (ejemplo, en las comunicaciones serie). En estos microcontro-
ladores se usa el registro del oscilador, denominado OSCCAL, para la calibración de la
frecuencia del oscilador. En la última localización de la memoria se encuentra almace-
nada una constante del oscilador según su calibración de fábrica. Para un microcontro-
lador dado, si se transfiere este valor constante hacia el registro del oscilador, entonces
se puede lograr una frecuencia de reloj de 4 MHz más exacta. También es posible modi-
ficar los valores del registro OSCCAL para realizar un fino ajuste de la frecuencia del
oscilador.

Las siguientes instrucciones de PicBasic y PicBasic Pro se emplean para transferir la


constante de calibración desde la última localización de memoria hacia el registro
OSCCAL. Estos comandos deben declararse al principio de nuestros programas.

DEFINE OSCCAL_1 K 1 Para microcontroladores de núcleo de 1 K.


DEFINE OSCCAL_2 K 1 Para microcontroladores de núcleo de 2 K.

La constante del oscilador puede perderse durante el borrado de la memoria del pro-
grama. Por esta razón, se recomienda que se haga una copia de la última localización
de la memoria de programa antes de borrar la memoria. Si se conoce este valor, enton-
ces, al iniciar un programa se puede cargar directamente el registro OSCCAL, como se
muestra a continuación (en este caso se supone que la constante es $24).

OSCCAL = $24

2.4.5 Circuito de Reset


El Reset o reinicio se usa para poner al microcontrolador en un estado conocido.
Normalmente cuando un microcontrolador PIC se reinicia, la ejecución del programa
comienza en la dirección 0 de la memoria de programa, que es donde reside el progra-
ma de usuario. La acción del Reset inicializa también varios registros SFR dentro del
microcontrolador.
Copyright © 2007. Marcombo. All rights reserved.

Los microcontroladores PIC se reinician cuando ocurre una de las siguientes condi-
ciones:

Y Reset durante el encendido (simbolizado como POR – Power On Reset).


Y Reset externo (poniendo a 0 lógico la entrada de MCLR).
Y Reset por desbordamiento del dog watcher.

El microcontrolador PIC se reinicia automáticamente al aplicarle la tensión de alimen-


tación, así como al conectarle un resistor de 4,7 K a la entrada MCLR, como se observa
en la figura 2.23. Hay muchas aplicaciones donde se requiere reiniciar al microcontro-
lador de forma manual, por ejemplo, presionando un pulsador externo. En la figura
2.24 se muestra el circuito más simple para realizar un reset externo. En este circuito,
como la entrada MCLR está normalmente a 1 lógico, el microcontrolador opera normal-

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
40
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 41

La familia de microcontroladores PIC

mente. Cuando se presiona el pulsador, el terminal va a 0 lógico y el microcontrolador


se reinicia. Cuando se libera el pulsador el microcontrolador comienza la ejecución en
la dirección 0 de la memoria de programa.

Figura 2.23: uso del reset durante el encendido

Figura 2.24: empleo de un pulsador de reset externo

2.4.6 Interrupciones
Las interrupciones constituyen un recurso importante en todos los microcontroladores.
La interrupción puede ocurrir asincrónicamente o sincrónicamente. Las interrupciones
asincrónicas son eventos usualmente externos, que interrumpen al microcontrolador
para solicitar un servicio. Por ejemplo, el terminal INT (RB0) de un microcontrolador
PIC16F84 es la entrada de interrupción externa y el mismo puede utilizarse para inte-
rrumpir al microcontrolador asincrónicamente, es decir, la interrupción puede ocurrir
Copyright © 2007. Marcombo. All rights reserved.

en un instante de tiempo cualquiera independientemente del programa que se esté eje-


cutando dentro del microcontrolador. Las interrupciones sincrónicas son, usualmente,
las interrupciones del temporizador, como por ejemplo, el desbordamiento del tempo-
rizador que genera una interrupción.

En función del modelo empleado, los microcontroladores PIC pueden tener diferentes
fuentes de interrupciones. Por ejemplo, el microcontrolador PIC16F84 tiene las siguien-
tes fuentes de interrupciones:

Y Interrupción externa del terminal INT (RB0).


Y Interrupción del TMR0 por desbordamiento del temporizador.
Y Interrupción externa por cambio de estado en los terminales RB4, RB5, RB6 o RB7.
Y Interrupción por finalización de escritura de datos en memoria EEPROM.

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 41
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 42

Programación de microcontroladores PIC

Las interrupciones se habilitan y deshabilitan mediante el registro INTCON. Cada


fuente de interrupción tiene dos bits para su control. Un bit habilita las interrupciones
y el otro detecta la fuente de la interrupción (a este se le denomina bandera). Existe un
bit común denominado GIE (ver las definiciones del registro INTCON) que se usa para
deshabilitar todas las fuentes de posibles interrupciones.

Los bits de control de INTCON de las diversas fuentes de interrupciones son:

Fuente de interrupción Bit de habilitación Bit de estado

Interrupción externa INT INTE = 1 INTF = 1


Interrupción TMR0 T0IE = 1 T0IF = 1
Cambio del estado de RB4-RB7 RBIE = 1 RBIF = 1
Final de escritura en EEPROM EEIE = 1 –

Cuando ocurre una interrupción, el microcontrolador salta a la rutina de atención de la


interrupción (RAI). En los microcontroladores de gama baja (por ejemplo el PIC16F84
o el PIC16F628) todas las fuentes de interrupciones usan la dirección 4 de la memoria
de programa para indicar la dirección de inicio de la RAI. Como todas las interrupcio-
nes emplean la misma dirección de la RAI, se deben verificar los bits de estado de acti-
vación de las interrupciones para averiguar qué interrupción ha ocurrido entre todas
las interrupciones que estén habilitadas.

Si se desea que una fuente de interrupción previamente atendida, pueda interrumpir


nuevamente al microcontrolador, entonces el bit de activación de dicha fuente debe
ponerse a 0. Supóngase que se desea emplear la entrada de interrupción externa (INT),
y que las interrupciones se activan con el flanco de subida del terminal INT. Los pasos
a realizar antes y después de la interrupción se resumen a continuación:
Y Definir que la interrupción externa se activará con el flanco de subida poniendo a
1 el bit INTEDG del registro OPTION_REG.
Y Habilitar la interrupción INT poniendo a 1 al bit INTE del registro INTCON.
Copyright © 2007. Marcombo. All rights reserved.

Y Habilitar las interrupciones globales poniendo a 1 al bit GIE del registro INTCON.
Y Continuar con la ejecución normal del programa. Cuando ocurre, el programa
salta a la RAI.
Y Ejecutar las tareas requeridas por la RAI.
Y Al final de la RAI, rehabilitar la interrupción INT poniendo a 0 al bit INTF.

El lenguaje PicBasic Profesional posee instrucciones especiales para la manipulación de


las interrupciones, como se verá en el apartado de proyectos de este libro.

2.4.7 Palabra de configuración


Los microcontroladores PIC tienen un registro especial llamado palabra de configura-
ción (Configuration Word). Este registro es de 14 bits y se encuentra en la dirección
2007H de la memoria de programa. Esta dirección está fuera del espacio de memoria

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
42
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 43

La familia de microcontroladores PIC

de programa por lo que no puede accederse directamente por programa. A este regis-
tro sólo se puede acceder durante la programación del microcontrolador.

En un microcontrolador PIC, la palabra de configuración almacena la siguiente infor-


mación:
Y Bits de protección de código: estos bits se usan evitar la lectura de bloques de
memoria.
Y Bit de habilitación del temporizador de encendido (Power-on timer).
Y Bit de habilitación del temporizador perro guardián (WDT).
Y Bits de selección del oscilador: permiten definir si el oscilador que se desea es XT,
HS, LP, RC o interno (si es posible en el microcontrolador).

Por ejemplo, en una aplicación típica, se puede seleccionar la siguiente palabra de con-
figuración (al momento de programar el microcontrolador):
Y Protección de código deshabilitada.
Y Selección del oscilador XT.
Y Temporizador WDT desactivado.
Y Temporizador de encendido habilitado.

2.4.8 Interfaz de E/S


El puerto de un microcontrolador PIC puede absorber y entregar 25 mA de corriente.
Cuando entrega corriente, ésta circula hacia el exterior del terminal del puerto, y cuan-
do absorbe, la corriente entra por el terminal. Cuando entrega corriente, la carga se
conecta entre el terminal de puerto (del microcontrolador) y tierra (ver la figura 2.25a).
Por tanto, la carga se energiza cuando la salida del puerto está a 1 lógico. Cuando se
absorbe corriente, la carga se conecta entre el terminal del puerto y la tensión de ali-
mentación (ver la figura 2.25b). La carga, entonces, se energiza cuando el puerto está a
0 lógico. En este apartado se verán algunos circuitos de interfaz útiles.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.25a: en nivel alto el terminal de salida de un puerto entrega corriente

Figura 2.25b: en nivel bajo el terminal de salida de un puerto absorbe corriente

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 43
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:36 PÆgina 44

Programación de microcontroladores PIC

Interfaz con LED


Los LEDs se ofertan en diversos tamaños, formas, y colores. La iluminación de un LED
depende de la corriente que circula por el dispositivo. Algunos LEDs pequeños funcio-
nan con corrientes de pocos miliamperios, mientras que los LEDs de tamaño normal
consumen aproximadamente 10 mA en condiciones de iluminación normal. Algunos
LEDs muy lumínicos consumen entre 15 y 20 mA. La caída de tensión en un LED es de
2 V aproximadamente, sin embargo la tensión de salida (en 1 lógico) de un puerto de
un microcontrolador es de 5 V aproximadamente. Por esta razón, no se debe conectar
un LED directamente a un puerto de salida del microcontrolador. Se debe emplear un
resistor para limitar la corriente en el circuito.

Como la tensión de salida del puerto es de 5 V y la caída de tensión es de 2 V, entonces


se caen 3 V en el resistor. Si se asume que la corriente por el LED es de 10 mA, el valor
del resistor necesitado se calcula mediante:

5 − 2V 3V
R= = = 0,3 K
10 mA 10 mA

El resistor físico más próximo que se puede usar es de 330 Ω. En la figura 2.26 se muestra
la conexión de un LED al terminal de un puerto de salida en modo de suministro de
corriente. En este circuito el LED estará encendido cuando el puerto de salida se ponga
a 1 lógico. De forma semejante, en la figura 2.27 se muestra la conexión de un LED al
terminal de un puerto de salida en modo de absorción de corriente. En este circuito el
LED estará encendido cuando el puerto de salida se ponga a 0 lógico.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.26: conexión de un LED en modo de suministro de corriente

Figura 2.27: conexión de un LED en modo de absorción de corriente

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
44
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:37 PÆgina 45

La familia de microcontroladores PIC

Interfaz con cargas de altas corrientes


Los circuitos mostrados en las figuras 2.26 y 2.27 trabajan bien con un LED o cualquier
otro dispositivo que requiera menos de 25 mA. ¿Qué se puede hacer si se desea excitar
a una carga con un mayor valor de corriente? Por ejemplo, el filamento de una lámpa-
ra de 12 V. La respuesta es que se debe usar un dispositivo de conmutación, por ejem-
plo un transistor o un relé.

En la figura 2.28 se muestra cómo se puede excitar a una lámpara pequeña desde el ter-
minal de un puerto, empleando un transistor bipolar. En este circuito, cuando el termi-
nal del puerto de salida está a 1 lógico, la corriente circula a través del resistor y pone
en conducción al transistor, conectando el extremo inferior de la lámpara a tierra. Es
importante observar que la alimentación positiva de la lámpara es independiente de la
tensión de alimentación del PIC, por lo que el PIC puede estar funcionando con 15 V y
la lámpara con 12 V. La capacidad de corriente depende del tipo de transistor utiliza-
do. Se pueden lograr algunos cientos de miliamperios con cualquier transistor peque-
ño de tipo NPN. Para corrientes superiores, se pueden usar transistores bipolares de
potencia, o preferiblemente, transistores MOSFET.

Figura 2.28: excitación de una lámpara empleando un transistor

Interfaz con relé


Cuando se quiere conmutar cargas inductivas, tales como relés, se debe usar un diodo
Copyright © 2007. Marcombo. All rights reserved.

en el circuito para evitar que se dañe el transistor (ver la figura 2.29). La carga inducti-
va puede generar una fuerza electromotriz inversa (FEMI) que podría dañar fácilmen-
te al transistor. Para evitar esto, se conecta al diodo en modo de polarización inversa, el
cual absorbe esta FEMI sin dañar el transistor.

Figura 2.29: excitación de una carga inductiva (por ejemplo, un relé)


Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 45
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:37 PÆgina 46

Programación de microcontroladores PIC

Si se conoce como excitar a un relé, entonces ya se puede conectar cualquier carga tan
grande como se desee siempre y cuando no se excedan los límites de corriente de los
contactos del relé. En la figura 2.30 se muestra cómo encender una lámpara de la red
eléctrica mediante el puerto de salida de un microcontrolador. El relé también puede
trabajar con un transistor de potencia MOSFET. En este circuito, la lámpara se encen-
derá cuando el puerto de salida del microcontrolador esté en 1 lógico.

Figura 2.30: excitación de una lámpara de la red eléctrica con un relé

Entrada con pulsador


El pulsador (o interruptor tipo push-button) es uno de los periféricos más comunes de
entrada que permite al usuario cambiar el estado de un terminal de entrada mediante
la simple pulsación del mismo. Básicamente, la entrada con pulsador puede ser de dos
formas diferentes: activa en nivel bajo y en nivel alto. En la figura 2.31 se muestra una
implementación activa en nivel bajo, el terminal de entrada del microcontrolador se
conecta a la tensión de alimentación a través de un resistor (denominado resistor de
pull-up) y el pulsador se conecta entre el terminal del puerto y tierra. El resistor garan-
tiza que la entrada del microcontrolador se encuentre normalmente a 1 lógico cuando
está libre el pulsador. Cuando el pulsador se presiona, la entrada se fuerza al potencial
de tierra lo que equivale a un 0 lógico. El cambio de estado del terminal de entrada
puede ser determinado por programa.
Copyright © 2007. Marcombo. All rights reserved.

Figura 2.31: entrada con pulsador activa en nivel bajo

En los microcontroladores PIC algunos puertos tienen resistores internos de pull-up


(por ejemplo, el puerto B) y estos resistores pueden habilitarse poniendo a 0 al bit 7
(RBPU) del registro INTCON. Si se desea conectar un pulsador a un terminal de este

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
46
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:37 PÆgina 47

La familia de microcontroladores PIC

tipo de puerto, entonces no es necesario usar un resistor pull-up, sino que sólo se conec-
ta el pulsador entre el terminal del puerto en cuestión y tierra.

También se puede conectar un pulsador para que la entrada sea activa en nivel alto
como se muestra en la figura 2.32. En esta configuración el pulsador se conecta entre la
tensión de alimentación y el terminal del puerto; y el resistor (denominado resistor de
pull-down) se conecta entre el terminal del puerto y tierra. Normalmente, el terminal del
puerto está a 0 lógico. Cuando se aprieta el pulsador, el terminal del puerto va a la ten-
sión de alimentación que equivale a un 1 lógico.

Figura 2.32: entrada con pulsador activa en alto

Uno de los problemas de los interruptores mecánicos es que al cerrarse, sus partes
metálicas oscilan debido a que el interruptor se abre y se cierra varias veces rápidamen-
te. La posibilidad de lectura tan rápida del microcontrolador, y por ende, de poder
“ver” abierto y cerrado el interruptor, provoca que se produzcan lecturas erróneas del
estado real del interruptor. Una manera de eliminar los rebotes del interruptor consis-
te en leer la entrada, al cabo de cierta demora después que el interruptor cambia de
estado. Por ejemplo, cuando se detecta que el interruptor se presiona, se esperan unos
10 ms aproximadamente, y luego se vuelve a leer el estado del interruptor.

En las figuras 2.31 y 2.32, se muestra la conexión de pulsadores simples a un puerto del
microcontrolador. También es posible conectar al terminal de entrada de un puerto
cualquiera de los siguientes dispositivos: un transistor de conmutación, la salida de
Copyright © 2007. Marcombo. All rights reserved.

otro circuito integrado (CI), o simplemente la salida de otro terminal de puerto de un


PIC. En la figura 2.33 se muestra la conexión de un transistor de conmutación a una
entrada. En este circuito, el transistor opera como un interruptor inversor. Cuando la
tensión de entrada del transistor es de 0 V, el transistor estará en estado de corte y el
terminal del puerto se pondrá a 1 lógico. Cuando la tensión de entrada del transistor es
de 15 V, este se saturará y su tensión colector emisor caerá a 0 V, provocando que el ter-
minal del puerto esté a 0 lógico. Un aspecto positivo de este circuito es que la tensión
de entrada del transistor no necesita ser de 15 V para saturar el transistor, sino que
podría ser fácilmente de 9 o 12 V.

Los puertos de entrada de los microcontroladores PIC están protegidos por diodos
internos para situaciones de sobre tensión o de baja tensión. Esto garantiza que aunque
la tensión en un terminal de entrada sea superior a la tensión de alimentación, o sea

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505. 47
Created from unadsp on 2018-10-08 18:07:59.
PIC BASIC_02.qxp 06/08/2007 19:37 PÆgina 48

Programación de microcontroladores PIC

inferior al potencial de tierra, no se originen daños en el microcontrolador. Las líneas


de comunicación series RS232 operan con ±12 V y en base a lo anterior, se pueden
conectar a los puertos de entrada mediante resistores sin dañar al microcontrolador.

Figura 2.33: entrada con transistor

2.5 Ejercicios
1. ¿Qué es una memoria flash? Explique las diferencias entre una memoria de progra-
ma flash y una memoria de programa EPROM. ¿Cuál usaría en el desarrollo del
programa?
2. ¿Qué es una memoria EEPROM? Explique donde podría usarla. Diga un ejemplo
de microcontrolador PIC que tenga memoria EEPROM.
3. Explique brevemente las definiciones de los bits del registro INTCON. ¿Dónde
usaría el bit 6 de este registro?
4. Explique cómo se controla el sentido (entrada o salida) de un puerto de E/S en un
microcontrolador PIC. En una aplicación determinada se requiere que los bits 0, 2,
4, y 6 del Puerto B se configuren como puertos de entrada. ¿Qué valor se tendría
que cargar en el registro TRIS?
5. En una aplicación se requiere que todos los terminales del puerto B sean entradas
Copyright © 2007. Marcombo. All rights reserved.

y que los del Puerto C sean salidas. ¿Qué valor se tendría que cargar en el registro
TRIS?
6. Explique qué registros se usan para controlar al conversor A/D de un microcontro-
lador PIC. ¿Qué son los registros ADRESH y ADRESL?
7. En una aplicación se requiere disponer de 3 puertos digitales y 5 puertos analógi-
cos. ¿Qué valor se debería cargar en el registro ADCON1?
8. Explique cómo se puede conectar un cristal externo a un microcontrolador PIC.
¿Qué valores del capacitor se deberían escoger para un cristal de 10 MHz?
9. ¿Cuáles son las ventajas de usar un resonador en vez de un cristal?
10. En una aplicación sencilla dónde la exactitud en la temporización no es un factor
importante se requiere que un microcontrolador PIC funcione con una frecuencia

Dogan, Ibrahim. Programación de microcontroladores PIC, Marcombo, 2007. ProQuest Ebook Central,
48
http://ebookcentral.proquest.com/lib/unadsp/detail.action?docID=3175505.
Created from unadsp on 2018-10-08 18:07:59.

Potrebbero piacerti anche