Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Capítulo 2
La familia de
microcontroladores PIC
- 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
- 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.
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
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.
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.
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
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 -
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.
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
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.
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
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.
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
× 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.
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
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
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
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.
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.
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
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.
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
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
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
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
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
Figura 2.9: el registro TRISB y la dirección de E/S de los terminales del puerto B
TRISB = 3
CNT = PORTB
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):
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
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
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.
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
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.
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
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:
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:
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:
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.
PRESCALADOR
Tiempo para el
desbordamiento (µs)
2 4 8 16 32 64 128 256
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
PRESCALADOR
Tiempo para el
desbordamiento (µs)
2 4 8 16 32 64 128 256
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.
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
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.
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
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
(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
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
00 Reloj externo/2
01 Reloj externo/8
10 Reloj externo/32
11 Reloj RC interno
Copyright © 2007. Marcombo. All rights reserved.
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
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.
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
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.
Los microcontroladores PIC poseen circuitos osciladores internos que pueden operar
en uno de los cinco modos siguientes:
Copyright © 2007. Marcombo. All rights reserved.
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
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
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
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.
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.
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
C R Frecuencia
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.
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
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
Los microcontroladores PIC se reinician cuando ocurre una de las siguientes condi-
ciones:
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
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 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:
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
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.
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
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.
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.
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
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.
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
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.
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.
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.
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
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.
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.
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
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.