Está en la página 1de 394

MICROCONTROLADORES «PIC»

Diseño práctico de aplicaciones


SEGUNDA PARTE:
PIC16F87X, PIC18FXXXX
2ª Edición
MICROCONTROLADORES «PIC»
Diseño práctico de aplicaciones
SEGUNDA PARTE:
PIC16F87X, PIC18FXXXX
2ª Edición

José M.a Angulo Usategui


Dr. Ingeniero Industrial
Catedrático de Arquitectura de Computadores
Universidad de Deusto

Susana Romero Yesa


Licenciada en Informática
Profesora de Arquitectura de Computadores
Universidad de Deusto

Ignacio Angulo Martínez


Licenciado en Informática
Profesor de Arquitectura de Computadores
Universidad de Deusto

MADRID • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA • MÉXICO


~
NUEVA YORK • PANAMÁ • SAN JUAN • SANTIAGO • SA O PAULO
AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARÍS
SAN FRANCISCO • SIDNEY • SINGAPUR • ST. LOUIS • TOKIO • TORONTO
MICROCONTROLADORES «PIC». Diseño práctico de aplicaciones.
SEGUNDA PARTE: PIC16F87X, PIC18FXXXX. 2.ª edición
No está permitida la reproducción total o parcial de este libro, ni su tratamiento
informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea
electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el
permiso previo y por escrito de los titulares del Copyright.

DERECHOS RESERVADOS © 2006, respecto a la segunda edición en español, por


McGRAW-HILL/INTERAMERICANA DE ESPAÑA, S. A. U.
Edificio Valrealty, 1.a planta
Basauri, 17
28023 Aravaca (Madrid)

ISBN: 84-841-4627-1
Depósito legal: M.

Editor: Carmelo Sánchez González


Diseño de cubierta: Luis Sanz Cantero
Compuesto en: GAAP Editorial, S. L.
Impreso en:
IMPRESO EN ESPAÑA - PRINTED IN SPAIN
Contenido

Prólogo .................................................................................................................................... xi

Capítulo 1. LA FAMILIA DE MICROCONTROLADORES PIC ............................... 1

1.1. Importancia de los microcontroladores PIC........................................................... 1


1.2. Clasificación de los microcontroladores PIC......................................................... 3
1.3. Microcontroladores PIC de 8 bits .......................................................................... 3
1.3.1. La gama Base ........................................................................................... 5
1.3.2. La gama Media......................................................................................... 6
1.3.3. La gama Mejorada.................................................................................... 15
1.4. Microcontroladores PIC de 16 bits ........................................................................ 16
1.4.1. Gama de microcontroladores MCU de 16 bits......................................... 16
1.4.2. Gama de microcontroladores DSC de 16 bits .......................................... 20

Programar PIC es fácil: Recordando el viejo PIC16F84 ............................................ 23

Diseñar con PIC es fácil: Presentación de los sensores analógicos más utilizados ... 30

Capítulo 2. ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO


DE INSTRUCCIONES .................................................................................. 33

2.1. Introducción ........................................................................................................... 33


2.2. Procesador RISC con arquitectura Harvard ........................................................... 34
2.3. Organización de la memoria de programa ............................................................. 38
2.4 Organización de la memoria de datos RAM .......................................................... 39
2.4.1. Registros específicos para el control de la memoria de programa ........... 39
v
vi CONTENIDO

2.4.2. Control de la memoria de datos................................................................ 39


2.5. Diagrama de conexionado...................................................................................... 42
2.6. Repertorio de instrucciones.................................................................................... 46

Programar PIC es fácil: El primer programa con los PIC16F87x ............................ 48

Diseñar con PIC es fácil: Actuadores para diversas aplicaciones: los motores ........ 52

Capítulo 3. PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS ME-


MORIAS FLASH Y EEPROM ..................................................................... 57

3.1. Los registros de control.......................................................................................... 57


3.2. Registro de estado (STATUS) ................................................................................ 57
3.3. Registro de opciones (OPTION)............................................................................ 59
3.4. Registro para controlar las interrupciones.............................................................. 59
3.4.1. Registro de control de interrupciones (INTCON).................................... 61
3.4.2. Registro de permiso de interrupciones 1 (PIE1) ...................................... 61
3.4.3. Registro de permiso de interrupciones 2 (PIE2) ...................................... 62
3.4.4. Registros de los señalizadores de interrupciones 1 y 2 (PIR1 y PIR2)......... 62
3.5. Lectura y escritura de las memorias EEPROM y FLASH..................................... 62

Programar PIC es fácil: Un programa que maneja las memorias FLASH de


código y EEPROM de datos .......................................................................................... 67

Diseñar con PIC es fácil: Ampliación de periféricos para el trabajo con PIC.......... 74

Capítulo 4. LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCE-


SADOR ........................................................................................................... 81

4.1. Puertas de E/S ........................................................................................................ 81


4.1.1. Puerta A.................................................................................................... 81
4.1.2. Puerta B .................................................................................................... 83
4.1.3. Puerta C .................................................................................................... 85
4.1.4. Puerta D.................................................................................................... 85
4.1.5. Puerta E .................................................................................................... 86
4.2. Palabra de configuración........................................................................................ 86
4.3. Palabras de identificación ...................................................................................... 87
4.4. Reinicialización o reset .......................................................................................... 88
4.5. Perro Guardián (WDT: watchdog timer) ............................................................... 91
4.6. Modo de reposo o de bajo consumo....................................................................... 91
4.7. Programación de los PIC16F87x ........................................................................... 92

Programar PIC es fácil: Utilización de los recursos del PIC...................................... 94

Diseñar con PIC es fácil: Ampliación de los recursos del PIC ................................... 97
CONTENIDO vii

Capítulo 5. LOS TEMPORIZADORES .......................................................................... 101

5.1. Tipos y características generales ........................................................................... 101


5.2. Estructura interna y funcionamiento del TMR1 .................................................... 102
5.3. Registro de control del TMR1 (T1CON) ............................................................... 103
5.4. Chuleta-resumen de los registros asociados al TMR1 ........................................... 104
5.5. Funcionamiento y programación del TMR2 .......................................................... 104
5.6. Chuleta-resumen de los registros asociados al TMR2 ........................................... 106

Programar PIC es fácil: Midiendo el tiempo ............................................................... 107

Diseñar con PIC es fácil: Aplicación de los PIC al control de motores y sensores ........ 114

Capítulo 6. MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE


ANCHURA DE PULSOS............................................................................. 119

6.1. Introducción a los módulos CCP ........................................................................... 119


6.2. Modo captura ......................................................................................................... 120
6.3. Modo comparación ................................................................................................ 121
6.4. Chuleta-resumen de los registros asociados al módulo de captura y al
de comparación ...................................................................................................... 122
6.5. Modo de modulación de anchura de pulsos (PWM).............................................. 123
6.6. Chuleta-resumen de los registros asociados al módulo PWM ............................... 124

Programar PIC es fácil: Trabajo con los módulos CCP ............................................. 126

Diseñar con PIC es fácil: Aplicación de los microcontroladores: la microbótica ............ 138

Capítulo 7. EL CONVERSOR A/D .................................................................................. 143

7.1. Presentación del conversor analógico/digital......................................................... 143


7.2. Registros de trabajo................................................................................................ 143
7.3. Estructura interna y configuración del conversor A/D .......................................... 145
7.4. Chuleta-resumen de los registros asociados al conversor analógico/digital .......... 150

Programar PIC es fácil: Adquisición de valores con los conversores A/D ................ 151

Diseñar con PIC es fácil: Visualización de valores por pantallas LCD ..................... 159

Capítulo 8. MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA ........................... 167

8.1. Introducción ........................................................................................................... 167


8.2. Modo SPI ............................................................................................................... 169
8.3. Manejo y programación en el modo SPI................................................................ 170
viii CONTENIDO

8.4. Módulo MSSP trabajando en modo I2C ................................................................ 173


8.5. Conceptos fundamentales sobre el bus I2C ........................................................... 174
8.5.1. Concepto del bus I2C ............................................................................... 174
8.5.2. Terminología del bus I2C ......................................................................... 176
8.6. Características generales ........................................................................................ 176
8.6.1. Transferencia del bit ................................................................................. 177
8.6.2. Transferencia de datos .............................................................................. 178
8.6.3. Arbitraje sin sincronización de reloj ........................................................ 180
8.6.4. Formato .................................................................................................... 182
8.7. Direccionamiento ................................................................................................... 183
8.7.1. Definición del primer byte ....................................................................... 183
8.8. Especificaciones eléctricas..................................................................................... 184
8.8.1. Tiempos .................................................................................................... 186
8.9. El bus I2C y los PIC16F87x .................................................................................. 187
8.10. Chuleta-resumen de los registros usados para el bus I2C ...................................... 191
8.11. Funcionamiento del modo maestro ........................................................................ 191
8.11.1. Condición de inicio (start)........................................................................ 192
8.11.2. Condición de repetición de inicio (start) .................................................. 192
8.11.3. Modo maestro en transmisión .................................................................. 192
8.11.4. Modo maestro en recepción ..................................................................... 193
8.11.5. Secuencia de reconocimiento ................................................................... 193
8.11.6. Condición de parada (stop)....................................................................... 194

Programar PIC es fácil: Comunicación mediante el módulo MSSP ......................... 195

Diseñar con PIC es fácil: Comunicación de datos digitales por radio frecuencia ......... 200

Capítulo 9. EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO


SERIE..................................................................................................................... 205

9.1. Comunicación serie asíncrona ............................................................................... 205


9.2. Generador de baudios............................................................................................. 207
9.3. Transmisor asíncrono ............................................................................................. 209
9.4. Receptor asíncrono................................................................................................. 212

Programar PIC es fácil: Comunicación serie con el USART ..................................... 215

Capítulo 10. CARACTERÍSTICAS Y APORTACIONES DE LA GAMA


MEJORADA....................................................................................................... 221

10.1. El espectacular desarrollo de los PIC18F .............................................................. 221


10.2. Aportaciones específicas........................................................................................ 223
10.3. Nomenclatura ......................................................................................................... 224
10.4. Diagrama de conexiones ........................................................................................ 224
10.5. Encapsulados.......................................................................................................... 227
CONTENIDO ix

Capítulo 11. ARQUITECTURA INTERNA ........................................................................ 229

11.1. Descripción general................................................................................................ 229


11.2. Diagrama de conexionado...................................................................................... 232
11.3. Configuración del oscilador ................................................................................... 233
10.3.1. Tipos de oscilador..................................................................................... 233
10.3.2. El oscilador de cristal ............................................................................... 234
10.3.3. Selección del oscilador............................................................................. 235
10.3.4. El registro OSCCON ................................................................................ 235
10.3.5. Otros registros de configuración .............................................................. 235

Capítulo 12. LA MEMORIA DE DATOS ........................................................................... 237

12.1. Organización del espacio de datos ......................................................................... 237


12.2. Modos de direccionamiento ................................................................................... 239
12.2.1. Modo de direccionamiento directo........................................................... 240
12.2.2. Modo de direccionamiento indirecto........................................................ 241
12.2.3. Acceso a Banco ........................................................................................ 241
12.3. El registro de estado (SR) ...................................................................................... 242
12.4. El registro de control del reset (RCON)................................................................. 243
12.5. La memoria EEPROM ........................................................................................... 244
12.5.1. Los registros EEADR y EEADRH........................................................... 244
12.5.2. Los registros EECON1 y EECON2.......................................................... 244
12.5.3. Lectura de la memoria EEPROM ............................................................ 246
12.5.4. Escritura de la memoria EEPROM .......................................................... 246

Capítulo 13. LA MEMORIA DE PROGRAMA ................................................................ 249

13.1. Organización de la memoria de programa ............................................................. 249


13.2. Operaciones de lectura y escritura de tabla............................................................ 250
13.3. Los registros de control.......................................................................................... 250
13.3.1. TABLAT ................................................................................................... 251
13.3.2. TBLPTR ................................................................................................... 251
13.3.3. EECON1 y EECON2 ............................................................................... 252
13.4. Operación de borrado de la memoria FLASH ....................................................... 253
13.5. Escritura de la memoria FLASH............................................................................ 253
13.6. Interfaz para memoria externa ............................................................................... 253
13.7. Modo de 16 bits...................................................................................................... 256

Capítulo 14. LAS INTERRUPCIONES .............................................................................. 259

14.1. Los registros de control de interrupciones ............................................................. 259


14.2. Registro RCON ...................................................................................................... 260
14.3. Registros INTCON ................................................................................................ 260
14.4. Registros PIR ......................................................................................................... 263
x CONTENIDO

14.5. Registros PIE.......................................................................................................... 264


14.6. Registros IPR ......................................................................................................... 264

Capítulo 15. EL REPERTORIO DE INSTRUCCIONES ................................................ 267

15.1. Juego de instrucciones estándar ............................................................................. 267


15.2. Operaciones orientadas al byte .............................................................................. 267
15.3. Operaciones orientadas al bit ................................................................................. 272
15.4. Operaciones con literales ....................................................................................... 273
15.4. Operaciones de control........................................................................................... 275

Capítulo 16. PERIFÉRICOS Y RECURSOS ESPECÍFICOS......................................... 281

16.1. Las puertas de entrada/salida ................................................................................. 281


16.1.1. La Puerta A............................................................................................... 281
16.1.2. La Puerta B............................................................................................... 282
16.1.3. La Puerta C............................................................................................... 283
16.1.4. La Puerta D............................................................................................... 284
16.1.5. La Puerta E ............................................................................................... 284
16.1.6. La Puerta F ............................................................................................... 285
16.1.7. La Puerta G............................................................................................... 286
16.1.8. La Puerta H............................................................................................... 286
16.1.9. La Puerta J ................................................................................................ 287
16.2. Temporizadores ...................................................................................................... 288
16.2.1. El TMR0................................................................................................... 288
16.2.2. El TMR1................................................................................................... 289
16.2.3. El TMR2 y el TMR4 ................................................................................ 292
16.2.4. El TMR3................................................................................................... 292
16.3. Módulos CCP: Captura, Comparación y Modulación de Anchura de Pulsos ....... 296
16.3.1. Modo captura............................................................................................ 297
16.3.2. Modo comparación................................................................................... 298
16.3.3. Modo modulación de anchura de pulsos (PWM)..................................... 299
16.4. El conversor A/D ................................................................................................... 300
16.5. Módulos de comunicación ..................................................................................... 303
16.6. Módulo comparador ............................................................................................... 304
16.7. Otras características especiales de la CPU............................................................. 306

Capítulo 17. INTRODUCCIÓN A LOS MICROCONTROLADORES PIC


DE 16 BITS ......................................................................................................... 307

17.1. Introducción ........................................................................................................... 307


17.2. Características generales de los PIC24 .................................................................. 307
17.3. Arquitectura de la CPU .......................................................................................... 309
17.4. Modelo de procesador para el programador........................................................... 310
CONTENIDO xi

17.3. La memoria de programa ....................................................................................... 313


17.4. La memoria de datos .............................................................................................. 315

Capítulo 18. LOS dsPIC........................................................................................................... 317

18.1. Microcontroladores con prestaciones DSP ............................................................ 317


18.2. Microcontroladores y DSC .................................................................................... 319
18.3. Clasificación de los DSC ....................................................................................... 319
18.3.1. Dispositivos dsPIC30F de propósito general ........................................... 320
18.3.2. Dispositivos dsPIC30F para el control de sensores.................................. 320
18.3.3. Dispositivos dsPIC30F para el control de motores y sistemas
de alimentación......................................................................................... 321
18.4. Encapsulados y diagramas de conexiones ............................................................. 321
18.5. Arquitectura de la CPU .......................................................................................... 325
18.6. Las memorias ......................................................................................................... 325
18.7. El camino de datos ................................................................................................. 327

Anexo A. LABORATORIO EXPERIMENTAL “PIC School”........................................ 329

A.1. Herramientas de desarrollo recomendadas............................................................. 329


A.2. Fases en el desarrollo de una aplicación con PIC .................................................. 332
A.3. Experimentos con la gama media .......................................................................... 334
A.3.1. Experimento 1: Entradas y salidas digitales............................................. 334
A.3.2. Experimento 2: La máquina “Su Turno”.................................................. 342
A.3.3. Experimento 3: La pantalla LCD ............................................................. 345
A.3.4. Experimento 4: El frecuencímetro ........................................................... 347
A.3.5. Experimento 5: El conversor ADC .......................................................... 352
A.4. Experimentos con la gama mejorada ..................................................................... 354
A.4.1. Experimento 6: El multiplicador de 8x8 bits............................................ 355
A.4.2. Experimento 7: Modulación Ancho de Banda (PWM) controlado
por potenciómetro..................................................................................... 356
A.3.3. Experimento 8: Visualización de dos canales analógicos a través
del USART ............................................................................................... 360
A.5. El compilador de C ................................................................................................ 365

Bibliografía y direcciones de interés relacionadas con los PIC......................................... 369

Índice ...................................................................................................................................... 371


Marcas registradas
El nombre y logo de Microchip, dsPIC, PIC, PICmicro, PICSTART, PICMASTER, PRO MATE y
MPLAB son marcas registradas por Microchip Technology Incorporated en EE.UU. y otros países.

DsPICDEM, dsPIC.net, ICSP: In-Circuit Serial Programming (Programación Serie En Circui-


to), ICEPIC, MPASM, MPLIB, MPLINK, MPSIM, PICC, PICkit, PICDEM, PICDEM.net, rfLAB y
rfPIC son marcas registradas por Microchip Technology Incorporated en EE.UU. y otros países.

SQTP (Serialized Quick Turn Programming) es una marca de servicio de Microchip Technology In-
corporated en EE.UU.

Determinados materiales e informaciones contenidos en esta obra han sido reproducidos con el
permiso de Microchip Technology Incorporated. No se pueden reproducir ni reeditar dichos mate-
riales sin el previo consentimiento escrito de Microchip Technology Incorporated.

Las restantes marcas, logos y productos mencionados en este libro están registrados por sus res-
pectivos propietarios.
Prólogo

El presente libro configura la segunda parte de una obra destinada al estudio y desarrollo de aplica-
ciones con los microcontroladores PIC de Microchip titulada “Microcontroladores PIC: Diseño
Práctico de Aplicaciones”. En su primera parte se presenta el PIC16F84, paradigma de la sencillez
y la eficacia, y los módulos BASIC STAMP de Parallax, programados en Ensamblador y PBASIC,
respectivamente.
El impresionante esfuerzo de Microchip dedicado a la actualización de sus productos ha su-
puesto una masiva comercialización de nuevos modelos que le han alzado al primer puesto del ran-
king mundial de microcontroladores de 8 bits desde 2002.
Esta nueva edición actualizada y ampliada recoge, además de los microcontroladores de la ga-
ma media PIC16F87X, a los PIC18F de la gama mejorada que están teniendo una gran aceptación,
y contiene una introducción a los modernos microcontroladores de 16 bits de las familias PIC24F
y PIC24H, así como a los Controladores Digitales de Señales (DSC) materializados en las familias
dsPIC.
En los capítulos iniciales destinados a los PIC16F87X se mantiene la estructura de la primera par-
te de la obra en la que cada capítulo se divide en tres partes. La primera es la “Teoría” en la que se
describe el bloque al que se dedicaba el capítulo. La segunda “Programar es fácil” presenta nume-
rosos ejercicios, programas y proyectos, y la tercera, “Diseñar con PIC es fácil” se analizan perifé-
ricos, tarjetas comerciales y nuevos diseños comerciales relacionados con los recursos estudiados.
Este libro consta de 18 capítulos y un anexo, de los cuales los 9 primeros están dedicados a los
PIC16F87X. Desde el Capítulo 10 al 16 se hace un estudio en profundidad de la arquitectura, el
funcionamiento y la programación de los PIC18F. El Capítulo 17 ofrece una introducción sobre los
microcontroladores de 16 bits comercializados en las familias PIC24F y PIC24H. Finalmente el
Capítulo 18 ofrece las principales características y aplicaciones de los Controladores Digitales de
Señales, que reunidos en las familias dsPIC, combinan lo mejor de los microcontroladores de 16
bits y de los DSP.
El Anexo A es un tutorial experimental que recoge una colección de proyectos de dificultad pro-
gresiva y completamente resueltos a nivel hardware y software implementados en base al fantásti-
co sistema de desarrollo PIC School diseñado y comercializado por Ingeniería de Microsistemas
Programados S. L. (www.microcontroladores.com). Los experimentos y programas de este anexo
hacen un recorrido práctico sobre todos los recursos y periféricos de los PIC16F87X y del
PIC18F4520, que culmina con la utilización del compilador de C y la resolución de programas.
xiii
xiv PRÓLOGO

Agradecemos muy sinceramente el soporte técnico recibido por Microchip desde su sede central
y desde su representación en Madrid. Todos los nombres, informaciones y productos de Microchip
a los que se hace mención en este libro están protegidos por marcas registradas y patentes en todo
el mundo, no estando permitido reproducirlos sin el permiso escrito del fabricante. También reco-
nocemos la excelente colaboración que nos ha prestado Ingeniería de Microsistemas Programados
S. L. que ha puesto a nuestra disposición todas las herramientas que hemos necesitado para desa-
rrollar los temas prácticos de esta obra. Igualmente quedamos muy agradecidos a los Sres. Benito
Moreno y Pepe Bustamante de Sagitron y a nuestros amigos Goyo y Jorge de Bilbao Electrónica.
1 La familia de
microcontroladores PIC

1.1. IMPORTANCIA DE LOS MICROCONTROLADORES PIC

Microchip, fabricante de los microcontroladores PIC, se mantiene desde el año 2002 como líder
mundial de ventas de microcontroladores de 8 bits. Como se aprecia en el gráfico de la Figura 1.1,
en el año 2005 el mencionado fabricante facturó un total de 847 millones de dólares, de los cuales
675 procedieron de las ventas de microcontroladores (MCU).
Las ventas de los productos de Microchip son absorbidos en un 43% por Asia y Japón, mientras
que Europa soporta el 28% y América el 29%.
En cuanto a los segmentos de mercado a los que se destinan los microcontroladores PIC desta-
ca el área genérica de la Electrónica de Consumo con el 35%, seguida por la industria de automo-
ción con el 18%. (Figura 1.2.)

900

800

700
Millones Dólares

600

500

400
675
300
517 557
469 443
200 393
272 306
100 167 220
122
0
AÑO 95 AÑO 96 AÑO 97 AÑO 98 AÑO 99 AÑO 00 AÑO 01 AÑO 02 AÑO 03 AÑO 04 AÑO 05

MCU Memorias Analógicos

Figura 1.1. Gráfico que muestra el aumento de las ventas anuales de Microchip en las que destaca
el porcentaje debido a los microcontroladores (MCU).

1
2 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

OFIMATICA
17% CONSUMO
COMUNICACIONES 35%
13%

INDUSTRIA
AUTOMOCION
17%
18%

Figura 1.2. Distribución de las ventas de microcontroladores PIC en los principales segmentos del
mercado.

Microchip tiene una gran preocupación por el cumplimiento de las normas ecológicas y ofrece
una selección de sus productos, cada vez más numerosa, libre de plomo. Además, el éxito y acep-
tación de los microcontroladores de este fabricante viene avalado por la oferta creciente de los mo-
delos que comercializa y que se aprecia en el gráfico de la Figura 1.3.
La gran diversidad de modelos de microcontroladores permite al diseñador encontrar el que con-
tenga todos los recursos y capacidades de memoria que precisa para su aplicación. (Figura 1.4.)
La tecnología empleada en la fabricación de los dispositivos PIC ha pasado de las 0,7 micras
en 1998 a las 0,22 micras en 2006. Esto ha supuesto una reducción en el voltaje de alimentación,
que ha pasado de estar comprendida entre 2 y 5,5 V, para funcionar con 5V, a un margen entre 2 y
3,6 V, siendo la nominal de 3,3 V aunque las E/S siguen trabajando con 5V. (Figura 1.5.)
Una de las grandes ventajas de los microcontroladores de Microchip es su “migrabilidad”, que
significa la posibilidad de cambiar de modelo de MCU y pasar a otro más potente con más capaci-
dad de memoria y periféricos, manteniendo la distribución de las patitas en el encapsulado o “pin-
out”, la compatibilidad del software y del repertorio de instrucciones, la compatibilidad de los peri-
féricos y la de las herramientas de desarrollo.

300

250

200

150
262
214
100 187
142 159
129
50 111
55 77
25
0
AÑO 95 AÑO 96 AÑO 97 AÑO 98 AÑO 99 AÑO 00 AÑO 01 AÑO 02 AÑO 03 AÑO 04

Figura 1.3. El gráfico recoge el espectacular crecimiento del número de diferentes modelos de
microcontroladores PIC de 8 bits.
LA FAMILIA DE MICROCONTROLADORES PIC 3

E/S de Comunicaciones
Voltaje Alto IR RF Telecom
DTMF
Codec

Drivers de
Potenciómetro Voltaje de
Potencia
digital Referencia
PICmicro®
Motores
Filtros Relés
Sensores Conversor A/D
Amplificadores MICROCONTROLADORES

O Conversor D/A

Control de Potencia
- Reguladores
DSC (dsPIC)
LCD
- Supevisión
- Detectores de voltaje
LED
- Bombas de carga
- Cargadores de batería
- Control de alimentación
Controladores
Refrigeración
Comparadores

Buses de Funciones
Memoria Interfaz Periferia Digital
KEELOQ® Comunicación DSP de
NV Serie - RS232/485 - Captura
Dispositivos de - CAN Bus Encriptación
- RS422/423 - PWM
seguridad - I2CTM - USB - Temporizadores
- SPITM - LIN Bus - Reloj en tiempo Procesamiento
- USART - Serial I/O real de voz

Figura 1.4. La variedad de dispositivos PIC con sus distintas configuraciones permite encontrar el
modelo que cumpla con las especificaciones de cualquier proyecto.

1.2. CLASIFICACIÓN DE LOS MICROCONTROLADORES PIC

Estos microcontroladores o MCU se caracterizan por su arquitectura Harvard con memorias de pro-
grama y de datos independientes, lo que permite la accesibilidad simultánea y la diversidad en la
longitud de las posiciones y el tamaño de ambas memorias. (Figura 1.6.)
Genéricamente los microcontroladores se clasifican según el tamaño de los datos que maneja el
repertorio de instrucciones y existen 4 grandes grupos: de 4, de 8, de 16 y de 32 bits. Microchip só-
lo fabrica microcontroladores de 8 y de 16 bits y como se ha indicado es el líder mundial en ventas
del primer grupo.

1.3. MICROCONTROLADORES PIC DE 8 BITS

Se distinguen porque la longitud de los datos nativos que manejan las instrucciones es de 8 bits, que
se corresponde con el tamaño del bus de datos y el de los registros de la CPU.
4 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

0.22m
FLASH
200K

0.35m
FLASH
185K

0.4m
FLASH
160K

0.5m
FLASH/ROM
150K

0.7m
FLASH/EPROM/ROM
120K

2 – 5.5V NÚCLEO: 2-3,6V NÚCLEO: 2-3,6V


(NÚCLEO y E/S) E/S: 5V E/S: 5V

1998 2001 2003 2006

Figura 1.5. Evolución de la tecnología de fabricación desarrollada por Microchip junto a la de la


tensión correspondiente de alimentación.

BUS DE BUS
INSTRUCCIONES DE DATOS

MEMORIA MEMORIA
DE CPU DE
PROGRAMA DATOS

DIRECCIÓN DIRECCIÓN

Figura 1.6. La arquitectura Harvard dispone de dos memorias independientes permitiendo que la
longitud de las posiciones y la capacidad de cada una sea la más adecuada.

Los microcontroladores PIC de 8 bits se clasifican en tres grandes gamas: Base, Media y Mejo-
rada, con un total de unos 300 modelos diferentes que contienen distintas capacidades de memoria,
periféricos y distintos tipos de encapsulados. (Figura 1.7.)
LA FAMILIA DE MICROCONTROLADORES PIC 5

GAMA MEJORADA
77 instrucciones de 16 bits
de longitud
PIC18FXXX

GAMA MEDIA
PIC12F6XX
35 instrucciones de 14 bits
PIC16FXXX
de longitud

PIC10F2XX GAMA BASE


PIC12F5XX 33 instrucciones de 12 bits
PIC16F5XX de longitud

Figura 1.7. Los microcontroladores PIC de 8 bits se clasifican en 3 grandes gamas: Base, Media y
Mejorada.

1.3.1. La gama Base

Los modelos de esta gama se caracterizan porque responden a un juego de 33 instrucciones máqui-
na de 12 bits de longitud cada una y disponen de una Pila con sólo dos niveles de profundidad. Sus
capacidades de memoria al igual que el número de recursos internos son reducidos, lo que limita su
campo de aplicación. Está compuesta por 14 modelos, de los cuales 6 están encapsulados sólo con
6 patitas, por lo que se les suele apodar “enanos”. (Figura 1.8.)

MEMORIA DE
PROGRAMA

PIC16F57 PIC16F59
2K
PIC12F510 PIC16F506

1K
PIC12F509 PIC16F505
PIC10F220 PIC10F222
512
PIC12F508 PIC16F54
PIC10F202 PIC10F206

256 PIC10F200 PIC10F204


Nº PATITAS

6 8 14 18 28 40

Figura 1.8. Posicionamiento de los 14 dispositivos PIC de la gama Base teniendo en cuenta su
capacidad de memoria de programa y las patitas con las que están encapsulados.
6 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Los PIC enanos de 6 patitas tienen un gran éxito comercial para resolver aplicaciones simples
por su reducido volumen y precio. En ellos la alimentación se aplica a 2 de las patitas, quedan-
do las 4 restantes para las E/S y las funciones de sus periféricos, entre los que se encuentra un
temporizador o Timer, un Comparador analógico, un CAD de 8 bits, Perro Guardián, etc. Véase
Figura 1.9.

MEM. PROG.:
Fmáx 8 MHz 256/512 w F200 F202 F204 F206 F220 F222
(RC interno) RAM An. Comp 6 patitas
16/24 +Vref 4 E/S *
ICD 2 * 256w 512w 256w 512w 256w 512w
8 bit ADC RAM RAM RAM RAM RAM RAM
ICE 2000 Timer 0 (8)
16 24 16 24 16 24
Otros 1x
2 x ADC
Int RC +
WDT
- Comparador
8 bits
Osciladores lógico

ICSP POR

* : 1Q 05 * : 25mA (Absorben/Suministran)

Figura 1.9. Los PIC enanos de 6 patitas de la gama Base ofrecen una capacidad de memoria
y un conjunto de recursos internos suficientes para resolver multitud de aplicaciones
sencillas.

Para favorecer la migrabilidad en el hardware y permitir la transición a modelos PIC más po-
tentes y con más patitas, se mantiene la distribución de las funciones asignadas a las patitas, de ma-
nera que los cambios de conexionado y de trazado de pistas sean mínimos. En la Figura 1.11 se
muestra la distribución de las funciones de las patitas de los encapsulados con 8, 14 y 20 patitas con
la finalidad de facilitar la migrabilidad.
El aumento del número de patitas significa el incremento en las capacidades de memoria y en el
número de los periféricos y recursos integrados en el dispositivo.

1.3.2. La gama Media

Los microcontroladores que componen esta gama responden a un repertorio de 35 instrucciones con
un formato de 14 bits de longitud cada una, teniendo la Pila 8 niveles de profundidad y disponien-
do de un vector de interrupción. Es una gama numerosa que alcanza en la actualidad 71 modelos di-
ferentes, que comienza con los que se hallan encapsulados con 8 patitas y llegan hasta los que tie-
nen 68 patitas. En la Figura 1.12 se presentan los aspectos más relevantes de algunos PIC de la gama
Media de 8 patitas y otros con más.
En la Figura 1.13 se presenta junto a la nomenclatura o designación de los PIC de la gama Me-
dia las principales características que les distinguen.
Analógico Digital ICD
MEM. FREC. BOR/
RAM LÍNEAS OSCI. TM nº de VOLTAJE
MODELO PROG. ENCAPSULADOS MAX PBOR/
Bytes E/S ADC Timers INT. ICSP puntos (V)
Words MHz PLVD
CANALES COMP. /WDT parada
PIC10FXXX
1-8BIT
PIC10F200 384 16 4 6OT,8P - - 4 4 SI - 1** 2.0-5.5
1-WDT
1-8BIT
PIC10F202 768 24 4 6OT,8P - - 4 4 SI - 1** 2.0-5.5
1-WDT
1-8BIT
PIC10F204 384 16 4 6OT,8P - 1 4 4 SI - 1** 2.0-5.5
1-WDT
1-8BIT
PIC10F206 768 24 4 6OT,8P - 1 4 4 SI - 1** 2.0-5.5
1-WDT
PIC12C/FXXX
1-8BIT
PIC12C508A 768 25 6 8P,8SM,8JW,8SN,8MF - - 4 4 SI - - 2.5-5.5
1-WDT
1-8BIT
PIC12C509A 1536 41 6 8P,8SM,8JW,8SN,8MF - - 4 4 SI - - 2.5-5.5
1-WDT
1-8BIT
PIC12F508 768 25 6 8P,8SL,8SM - - 4 4 SI - 1** 2.5-5.5
1-WDT
1-8BIT
PIC12F509 1536 41 6 8P,8SL,8SM - - 4 4 SI - 1** 2.5-5.5
1-WDT
PIC16C/F5X

LA FAMILIA DE MICROCONTROLADORES PIC


1-8BIT
PIC16C55A 768 24 20 28P,28JW,28SP,28SO,28SS - - 40 - - - - 2.5-5.5
1-WDT
1-8BIT
PIC16C56A 1536 12 12 18P,18JW,18SO,20SS - - 40 - - - - 2.5-5.5
1-WDT
1-8BIT
PIC16CR56A 1536 25 12 18P,18SO,20SS - - 20 - - - - 2.5-5.5
1-WDT
1-8BIT
PIC16C58B 3072 73 12 18P,18JW,18SO,20SS - - 40 - - - - 2.5-5.5
1-WDT
1-8BIT
PIC16CR58B 3072 73 12 18P,18SO,20SS - - 20 - - - - 2.5-5.5
1-WDT
1-8BIT
PIC16HV540 768 25 12 18P,18JW,18SO,20SS - - 40 - - BOR - 3.5-15
1-WDT
1-8BIT
PIC16F505 1536 72 12 14P,14JW,14SL - - 20 4 SI - 1** 2.0-5.5
1-WDT
1-8BIT
PIC16F54 768 25 12 18P,18SO,20SS - - 20 - SI - - 2.0-5.5
1-WDT
1-8BIT
PIC16F57 3072 72 20 28P,28SO,28SS,28SP - - 20 - SI - - 2.0-5.5
1-WDT
1-8BIT
PIC16F59 3072 134 32 40P,44PT - - 20 - SI - - 2.0-5.5
1-WDT
** Requiere un módulo adaptador específico ICD.

Figura 1.10. Principales características de los PIC de la gama Base. Recientemente se comercializan 4 nuevos modelos: PIC10F220,
PIC10F222, PIC12F510 y PIC16F506, cuyas características pueden consultarse en el sitio en Internet del fabricante.

7
8 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

8-Patitas

20-Patitas
14-Patitas
VDD VSS
RA5 RA0
RA4 RA1
RA3 RA2
RC5 RC0
RC4 RC1
RC3 RC2
RC6 RB4
RC7 RB5
RB7 RB6

Figura 1.11. Para favorecer la migrabilidad se mantiene la asignación de las funciones de las patitas en
los modelos de 8, 14 y 20 patitas.

MEM. PROG: Captura


4 o 8KW Compara
PWM
FLASH: Comparador RAM:
1KW Analógico 256,336,352
+Vref 2.Compar.
RAM: EEPROM: Analog.
64 256 + Vref
ADC de 10
EEPROM: bits
128
Timer0(8)
Timer1(16) 10bitADC
Timer0(8)
Regulador Timer2(8)
Timer1(16)
interno SPI/
Int RC + Esclavo 12c
Int RC +
Osciladores Osciladores 1xUSART
WDT

ICSP POR BOR WDT

ICSP POR BOR

F629 F675 F615


F913 F914 F916 F917 F946
8 patitas
4kw 8kw
6 E/S*
RAM:256 RAM:352 RAM 336
FLASH: 1kw
EEPROM:256
RAM 64
28pat 40pat. 28pat. 40pat. 64pat.
E2P 128 E2P 0
25E/S 35E/S 25E/S 35E/S 25E/S
- ADC, 4 can
LCD LCD LCD LCD LCD
1Comparador Analógico 16/60 24/96 16/60 24/96 24/96
ADC 4 can Reg Int 5x 8x 5x
8 x ADC
ADC ADC ADC
1xCCP 2xCCP 1xCCP 2xCCP

Figura 1.12. Características relevantes de algunos PIC de la gama Media con 8 patitas junto a otros
de más patitas.
Analógico Digital ICD
MEM. MEM FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. INT. PBOR/ puntos ECCP nW
Bytes E/S COMP.
Words Bytes CANALES /WDT I/O MHz PLVD
parada
PIC12FXXX
1-8BIT
PIC12F629 1792 128 64 6 8P,8SN,8MF - 1 1-16BIT - 20 4 BOR 1** - -
1-WDT
1-8BIT
BOR/
PIC12F635 1792 128 64 6 8P,8SN,8MF - 1 1-16BIT - 20 8 1** - SI
PLVD
1-WDT
1-8BIT
PIC12F675 1792 128 64 6 8P,8SN,8MF 4x10BIT 1 1-16BIT - 20 4 BOR 1** - -
1-WDT
1-16BIT
PIC12F683 3584 256 128 6 8P,8SN,8MF 4x10BIT 1 2-8BIT - 20 8 BOR 1** 1/0 SI
1-WDT
PIC16CXXX
1-8BIT
PIC14000 7168 - 192 20 28SP,28SO,28SS,28JW 8SLAC 2 1-16BIT I2CTM/SMB 20 4 - - - -
1-WDT

LA FAMILIA DE MICROCONTROLADORES PIC


1-8BIT
PIC16C432 3584 - 128 12 20SS,20P,20JW - 2 LIN 20 - BOR - - -
1-WDT
1-8BIT
PIC16C433 3584 - 128 6 18SO,18P,18JW 4x8BUT - LIN 10 4 - - - -
1-WDT
1-8BIT
PIC16C554 896 - 80 13 18P,18SO,18JW,20SS - - - 20 - - - - -
1-WDT
1-8BIT
PIC16C558 3584 - 128 13 18P,18SO,18JW,20SS - - - 20 - - - - -
1-WDT
1-16BIT
28SP,28SO,28SS,
PIC16C62B 3584 - 128 22 - - 2-8BIT I2C/SPITM 20 - BOR - 1/0 -
28JW,28ML
1-WDT
1-8BIT
PIC16C620A 896 - 96 13 18P,18SO,18JW,20SS - 2 - 40 - BOR - - -
1-WDT
1-8BIT
PIC16CR620A 896 - 96 13 18P,18SO,20SS - 2 - 20 - BOR - - -
1-WDT
1-8BIT
PIC16C621A 1792 - 96 13 18P,18SO,18JW,20SS - 2 - 40 - BOR - - -
1-WDT
1-8BIT
PIC16C622A 3584 - 128 13 18P,18SO,18JW,20SS - 2 - 40 - BOR - - -
1-WDT

9
Figura 1.13. Características de algunos modelos de la gama Media (continúa).
ICD

10
MEM. MEM Analógico Digital FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. INT. PBOR/ puntos ECCP nW
Bytes E/S COMP.
Words Bytes CANALES /WDT I/O MHz PLVD

MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES


parada
PIC16CXXX
1-16BIT
28SP,28SO,28SS, USART,
PIC16C63A 7168 - 192 22 - - 2-8BIT 20 - BOR - 2/0 -
28JW,28ML I2C/SPI
1-WDT
1-16BIT
USART,
PIC16CR63 7168 - 192 22 28SP,28SO,28SS, - - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT
1-16BIT
40P,40JW,40L, USART,
PIC16C65B 7168 - 192 33 - - 2-8BIT 20 - BOR - 2/0 -
44PQ,44PT I2C/SPI
1-WDT
1-16BIT
USART,
PIC16CR65 7168 - 192 33 40P,40L,44PQ,44PT - - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT
1-16BIT
PBOR
PIC16C717 3584 - 256 16 18P,18SO,18JW,20SS 6x10BIT - 2-8BIT MI2C/SPI 20 4 - 0/1 -
/PLVD
1-WDT
1-16BIT
28SP,28SO,28JW,
PIC16C72A 3584 - 128 22 5x8BIT - 2-8BIT I2C/SPI 20 - BOR - 1/0 -
28SS,28ML
1-WDT
1-16BIT
PIC16CR72 3584 - 128 22 28SP,28SO,28SS 5x8BIT - 2-8BIT I2C/SPI 20 - BOR - 1/0 -
1-WDT
1-16BIT
28SP,28SO,28JW, USART,
PIC16C73B 7168 - 192 22 - - 2-8BIT 20 - BOR - 2/0 -
28SS,28ML I2C/SPI
1-WDT
1-16BIT
40P,40JW,44L, USART,
PIC16C74B 7168 - 192 22 8x8BIT - 2-8BIT 20 - BOR - 2/0 -
44PQ,44PT I2C/SPI
1-WDT
1-16BIT USART,
PIC16C745 14336 - 256 22 28SP,28SO,28JW 5x8BIT - 2-8BIT Baja vel. 24 - BOR - 2/0 -
1-WDT USB
1-16BIT USART,
PIC16C765 14336 - 256 33 40,40JW,44L,44PT 8x8BIT - 2-8BIT Baja vel. 24 - BOR - 2/0 -
1-WDT USB
1-16BIT
PBOR
PIC16C770 3584 - 256 16 20P,20SO,20JW,20SS 6x12BIT - 2-8BIT MI2C/SPI 20 4 - 0/1 -
/PLVD
1-WDT

Figura 1.13. Características de algunos modelos de la gama Media (continúa).


Analógico Digital ICD
MEM. MEM FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. INT. PBOR/ puntos ECCP nW
Bytes E/S COMP.
Words Bytes CANALES /WDT I/O MHz PLVD
parada
PIC16CXXX
1-16BIT
PBOR
PIC16C771 7168 - 256 16 20P,20SO,20JW,20SS 6x12BIT - 2-8BIT MI2C/SPI 20 4 - 0/1 -
/PLVD
1-WDT
1-16BIT
AUSART PBOR
PIC16C773 7168 - 256 22 28SP,28SO,28SS,28JW 6x12BIT - 2-8BIT 20 4 - 2/0 -
MI2C/SPI /PLVD
1-WDT
1-16BIT
40P,40JW44L,44PQ, AUSART PBOR
PIC16C774 7168 - 256 33 10x12BIT - 2-8BIT 20 4 - 2/0 -
44PT MI2C/SPI /PLVD
1-WDT
1-16BIT
PIC16C781 1792 - 128 16 20P,20SO,20SS,20JW 8x8BIT 2 2-8BIT - 20 4 PBOR - - -
1-WDT
1-16BIT
PBOR
PIC16C782 3584 - 128 16 20P,20SO,20SS,20JW 8x8BIT 2 2-8BIT - 20 4 - - -
/PLVD
1-WDT
1-16BIT
PIC16C925 7168 - 176 52 68CL,68L,64PT 5X10BIT - 2-8BIT I2C/SPI 20 - BOR - 1/0 -

LA FAMILIA DE MICROCONTROLADORES PIC


1-WDT
1-16BIT
PIC16C926 14336 - 336 52 68CL,68L,64PT 5X10BIT - 2-8BIT I2C/SPI 20 - BOR - 1/0 -
1-WDT
PIC16FXXX
1-16BIT
PIC16F627A 1792 128 224 16 18P,18SO,20SS,28ML - 2 2-8BIT AUSART 20 4 BOR 1** 1/0 SI
1-WDT
1-16BIT
PIC16F628A 3584 128 224 16 18P,18SO,20SS,28ML - 2 2-8BIT AUSART 20 4 BOR 1** 1/0 SI
1-WDT
1-16BIT
PIC16F648A 7168 256 256 16 18P,18SO,20SS,28ML - 2 2-8BIT AUSART 20 4 BOR 1** 1/0 SI
1-WDT
1-8BIT
PIC16F630 1792 128 64 12 14P,14SL,14ST - 1 1-16BIT - 20 4 BOR 1** - -
1-WDT
1-8BIT
BOR
PIC16F636 3584 256 128 12 14P,14SL,14ST - 2 1-16BIT - 20 8 1** - SI
/PLVD
1-WDT

11
Figura 1.13. Características de algunos modelos de la gama Media (continúa).
ICD

12
MEM. MEM Analógico Digital FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. INT. PBOR/ puntos ECCP nW
Bytes E/S COMP.
Words Bytes CANALES /WDT I/O MHz PLVD
parada

MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES


PIC16CXXX
1-8BIT
PIC16F676 1792 128 64 12 14P,14SL,14ST 8x10BIT 1 1-16BIT - 20 4 BOR 1** - -
1-WDT
1-16BIT
PIC16F684 3584 256 128 12 14P,14SL,14ST 8x10BIT 2 2-8BIT - 20 8 BOR 1** 0/1 SI
1-WDT
1-8BIT
PIC16F688 7168 256 256 12 14P,14SL,14ST 8x10BIT 2 1-16BIT EUSART 20 8 BOR 1** - SI
1-WDT
1-16BIT
PIC6F716 3584 - 128 13 18P,18SO,20SS 4x8BIT - 2-8BIT - 20 - BOR 1** 0/1 -
1-WDT
1-16BIT
PIC16F72 3584 - 128 22 28SP,28SO,28SS,28ML 5x8BIT - 2-8BIT I2C/SPI 20 - BOR - 1/0 -
1-WDT
1-16BIT
USART
PIC16F73 7168 - 192 22 28SP,28SO,28SS,28ML 5x8BIT - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT
1-16BIT
AUSART, PBOR
PIC16F737 7168 - 368 25 28SP,28SO,28SS,28ML 11x10BIT 2 2-8BIT 20 8 1 3/0 SI
MI2C/SPI /PLVD
1-WDT
1-16BIT
USART,
PIC16F74 7168 - 192 33 40P,44ML,44L,44PT 8x8BIT - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT
1-16BIT
AUSART, PBOR
PIC16F747 7168 - 368 36 40P,44PT,44ML 14x10BIT 2 2-8BIT 20 8 1 3/0 SI
MI2C/SPI /PLVD
1-WDT
1-16BIT
USART,
PIC16F76 14336 - 368 22 28SP,28SO,28SS,28ML 5x8BIT - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT
1-16BIT
AUSART, PBOR
PIC16F767 14336 - 368 25 28SP,28SO,28SS,28ML 11x10BIT 2 2-8BIT 20 8 1 3/0 SI
MI2C/SPI /PLVD
1-WDT
1-16BIT
USART,
PIC16F77 14336 - 368 33 40P,44ML,44L,44PT 8x8BIT - 2-8BIT 20 - BOR - 2/0 -
I2C/SPI
1-WDT

Figura 1.13. Características de algunos modelos de la gama Media (continúa).


Analógico Digital ICD
MEM. MEM FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. PBOR/ nW
Bytes E/S COMP. INT. puntos ECCP
Words Bytes CANALES /WDT I/O MHz PLVD
parada
PIC16CXXX
1-16BIT
AUSART, PBOR
PIC16F777 14336 - 368 36 40P,44PT,44ML 14x10BIT 2 2-8BIT 20 8 1 3/0 SI
MI2C/SPI /PLVD
1-WDT
1-16BIT
PIC16F85 3584 256 128 18 20SP,20SO,20SS 12x10BIT 2 2-8BIT - 20 8 BOR 1** 1/0 SI
1-WDT
1-16BIT
PIC16F818 1792 128 128 16 18P,18SO,20SS,28ML 5x10BIT - 2-8BIT I2C/SPI 20 8 BOR 1 1/0 SI
1-WDT
1-16BIT
PIC16F819 3584 256 256 16 18P,18SO,20SS,28ML 5x10BIT - 2-8BIT I2C/SPI 20 8 BOR 1 1/0 SI
1-WDT
1-8BIT
PIC16F84A 1792 64 68 13 18P,18SO,20SS - - - 20 - - - - -
1-WDT
1-16BIT
AUSART
PIC16F87 7168 256 368 16 18P,18SO,20SS,28ML - 2 2-8BIT 20 8 BOR 1 1/0 SI

LA FAMILIA DE MICROCONTROLADORES PIC


I2C/SPI
1-WDT
1-16BIT
PIC16F870 3584 64 128 22 28SP,28SO,28SS 5x10BIT - 2-8BIT AUSART 20 - BOR 1 1/0 SI
1-WDT
1-16BIT
PIC16F871 3584 64 128 33 40P,44L,44PT 8x10BIT - 2-8BIT AUSART 20 - BOR 1 1/0 SI
1-WDT
1-16BIT
PIC16F872 3584 64 128 22 28SP,28SO,28SS 5x10BIT - 2-8BIT MI2C/SPI 20 - BOR 1 1/0 -
1-WDT
1-16BIT
AUSART,
PIC16F873A 7168 128 192 22 28P,28SO,28SS,28ML 5X10BIT 2 2-8BIT 20 - BOR 1 2/0 -
MI2C/SPI
1-WDT
1-16BIT
AUSART,
PIC16F874A 7168 128 192 33 40P,44ML,44L,44PT 8X10BIT 2 2-8BIT 20 - BOR 1 2/0 -
MI2C/SPI
1-WDT
1-16BIT
AUSART,
PIC16F876A 14336 256 368 22 28P,28SO,28SS,28ML 5X10BIT 2 2-8BIT 20 - BOR 1 2/0 -
MI2C/SPI
1-WDT

13
Figura 1.13. Características de algunos modelos de la gama Media (continúa).
14
MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Analógico Digital ICD
MEM. MEM FREC. BOR/
RAM LINEAS OSC. nº de CCP/
MODELO PROG. EEPROM ENCAPSULADOS ADC Timers COM. MÁX. INT. PBOR/ puntos ECCP nW
Bytes E/S COMP.
Words Bytes CANALES /WDT I/O MHz PLVD
parada
PIC16CXXX
1-16BIT
AUSART,
PIC16F877A 14336 256 368 33 40P,44ML,44L,44PT 8X10BIT 2 2-8BIT 20 - BOR 1 2/0 -
MI2C/SPI
1-WDT
1-16BIT
AUSART,
PIC16F88 7168 256 368 16 18P,18SO,20SS,28ML 7x10BIT 2 2-8BIT 20 8 BOR 1 1/0 -
I2C/SPI
1-WDT
2-8BIT AUSART, BOR
PIC16F913 7168 256 256 25 28P,28SO,28SS,28ML 4x10BIT 2 20 8 1 1/0 SI
1-16BIT I2C/SPI /PLVD
2-8BIT AUSART, BOR
PIC16F914 7168 256 256 36 40P,44TQFP,44QFN 8x10BIT 2 20 8 1 2/0 SI
1-16BIT I2C/SPI /PLVD
2-8BIT AUSART, BOR
PIC16F916 14336 256 352 25 28P,28SQ,28SS,28QFN 4x10BIT 2 20 8 1 1/0 SI
1-16BIT I2C/SPI /PLVD
2-8BIT AUSART, BOR
PIC16F917 14336 256 352 36 40P,44TQFP,44QFN 8x10BIT 2 20 8 1 2/0 -
1-16BIT I2C/SPI /PLVD
** Requiere un módulo adaptador específico ICD.

Figura 1.13. Características de algunos modelos de la gama Media. Recientemente se comercializan nuevos modelos: PIC16F639,
PIC16F685, PIC16F687 PIC16F689, PIC16F690, PIC16F785 y PIC16F946, cuyas características pueden consultarse en la
web del fabricante.
LA FAMILIA DE MICROCONTROLADORES PIC 15

1.3.3. La gama Mejorada

Dispone de un repertorio de 77 instrucciones de 16 bits de longitud cada una, una Pila con 31 nive-
les de profundidad y 2 vectores de interrupción. Los modelos PIC que conforman esta gama res-
ponden a la nomenclatura PIC18Xxxx, dedicándose la Figura 1.14 al significado de cada uno de los
campos.

TECNOLOGÍA DE MEMORIA
ESPECIFICACIÓN CPU C-OTP
R-ROM
F-FLASH

PIC18VTABCD
ESPECIFICACIÓN VOLTAJE
N/A-Normal
DÍGITOS ARBITRARIOS
L-Baja potencia

A-Encapsulado B-Tamaño de memoria de programa


0: pines o menos 5: 0: ROMless 5: 32K Bytes
1: >8-20 pines 6: >44-68 pines 1: 2K Bytes 6: 64K Bytes
2:>20-28 pines 7: 2: 4K Bytes 7: 128K Bytes
3: 8:>68-100 3: 8K Bytes 8: 256K Bytes
4: >28-44 pines 9: >100 o más 4: 16K Bytes 9: >512K Bytes

Figura 1.14. Significado de cada uno de los campos que componen la nomenclatura de los PIC18Xxxx
de la gama Mejorada.

El gran interés que muestra el fabricante por esta gama de modelos tan potentes es palpable al
ser la que más número de dispositivos diferentes posee. La capacidad de la memoria de programa
puede alcanzar los 128 KB, la de datos 3963 bytes y la EEPROM hasta 1 KB. Dispone de periféri-
cos muy especializados entre los que destaca un Conversor AD de 10 bits, hasta 5 temporizadores,
interfaces para comunicación con bus I2C, SPI, USART, CAN 2.0B, etc. Entre los recursos signifi-
cativos existe un multiplicador rápido hardware que permite desarrollar esta operación en un ciclo
de instrucción. La Figura 1.15 muestra las características específicas de un conjunto de dispositivos
de la gama Mejorada de 64 y de 80 patitas.
Finalmente, en la Figura 1.16 se ofrece la tabla de algunos modelos que componen esta gama
con sus principales características.
16 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

FLASH: 2x Captura
48 a 2xCompara
128KW ción
RAM: 2xPWM
3936 B 3xEPWM 6527 6622 6627 6722 8529 8622 8627 8722
EEPROM: 2Comparad. 64 patitas 80 patitas
1024 B An. + Vref
54 E/S 70 E/S
Multiplicador ADC 10 bits 48k 64k 96k 128k 48k 64k 96k 128k
HW RAM:3936
2xSPI/
Timer0(8) I2C Maestro EEPROM: 1024
Timer1(16) ADC, 12 Canales ADC, 16 Canales
Timer2(8) 2xEUSART __ Acceso a Memoria
Timer3(16) //Puerta Externa
Timer4(8) esclavo

Osciladores WDT

ICSP POR BOR PLVD

Figura 1.15. Recursos y características de algunos dispositivos de la gama Mejorada de 64 y 80


patitas.

1.4. MICROCONTROLADORES PIC DE 16 BITS

Los requerimientos técnicos que exigen las modernas aplicaciones precisan microcontroladores
más potentes que los de 8 bits y, para poderlas atender, Microchip ha diseñado nuevos dispositi-
vos que manejan en modo nativo datos de 16 bits y que se integran en arquitecturas de mayor
complejidad.
Hay dos grandes gamas de microcontroladores de 16 bits:

1.a Gama MCU de 16 bits, formada por las familias de dispositivos PIC24F y PIC24H.
2.a Gama DSC de 16 bits, formada por las familias de dispositivos dsPIC30F y dsPIC33F.

1.4.1. Gama de microcontroladores MCU de 16 BITS

La primera familia de esta gama comercializada por Microchip es la de los modelos con la nomen-
clatura genérica PIC24F que se fabrican con una tecnología de 0,25 micras, alcanza un rendimien-
to de 16 MIPS a 32 MHz y está orientada a resolver aquellos diseños que no podían ser cubiertos
con los PIC18Xxxx.
Los PIC24F poseen una arquitectura Harvard modificada con un bus de datos de 16 bits y con
instrucciones de una longitud de 24 bits. Pueden manejar una memoria de programa lineal de hasta
8 MB y una de datos de hasta 64 KB. (Figura 1.17.)
Analógico Digital ICD
FLASH FREC. BOR/
EEPROM RAM LINEAS OSC. nº de CCP/
MODELO Bytes ENCAPSULADOS ADC Timers/ COMUN. MÁX. INT. PBOR/ puntos ECCP nW
Bytes Bytes E/S COMP.
y words CANALES WDT I/O MHz PLVD
parada
PIC18
3-16BIT CAN2.CB,
65536EnhFI 11x10BIT 8MHz PBOR
PIC18F4680 1024 3328 36 4CP,44ML,44PT 2 1-8BIT MI2C/SPI, 40 3 1/1 SI
(82768) 100ksps 32KHz /PLVD
1-WDT EUSART
3-16BIT MI2C/SPI,
8192StoFI 12x10BIT 8MHz PBOR
PIC18F6310 - 768 54 64PT 2 1-8BIT EUSART, 40 3 3/0 SI
(4096) 100ksps 32KHz /PLVD
1-WDT AUSART
3-16BIT MI2C/SPI,
16304StoFI 12x10BIT 8MHz PBOR
PIC18F6410 - 768 54 64PT 2 1-8BIT EUSART, 40 3 3/0 SI
(8192) 100ksps 32KHz /PLVD
1-WDT AUSART
3-16BIT MI2C/SPI,
8192StoFI 12x10BIT 8MHz PBOR
PIC18F6390 - 768 50 64PT 2 1-8BIT EUSART, 40 3 2/0 SI
(4096) 100ksps 32KHz /PLVD
1-WDT AUSART
3-16BIT MI2C/SPI,

LA FAMILIA DE MICROCONTROLADORES PIC


16384StoFI 12x10BIT 8MHz PBOR
PIC18F6490 - 768 50 64PT 2 1-8BIT EUSART, 40 3 2/0 SI
(8192) 100ksps 32KHz /PLVD
1-WDT AUSART
3-16BIT 2x
32768EnhFI 12x10BIT PBOR
PIC18F6520 1024 2048 52 64PT 2 2-8BIT AUSART, 40 - 1 5/0 -
(16384) 80ksps /PLVD
1-WDT MI2C/SPI
3-16BIT 2x
49152EnhFI 12x10BIT 8MHz PBOR
PIC18F6527 1024 3936 54 64PT 2 2-8BIT EUSART, 40 3 2/3 SI
(24576) 100ksps 32KHz /PLVD
1-WDT MI2C/SPI
3-16BIT EUSART,
491952EnhFI 12x10BIT PBOR
PIC18F6585 1024 3328 53 64PT,68L 2 1-8BIT MI2C/SPI, 40 - 1 1/1 -
(24576) 80ksps /PLVD
1-WDT CAN2.CB
3-16BIT 2x
65536EnhFI 12x10BIT 8MHz PBOR
PIC18F6822 1024 3936 54 64PT 2 2-8BIT EUSART, 40 3 2/3 SI
(82768) 100ksps 32KHz /PLVD
1-WDT MI2C/SPI
3-16BIT 2x
90304EnhFI 12x10BIT 8MHz PBOR
PIC18F6827 1024 3936 54 64PT 2 2-8BIT EUSART, 40 3 2/3 SI
(49152) 100ksps 32KHz /PLVD
1-WDT MI2C/SPI

Figura 1.16. Principales características de algunos modelos PIC de la gama Mejorada (continúa).

17
18
MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Analógico Digital ICD
FLASH FREC. BOR/
EEPROM RAM LINEAS OSC. nº de CCP/
MODELO Bytes ENCAPSULADOS ADC Timers/ COMUN. MÁX. INT. PBOR/ puntos ECCP nW
Bytes Bytes E/S COMP.
y words CANALES WDT I/O MHz PLVD
parada
PIC18
3-16BIT EUSART,
65536EnhFI 12x10BIT PBOR
PIC18F6880 1024 3936 53 64PT,68L 2 1-8BIT MI2C/SPI, 40 - 1 1/1 -
(82768) 80ksps /PLVD
1-WDT CAN2.CB
3-16BIT 2x
131072EnhFI 12x10BIT 8MHz PBOR
PIC18F6722 1024 3936 54 64PT 2 2-8BIT EUSART, 40 3 2/3 SI
(65536) 100ksps 2 32KHz /PLVD
1-WDT MI C/SPI
3-16BIT MI2C/SPI,
8192StoFI 12x10BIT 8MHz PBOR
PIC18F8310 - 768 70 80PT 2 1-8BIT EUSART, 40 3 3/0 SI
(4096) 100ksps 32KHz /PLVD
1-WDT AUSART
3-16BIT MI2C/SPI,
16384StoFI 12x10BIT 8MHz PBOR
PIC18F8410 - 768 70 80PT 2 2-8BIT EUSART, 40 3 3/0 SI
(8192) 100ksps 32KHz /PLVD
1-WDT AUSART
MI2C/SPI,
8192StoFI 12x10BIT 3-16BIT 8MHz PBOR
PIC18F8390 - 768 66 80PT 2 EUSART, 40 3 2/0 SI
(4096) 100ksps 1-8BIT 32KHz /PLVD
AUSART
3-16BIT MI2C/SPI,
16384StoFI 12x10BIT 8MHz PBOR
PIC18F8490 - 768 66 80PT 2 2-8BIT EUSART, 40 3 2/0 SI
(8192) 100ksps 32KHz /PLVD
1-WDT AUSART

Figura 1.16. Principales características de algunos modelos PIC de la gama Mejorada.


LA FAMILIA DE MICROCONTROLADORES PIC 19

FLASH RAM Temporizador 16 bits


64-128 KB 8 KB
Watchdog

CAD, 10bits, 16 canales

Bus periférico
GP I/O
BUS DE MEMORIA
UART(2)
PROCESADOR DE 16 BITS y 16 MIPS
Banco de I2CTM(2)
ALU-16 bit Registros
16 x 16
SPITM(2)
Multiplicador Generación de
16 X 16 direcciones
RTCC

JTAG y Emul. Registro de CONTROL


Interfaz Desplazamiento DE INTERRUPC. PMP

Figura 1.17. Diagrama por bloques que muestra los principales recursos que conforman los
microcontroladores de 16 bits PIC24F.

El núcleo del procesador se alimenta con 2,5 V, aunque las líneas de E/S se alimentan con 3,3 V
y pueden funcionar con los típicos niveles TTL de 5 V. Hay 9 modelos diferentes de PIC24F cuyas
principales características se ofrecen en la Figura 1.18.

Frecuencia DC- 40MHz


Memoria de programa (bytes) 128 K
Memoria de instrucciones (words) 42 K
Memoria de datos (bytes) 8K
Memoria EEPROM -
Fuentes de interrupción 19
Puertas E/S Puertas A,B,C,(E), F, G...
Temporizadores 4
Módulos de Captura/Comparación/PWM 1
Módulos mejorados CCP 0
Módulo ECAN 1
MSSP
Comunicación serie
USART mejorada
Comunicación paralelo(PSP) No
Conversor Analógico-Digital 16 canales de entrada
Comparadores 0
POR, BOR
Instrucción de RESET
Pila llena
Resets y excepciones Sobrepasamiento de la Pila
(PWRT, OST)
#MCLR (optional)
WDT
Programación con voltaje bajo Sí
Reset programable Brown-out Sí
Set de instrucciones 76 instrucciones la mayoría de 24 bits
Encapsulados De 64 a 100 patitas

Figura 1.18. Principales características de los 9 modelos de la familia PIC24F.


20 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

La otra familia de microcontroladores MCU de 16 bits sigue la nomenclatura PIC24H y alcan-


zan un rendimiento de 40 MIPS, pudiendo disponer de una memoria de programa FLASH de has-
ta 256 KB y una RAM de hasta 16 KB. Todos sus modelos están encapsulados en formato TQFP
con 64, 80 y 100 patitas. Su principal aportación frente a los PIC24F es la de incluir un Controlador
de DMA con 8 canales. (Figura 1.19.)

1.4.2. Gama de microcontroladores DSC de 16 bits

Estos microcontroladores de 16 bits añaden a las prestaciones típicas de los MCU anteriores los re-
cursos hardware y software propios de los DSP (Procesadores Digitales de Señales) lo que permite
utilizarlos en las extraordinarias aplicaciones relacionadas con el procesado digital de señales. In-
tentan aprovechar todas las ventajas de los microcontroladores MCU y de los DSP y Microchip les
identifica con el nombre DSC: Controladores Digitales de Señales.
Los DSC constan de dos familias, la dsPIC30F y la dsPIC33F. Los modelos de la familia dsPIC30F
tienen importantes capacidades de memoria, contienen la mayoría de los recursos y periféricos y tie-
nen un rendimiento de 30 MIPS cuando se les alimenta con un voltaje comprendido entre 4,5 y 5,5 V.
Incorporan un “motor DSP” en el Camino de Datos que les permite realizar las instrucciones que rea-

FLASH CANALES Timer Módulo Módulo Líneas


Modelo Patitas RAM ADC UART SPITM I2CTM CAN
(KB) DMA 16-bit Capt. Comp. de E/S

1 ADC
24HJ64GP206 64 64 8 8 9 8 8 2 2 1 0 53
18 CAN.
1 ADC
24HJ64GP210 100 64 8 8 9 8 8 2 2 2 0 85
32 CAN.
1 ADC
24HJ64GP506 64 64 8 8 9 8 8 2 2 2 1 53
18 CAN.
1 ADC
24HJ64GP510 100 64 8 8 9 8 8 2 2 2 1 85
32 CAN.
1 ADC
24HJ128GP206 64 128 8 8 9 8 8 2 2 2 0 53
18 CAN.
1 ADC
24HJ128GP210 100 128 8 8 9 8 8 2 2 2 0 85
32 CAN.
1 ADC
24HJ128GP506 64 128 8 8 9 8 8 2 2 2 1 53
18 CAN.
1 ADC
24HJ128GP510 100 128 8 8 9 8 8 2 2 2 1 85
32 CAN.
1 ADC
24HJ128GP306 64 128 16 8 9 8 8 2 2 2 0 53
18 CAN.
1 ADC
24HJ128GP310 100 128 16 8 9 8 8 2 2 2 0 85
32 CAN.
1 ADC
24HJ256GP206 64 256 16 8 9 8 8 2 2 2 0 53
18 CAN.
1 ADC
24HJ256GP210 100 256 16 8 9 8 8 2 2 2 0 85
32 CAN.

Figura 1.19. Principales características de los 13 modelos de microcontroladores PIC de 16 bits de la


familia PIC24H.
LA FAMILIA DE MICROCONTROLADORES PIC 21

lizan las operaciones matemáticas típicas de los algoritmos usados en el procesamiento digital de las
señales. Según la orientación práctica de los modelos los dsPIC30F se dividen en tres categorías:

a) dsPIC30F de Propósito General, con 8 modelos.


b) dsPIC30F de Control de Motores, con 9 modelos.
c) dsPIC30F para Control de Sensores, con 4 modelos.

CAD
Mem. de RAM EEPROM Timer Módulo Módulo
Modelo Patitas PWM 10 bits QEI UART SPITM I2CTM CAN
programa Bytes Bytes 16-bit Capt. Comp.
500 ksps

dsPIC30F2010 28 12K/4K 512 1024 3 4 2 6 canales 6 canales SI 1 1 1 -

dsPIC30F3010 28 24K/8K 1024 1024 5 4 2 6 canales 6 canales SI 1 1 1 -

dsPIC30F4012 28 48K/16K 2048 1024 5 4 2 6 canales 6 canales SI 1 1 1 1

dsPIC30F3011 40/44 24K/8K 1024 1024 5 4 4 6 canales 9 canales SI 2 1 1 -

dsPIC30F4011 40/44 48K/16K 2048 1024 5 4 4 6 canales 9 canales SI 2 1 1 1

dsPIC30F5015 64 66K/22K 2048 1024 5 4 4 8 canales 16 canales SI 1 2 1 1

dsPIC30F6010 80 144K/48K 8192 4096 5 8 8 8 canales 16 canales SI 2 2 1 2

Figura 1.20. Relación de algunos modelos de dsPIC30F destinados al Control de Motores con sus
características.

Los dispositivos pertenecientes a la familia dsPIC33F son compatibles con los dsPIC30F puesto
que tienen el mismo repertorio de instrucciones, la misma distribución del patillaje y utilizan las mis-
mas herramientas de desarrollo. Sin embargo los dsPIC33F se distinguen por las siguientes cualidades:

1. Se alimentan con 3,3 V aunque las E/S pueden trabajar con niveles TTL.
2. Incorporan un Controlador DMA de 8 canales.
3. Aumenta el número de interrupciones y excepciones.
4. Alcanza un rendimiento de 40 MIPS.
5. Posee un interfaz para CODEC.
6. Hay modelos con 256 KB de memoria FLASH y 30 KB de RAM.

Existe un total de 27 dispositivos dsPIC33F, 15 de los cuales se encuadran dentro de los de Pro-
pósito General y el resto en el de Control de Motores. (Figura 1.21.) No disponen de EEPROM.
Los modelos dsPIC33F de Propósito General son adecuados para aplicaciones de voz y audio,
seguridad, electromedicina, módem, etc. Los agrupados en el Control de Motores se orientan a los
electrodomésticos como las lavadoras, al control de la dirección electrónica de automóviles, control
medioambiental, sistemas de alimentación ininterrumpible, inversores y a matrices de iluminación
con LED. En la Figura 1.22 se muestra el diagrama por bloques correspondiente a la estructura in-
terna de los dsPIC33F.
22 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

FLASH RAM Timer Módulo Módulo Convertidor Líneas


Modelo Patitas UART SPITM I2CTM CAN
(Kbyte) (Kbyte) 16 bits Capt. Comp. ADC de E/S

1 A/D
33FJ64GP206 64 64 8 9 8 8 2 2 1 0 53
18 CAN.
1 A/D
33FJ64GP306 64 64 16 9 8 8 2 2 2 0 53
18 CAN.
1 A/D
33FJ64GP310 100 64 16 9 8 8 2 2 2 0 85
32 CAN.
2 A/D
33FJ64GP706 64 64 16 9 8 8 2 2 2 2 53
18 CAN.
2 A/D
33FJ64GP708 80 64 16 9 8 8 2 2 2 2 69
24 CAN.
2 A/D
33FJ64GP710 100 64 16 9 8 8 2 2 2 2 85
32 CAN.
1 A/D
33FJ128GP206 64 128 8 9 8 8 2 2 1 0 53
18 CAN.
1 A/D
33FJ128GP306 64 128 16 9 8 8 2 2 2 0 53
18 CAN.
1 A/D
33FJ128GP310 100 128 16 9 8 8 2 2 2 0 85
32 CAN.
2 A/D
33FJ128GP706 64 128 16 9 8 8 2 2 2 2 53
18 CAN.
2 A/D
33FJ128GP708 80 128 16 9 8 8 2 2 2 2 69
24 CAN.
2 A/D
33FJ128GP710 100 128 16 2 2 2 2 85
32 CAN.
1 A/D
33FJ256GP506 64 256 16 9 8 8 2 2 2 1 53
32 CAN.
1 A/D
33FJ256GP510 100 256 16 9 8 8 2 2 2 1 85
32 CAN.
2 A/D
33FJ256GP710 100 256 30 9 8 8 2 2 2 2 85
32 CAN.

Figura 1.21. Tabla con las características principales de algunos modelos de la familia dsPIC33F.

DMA Temporizador 16 bits


FLASH RAM
64-256KB 8-30 KB
Watchdog

CAD de 12 bits y 16 canales


BUS DE MEMORIA

CAD de 12 bits y 16 canales


Bus periférico

UART(2)
PROCESADOR DE 16 BITS Y 40 MIPS

Banco de Registros I2CTM(2)


ALU-16 bit
16 x 16

Multiplicador Generación de SPITM(2)


17 X 17 direcciones
CAN (1-2)
JTAG & Emul. Registro de
Interfaz Desplazamiento
CODEC I/F
MOTOR Acumuladores
DSP AyB Control de Motores

Figura 1.22. Diagrama por bloques de la estructura interna de los dsPIC33F.


Programar PIC es fácil

RECORDANDO EL VIEJO PIC16F84

En esta sección demostraremos, capítulo a capítulo, que la programación de los nuevos PIC hace
más sencilla la realización de ciertas tareas en muchos casos, como consecuencia de sus recursos.
Todo es cuestión de probar y no quedarse en meros espectadores, así que manos a la obra que co-
mienza la función y usted es el principal actor.

Enunciado

Vamos a comenzar recordando cómo se trabaja con el PIC16F84 para pasar luego a mayores con los
PIC16F87x y los PIC18F.
Tenemos un PIC16F84 trabajando a 4 MHz, en el cual se han conectado 2 interruptores en las lí-
neas RA1 y RA2 de la Puerta A y 2 LEDs en las líneas RB0 y RB1 de la Puerta B.
El programa debe mostrar cuándo el valor lógico que introducen ambos interruptores es cero. Pa-
ra ello, si los dos interruptores introducen por la Puerta A nivel lógico 0, los LEDs de la Puerta B
deben encenderse, y en los demás casos permanecen apagados.

Esquema eléctrico

Tras entender lo que se pide hay que especificar el esquema eléctrico del circuito para saber cómo
están conectados los periféricos. (Figura 1.23.) En dicho esquema se representa el PIC, con los ele-
mentos auxiliares que siempre necesita (cristal, alimentación y circuito de reset), y los periféricos
de entrada/salida que se utilizan en cada momento.
En este ejercicio tanto los interruptores como los LEDs están conectados para ser activos por ni-
vel alto. En el caso de los interruptores este hecho no altera la resolución del problema, pero si los
LED estuvieran conectados para activarse por nivel bajo, el valor para encenderlos y apagarlos se-
ría justamente el contrario.

Organigrama

Otra práctica muy recomendable antes de empezar a programar es plasmar en un organigrama la for-
ma de resolver el problema. (Figura 1.24.)
Cuanto más complicado sea dicho enunciado, más abstracto será el organigrama, pudiendo in-
cluso necesitarse varios para llegar a un nivel aceptable de concretización. Al contrario, si el pro-
blema es sencillo el programa es casi una traducción inmediata del organigrama a código.
23
24 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 1.23. Esquema eléctrico correspondiente al ejercicio propuesto.

Figura 1.24. Organigrama del ejercicio.


LA FAMILIA DE MICROCONTROLADORES PIC 25

Programa comentado

Una vez dados estos pasos previos estamos en disposición de comenzar la programación.
Vamos a seguir unas reglas básicas a la hora de escribir los programas que, aunque no son obli-
gatorias, facilitan la lectura y la comprensión.

1.a Tanto las directivas como las etiquetas se escribirán con mayúsculas, así como las instrucciones
serán escritas en minúsculas.
2.a Las instrucciones deberán tabularse con respecto a las etiquetas.
3.a Se pondrán comentarios que aclaren el contenido de instrucciones y rutinas.

Siguiendo estas normas y en base al esquema eléctrico y al organigrama se obtiene el programa


que aparece bajo estas líneas. Antes de continuar, ¿por qué no intenta resolverlo usted mismo y com-
prueba luego cómo anda su práctica de programación con los PIC? Recuerde que no hay un modo
único de resolución y que se aprende practicando y cometiendo errores.

LIST P=16F84 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F84.INC» ; Se incluye la definición de
; los registros internos en
; una librería
ORG 0x00 ; Inicio en el Vector de
; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salta el Vector de
; Interrupción
INICIO bsf STATUS,RP0 ; Cambio al banco 1
clrf TRISB ; Puerta B como salida
movlw b’00000110’ ; RA1-RA2 entradas
movwf TRISA
bcf STATUS,RP0 ; Cambio a banco 0
clrf PORTB ; Borrado de LEDs
clrf PORTA ; Borrado de líneas no
; utilizadas de Puerta A
BUCLE movf PORTA,W ; Puerta A W
btfss STATUS,Z ; Comprobación de Z = 1
goto APAGAR ; Si RA1-RA2 no son 0
goto ENCENDER ; Si RA1-RA2 son 0

APAGAR clrf PORTB ; Se apagan los LEDs


goto BUCLE ; Para volver a comprobar

ENCENDER movlw 0xFF ; Se encienden los LEDs


movwf PORTB
goto BUCLE ; Para volver a comprobar

END ; Fin de programa


26 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Llega la hora de probar la solución del problema para ver si se comporta como está previsto.
Los pasos a realizar serán siempre los siguientes:

1.o Llamar a un editor de textos cualquiera y copiar el programa. Grabarlo sin formato con extensión
«ASM».
2.o Ensamblarlo con el ensamblador de Microchip llamado MPASM. Corregir errores si los hubiera
volviendo al paso 1º.
3.o Grabar el microcontrolador utilizando, por ejemplo, el sistema de desarrollo Micro’PIC Trainer y su
software de grabación PICME-TR.
4.o Probar la solución utilizando los periféricos contenidos en el Micro’PIC Trainer.

Se explican a continuación detalladamente los tres últimos pasos.

Utilización del ensamblador MPASM

El ensamblador MPASM es un programa de libre distribución que se puede obtener en la página


web de Microchip, y que sirve para ensamblar ficheros con extensión ASM. Su aspecto se muestra
en la Figura 1.25.
Para desplazarse por los campos de la pantalla se usan los cursores y el tabulador. Los pasos pa-
ra ensamblar un programa son:

Figura 1.25. Aspecto del ensamblador MPASM.


LA FAMILIA DE MICROCONTROLADORES PIC 27

1.o En el campo Source File se introduce el nombre del fichero con extensión ASM a ensamblar jun-
to con su ruta de acceso. Si ésta no se conoce se deberá pulsar Enter para que aparezca la lista
de ficheros y directorios.
2.o En el campo Processor Type se busca el microcontrolador para el cual está pensado el progra-
ma, en nuestro caso el PIC16F84. Para cambiar los valores se utiliza el Enter.
3.o Al introducir el nombre del archivo en el primer paso, el programa rellena de forma automática
la mayoría de los campos restantes. Por defecto, genera dos ficheros con el mismo nombre que
el ASM; uno con extensión ERR, donde se detallan los errores de ensamblado, y que se puede
mirar con cualquier editor, y otro con extensión HEX, que será el que se grabe en el microcon-
trolador.
4.o Por último, se procede a ensamblar el programa pulsando F1 .
5.o En el caso de que se produzcan errores habrá que abrir el fichero ERR con un editor de texto pa-
ra ver su/s causa/s, corregirla/s en el programa fuente y volver a realizar los pasos para ensam-
blarlo.

Grabación y prueba de un programa en el Micro’PIC Trainer

El sistema de desarrollo Micro’PIC Trainer está ideado para grabar en el microcontrolador el pro-
grama, una vez ensamblado y convertido en formato HEX, y probar posteriormente dicho progra-
ma utilizando los periféricos de que dispone. Más información en www.microcontroladores.com.
Empezaremos nuestro acercamiento a la placa identificando las partes más importantes de la
misma, tal y como se muestra en la Figura 1.26.

ALIMENTACIÓN
PUERTO PARALELO

J9 J10

PICBUS
POTENCIÓMETROS

LCD
PIC-28

JUMPERS A/D
7SEG
LEDS

INTERRUPTORES
JUMPERS PIC-18

Figura 1.26. Sistema de desarrollo Micro’PIC Trainer con las partes más significativas señaladas.
Cortesía de “Ingeniería de Microsistemas Programados S. L.”.
28 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.a Alimentación: aquí se conecta la fuente de alimentación, que debe proporcionar 12 VAC.
2.a Puerto paralelo: mediante un cable paralelo se conecta la placa con el PC. Es necesario para
efectuar la grabación del microcontrolador.
3.a Picbus: por este conector salen al exterior todas las líneas del PIC que se encuentren en el zó-
calo de la placa. Sirve para realizar ampliaciones de periféricos, ya que permite conectar los PIC-
BUS de diferentes placas. Hay que tener cuidado de que dichas ampliaciones no causen inter-
ferencias en las señales de los periféricos que ya se encuentran en la placa, deshabilitando en
caso contrario alguno de ellos.
4.a PIC-18: es el zócalo donde se insertan los PIC de 18 patitas, como por ejemplo el PIC16F84.
5.a PIC-28: éste es el zócalo en el que se insertan los PIC de 28 patitas, caso de los 16F873/6. Sólo
se debe introducir un PIC en uno de los dos zócalos.
6.a Jumpers: sirven para conectar o desconectar el LCD, el display de 7 segmentos y la barrita de
LEDs.
7.a Interruptores: están conectados a las cinco líneas de la puerta A. Para poder utilizarlos los jum-
pers A/D, situados en la zona central de la placa entre los interruptores y los potenciómetros, de-
ben estar en la posición de «digital». Además, el jumper «J9», situado en la parte superior de-
recha del LCD, tiene que estar en la posición «A4». Si este jumper estuviese en su posición T0CK
quedaría deshabilitado el interruptor de la placa y podríamos usar esta entrada para otras cosas,
como por ejemplo, para conectar una fuente de impulsos externa para el TMR0.
8.a LEDs: están conectados a la puerta B. Para utilizarlos el Jumper serigrafiado como «LED ON»
debe estar cerrado. En esta posición todo lo que salga por la puerta B del PIC se representará
en la barrita de LEDs. El jumper «J10», situado en la parte superior del LCD, debe estar en la po-
sición «B0». Si este jumper estuviese en la posición «INT» la salida por la línea RB0 quedaría
deshabilitada, y ésta podría usarse, por ejemplo, como entrada para una señal de interrupción
externa.
9.a Display 7seg: el display de siete segmentos también está conectado a la puerta B del PIC. Para
que este periférico funcione, el Jumper «DIS ON» debe estar cerrado y el «J10» en su posición
«B0».
10.a LCD: este periférico es el que más conexiones requiere. Comparte las ocho líneas de la puerta
B con el display de siete segmentos y la barrita de LEDs, y además utiliza RA0, RA1 y RA2 co-
mo líneas de control. Por este motivo, cada vez que queramos enviar información al LCD, los in-
terruptores que comparten estas mismas líneas deben estar a 1 (hacia arriba). Además, el jum-
per «LCD ON» debe estar cerrado y el «J10» en su posición «B0».
11.a Jumpers A/D: seleccionan qué señales entrarán en las líneas RA0-RA4 del PIC. En la posición
«Digital» conectan los interruptores y en la posición «Analógico» los potenciómetros.
12.a Potenciómetros: sirven para introducir señales analógicas a los PIC que poseen conversores
analógico/digitales. Es importante que los Jumpers A/D estén bien configurados para que no
existan conflictos entre estos potenciómetros y los interruptores.

Antes de utilizar los periféricos arriba descritos hay que grabar el programa en el PIC. Se reali-
zarán los siguientes pasos:

1.o Introducir el PIC adecuado en el zócalo correspondiente.


2.o Conectar la fuente de alimentación de 12 VAC a la placa y a un enchufe de 220 VAC estándar.
3.o Unir el PC con la placa mediante un cable paralelo.
4.o Quitar los jumpers que habilitan/deshabilitan el LCD, el display y la barrita de LEDs.
5.o Abrir el programa de grabación PICME-TR, mostrado en la Figura 1.27.
LA FAMILIA DE MICROCONTROLADORES PIC 29

6.o Dentro de este programa pulsar los siguientes botones:


a) Abrir el Fichero ensamblado. En el Buffer de Memoria de Programa aparecerá el fichero en for-
mato HEX.
b) Borrar el PIC.
c) Comprobar el Borrado del PIC.
d) Poner la Palabra de Configuración con las opciones:
– Código Protegido: NO.
– Watchdog Timer: NO.
– Oscilador: XT.
– Power Timer: SÍ.
e) Programar Todo el programa en el PIC.
f) Verificar la programación del PIC.
7.o Conectar los jumpers que se han quitado antes, correspondientes a los periféricos que se van a
utilizar.

Si vuelve al programa que acabamos de realizar y grabar, comprobará que las líneas de E/S han
sido configuradas de modo que coincidan con los periféricos dispuestos en el Micro’PIC Trainer.
Para este primer programa sólo necesitamos dos interruptores y la barra de diodos LED, de mo-
do que desconecte la pantalla LCD y el display de 7 segmentos abriendo sus jumpers correspon-
dientes.
Asegúrese de que los jumpers A/D de las líneas RA1-RA2 están en la posición Digital e introduz-
ca ahora diferentes combinaciones para comprobar el funcionamiento del programa. Si éste no se com-
porta como esperaba no es un fallo sintáctico, ya que los errores han sido corregidos hasta obtener un
programa correctamente ensamblado. El fallo será semántico, es decir, deberá repasar el código fuente
para comprobar en qué punto difieren el organigrama del programa en ensamblador y corregirlo.

Figura 1.27. Aspecto del programa de grabación PICME-TR.


Diseñar con PIC es fácil

PRESENTACIÓN DE LOS SENSORES ANALÓGICOS MÁS UTILIZADOS

Aunque el PIC16F84 sirve para realizar un sinfín de aplicaciones comerciales y su aprendizaje es


muy didáctico y sencillo, existen ciertas aplicaciones muy comunes para las cuales este PIC no sir-
ve. Estamos hablando de aquellas que requieren la utilización de sensores analógicos. Vamos a pre-
sentar en este apartado dos sensores que, aunque muy utilizados en diversos aparatos que maneja-
mos a diario, no eran soportados directamente por el PIC16F84. Los nuevos PIC16F87x, al disponer
de Conversor A/D, pueden usarlos cómodamente.

El sensor de luminosidad: LDR

Un sensor de luminosidad tipo LDR es un elemento cuya resistencia entre bornes varía en función
de la luz que incide sobre su superficie. Así, cuando no existe luz presenta una resistencia infinita y
su resistencia va decreciendo, hasta llegar a cero, según va aumentando la luz.
Su uso puede ser interesante en todas aquellas aplicaciones en las cuales el hecho de existir más
o menos luz determine cierto comportamiento del sistema. Por ejemplo, la iluminación de la entrada
a una vivienda, de una habitación o de un criadero de peces, puede regularse automáticamente de mo-
do que se active una o varias bombillas con la detección de determinados niveles de luminosidad.
Es un elemento sin polaridad y se puede encontrar con diferentes diámetros según el rango de va-
lores de luminosidad que sea capaz de diferenciar. (Figura 1.28.)

Figura 1.28. Aspecto y circuito práctico de una LDR.

30
LA FAMILIA DE MICROCONTROLADORES PIC 31

A la derecha de la Figura 1.28 se muestra el esquema de conexionado al PIC. La tensión gene-


rada según el grado de luminosidad se aplicará por una de las patitas analógicas del PIC16F87x de-
bidamente configurada, y será transformada en un valor digital para su tratamiento posterior. Cuan-
do no exista luz, el voltaje de salida, VOUT, será 5 V y con luminosidad máxima 0 V.

El sensor de temperatura estándar: LM35

Otro sensor analógico ampliamente utilizado es el de temperatura. En el mercado existen muchos


modelos de sensores de temperatura y su elección depende de diversos parámetros, como pueden ser
el rango de temperaturas que sean capaces de admitir, la precisión necesaria, el coste, la resistencia
que debe presentar a ciertas condiciones ambientales, etc.
En la siguiente tabla se presentan los valores de algunos de estos sensores.

SENSOR RANGO INCREMENTO PROPIEDADES

LM335A -40º C – 100º C 0,10 mV/ºC

PRC100 -40º C – 150º C 0º C – 100 W Precisión debido a su


100º C – 138,5 W comportamiento lineal
Resistente.

PT100 -50º C – 500º C 100 W – 0º C Reducido tamaño y rápida respuesta.

PTC (Coeficiente de Diferentes Baja resistencia a baja En circuitos de aviso.


Temperatura positivo) temperatura y aumenta Protección contra sobretensiones y
rápidamente al superar sobrecorrientes.
la temperatura de referencia.

NTC (Coeficiente de Diferentes Alta resistencia a baja Buena fiabilidad a bajo coste.
Temperatura negativo) temperatura y al contrario. Muy empleados en electrodomésticos.

Termopar tipo N -50º C – 400º C Altas temperaturas.


Elevada vida útil.
Espacios reducidos.

Uno de los sensores más utilizados es el LM35, por lo que se considera estándar. Sus caracterís-
ticas son:

1.a Su tensión de salida VOUT es proporcional a la temperatura en una proporción de 10 mV/˚C.


2.a Su rango de funcionamiento está comprendido entre 0˚ C y 100˚ C.
3.a Su tensión de funcionamiento VS está entre +4 VDC y +30 VDC.
4.a Su precisión es de + 0,9˚ C.

En la Figura 1.29 se muestra el aspecto externo de un sensor de temperatura estándar. La


patita +VS se debe conectar a la tensión positiva, comprendida entre +4 V y +30 V. GND será
32 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

conectada a 0 V y VOUT se conectará a la línea correspondiente del PIC. A éste llegará el volta-
je proporcional a la temperatura captada, que será convertida en un valor binario para su poste-
rior tratamiento.

5
LM3
+VS
VOUT GND

Figura 1.29. Aspecto de un LM35. La disposición de las patitas del sensor del dibujo se corresponde
con un sensor cuya parte plana está orientada hacia arriba.
2 Arquitectura, diagrama
de conexiones
y repertorio
de instrucciones

2.1. INTRODUCCIÓN

Bajo la denominación de PIC16F87x se hace referencia a una subfamilia de microcontrolado-


res PIC de la gama media, que se identifica por tener como memoria de programa una de tipo
FLASH mejorada y una serie de recursos semejante a los modelos más potentes, como por ejem-
plo los PIC16C73/4A, teniendo estos últimos el inconveniente de que su memoria de programa
es de tipo EPROM.
Cuatro de los siete modelos que componen esta subfamilia están encapsulados con 28 patitas
(PIC16F870/PIC16F872/PIC16F873A/PIC16F876A), mientras que los otros tres tienen 40 patitas
(PIC16F871/PIC16F874A/PIC16F877A). Con la intención de seguir potenciando la línea con me-
moria FLASH, Microchip también comercializa los microcontroladores PIC16F62x, que con un
precio «rompedor» mantiene el encapsulado de 18 patitas, aumentando considerablemente los re-
cursos internos en comparación con el PIC16F84.
Las principales diferencias entre los PIC16F87x con 28 patitas y los de 40 se concentran espe-
cialmente en el número de líneas de E/S disponibles, pero a continuación se citan las cuatro dife-
rencias más relevantes:

1.a Los modelos encapsulados con 40 patitas disponen de 5 puertas (PA, PB, PC, PD y PE) de E/S
con un total de 33 líneas para conectar a los periféricos exteriores. Los de 28 patitas sólo tienen 3
puertas (PA, PB y PC) con 22 líneas de E/S.
2.a El conversor A/D en los PIC con 28 patitas tiene 5 canales de entrada, pero en los de 40 patitas
tiene 8.
3.a Sólo los encapsulados con 40 patitas integran una puerta paralela esclava (PSP).
4.a Existen 14 causas de interrupción en los modelos con 28 patitas y 15 en los de 40 patitas.

Con la intención de ir acostumbrando al lector a conocer los recursos de los PIC16F87x se re-
sumen en las Figuras 2.1 y 2.2.

33
34 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

RECURSOS FUNDAMENTALES

• Procesador de arquitectura RISC avanzada.


• Juego de 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instruc-
ción, menos las de salto que tardan dos.
• Frecuencia de 20 MHz.
• Hasta 8 K palabras de 14 bits para la Memoria de Código, tipo FLASH.
• Hasta 368 bytes de Memoria de Datos RAM.
• Hasta 256 bytes de Memoria de Datos EEPROM.
• Encapsulados compatibles con los PIC16C73A/74A/76/77A.
• Hasta 15 fuentes de interrupción internas y externas.
• Pila con 8 niveles.
• Modos de direccionamiento directo, indirecto y relativo.
• Perro Guardián (WDT).
• Código de protección programable.
• Modo SLEEP de bajo consumo.
• Programación serie en circuito con dos patitas.
• Voltaje de alimentación comprendido entre 2 y 5,5 V.
• Bajo consumo (menos de 1,6 mA a 5 V y 4 MHz).

DISPOSITIVOS PERIFÉRICOS

• Timer0: temporizador-contador de 8 bits con predivisor de 8 bits.


• Timer1: temporizador-contador de 16 bits con predivisor.
• Timer2: temporizador-contador de 8 bits con predivisor y postdivisor.
• Dos módulos de Captura-Comparación-PWM.
• Conversor A/D de 10 bits.
• Puerto Serie Síncrono (SSP) con SPI e I2C.
• USART.
• Puerta Paralela Esclava (PSP). Sólo en encapsulados con 40 patitas.
• Módulos de Comparacion Analógicos en los modelos terminados en A.

Figura 2.1. Tabla de los principales recursos de los microcontroladores PIC16F87x

2.2. PROCESADOR RISC CON ARQUITECTURA HARVARD

Esta arquitectura aplicada por Microchip en sus microcontroladores se caracteriza por la indepen-
dencia entre la memoria de código y la de datos. Así, tanto la capacidad como el tamaño de los bu-
ses de cada memoria se adaptan estrictamente a las necesidades del diseño, facilitando el trabajo en
paralelo de las dos memorias, lo que permite obtener altas cotas de rendimiento. La filosofía RISC
se hace patente en el reducido número de instrucciones que forman su repertorio. Sólo consta de 35
instrucciones, que se ejecutan en un ciclo de instrucción, equivalente a cuatro períodos de reloj, ex-
cepto las de salto que necesitan dos ciclos. (Figura 2.3.)
Una primera aproximación a la arquitectura interna de los PIC16F87x se muestra en la Figura 2.4.
Debe tenerse en cuenta que la mayor diferencia entre los modelos de 40 patitas y los de 28 reside en
el número de Puertas de E/S, que en el primer caso asciende a 5 y en el segundo a 3.
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES
Memoria Memoria Memoria Periféricos Periféricos
Analógicos Digitales FREC. Puerta
de programa de datos de datos PATITAS CCP
MODELO ENCAPSULADOS MÁX. paralela
FLASH Bytes y EEPROM SRAM E/S CAD-10bits Timers E/S MHz /ECCP PSP
Words (14 bits) Bytes Bytes COMP.
CANALES /WDT SERIE
1-16
3.584
PIC16F870 64 128 22 28SP,28SO,28SS 5 - 2-8 AUSART 20 1/0 -
2.048
1-WDT
1-16
3.584
PIC16F871 64 128 33 40P,44L,44PT 8 - 2-8 AUSART 20 1/0 1
2.048
1-WDT
1-16
3.584
PIC16F872 64 128 22 28SP,28SO,28SS 5 - 2-8 MI2C/SPI 20 1/0 -
2.048
1-WDT
1-16
7.168 AUSART
PIC16F873A 128 192 22 28SP,28SO,28SS,28ML 5 2 2-8 20 2/0 -
4.096 MI2C/SPI
1-WDT
1-16
7.168 AUSART
PIC16F874A 128 192 33 40P,40ML,40L,44PT 8 2 2-8 20 2/0 1
4.096 MI2C/SPI
1-WDT
1-16
14.336 AUSART
PIC16F876A 256 368 22 28SP,28SO,28SS,28ML 5 2 2-8 20 2/0 -
8.192 MI2C/SPI
1-WDT
1-16
14.336 AUSART
PIC16F877A 256 368 33 40P,44ML,44L,44PT 8 2 2-8 20 2/0 1
8.192 MI2C/SPI
1-WDT

Figura 2.2. Tabla que recoge las principales características de los modelos de microcontroladores de 8 bits PIC16F87X. Ver
significado de los encapsulados en la Figura 2.12.

35
36 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 2.3. Los buses para instrucciones y datos son totalmente independientes y se ajustan a las
necesidades de cada memoria, permitiendo el acceso simultáneo.

Obsérvese en la Figura 2.4 que la memoria de código está direccionada por el PC (Contador de
Programa) en conexión con la Pila de 8 niveles. La memoria de datos RAM contiene el Banco de
Registros Específicos y el Banco de los Registros de Propósito General y transfiere información bi-
direccional por el bus de datos de 8 líneas que interconecta todos los elementos. Finalmente, el Ca-
mino de Datos está formado por una ALU de 8 bits que trabaja conjuntamente con el Registro de
Trabajo W.

Figura 2.4. Arquitectura tipo Harvard simplificada para los microcontroladores PIC16F87x.
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 37

En el esquema de la Figura 2.5 se presenta con más detalle la arquitectura correspondiente


a los modelos PIC16F871/PIC16F874A/PIC16F877A de 40 patitas. Los otros modelos
PIC16F873/6A de la subfamilia tienen idéntica arquitectura, pero carecen de las puertas D y E, así
como de las funciones que éstas soportan. El PIC16F871 carece del comparador y del módulo de
voltaje de referencia.

Figura 2.5. Arquitectura de los PIC16F871/PIC16F874A/PIC16F877A de 40 patitas. Para los mode-


los de 28 patitas la arquitectura sólo difiere en que carecen de las Puertas de E/S D y E.
38 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

2.3. ORGANIZACIÓN DE LA MEMORIA DE PROGRAMA

La memoria FLASH, en la que se graba el programa de aplicación en los PIC16F87x, puede tener
una capacidad de 2 K, 4 K u 8 K palabras de 14 bits cada una. Dicha memoria está dividida en pá-
ginas de 2 K palabras y está direccionada con el PC, que tiene un tamaño de 13 bits. La Pila se ba-
sa en una estructura LIFO (último en entrar, primero en salir), que tiene 8 niveles de profundidad,
es transparente para el usuario, es decir, funciona automáticamente y no dispone de instrucciones pa-
ra guardar o sacar de ella información. Con la instrucción CALL y con las interrupciones el valor
del PC se salva en el nivel superior. Con las instrucciones RETURN, RETFIE y RETLW el valor
contenido en el nivel superior de la Pila se carga en el PC. Al poseer la Pila sólo 8 niveles le co-
rresponde al programador preocuparse por los anidamientos en las subrutinas para no sobrepasar di-
cho valor. El vector de Reset ocupa la dirección 0000h y el vector de Interrupción la 0004h, igual
que en el PIC16F84. (Figura 2.6.)

**

** Sólo implementadas en los modelos de 4 K

Figura 2.6. Organización de la memoria de programa tipo FLASH en los PIC16F87x.


ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 39

2.4. ORGANIZACIÓN DE LA MEMORIA DE DATOS RAM

La memoria de datos tiene posiciones implementadas en RAM y otras en EEPROM. En la sección


RAM, se alojan los registros operativos fundamentales en el funcionamiento del procesador y en el
manejo de todos sus periféricos, además de registros que el programador puede usar para informa-
ción de trabajo propia de la aplicación. Más adelante, se estudiará la memoria EEPROM para guar-
dar datos de forma no volátil, a la que se considera como un dispositivo especial.
La RAM estática consta de 4 bancos con 128 bytes cada uno. En las posiciones iniciales de cada ban-
co se ubican los Registros Específicos que gobiernan al procesador y sus recursos. Tres modelos tienen
128 bytes de RAM, dos tienen 192 bytes y los otros dos 368 bytes. Los modelos de menor capacidad
no tienen implementadas físicamente algunas posiciones. La Figura 2.7 presenta los cuatro bancos de
la RAM, indicando en las primeras posiciones de cada uno los nombres de los registros que contienen.
En las Figuras 2.7 y 2.8 las posiciones con trama oscura no están implementadas físicamente y
siempre se leen como 0. Los registros específicos marcados con la nota (1) no se hallan implemen-
tados en los PIC de 28 patitas. Los registros marcados como “Reservado” deben mantenerse limpios.
Para seleccionar el banco al que se desea acceder en la RAM se emplean los bits 6 y 5 del Re-
gistro de Estado, denominados RP1 y RP0 respectivamente, según el código siguiente:

BANCO RP1 RP0


0 0 0
1 0 1
2 1 0
3 1 1

Para manipular adecuadamente los elementos internos de los PIC hay que conocer la misión de
los bits de los Registros Específicos.

2.4.1. Registros específicos para el control de la memoria de programa

Los 13 bits contenidos en el PC, que direccionan la memoria de código, están guardados en dos re-
gistros específicos. El registro PCL guarda los 8 bits de menos peso y se puede leer y escribir. Los
bits <12:8> del PC se alojan en el registro PCH, que al no poder ser leído ni escrito, se accede a él
a través del PCLATH.
Las instrucciones de salto CALL y GOTO sólo proporcionan 11 bits de la dirección a saltar. Es-
to limita el salto dentro de cada banco de 2 K. Cuando se desea salir del banco actual hay que pro-
gramar correctamente los bits PCLATH <4:3> que seleccionan al banco. Es labor del programador
modificar el valor de dichos bits en las instrucciones CALL Y GOTO. (Figura 2.9.)

2.4.2. Control de la memoria de datos

Para direccionar la memoria RAM de datos estructurada en 4 bancos de 128 bytes cada uno existen
dos modos diferentes:
Direccionamiento indirecto
Direccionamiento directo
40 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

INDF 00h INDF 80h INDF 100h INDF 180h


TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD 08h TRISD 88h 108h 188h
PORTE 09h TRISE 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado 18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh Reservado 18Fh
T1CON 10h 90h Registros de 110h Registros de 190h
TMR2 11h SSPCON2 91h Propósito 111h Propósito 191h
T2CON 12h PR2 92h General 112h General 192h
SSPBUF 13h SSPADD 93h 16 Bytes 113h 16 Bytes 193h
SSPCON 14h SSPSTAT 94h 114h 194h
CCPR1L 15h 95h 115h 195h
CCPR1H 16h 96h 116h 196h
CCP1CON 17h 97h 117h 197h
RCSTA 18h TXSTA 98h 118h 198h
TXREG 19h SPBRG 99h 119h 199h
RCREG 1Ah 9Ah 11Ah 19Ah
CCPR2L 1Bh 9Bh 11Bh 19Bh
CCPR2H 1Ch CMCON 9Ch 11Ch 19Ch
CCP2CON 1Dh CVRCON 9Dh 11Dh 19Dh
ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh
ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh
Registros de 20h Registros de A0h Registros de 120h Registros de 1A0h
Propósito Propósito Propósito Propósito
General General General General
96 Bytes 80 Bytes 80 Bytes 80 Bytes
EFh 16Fh 1EFh

Mapeados con F0h Mapeados con 170h Mapeados con 1F0h


70h-7Fh 70h-7Fh 70h-7Fh
7Fh FFh 17Fh 1FFh
Banco 0 Banco 1 Banco 2 Banco 3

Figura 2.7. Distribución de la memoria RAM en cuatro bancos con 368 bytes útiles.
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 41

INDF 00h INDF 80h INDF 100h INDF 180h


TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD 08h TRISD 88h 108h 188h
PORTE 09h TRISE 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado 18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh Reservado 18Fh
T1CON 10h 90h 110h 190h
TMR2 11h SSPCON2 91h
T2CON 12h PR2 92h
SSPBUF 13h SSPADD 93h
SSPCON 14h SSPSTAT 94h
CCPR1L 15h 95h
CCPR1H 16h 96h
CCP1CON 17h 97h
RCSTA 18h TXSTA 98h
TXREG 19h SPBRG 99h
RCREG 1Ah 9Ah
CCPR2L 1Bh 9Bh
CCPR2H 1Ch CMCON 9Ch
CCP2CON 1Dh CVRCON 9Dh
ADRESH 1Eh ADRESL 9Eh
ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh
Registros de 20h Registros de A0h Mapeados 120h Mapeados con 1A0h
Propósito Propósito con 20h-7Fh A0h-FFh
General General
96 Bytes 96 Bytes

7Fh FFh 17Fh 1FFh


Banco 0 Banco 1 Banco 2 Banco 3

Figura 2.8. Organización de la RAM en los modelos PIC16F873A/4A, con 192 bytes útiles.
42 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 2.9. En la figura superior se muestra cómo se carga el PC. Abajo se muestra la carga del PC
con las instrucciones CALL y GOTO.

En el modo de direccionamiento directo, los bits RP1 y RP0 del Registro de Estado <6:5> se en-
cargan de seleccionar el banco, mientras que la dirección dentro del banco la determinan 7 bits pro-
cedentes del código OP de la instrucción. Para el direccionamiento indirecto se usa el registro FSR,
en el que sus 7 bits de menos peso señalan la dirección, y el banco lo determina el bit de más peso
de FSR concatenado con el bit IRP del Registro de Estado <7>. (Figura 2.10.)

2.5. DIAGRAMA DE CONEXIONADO

En la Figura 2.11 se muestra el diagrama de distribución y asignación de las 28 o 40 patitas de los


encapsulados PDIP (doble hilera de patitas de plástico) de los PIC16F87x. Los encapsulados con
menos patitas carecen de las puertas D y E.
La Figura 2.12 muestra algunas de las posibles opciones de encapsulado que utiliza Microchip
para proteger a sus microcontroladores.
La asignación de funciones para las diferentes patitas es la siguiente:
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 43

Figura 2.10. Formas de seleccionar el banco y la dirección de la memoria RAM en los direcciona-
mientos directo e indirecto.

PATITAS DE PROPÓSITO GENERAL

• OSC1/CLKIN (9): entrada del cristal de cuarzo o del oscilador externo.


• OSC2/CLKOUT (10): salida del cristal de cuarzo. En modo RC la patita OSC2 saca la cuarta parte
de la frecuencia que se introduce por OSC1, que determina el ciclo de instrucción.
• VSS (8-19): conexión a Tierra.
• VDD (20): entrada de la alimentación positiva.
• MCLR#/VPP/THV (1): entrada de RESET o entrada del voltaje de programación o voltaje alto en el
modo test.

PUERTA A

• RA0/AN0 (2): puede actuar como línea digital de E/S o como entrada analógica al conversor AD (ca-
nal 0).
• RA1/AN1 (3): igual que la RA0/AN0.
44 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 2.11. Diagrama de asignación y conexionado de las patitas de los dos posibles encapsulados
en los modelos de la subfamilia PIC16F87x.

• RA2/AN2/VREF- /CVRef(4): puede ser línea digital de E/S, entrada analógica o entrada del voltaje
negativo de referencia o salida del comparador.
• RA3/AN3/VREF+ /C1Out(5): línea digital de E/S, entrada analógica o entrada del voltaje de
referencia positivo o salida 1 del comparador.
• RA4/T0CKI (6) /CS2Out: línea digital de E/S o entrada del reloj del Timer0. Salida con colector
abierto o salida 2 del comparador.
• RA5/SS#/AN4 (7): línea digital de E/S, entrada analógica o selección como esclavo de la puerta
serie síncrona.
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 45

PUERTA B

• RB0/INT (21): línea digital de E/S o entrada de petición de interrupción externa.


• RB1 (22): línea de E/S digital.
• RB2 (23): línea de E/S digital.
• RB3/PGM (24): línea digital de E/S o entrada del voltaje bajo para programación.
• RB4 (25): línea de E/S digital.
• RB5 (26): línea digital de E/S.
• RB6/PGC (27): línea digital de E/S. En la programación serie recibe las señales de reloj.
• RB7/PGD (28): línea digital de E/S. En la programación serie actúa como entrada de datos.

PUERTA C

• RC0/T1OSO/T1CKI (11): línea digital de E/S o salida del oscilador del Timer1 o como entrada
externa de reloj del Timer1.
• RC1/T1OSI/CCP2 (12): línea digital de E/S o entrada al oscilador del Timer1 o entrada al módulo
Captura2/salida Comparación2/salida de PWM2.
• RC2/CCP1 (13): E/S digital. También puede actuar como entrada Captura1/Salida
Comparación1/salida de PWM1.
• RC3/SCK/SCL (14): E/S digital o entrada/salida de reloj serie síncrona de los modos SPI e I2C.
• RC4/SDI/SDA (15): E/S digital o entrada de datos en modo SPI o E/S datos en modo I2C.
• RC5/SDO (16): E/S digital o salida de datos en modo SPI.
• RC6/TX/CK (17): E/S digital o patita del transmisor del USART asíncrono o como reloj
del síncrono.
• RC7/RX/DT (18): E/S digital o receptor del USART asíncrono o como datos en el síncrono.

PUERTA D

• RD0/PSP0-RD7/PSP7: las 8 patitas de esta puerta pueden actuar como líneas de E/S digitales o co-
mo líneas para la transferencia de información en la comunicación de la puerta paralela esclava. Só-
lo están disponibles en los PIC16F871/74/74A/77/77A (los de 40 patitas).

PUERTA E

Sólo tiene 3 patitas:

• RE0/RD#/AN5: E/S digital o señal de lectura para la puerta paralela esclava o entrada analógica
(canal 5).
• RE1/WR#/AN6: E/S digital o señal de escritura en la puerta paralela esclava o entrada analógica al
conversor A/D (canal 6).
• RE2/CS#/AN7: E/S digital o activación/desactivación de la puerta paralela esclava o entrada analó-
gica (canal 7).

Los PIC16F87x de 28 patitas al carecer de las Puertas D y E tienen 22 líneas de E/S (6 de la Puer-
ta A, 8 de la B y 8 de la C). Además, no disponen de puerta paralela esclava y sólo conectan al con-
versor A/D mediante 5 canales.
46 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

2.6. REPERTORIO DE INSTRUCCIONES

Los mismos formatos, iguales modos de direccionamiento y las mismas 35 instrucciones que te-
nía el PIC16F84 sirven para todos los modelos PIC16F87x, por lo que no vamos a volver a repe-
tirlos.
No obstante, en los nuevos PIC, al contener más recursos, existen nuevos Registros Específicos
de control cuyos bits se deberán escribir o leer para su gobierno. Dichos recursos y sus registros aso-
ciados serán el tema de los próximos capítulos.
En la Figura 2.13 se ofrece un cuadro resumido del repertorio de instrucciones.

Figura 2.12. Opciones de encapsulados para los microcontroladores PIC. (Cortesía de Microchip.)
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 47

NEMÓ- PARÁ- FORMATO SEÑALI-


OPERACIÓN CICLOS
NICOS METROS 14 BITS ZADORES

INSTRUCCIONES QUE MANEJAN REGISTROS

addwf f, d SUMA de W con f 1 00 0111 dfff ffff C, DC, Z


andwf f, d AND de W con f 1 00 0101 dfff ffff Z
clrf f BORRADO de f 1 00 0001 1fff ffff Z
clrw æ BORRADO de W 1 00 0001 0xxx xxxx Z
comf f, d COMPLEMENTO de f 1 00 1001 dfff ffff Z
decf f, d DECREMENTO de f 1 00 0011 dfff ffff Z
incf f, d INCREMENTO de f 1 00 1010 dfff ffff Z
iorwf f, d OR de W con f 1 00 0100 dfff ffff Z
movf f, d MOVIMIENTO de f 1 00 1000 dfff ffff Z
movwf f MOVIMIENTO de W a f 1 00 0000 1fff ffff
nop æ NO OPERACIÓN 1 00 0000 0xx0 0000
rlf f, d ROTACIÓN de f a izquierda con carry 1 00 1101 dfff ffff C
rrf f, d ROTACIÓN de f a derecha con carry 1 00 1100 dfff ffff C
subwf f, d RESTA de W a f (f - W) 1 00 0010 dfff ffff C, DC, Z
swapf f, d INTERCAMBIO de 4 bits de más 1 00 1110 dfff ffff
peso por los 4 de menos peso
xorwf f, d OR exclusiva de W con f 1 00 0110 dfff ffff Z

INSTRUCCIONES QUE MANEJAN BITS

bcf f, b PUESTA a 0 del bit b de f 1 01 00bb bfff ffff


bsf f, b PUESTA a 1 del bit b de f 1 01 01bb bfff ffff

INSTRUCCIONES DE «BRINCO»

btfsc f, b TESTEO del bit b de f; BRINCO si 0 1 (2) 01 10bb bfff ffff


btfss f, b TESTEO del bit b de f; BRINCO si 1 1 (2) 01 11bb bfff ffff
decfsz f, d DECREMENTO de f; BRINCO si 0 1 (2) 00 1011 dfff ffff
incfsz f, d INCREMENTO de f; BRINCO si 0 1 (2) 00 1111 dfff ffff

INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS

addlw k SUMA de literal con W 1 11 111x kkkk kkkk C, DC, Z


andlw k AND de literal con W 1 11 1001 kkkk kkkk Z
iorlw k OR de literal con W 1 11 1000 kkkk kkkk Z
movlw k MOVIMIENTO de literal a W 1 11 00xx kkkk kkkk
sublw k RESTA W de literal (k - W) 1 11 110x kkkk kkkk C, DC, Z
xorlw k OR exclusiva de literal con W 1 11 1010 kkkk kkkk Z

INSTRUCCIONES DE CONTROL Y ESPECIALES

call k LLAMADA a subrrutina 2 10 0kkk kkkk kkkk


clrwdt BORRADO del WATCHDOG 1 00 0000 0110 0100 #TO, #PD
goto k SALTO a una dirección 2 10 1kkk kkkk kkkk
retfie RETORNO de interrupción 2 00 0000 0000 1001
retlw k RETORNO devolviendo literal en W 2 11 01xx kkkk kkkk
return RETORNO de subrrutina 2 00 0000 0000 1000
sleep PUESTA del microprocesador en reposo 1 00 0000 0110 0011 #TO, #PD

Figura 2.13. Principales características de las 35 instrucciones que componen el repertorio de los
PIC16F87x.
Programar PIC es fácil

EL PRIMER PROGRAMA CON LOS PIC16F87X

Tras el repaso a la programación de microcontroladores PIC llevado a cabo en el tema anterior, va-
mos a repetir el mismo ejercicio pero esta vez con los PIC16F87x y, más concretamente, con el
PIC16F873A. Puesto que el enunciado, aparte de trabajar con un nuevo PIC, es el mismo, no vamos
a repetirlo. Igualmente ocurre con el organigrama. El esquema eléctrico, sin embargo, presenta al-
gunas diferencias.

Esquema eléctrico

Como puede observarse en la Figura 2.14, el modo de representar los periféricos de entrada/sali-
da no varía más que en el lugar que ocupan, ya que la distribución de las patitas del PIC ha cam-
biado. Los condensadores que acompañan al cristal de cuarzo ahora son de 15 pF y no de 27 pF
como eran en el PIC16F84 para trabajar a la misma frecuencia. Por último, ahora hay 2 patitas VSS
en vez de 1.

Programa comentado

Se presenta a continuación la resolución del ejercicio propuesto utilizando un PIC16F873A. De-


bido a que las funciones de este PIC son mayores, sus patitas tienen asignadas varias tareas, y la
discriminación entre dichas tareas es la diferencia más notable con respecto al ejercicio del te-
ma anterior. Así, además de configurar las líneas de la Puerta A como de entrada o salida, hay
que decir, en el caso de que vayan a ser entradas, si dichas entradas serán analógicas o digitales.
En el tema correspondiente al Conversor Analógico/Digital se verán todas las combinaciones
posibles.
Otra cosa a tener en cuenta es que el número de bancos de la memoria de datos RAM ha au-
mentado a cuatro. Esto quiere decir que para movernos por ellos necesitamos estar pendientes no só-
lo del bit 5 del registro Estado <RP0>, sino del 5 y del 6 <RP1:RP0>. En el programa se ha inclui-
do este hecho aunque en este caso no era necesario por partir de los dos bits a 0 al comienzo del
programa.
Se ha incluido un * en todas las líneas que se han añadido o han variado.
48
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 49

Figura 2.14. Esquema eléctrico del ejercicio propuesto para el PIC16F873A.

* LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
* INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería
ORG 0x00 ; Inicio en el Vector de
; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salta el Vector de
; Interrupción
50 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

INICIO bsf STATUS,RP0 ; Cambio al banco 1


bcf STATUS,RP1
* clrf TRISB ; Puerta B como salida
movlw b’00000110’ ; Puerta A E/S digitales
* movwf ADCON1
* movlw b’00000110’ ; RA1-RA2 entradas
movwf TRISA
bcf STATUS,RP0 ; Cambio a banco 0
clrf PORTB ; Borrado de LEDs
clrf PORTA ; Borrado de líneas no
; utilizadas de Puerta A

BUCLE movf PORTA,W ; Puerta A Æ W


btfss STATUS,Z ; Comprobación de Z = 1
goto APAGAR ; Si RA1-RA2 no son 0
goto ENCENDER ; Si RA1-RA2 son 0

APAGAR clrf PORTB ; Se apagan los LEDs


goto BUCLE ; Para volver a comprobar

ENCENDER movlw 0xFF ; Se encienden los LEDs


movwf PORTB
goto BUCLE ; Para volver a comprobar

END ; Fin de programa

Prueba del programa: el ZOCF87x

Para la prueba de este programa, deberemos seguir los pasos vistos en el tema anterior en cuanto a
edición, ensamblado, etc., teniendo en cuenta que los campos que antes eran rellenados con
PIC16F84 ahora lo son con PIC16F873A.
Una vez obtenido el fichero HEX podemos utilizar el sistema de desarrollo Micro’PIC Trainer
para la grabación y uso de periféricos, ya que como se vio éste dispone de un zócalo de 28 patitas
donde insertar los PIC16F873A y PIC16F876A.
Para ello, se utiliza el ZOCF87x, que adapta el encapsulado estrecho de estos PIC al ancho del
zócalo de la placa.
En la fotografía de la Figura 2.15 puede observarse dicho zócalo de adaptación colocado sobre
el Micro’PIC Trainer. Obsérvese además que el zócalo para los PIC de 18 patitas (junto al anterior)
permanece vacío, ya que no pueden existir dos PIC en la placa al mismo tiempo.
Los pasos a seguir para la grabación de un PIC de 28 patitas desde el Micro’PIC Trainer son si-
milares a los ya descritos para un PIC16F84 y se resumen en los siguientes:
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 51

Figura 2.15. Fotografía que muestra la colocación del zócalo ZOCF87x sobre el Micro’PIC Trainer.
(Cortesía de Ingeniería de Microsistemas Programados S. L.)

1.o Se inserta el PIC16F873A o PIC16F876A en el ZOCF87x, haciendo coincidir la patita n.o1 del chip
con la del zócalo. Éste a su vez se inserta en el zócalo libre del Micro’PIC Trainer, tomando la mis-
ma precaución.
2.o Éste debe ser el único PIC insertado en la placa.
3.o Los jumpers J5, J6 y J7 deben estar abiertos para la grabación. Al contrario, el jumper situado en
el zócalo de adaptación debe estar cerrado, lo que conecta la línea RB3 con una resistencia pull-
down.
4.o Llamar al programa PICME-TR y seleccionar el PIC y los parámetros apropiados.
5.o Seguir los pasos para la grabación descritos en el capítulo anterior.
6.o Una vez grabado, si en la aplicación la línea RB3 se emplea como entrada con pull-up, es nece-
sario abrir el jumper del zócalo. En los demás casos puede mantenerse cerrado.
Diseñar con PIC es fácil

ACTUADORES PARA DIVERSAS APLICACIONES: LOS MOTORES

Uno de los actuadores más vistosos y versátiles para el trabajo con PIC son los motores. Los moto-
res pueden mover una cinta transportadora; un motor puede ser lo que suba o baje una polea con un
objeto en su extremo; puede abrir o cerrar una puerta e incluso posicionar un brazo articulado.
En este apartado se van a ver dos tipos de motores:

1.o Motores de corriente continua (DC).


2.o Motores paso a paso (PAP).

Diferencias entre los motores DC y PAP

Las características más destacables de los motores DC se resumen en:

1.a Buen par de fuerza y estabilidad en la velocidad de giro, proporcional al voltaje de entrada.
2.a Baja inercia en arranque y parada.
3.a Peso y tamaño reducidos.
4.a Fácil manejo.

Esto les hace ideales en aplicaciones en que se precisa coordinar la velocidad de varios motores
al mismo tiempo, y/o en que el motor tiene que responder instantáneamente a las señales de control
para un encendido/apagado y cambio de sentido. Su peso y tamaño reducidos les posibilita además
para formar parte de sistemas móviles sin incrementar el peso ya existente.
Los motores PAP a su vez se caracterizan por:

1.o Su movimiento es por incremento de ángulos, siendo éstos muy exactos.


2.o Mayor simplicidad en la lógica de control.
3.o Su manejo depende del modelo.
4.o Su eje no recorre todas las posiciones posibles.

El funcionamiento de un motor PAP se logra aplicando en sus bornes un conjunto de señales de


control especificadas por el fabricante, por lo que un programa realizado para un motor determina-
do deberá modificarse si el motor es cambiado.
52
ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 53

Sin embargo, el que sea controlado por ese conjunto de señales tiene la ventaja de que en todo
momento se conoce su ángulo de giro exacto, número de vueltas dadas, etc., sin necesidad de sen-
sores externos tipo encoder, lo que le hace propicio para aplicaciones en que se necesita gran preci-
sión de movimiento. El modelo se elegirá en función de la precisión del ángulo de giro que se ne-
cesite.

Motores DC

Los motores DC internamente están compuestos por un imán (estator) que crea un campo magnéti-
co en el cual se encuentra una bobina o electroimán arrollada en un eje giratorio (rotor). La tensión
de alimentación aplicada al motor hace que se generen unas fuerzas de atracción y repulsión entre
el campo magnético del estator y del rotor, lo que hace que el motor se mantenga en movimiento.
En la práctica, el control sobre dicho motor se realiza con la aplicación de tensión en los dos hi-
los que salen al exterior: con un hilo se determina el encendido/apagado del motor y con el otro el
sentido de giro.
Como la tensión e intensidad que proporcionan las líneas del PIC no son suficientes para exci-
tar un motor DC, se hace necesaria la utilización de algún circuito integrado específico.
Uno muy utilizado es el L293B, que consta de 4 drivers. La Figura 2.17 muestra la mitad de es-
te circuito integrado con dos de sus cuatro drivers.

Figura 2.16. Fotografía de un servomotor modelo S3003 de Futaba, modificado para comportarse
como un motor de corriente continua.

Figura 2.17. Mitad del circuito integrado L293B con dos de sus cuatro drivers utilizados en el control
de un motor DC.
54 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Cada pareja de drivers puede ser usada para el control de un motor DC. El significado de las pa-
titas del esquema es el siguiente:

1.o Vinh: a través de esta línea se introducirá la señal de encendido (1) o apagado (0) proveniente del
PIC.
2.o C y D: variando estas señales se controla el sentido de giro del motor. Deben ser opuestas ya que,
de lo contrario, provocaría una parada rápida. En la práctica estas líneas suelen estar unidas a tra-
vés de una puerta inversora para forzar su valor opuesto.
3.o +VCC: es la alimentación del circuito. Se corresponde con 5 V.
4.o +VSS: es la tensión que se aplicará a los motores. Admite un máximo de 36 V.

El funcionamiento con este tipo de motores es sencillo: a través de una patita del PIC (debida-
mente configurada como salida) habilitará el motor, y una segunda patita marcará el sentido de gi-
ro con su señal. Dependiendo del voltaje suministrado variará la velocidad del motor. Dicha velo-
cidad también puede ser controlada a través del PIC con las técnicas conocidas como PWM y PFM.
En la PWM (Modulación de Anchura de Pulsos) se aplican al motor (en su línea de marcha/pa-
ro) pulsos de amplitud variable. En la PFM (Modulación de Frecuencia de Pulsos) se mantiene la
anchura de impulsos pero varía la frecuencia de los mismos.

Motores PAP

Los motores PAP, al igual que los DC, se basan en las fuerzas electromagnéticas creadas entre es-
tator y rotor, pero ambos constan de más de dos polos. Esto hace que se necesiten conjuntos de im-
pulsos para generar unas fuerzas que los hagan girar, y que este giro no sea continuo sino de un cier-
to número de grados.
En la práctica también se usa para su control el circuito integrado L293B, conectado tal y como
muestra la Figura 2.19.

Figura 2.18. Fotografía de un motor PAP unipolar de 4 fases y giro de 7,5º.


ARQUITECTURA, DIAGRAMA DE CONEXIONES Y REPERTORIO DE INSTRUCCIONES 55

Figura 2.19. Esquema completo del circuito L293B con un motor PAP conectado.

En este caso, se necesita el circuito L293B completo para controlar un motor PAP. La forma de
actuar sobre él sería introducir por las líneas A, B, C y D (debidamente conectadas a las líneas del
PIC) la secuencia marcada por el fabricante que podría ser, por ejemplo, como la mostrada en la Fi-
gura 2.20.
Entre paso y paso se debe introducir un pequeño retardo para dar tiempo al motor a realizar el
giro. Variando la duración de dicho retardo se puede modificar la velocidad del motor.

BOBINAS BOBINAS

PASO A B C D PASO A B C D
1 + – + – 1 + – + –
2 – + + – 2 – + + –
3 – + – + 3 – + – +
4 + – – + 4 + – – +

SENTIDO HORARIO SENTIDO ANTIHORARIO

Figura 2.20. Secuencia de control para el giro de un motor PAP en ambos sentidos.
3 Principales registros
de control y manejo
de las memorias FLASH
y EEPROM

3.1. LOS REGISTROS DE CONTROL

Para gobernar el funcionamiento de los recursos de los PIC existe un conjunto de registros especí-
ficos (SFR) cuyos bits soportan el control de los mismos. Dichos registros están ubicados en las pri-
meras posiciones de cada banco de la memoria de datos RAM y para aprovechar toda la potencia
de los microcontroladores es necesario conocerlos. En las Figuras 2.7 y 2.8 del capítulo anterior se
mostraba el contenido de la memoria RAM de los PIC16F87x y la denominación y situación de los
registros específicos junto a los de propósito general. Las posiciones 00h, 80h, 100h y 180h no son
registros físicos sino direcciones indirectas.
Este tema, en su primera parte, está dedicado a la exposición de la misión de los bits de los prin-
cipales registros de control, algunos de ellos similares a los del PIC16F84. Las diferencias entre los
registros de los PIC16F87x de 28 y 40 patitas se debe a carecer los primeros de las puertas D y E,
con lo que no disponen de los registros PORTD, PORTE, TRISD y TRISE. Tampoco tienen los re-
gistros que controlan la puerta paralela esclava que sólo está implementada en los modelos de 40 pa-
titas.

3.2. REGISTRO DE ESTADO (STATUS)

Sin duda éste es el registro más usado de todos, pues sus bits están destinados a controlar las fun-
ciones vitales del procesador. Por este motivo, está duplicado en las cuartas posiciones de cada ban-
co (03h, 83h, 103h y 183h).

REGISTRO DE ESTADO

IRP RP1 RP0 TO# PD# Z DC C

7 0

Figura 3.1. Estructura interna del Registro de Estado.

57
58 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Los tres bits de menos peso son los señalizadores de ciertas condiciones en las operaciones ló-
gico-aritméticas.

• Z: señalizador de cero. Se pone a 1 cuando el resultado es cero.


• C: acarreo/llevada del 8 o bit. Se pone a 1 automáticamente cuando existe acarreo en el bit de más
peso en las instrucciones de suma. También actúa como señalizador de llevada en las instruccio-
nes de resta, pero en este caso la correspondencia es inversa. Es decir, si vale 0 hay llevada.
• DC: acarreo/llevada en el 4obit. Funciona igual que el señalizador C, pero para el cuarto bit. Es muy
útil en las operaciones con números expresados en BCD.

Los señalizadores PD# y TO# son activos por nivel bajo (#) y sirven para indicar la causa que
ha provocado la reinicialización del procesador.

• PD#: se activa a 0 al ejecutarse la instrucción sleep (modo reposo). Se pone a 1 automáticamente


tras la conexión de la alimentación, o bien, al ejecutarse la instrucción clrwdt (refresco del perro
guardián).
• TO#: se activa a nivel bajo al desbordarse el perro guardián. Toma el valor 1 tras la conexión de la
alimentación o al ejecutarse las instrucciones clrwdt o sleep.

Los señalizadores PD# y TO# son muy importantes en el proceso de Reset porque indican la cau-
sa que la ha originado y permiten actuar en consecuencia. No son escribibles.
Los PIC se resetean al conectar la alimentación (POR: Power-on Reset). También se resetean
cuando la tensión de alimentación baja de 4 V (BOR: Brown-out Reset), aunque esta función es fac-
tible desactivarla poniendo a 0 el bit BODEN, presente en la palabra de configuración. Tanto en el
Reset POR como en el BOR los bits PD# y TO# toman el valor 1, mientras que en los demás casos
depende de la causa que ha provocado el Reset.
Finalmente, los tres bits de más peso del Registro de Estado se emplean para seleccionar el ban-
co de la RAM al que se desea acceder. En el direccionamiento directo, como se vio en el capítulo
anterior, se utilizan los bits RP1 y RP0 de acuerdo con la siguiente codificación.

RP1 RP0 BANCO SELECCIONADO


0 0 Banco 0 (00h-7Fh)
0 1 Banco 1 (80h-FFh)
1 0 Banco 2 (100h-17Fh
1 1 Banco 3 (18h-1FFh)

El bit IRP se usa concatenado con el bit de más peso del registro FSR para elegir el banco de
RAM en el direccionamiento indirecto.

IRP: Selección del banco de RAM en direccionado indirecto.


0: Banco 0 y 1 (00h-FFh).
1: Banco 2 y 3 (100h-1FFh).
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 59

En algunas instrucciones, el Registro de Estado puede actuar como destino, en cuyo caso los bits
de los señalizadores Z, C y DC no son escribibles en aquellas instrucciones que les afecte la opera-
ción que realizan, al igual que sucede con PD# y TO#. Por ejemplo, al ejecutar la instrucción clrf
STATUS, el Registro de Estado pasa a valer 000uu1uu. Los bits marcados con «u» no cambian el va-
lor que tenían. Por este motivo se recomienda usar las instrucciones bcf, bsf, swapf y movf para ma-
nejar los bits de este registro, ya que no afectan a los señalizadores Z, C y DC.
Como los tres bits destinados al direccionamiento de la RAM (IRP, RP1 y RP0) toman el valor
0 después del Reset, si se desease acceder al banco 3 de la RAM habría que emplear las siguientes
instrucciones:

bsf STATUS,RP0
bsf STATUS,RP1

3.3. REGISTRO DE OPCIONES (OPTION)

Tiene las mismas funciones que tenía en el PIC16F84:

1.a Asigna el divisor de frecuencias al Timer0 (TMR0) o al perro guardián.


2.a Elige el rango en el que trabaja el divisor de frecuencia.
3.a Selecciona el tipo de reloj del TMR0, que puede ser interno o externo, a través de la patita T0CKI.
También selecciona el flanco activo.
4.a Selecciona el flanco activo para la interrupción externa por RB0/INT.
5.a Activa o desactiva las resistencias de pull-up de la Puerta B.

El registro OPTION toma el valor 1111 1111 en cualquier tipo de reinicialización que se pro-
duzca.
El valor de sus bits junto con su significado se presentan en la Figura 3.2.

3.4. REGISTRO PARA CONTROLAR LAS INTERRUPCIONES

Los PIC16F87x tienen muchas causas que pueden originar una interrupción; 14 posibles causas tie-
nen los de 28 patitas y 15 los de 40. Al aceptarse una interrupción se salva el valor del PC en la Pi-
la y se carga aquel con el valor 0004h, que es el Vector de Interrupción. La mayoría de los recursos
o periféricos de que disponen los PIC16F87x son capaces de ocasionar una interrupción, si se pro-
graman adecuadamente los bits de los registros que pasamos a describir a continuación.
El PIC16F84 tenía 4 causas que generaban interrupción: desbordamiento del TMR0, activación
de la patita de interrupción RB0/INT, cambio del estado de una de las 4 patitas de más peso de la
Puerta B y finalización de la escritura de un byte en la EEPROM. Los nuevos PIC, además de las
causas que producen interrupción en el PIC16F84, tienen las siguientes:
60 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.a Desbordamiento del Timer1.


2.a Desbordamiento del Timer2.
3.a Captura o comparación en el módulo CCP1.
4.a Captura o comparación en el módulo CCP2.
5.a Transferencia en la Puerta Serie Síncrona.
6.a Colisión de bus en la Puerta Serie Síncrona.
7.a Fin de la transmisión en el USART.
8.a Fin de la recepción en el USART.
9.a Fin de la conversión en el Conversor A/D.
10.a Transferencia en la puerta paralela esclava. (Esta causa de interrupción no está disponible en los
PIC16F87x de 28 patitas.)

REGISTRO OPTION

RBPU# INTEDG T0CS T0SE PSA PS2 PS1 PS0

7 0

PS2:PS0 Valor con el que actúa el Divisor de Frecuencia.

PS2 PS1 PS0 División del TMR0 División del WDT

0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

PSA Asignación del divisor de frecuencias.


1 = El divisor de frecuencias se le asigna al WDT
0 = El divisor de frecuencias se le asigna al TMR0

T0SE Tipo de flanco en T0CKI.


1 = Incremento del TMR0 cada flanco descendente
0 = Incremento del TMR0 cada flanco ascendente

T0CS Tipo de reloj para el TMR0.


1 = Pulsos introducidos a través de T0CKI (contador)
0 = Pulsos de reloj interno FOSC/4 (temporizador)

INTEDG Flanco activo de la interrupción externa.


1 = Flanco ascendente
0 = Flanco descendente

RBPU# Resistencias de pull-up de la Puerta B.


1 = Desactivadas
0 = Activadas

Figura 3.2. Denominación y asignación de funciones de los bits del registro OPTION. Ocupa la
dirección 81h del banco 1 y la 181h del banco 3.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 61

Como los PIC16F87x disponen de más causas que provocan interrupción, también tienen más
registros para contener los bits señalizadores y de permiso o prohibición.

3.4.1. Registro de control de interrupciones (INTCON)

Se trata de un registro leíble y escribible que, para facilitar su acceso, se halla duplicado en los cua-
tro bancos, ocupando las direcciones 0Bh, 8Bh, 10Bh y 18Bh, respectivamente. Tiene la misión de
controlar las interrupciones provocadas por el TMR0, cambio de estado en las 4 líneas de más pe-
so de la Puerta B y activación de la patita RB0/INT. Es muy parecido al registro que con el mismo
nombre existía en el PIC16F84. Sólo cambia el bit 6 en los nuevos PIC, que es el PEIE (permiso de
interrupción de los periféricos) en lugar del EEIE que tenía el PIC16F84 para permitir la interrup-
ción cuando finalizase la escritura de un byte en la EEPROM. El bit PEIE actúa como una segunda
llave parcial de permiso o prohibición de las causas de interrupción que no están contempladas en
INTCON y que las provocan los restantes periféricos del microcontrolador. GIE es el bit de permi-
so global de todas las interrupciones. (Figura 3.3.)

3.4.2. Registro de permiso de interrupciones 1 (PIE1)

Contiene los bits que permiten (1) o prohiben (0) las interrupciones provocadas por los periféricos
internos del microcontrolador y que no estaban contempladas en INTCON.
Ocupa la dirección 8Ch y para que cumplan su función los bits de PIE1 es necesario que PEIE = 1
en INTCON <6>. El bit PSPIE sólo es válido en los modelos de 40 patitas, manteniéndose a 0 en los
que tienen 28 patitas. En la Figura 3.4 se presenta el registro PIE1 con el significado de todos sus bits.

REGISTRO INTCON

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

7 0

GIE Bit de permiso global de interrupciones.


1 = Permitido
0 = Prohibido

PEIE Bit de permiso de los periféricos que no se controlan con INTCON.

T0IE Bit de permiso de interrupción del TMR0.

INTE Bit de permiso de la interrupción externa por RB0/INT.

RBIE Bit de permiso de la interrupción por cambio en RB4-RB7.

T0IF Señalizador de desbordamiento en TMR0.

INTF Señalizador de activación de la patita RB0/INT.

RBIF Señalizador de cambio en RB4-RB7.

Figura 3.3. Designación y misión de cada uno de los bits del registro INTCON.
62 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

3.4.3. Registro de permiso de interrupciones 2 (PIE2)

Contiene los bits de permiso de interrupción de las causas que no figuraban en PIE1. La de fin de es-
critura en la EEPROM, la procedente del comparador, colisión de bus en el modo SSP y producción
de una captura o una comparación en el módulo CCP2. La Figura 3.5 presenta la función de estos tres
bits. Cuando se leen los bits que no tienen asignada función se obtiene 0.

3.4.4. Registros de los señalizadores de interrupciones 1 y 2 (PIR1 y PIR2)

En correspondencia con los bits de permiso/prohibición de las causas de interrupción recogidas


en los registros PIE1 y PIE2, existen otros dos registros, PIR1 y PIR2, cuyos bits actúan de se-
ñalizadores del momento en el que se origina la causa que provoca la interrupción, independien-
temente de si está permitida o prohibida. Ocupan las direcciones 0Ch y 0Dh, respectivamente.
(Figura 3.6.)

3.5. LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH

En el PIC16F84 se podía leer y escribir la memoria de datos EEPROM. En los PIC16F87x también se pue-
de leer y escribir la memoria de código FLASH. Esto significa que un programa dinámicamente puede ge-
nerar información que se puede grabar en la FLASH directamente, sin necesidad del grabador externo.

La propia aplicación se puede reprogramar según las condiciones externas. Es posible ampliar el área
de la memoria de datos no volátil EEPROM con posiciones libres de la memoria de código FLASH.

REGISTRO PIE1

PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

7 0

PSPIE Permiso de interrupción para la puerta paralela esclava al realizar una operación de lectura/
escritura. En modelos de 40 patitas.

ADIE Permiso de interrupción para el conversor A/D al finalizar la conversión.

RCIE Permiso de interrupción para el receptor del USART cuando el buffer se llena.

TXIE Permiso de interrupción para el transmisor del USART cuando el buffer se vacía.

SSPIE Permiso de interrupción para la puerta serie síncrona.

CCP1IE Permiso de interrupción para el módulo CCP1 cuando se produce una captura o comparación.

TMR2IE Permiso de interrupción para el TMR2 con su desbordamiento.

TMR1IE Permiso de interrupción para el TMR1 con su desbordamiento.

Figura 3.4. Designación y funciones de permiso y prohibición de los bits del registro PIE1.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 63

REGISTRO PIE2

— CMIE — EEIE BCLIE — — CCP2IE

7 0

CMIE Permiso de interrupción para el comparador.

EEIE Permiso de interrupción por fin de escritura en la EEPROM de datos.

BCLIE Permiso de interrupción por colisión de bus en el SSP cuando dos o más maestros tratan de
transferir al mismo tiempo.

CCP2IE Permiso de interrupción en el módulo CCP2.

Figura 3.5. Designación y funciones de los bits del registro PIE2.

La memoria EEPROM de los PIC16F87x tiene una capacidad de 128 o 256 bytes, con un rango
de direcciones de 00h a 7Fh o 00h a FFh, respectivamente.
En los PIC16F87x se puede leer y escribir la memoria FLASH y ésta puede alcanzar un tamaño
de 8 K palabras de 14 bits cada una. No es suficiente con un solo registro para especificar la direc-
ción, que alcanza los 13 bits, y lo mismo sucede para el contenido, que tiene una longitud de 14 bits.
Para cubrir esta necesidad, el registro EEADR se concatena con el EEADRH, que contiene los 5 bits
de más peso de la dirección. Por otra parte, el registro EEDATAH se concatena con el EEDATA y
contiene los 6 bits de más peso de la palabra leída o a escribir en la FLASH. Estos dos nuevos re-
gistros no se usan en las operaciones que afectan a la EEPROM. (Figura 3.7.)
Para controlar la operación de lectura/escritura de las memorias EEPROM y FLASH hay dos re-
gistros denominados EECON1 y EECON2. El EECON1 (Figura 3.8) ocupa la dirección 18Ch,
mientras que el EECON2, como sucedía con el PIC16F84, no está implementado físicamente y só-
lo se utiliza como registro de seguridad en la delicada operación de escritura, que tiene la elevada
duración de 2 milisegundos, aproximadamente. Antes de iniciar la escritura de una palabra se es-
cribe en EECON2 primero el dato 55h y luego el AAh.

REGISTRO PIR1

PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

7 0

REGISTRO PIR2

— CMIF — EEIF BCLIF — — CCP2IF

7 0

Figura 3.6. Los bits de los registros PIR1 y PIR2 contienen los señalizadores de las causas que
producen las interrupciones, en correspondencia con los registros PIE1 y PIE2.
64 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Se proponen algunos programas fundamentales para manejar las operaciones de lectura y escri-
tura en las memorias EEPROM y FLASH. En la parte dedicada a programación se incluye un ejer-
cicio completo sobre este tema. Un resumen de la operación de escritura de una posición de la EE-
PROM consta de los siguientes pasos:

1.a Se introduce el dato a escribir en EEDATA y la dirección en EEADR.


2.a Se pone WREN=1 en EECON1. Permiso de escritura.
3.a Se escribe la secuencia de seguridad que carga el registro EECON2 con el dato 55h y luego con
AAh.
4.a Para iniciar la escritura se pone WR=1 en EECON1.
5.a Al finalizar la escritura se activa el señalizador EEIF de forma automática.
6.a Se debe borrar el señalizador EEIF y prohibir la escritura (WREN=0).

PROGRAMA DE ESCRITURA DE LA MEMORIA EEPROM DE DATOS

bsf STATUS,RP1 ; Con estas dos instrucciones se


bcf STATUS,RP0 ; selecciona el banco 2
movf ADDR_L,W ; Se mete en EEADR la dirección a la
movwf EEADR ; que se va a acceder
movf DATA_L,W ; Se mete en EEDATA el dato a escribir
movwf EEDATA
bsf STATUS,RP0 ; Se pasa al banco 3
bcf EECON1,EEPGD ; Se selecciona el acceso a la EEPROM
bsf EECON1,WREN ; Se habilita la escritura en la EEPROM
bcf INTCON,GIE ; Se prohiben las interrupciones
movlw 55h ; Se mete el valor 55h y el AAh en el
movwf EECON2 ; registro de seguridad EECON2 tal y
movlw AAh ; como recomienda el fabricante
movwf EECON2
bsf EECON1,WR ; Se da la orden de escritura
bsf INTCON,GIE ; Se habilitan las interrupciones
sleep ; Se espera a que se produzca interrupción
; por fin de escritura
bcf EECON1,WREN ; Se prohibe la escritura de nuevos datos
bcf STATUS,RP1 ; Se pasa al banco 0
bcf STATUS,RP0 ;
bcf PIR2,EEIF ; Se borra el flag de fin de escritura

EADRH (10Fh) EEADR (10Dh)


0 0 0 x x x x x x x x x x x x x

DIRECCIÓN DE 13 BITS (8 K)
EEDATAH (10Eh) EEDATA (10Ch)
0 0 x x x x x x x x x x x x x x

DATO DE 14 BITS (FLASH)

Figura 3.7. Para contener la dirección y el dato de la memoria FLASH se necesitan dos registros
para cada valor.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 65

REGISTRO EECON1

EEPGD — — — WRERR WREN WR RD

7 0

EEPGD Selecciona el acceso a la FLASH (1) o a la EEPROM (0).

WRERR Señalizador de error en escritura.

WREN Permiso de escritura.

WR Hay que ponerlo a 1 para iniciar la escritura y pasa a 0 automáticamente cuando finaliza.

RD Hay que ponerlo a 1 para iniciar la lectura.

Figura 3.8. Denominación y misión de los bits del registro EECON1.

PROGRAMA DE LECTURA DE LA MEMORIA FLASH DE CÓDIGO

bsf STATUS,RP1 ; Con estas dos instrucciones se


bcf STATUS,RP0 ; selecciona el banco 2
movf ADDR_H,W ; Se mete en EEADRH la parte alta de la
movwf EEADRH ; dirección a leer
movf ADDR_L,W ; Se mete en EEADR la parte baja de la
movwf EEADR ; dirección a leer
bsf STATUS,RP0 ; Se pasa al banco 3
bsf EECON1,EEPGD ; Se selecciona el acceso a la FLASH
bsf EECON1,RD ; Se da la orden de lectura de la FLASH
nop ; Tarda 3 ciclos en tener el dato, por lo que
nop ; cualquier instrucción es ignorada
bcf STATUS,RP0 ; Se pasa al banco 2
movf EEDATA,W ; Se coge la parte baja del dato leído
movwf DATA_L
movf EEDATAH,W ; Se coge la parte alta del dato leído
movwf DATA_H

PROGRAMA DE ESCRITURA EN LA MEMORIA FLASH DE CÓDIGO

bsf STATUS,RP1 ; Con estas dos instrucciones se


bcf STATUS,RP0 ; selecciona el banco 2
movf ADDR_H,W ; Se mete en EEADRH la parte alta de la
movwf EEADRH ; dirección a escribir
movf ADDR_L,W ; Se mete en EEADR la parte baja de la
movwf EEADR ; dirección a escribir
movf DATA_H,W ; Se mete en EEDATH la parte alta
movwf EEDATH ; del dato a escribir
movf DATA_L,W ; Se mete en EEDATA la parte baja
66 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

PROGRAMA DE ESCRITURA EN LA MEMORIA FLASH DE CÓDIGO (continuación)

movwf EEDATA ; del dato a escribir


bsf STATUS,RP0 ; Se pasa al banco 3
bsf EECON1,EEPGD ; Se selecciona el acceso a la FLASH
bsf EECON1,WREN ; Se habilita la escritura en la FLASH
bcf INTCON,GIE ; Se prohiben las interrupciones
movlw 55h ; Se mete el valor 55h y el AAh en el
movwf EECON2 ; registro de seguridad EECON2 tal y
movlw AAh ; como recomienda el fabricante
movwf EECON2
bsf EECON1,WR ; Se da la orden de escritura
nop ; El microcontrolador ignora estas dos
nop ; instrucciones y no sigue con la siguiente
; hasta que no termine la escritura
bsf INTCON,GIE ; Se habilitan las interrupciones
bcf EECON1,WREN ; Se prohibe la escritura de nuevos datos

Es una buena práctica de programación verificar que todos los valores escritos en las memorias
EEPROM y FLASH son correctos. Para evitar escrituras indeseadas en la EEPROM motivadas por
espúreos en la inicialización del microcontrolador, se controla el bit WREN, prohibiendo cualquier
operación de escritura mientras duran los 72 milisegundos que temporiza el Timer de Power-up. Pa-
ra realizar la misma protección en la memoria FLASH se debe poner a 0 el bit WRT de la Palabra
de Configuración, que sólo puede escribirse desde un grabador externo.
Dependiendo del valor del bit WRT y de los bits de Protección de Código CP1 y CP0, ubicados
en la Palabra de Configuración, se consiguen diversas alternativas de protección contra lectura y es-
critura de la FLASH. (Figura 3.9.)

CONFIGURACIÓN DE BITS POSICIONES LECTURA ESCRITURA LECTURA ESCRITURA


CP1 CP0 WRT DE FLASH INTERNA INTERNA ICSP ICSP

0 0 x Toda la memoria de programa Sí No No No


0 1 0 Áreas no protegidas Sí No Sí No
0 1 0 Áreas protegidas Sí No No No
0 1 1 Áreas no protegidas Sí Sí Sí No
0 1 1 Áreas protegidas Sí No No No
1 0 0 Áreas no protegidas Sí No Sí No
1 0 0 Áreas protegidas Sí No No No
1 0 1 Áreas no protegidas Sí Sí Sí No
1 0 1 Áreas protegidas Sí No No No
1 1 0 Toda la memoria de programa Sí No Sí Sí
1 1 1 Toda la memoria de programa Sí Sí Sí Sí

Figura 3.9. Diversas posibilidades de protección de la memoria FLASH ante operaciones de lectura y es-
critura, de acuerdo con los valores de los bits WRT, CP1 y CP0 de la Palabra de Configuración.
Programar PIC es fácil

UN PROGRAMA QUE MANEJA LAS MEMORIAS FLASH DE CÓDIGO


Y EEPROM DE DATOS

En este mismo capítulo se han visto trozos de código para leer y escribir la memoria FLASH de ins-
trucciones y para escribir la memoria EEPROM de datos. Vamos a realizar ahora un ejercicio que
reúna la utilización de estas dos memorias. Para ello, consideraremos que los códigos ya vistos, con
una pequeña modificación, son subrutinas a las cuales se llamará para realizar procesos de lectu-
ra/escritura sobre las citadas memorias. Así, tendremos las siguientes subrutinas:

LEER-FLASH
ESCRIBIR-FLASH
LEER-EEPROM
ESCRIBIR-EEPROM

Falta por realizar el código correspondiente a la lectura de la EEPROM, que una vez convertida
a subrutina quedaría como sigue.

* LEER-EEPROM bsf STATUS,RP1 ; Con estas dos


; instrucciones se
bcf STATUS,RP0 ; selecciona el banco 2
movf ADDR_L,W ; Se mete en EEADR
movwf EEADR ; la dirección a leer
bsf STATUS,RP0 ; Se pasa al banco 3
bcf EECON1,EEPGD ; Se selecciona el
; acceso a EEPROM
bsf EECON1,RD ; Se da la orden de
; lectura
bcf STATUS,RP0 ; Se pasa al banco 2
movf EEDATA,W ; Se coge el dato leído
movwf DATA_L ; y se deja en
; DATA_L
return ; Retorno de
; subrutina

67
68 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

En las líneas que empiezan con * se pretende resaltar las modificaciones que habría que llevar a
cabo en los códigos anteriores para convertirlos a subrutinas: poner como etiqueta el nombre co-
rrespondiente de cada subrutina y como última instrucción la return para volver al programa prin-
cipal.

Enunciado

La posibilidad de escribir la memoria de código mientras se está ejecutando un programa puede re-
sultar interesante para ciertas aplicaciones. Imaginemos que en un programa se necesita saber si es
la primera vez que se utiliza, para pedir cierta información de configuración por ejemplo, o si ya se
ha utilizado más veces y dicha información ya se tiene. Hay muchos modos de hacer esto: se podría
preguntar al usuario, mirar cierta variable para determinarlo y ejecutar una subrutina u otra o, como
haremos aquí, modificar el programa la primera vez que se entra para en posteriores ocasiones eje-
cutar un código diferente.
En nuestro programa, la primera vez que se ejecute se leerá la primera posición de la EE-
PROM (aunque no es estrictamente necesario lo haremos así para probar las funciones vistas en
este capítulo). Si en dicha posición se encuentra el valor 27h (que anteriormente deberemos gra-
bar) significa que el programa no se ha ejecutado anteriormente, en cuyo caso se inicializarán una
serie de contadores y se modificará el programa para que la próxima vez que se ejecute los con-
tadores no sean inicializados. Puede parecer que sería más sencillo e igual de óptimo no modifi-
car el programa, sino el valor de la EEPROM, y simplemente leer cada vez que se ejecuta el pro-
grama la primera posición de ésta, de modo que se salte a un punto u otro. La ventaja de nuestro
método es que, aunque un astuto usuario quisiera hacer trampa a nuestro programa variando el va-
lor de la EEPROM para que creyera que era la primera vez que se entraba en él, al haberse mo-
dificado el programa y, a no ser que tenga el original, le será imposible saber cuál era la secuen-
cia que seguía esta primera vez. ¿Se imagina que el cuentakilómetros de los coches tuviera un
método tan sofisticado?
En esta ocasión, para resolver el ejercicio sólo necesitamos como base el organigrama ya que, al
no utilizar periféricos de E/S, el esquema eléctrico no aporta ningún dato significativo.

Organigrama

El organigrama de la Figura 3.10 representa el funcionamiento más completo del programa, la pri-
mera vez que se ejecuta. En siguientes ocasiones, ya desde la primera instrucción se saltará a otras
instrucciones.

Programa comentado

Antes de realizar el programa principal se debe hacer un primer programa con el cual se escriba
en la primera posición de la EEPROM (dirección 00) el valor 27. Este primer programa se gra-
bará en el PIC de la forma habitual y su cuerpo consistirá en una llamada a la subrutina ESCRI-
BIR-EEPROM, habiendo antes metido en el registro ADDR_L el valor 00 y en DATA_L el va-
lor 27.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 69

Figura 3.10. Organigrama del programa en su primera ejecución.

Antes de grabar un nuevo programa, como ya se expuso en el primer capítulo, es necesario bo-
rrar el PIC, pero este borrado no afecta a la EEPROM, por lo que al grabar el programa que real-
mente nos interesa el valor 27 de la primera posición permanecerá ahí.
Ahora, intente seguir el desarrollo del programa e imaginar cuál ha sido el resultado final.

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería

LOCAL_VAR EQU 0x20 ; Dirección de comienzo


cblock LOCAL_VAR ; de var. locales
CONT ; Para el bucle de borrado
; de Flash
70 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

CONT1 ; Contadores a inicializar


CONT2
CONT3
ADDR_H ; MSB de dirección FLASH
ADDR_L ; LSB de dirección
; FLASH / EEPROM
DATA_H ; MSB del dato FLASH
DATA_L ; LSB del dato
; FLASH/ EEPROM
DEBUG ; Registro de info.
; de debugging
endc

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Instrucción a cambiar por
; goto OTRAS
ORG 0x05 ; Salta el Vector de
; Interrupción

; Las instrucciones siguientes serán borradas tras la lectura de la EEPROM,


; realizándose la inicialización de ciertos valores si el valor leído era
; el esperado, y no haciéndola en caso contrario. En cualquiera de los dos
; casos, estas instrucciones se eliminarán.

INICIO clrf DEBUG


bsf DEBUG, 0 ; Punto de control 0
bcf STATUS, RP1 ; Selecciona banco 1
bsf STATUS, RP0
clrf TRISB ; PORTB como salida
bcf STATUS, RP0 ; Vuelta a banco 0
clrf PORTB
bsf STATUS, RP1 ; Selecciona banco 2
clrf ADDR_L ; Dirección 0 EEPROM
call LEER_EEPROM ; Deja dato leído
; en DATA_L
movlw 0x27 ; Valor para comparar
subwf DATA_L, W ; con dato leído EEPROM
btfss STATUS, Z ; ¿Son iguales?
goto NO_INIC ; No. Se indica que
; ha habido error
goto INIC ; Sí. Se realiza
; la inicialización

; Si se entra en INIC es que es la 1.a vez que se ejecuta el programa y en la posición


; 00 de la EEPROM se encuentra el valor 27. Teóricamente, si no fuera así no estaría
; pasando por aquí, ya que las instrucciones no existirían.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 71

NO_INIC bsf DEBUG, 1 ; Punto de control 1


goto MODIFICAR ; Se borra TODO el código
; de comparación e inic SIN haber realizado la INIC. Si entra por aquí algo
; va mal

INIC bsf DEBUG, 2 ; Punto de control 2


clrf CONT1 ; Se inicializan contadores
movlw 35
movwf CONT2
movlw 49
movwf CONT3

MODIFICAR bsf DEBUG, 3 ; Punto de control 3


bsf STATUS, RP1
bcf STATUS, RP0 ; Se selecciona banco 2
clrf ADDR_H ; MSB dir FLASH
clrf ADDR_L ; LSB dir FLASH
movlw b’00101000’ ; MSB instrucción goto k
movwf DATA_H
movlw OTRAS ; LSB instrucción goto k
movwf DATA_L ; → goto OTRAS
; (OTRAS ha de ser una etiqueta cuya dir en la Flash sea < = 255 )

call ESCRIBIR_FLASH
bcf STATUS, RP0 ; Banco 2
; (ESCRIBIR_FLASH
; deja en el 3)
movlw d’36’ ; N.o instrucciones a borrar
movwf CONT ; desde la dir 0x01

BORRAR incf ADDR_L, F ; Siguiente dir a borrar


clrf DATA_H ; MSB instrucción nop
clrf DATA_L ; LSB instrucción nop
call ESCRIBIR_FLASH
bcf STATUS, RP0 ; Banco 2
decfsz CONT, F ; ¿Contador a 0 ?
goto BORRAR ; No. Seguir borrando
bsf DEBUG, 4 ; Punto de control 4
goto OTRAS ; Sí. Ir a la parte que
; siempre se ejecuta

OTRAS bsf DEBUG, 5 ; Punto de control 5


bcf DEBUG,7 ; Será el único punto de
; control que se vea a partir de la 2.a ejecución
bcf STATUS, RP1
bsf STATUS, RP0 ; Banco 1
clrf TRISB ; PORTB como salida. Hay
; que volverlo a configurar aquí porque sólo la primera vez se inicilizará al
; principio del programa
72 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

bcf STATUS, RP0 ; banco 0


movf DEBUG, W ; Se saca por la puerta B los
movwf PORTB ; puntos de control por los
; que ha pasado el programa
goto OTRAS

INCLUDE <eeprom.asm> ; Ficheros de escritura y


INCLUDE <flash.asm> ; lectura de las memorias
END ; Fin de programa

¿Se ha dado cuenta de nuestra pequeña trampa? Hemos introducido puntos de control a lo largo
de todo el programa poniendo a 1 los bits de un registro según se iban ejecutando partes, y mos-
trando el valor total al final del programa. De esta forma, podemos comprobar de una forma rápida
y fiable el cambio de nuestro código. Estos puntos de control no forman parte del programa en sí,
por lo que no se muestran en el organigrama ni en el esquema eléctrico. Una vez comprobado el
buen funcionamiento pueden ser eliminados.
El programa ha cambiado completamente, tal y como se muestra más abajo. Tras la primera ins-
trucción, la mayoría de las instrucciones han sido cambiadas por el código de operación de la ins-
trucción NOP. A partir de ese código, aun teniendo acceso a él, sería imposible conocer el progra-
ma original. Este mismo método puede utilizarse para aplicaciones de aprendizaje en el campo de
la Inteligencia Artificial, donde microbots controlados por microcontrolador pueden ir variando sus
programas dinámicamente para adaptarse a situaciones concretas.

Figura 3.11. PICME-TR mostrando el código del programa una vez modificado.
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 73

Prueba del programa

En un programa donde no hay entradas y salidas el resultado no puede comprobarse a simple vista.
Podemos introducir puntos de control, como en nuestro caso, o utilizar herramientas adecuadas pa-
ra ello. Los pasos a realizar son los siguientes:

1.o Grabe en el microcontrolador el primer programa para situar en la posición 00 de la EEPROM el


valor 27.
2.o Ejecútelo.
3.o Vuelva al programa de grabación PICME-TR y elija la opción Leer PIC, dentro de la ventana MO-
DELO ELEGIDO, Editar Datos. La información de la ventana superior izquierda habrá variado pa-
ra contener las posiciones de la EEPROM de datos. Compruebe que en la posición 00 efectiva-
mente se ha grabado un 27.
4.o Grabe ahora el programa del enunciado y, antes de ejecutarlo la primera vez, elija de nuevo Leer
PIC y fíjese en la ventana BUFFER DE MEMORIA DE PROGRAMA. Compruebe además que el
valor de la EEPROM sigue ahí.
5.o Ejecute el nuevo programa en el PIC.
6.o Vuelva de nuevo al PICME-TR y lea el PIC para comprobar qué tiene ahora dentro. ¿Ha variado?
Diseñar con PIC es fácil

AMPLIACIÓN DE PERIFÉRICOS PARA EL TRABAJO CON PIC

Con la aparición de los PIC16F87x, surge la necesidad de disponer de herramientas que saquen to-
do el partido a los nuevos recursos que incorporan. El tratamiento de sensores analógicos y la regu-
lación de motores, que estos PIC son capaces de gobernar mediante su hardware interno, ha impul-
sado a Ingeniería de Microsistemas Programados S. L. a diseñar una plataforma con la que poder
experimentar técnicas avanzadas de control.

La tarjeta de expansión Micro’PIC I/O

La Micro´PIC I/O es una tarjeta de expansión que se conecta al Micro´PIC Trainer mediante el PIC-
BUS tal y como muestra la Figura 3.12.
Se basa en la inclusión de periféricos de E/S relacionados con las nuevas características de los
PIC16F87x.

Figura 3.12. Conexión de las tarjetas Micro’PIC Trainer y Micro’PIC I/O.

74
PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 75

ALIMENTACIÓN AC
OPTOACOPLADOR

DOBLE GENERADOR DE
PICBUS FUNCIONES
MOTOR DC
CONTR.
MOTOR
DETECTOR
DE CRUCE
CRISTAL CUARZO

REGLETA DE
CONEXIONES

PIEZOELÉCTRICO SENSORES OPTO- RELÉS


ANALÓGICOS TRIAC

Figura 3.13. Fotografía de la tarjeta de expansión Micro’PIC I/O con las partes más significativas
remarcadas.

1.a Doble conector PICBUS: con todas las señales proporcionadas por los PICs de 28 patitas.
2.a Alimentación: para conexión de un transformador de 12 VAC.
3.a Regleta de conexiones: asociadas al PICBUS para disponer de todas las señales y conectar me-
diante cable de modo flexible a los distintos periféricos.
4.a Generador de funciones: que proporciona una onda cuadrada de frecuencia seleccionable por
switches.
5.a Cristal de cuarzo: de 32.768 KHz para su uso en aplicaciones de tiempo real.
6.a Piezoeléctrico: dispositivo para generación de un pitido cuando se activa.
7.a Generador de tensión de referencias: necesaria en los conversores analógico/digitales.
8.a Sensores analógicos: de luminosidad (tipo LDR) y de temperatura (tipo LM35).
9.a Circuito de detección de cruce a paso por cero: de una señal alterna senoidal.
10.a Circuito de regulación de alterna: mediante un opto-triac que regula la potencia aplicada a una
carga resistiva (lámpara).
11.a 2 relés: con sus correspondientes circuitos de excitación.
12.a Motor DC: puede controlarse tanto su encendido/apagado como su sentido, y la tensión que lo
alimenta puede ser de 5 VAC o de 12 VAC, según un jumper dispuesto a tal efecto.
13.a Controlador de motor: con posibilidad de regular su velocidad.
14.a Optoacoplador infrarrojo de corte: cercano al motor que puede ser usado como encoder para
controlar los giros del motor.

Alimentación

Recibe una tensión de 12 VAC y un puente rectificador (D1) junto a un condensador (C1) rectifica
y filtra la VAC para entregarla a dos reguladores UA7805 (U1) y UA7812 (U2), que proporcionan
+5 VDC y +12 VDC respectivamente. Su esquema electrónico se muestra en la Figura 3.14.
76 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

U1
D1 VCC+5V
1 3
IN G OUT
CN1 N C2
- + D 100n
UA7805
12VAC 2
VDD+12V
U2
+ C1
100uF 1 3
IN G OUT
N
D C3
UA7812 100n
2

Figura 3.14. Esquema electrónico de la fuente de alimentación.

Doble conector PICBUS

En la Figura 3.15 se puede observar el doble conector PICBUS. Se trata de dos conectores idénti-
cos de 26 vías que soportan las mismas señales. Mediante un cable plano se conecta uno de dichos
conectores con el Micro’PIC Trainer, en donde se aloja el PIC bajo prueba. El otro conector puede
usarse para acoplar también al Micro’PIC Trainer Plus y así conformar un sistema completo con las
tres tarjetas, que pone a disposición del usuario un abanico extensísimo de periféricos y un sistema
de desarrollo de aplicaciones profesional que facilitará en gran medida el diseño de aplicaciones.

1 2 8
3 + + 4 GND
4
5 + + 6 VCC
2
7 + + 8 MCLR
3
9 + + 10 RA0
5
11 + + 12 RA1
7
13 + + 14 RA2
9
15 + + 16 RA3
1
17 + + 18 RA4
6
19 + + 20 RA5
11
21 + + 22 RB0
13
23 + + 24 RB1
15
25 + + 26 RB2
17
+ + RB3
19
RB4
PIC-BUS 1 21
RB5
23
RB6
25
RB7
26
RC0
24
1 2 RC1
22
3 + + 4 RC2
20
5 + + 6 RC3
18
7 + + 8 RC4
16
9 + + 10 RC5
14
11 + + 12 RC6
12
13 + + 14 RC7
10
15 + + 16 GND
17 + + 18
19 + + 20
21 + + 22
23 + + 24
25 + + 26
+ +
1 3 5 7 9 11131517192123 25 PIC-BUS 2 2624222018161412108 6 4 2

Figura 3.15. Esquema electrónico del doble conector PICBUS.


PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 77

Generador de funciones

En base a un PIC16C54RC (U3), tal y como se muestra en la Figura 3.16, existe un generador de
onda cuadrada cuya frecuencia se puede seleccionar entre 8 valores diferentes con tres microrrup-
tores (SW1).

Oscilador de 32.768 KHz

Compuesto por un cristal de cuarzo de 32.768 KHz y 2 condensadores de 27 pF, configura un osci-
lador de una frecuencia igual a la de resonancia del cristal. (Figura 3.17.)
La inclusión de este oscilador tiene la finalidad de permitir al temporizador TMR1 trabajar en la
modalidad en la que precisa una base de tiempos externa gobernada por un cristal de cuarzo.
La razón de haber elegido esta frecuencia es su estratégico valor, que tiene la propiedad de que
con 215 impulsos se consigue fácilmente el tiempo de 1 segundo.

Piezoeléctrico

Se trata de un zumbador piezoeléctrico que va a ser muy interesante para todas aquellas aplicacio-
nes en las que se precise generar pitidos o «beeps» sonoros a modo de señales de aviso o alarma. (Fi-
gura 3.18.)

VCC

C7
100n D2
RPACK1
R1
4x10K
330
C4
SW1 10p
4 3 X/128
5 2 X/64
6 1 X/32
U3 X/16
1 18 X/8
R2 2 RA2 RA1 17 X/4
3 RA3 RA0 16 X/2
10K RTCC OSC1 X
4 15
5 MCLR OSC2 14
6 VSS VDD 13
7 RB0 RB7 12 ENABLE
8 RB1 RB6 11
9 RB2 RB5 10
VCC RB3 RB4

PIC16C54-RC

Figura 3.16. Esquema electrónico del generador de funciones.


78 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

C5

T1OSO

27p
Y1
C6 32.768KHz

T1OSI

27p

Figura 3.17. Esquema electrónico del oscilador.

BZ1

R15

ENABLE
Piezoeléctrico
10K

Figura 3.18. Esquema electrónico del zumbador piezoeléctrico.

Sensores analógicos

La inclusión de un convertidor analógico/digital entre los recursos del PIC16F87x ha animado al fa-
bricante a incluir un sensor de temperatura de tipo LM35D y un sensor de luz de tipo LDR. La tensión
de referencia necesaria que precisan los circuitos de alimentación se ha resuelto con el circuito
LM336z-2.5V de National Semiconductor, que proporciona una tensión de 2,5 VDC. Mediante un
jumper se puede relacionar como tensión de referencia los +2,5 VDC o los +5 VDC de alimentación.
Ambos sensores se muestran en la Figura 3.19 y forman junto a una resistencia un divisor de ten-
sión que se alimenta con el voltaje de referencia seleccionado.

VCC

JP2

R5
R7
10K

D3
Tª Luz Vref. 2K2
LM35D
R6 D4
LDR LM336-2.5V

Figura 3.19. Esquema electrónico de los sensores analógicos.


PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS MEMORIAS FLASH Y EEPROM 79

Opto-triac para control AC

Para conseguir el control de la potencia de AC que se entrega en la carga es necesario conocer el mo-
mento en el que la tensión pasa por el valor de 0 VAC. El circuito «detector de paso por cero» pue-
de observarse en la izquierda de la Figura 3.20 y consiste en un rectificador en puente Graetz que
recibe 12 VAC y saca una tensión rectificada en doble onda de 100 Hz, que se aplica al emisor del
optoacoplador 4N33. Cada vez que la señal vale 0 VAC no hay generación de luz y el optotransis-
tor se bloquea, y la tensión de su colector sube a +Vcc avisando del cruce por cero. Cada vez que la
VAC pasa por 0 V se obtiene en el colector del transistor un impulso positivo, que puede provocar
una petición de interrupción en el PIC.
En la tarjeta I/O se ha utilizado como carga una lámpara de incandescencia de 12 VAC gober-
nada su potencia mediante un opto-triac MOC3041.

Relés

Es un dispositivo muy usado en la industria y muy fácil de controlar. Basta un sencillo circuito de
excitación para poder controlar la activación o no de las bobinas que abren o cierran los contactos
que controlan la carga. La Figura 3.21 muestra los dos relés alojados en el Micro’PIC I/O.

Motor DC y driver L293B

Para el control de motores en la tarjeta Micro’PIC I/O se ha elegido el circuito integrado L293B, que
es capaz de controlar dos motores DC o uno PAP. Soporta una corriente de 1 A por canal.
Consta de 4 canales que son gobernados por señales de control EN1 y EN2 fácilmente genera-
bles por los recursos de los PIC16F87x, especialmente por el PWM.
A la izquierda de la Figura 3.22 se muestra uno de estos drivers. En este caso tiene conectado un
motor de corriente continua en sus salidas OUT1 y OUT2, cuyo control se lleva a cabo a través de
EN1 para el encendido/apagado del motor e IN1-IN2 para el sentido de giro.

VCC
LP1
12V
R9
100

TRIAC R10 U7
D5 U6 220
4N33 12VAC
12VAC - +

ZERO CROSS
MOC3041

R8
220

Figura 3.20. Esquema electrónico del opto-triac para control AC.


80 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

VCC VCC

R11 R13
220 220
a1 b1 a2 b2

D6 D8
1N4007 RELE1 1N4007 RELE2

c1 c2
R12 D7 R14 D9
Q1 Q2
Relé 1 Relé 2
SC107 SC107
10K 10K

Figura 3.21. Esquema electrónico de los relés.

Optoacoplador encoder

Para realizar medidas sobre la velocidad del motor DC y de su posicionamiento, en el Micro’PIC


I/O existe un optoacoplador de ranura ubicado físicamente debajo del eje del motor. Ver parte dere-
cha de la Figura 3.22.
Para conformar un encoder basta recortar un disco de material rígido trasparente (plástico) y
realizar un orificio en su centro para pegarlo al eje del motor. Luego se dibujan unas franjas radia-
les opacas a la luz infrarroja. El número de franjas determinará la resolución. El disco encaja en la
ranura del optoacoplador, que generará un pulso cada vez que pase una franja opaca.

VCC VCC
U4
1 16
ENABLE 2 EN1 VCC 15
IN1 IN4 U5
3 14
IN1 4 OUT1 OUT4 13 C8 H21A1
5 GND GND 12
IN2 GND GND 100n
6 11
7 OUT2 OUT3 10
8 IN2 IN3 9
VDD EN2 R3

JP1 L293B VCC Encoder


M1
220
R4
VDD VCC 1K

Motor 3-12VDC

Figura 3.22. Esquema electrónico del control de motores.


4 Las puertas de E/S
y recursos especiales
del procesador

4.1. PUERTAS DE E/S

Los microcontroladores PIC16F87x encapsulados con 28 patitas disponen de tres Puertas de E/S (A,
B y C), mientras que los que tienen 40 patitas alcanzan las cinco (A, B, C, D y E). Todas las líneas
de estas puertas son multifuncionales, es decir, realizan diversas funciones según estén programa-
das. Sin embargo, todas ellas tienen la capacidad de trabajar como líneas de E/S digitales.
Las características principales de las puertas son similares a las del PIC16F84, por eso en este
tema se intenta resaltar las novedades que añaden las de los PIC16F87x.

4.1.1. Puerta A

Sólo dispone de 6 líneas, denominadas RA0-RA5. Son bidireccionales y su sentido queda configu-
rado según la programación de los bits del registro TRISA. Si el bit 0 del registro TRISA se pone a
1, la línea 0 (RA0) de la Puerta A funciona como entrada. Si se pone a 0 funciona como salida y el
contenido de la báscula de salida se aplica a la patita correspondiente, según puede apreciarse en el
esquema de la Figura 4.1.
Al leer el registro PORTA de la Puerta A se lee el estado de las patitas, que es el que se halla es-
crito en la báscula de datos de la Figura 4.1. La escritura entraña una operación de «lectura-modifi-
cación-escritura», o sea, se leen las patitas, luego se modifica su valor y finalmente se escribe en la
báscula de datos.
Las patitas RA0/AN0, RA1/AN1 y RA2/AN2, además de líneas de E/S digitales también pue-
den actuar como los canales de entrada 0, 1 y 2 por los que se puede aplicar una señal analógica al
conversor A/D. La patitas RA3/AN3/VREF+ también puede actuar como entrada de la Tensión de Re-
ferencia para los periféricos que la precisan. La patita RA4/T0CKI actúa como E/S digital y como
entrada de la señal de reloj para el Timer 0. Por último, la patita RA5/AN4/SS# tiene multiplexadas
tres funciones: E/S digital, canal 4 para el conversor A/D y selección del modo esclavo cuando se
trabaja con la comunicación serie síncrona. Excepto en los modelos PIC16F870/1/2 en que hay al-
gunas patitas de la Puerta A que realizan más funciones:

81
82 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.a RA2/AN2/VREF/CVREF: Además de las dos funciones primeras comentadas, también puede sopor-
tar la VREF y la CVREF.
2.a RA4/T0CKI/C1OUT: La última función consiste en actuar como salida del comparador 1.
3.a RA5/AN4/SS#/C2OUT: La última función que puede soportar esta patita es la de salida del com-
parador 2.

BÁSCULA DE DATOS
VDD
LÍNEA DEL BUS DE DATOS
D Q

ESCRITURA PUERTA A
CK Q#
P

PATITA E/S

BÁSCULA TRISA N

D Q VSS

ESCRITURA TRISA
CK Q# MODO ENTRADA
ANALÓGICA

LECTURA TRISA

Q D

AL CONVERSOR A/D
EN

LECTURA PUERTA A

Figura 4.1. Esquema de conexionado de las patitas RA0-RA3 y RA5, que multiplexan la función de
E/S digital con la de canal de entrada de una señal analógica para el Conversor A/D.

Cuando se produce un Reset al conectar la tensión de alimentación (POR : Power-on Reset) todas las
patitas de la Puerta A quedan configuradas como canales de entrada para el Conversor A/D y son
leídas como 0.

Para seleccionar si las líneas de la Puerta A van a trabajar como E/S digitales o como canales de
entrada para el conversor A/D, hay que escribir el valor adecuado sobre el registro ADCON1, que se
estudiará con mayor profundidad al describir el conversor. De momento es suficiente con saber que
si se carga en dicho registro el valor 011x en sus 4 bits de menos peso, todas las líneas de la Puerta A
funcionan como E/S digitales y para ello habrá que escribir la siguiente secuencia de instrucciones:
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 83

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

05h PORTA — — RA5 RA4 RA3 RA2 RA1 RA0 –0x 000 –0u 0000

85h TRISA — — Registro de configuración de la Puerta A –11 1111 –11 1111

9Fh ADCONI ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0 –0- 0000 –0- 0000

Figura 4.2. Tabla que recoge las características y bits más importantes de los registros que manejan
la Puerta A. Cuando se pone una x significa desconocido, una u que no cambia y un –
que no está implementado y se lee como 0.

movlw b’0000 0110’ ; Los 4 bits de menos peso son 0110.


movwf ADCON1 ; Las líneas de la Puerta A son E/S digitales.

En la Figura 4.2 se presenta una tabla que recoge los registros que manejan la Puerta A.

4.1.2. Puerta B

Dispone de 8 líneas bidireccionales cuya función se elige mediante la programación del registro
TRISB, igual que sucedía en la Puerta A con TRISA. En el siguiente programa, se configuran co-
mo entradas las líneas RB<3-0> y RB<7:6>, mientras que RB<5:4> quedan asignadas como sali-
das.

bcf STATUS,RP0 ; Selección del Banco 0


bcf STATUS,RP1
clrf PORTB ; Inicializa la Puerta B, borrando las básculas
; de datos
bsf STATUS,RP0 ; Selección del Banco 1
movlw 0xCF ; Valor para configurar las líneas de la
movwf TRISB ; Puerta B como Entradas = RB<3-0> y
; RB<7:6>. Salidas = RB<5:4>

Como se estudia al final de este tema, los PIC16F87x pueden ser programados con voltaje alto
y con voltaje bajo, siendo en este último caso la misma tensión de alimentación del microcontrola-
dor VDD = 5 V la que se emplea en la grabación del programa. En la programación con voltaje al-
to, éste se introduce por la patita MCLR#/VPP y está comprendido entre 12 y 14 V. En la progra-
mación con voltaje bajo por la patita MCLR#/VPP se aplican 5 V y la patita RB3/PGM hay que
conectarla a nivel alto. En la programación con voltaje alto, esta última patita es una E/S digital nor-
mal. Como la programación siempre se realiza síncronamente en serie, por la patita RB6/PGC se in-
troducen los impulsos de reloj y por la RB7/PGD los bits de datos en serie.
84 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Todas las patitas de la Puerta B disponen de una resistencia interna de pull-up al positivo de la
alimentación, que queda conectada cuando el bit RBPU#, que es el bit 7 del registro OPTION, tie-
ne valor 0. La resistencia de pull-up, que es un transistor CMOS tipo P, como se aprecia en la Fi-
gura 4.3, se conecta automáticamente siempre que la línea esté configurada como salida. Cuando
se produce un Reset por conexión de la alimentación (POR) se desconectan todas las resistencias
pull-up.

VDD

RBPU#
P

LÍNEA DEL BUS DE DATOS


D Q PATITA E/S

ESCRITURA PUERTA
CK Q#

BÁSCULA TRIS

D Q

ESCRITURA TRIS
CK Q#

LECTURA TRIS

Q D

LECTURA PUERTA Q1
EN

RBIF

DE LAS OTRAS 3 Q D
LÍNEAS RB7-RB4 LECTURA PUERTA
EN
Q3

RB7:RB6 EN MODO PROGRAMACIÓN EN SERIE

Figura 4.3. Conexionado interno de las patitas RB<7-4> de la Puerta B.


LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 85

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

06h, 106h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu

86h, 186h TRISB Registro de configuración de la Puerta B 1111 1111 1111 1111

81h, 181h OPTION–REG RBPU# INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

Figura 4.4. Estructura de los registros que manejan la Puerta B.

Las líneas RB<7-4> pueden programarse, como en el PIC16F84, para generar una interrup-
ción cuando una de ellas cambia de estado. Se deben configurar como entradas y el valor que se
introduce por ellas se compara con el anterior para si no coinciden generar una interrupción, siem-
pre que lo autorice el bit de permiso. En cualquier caso, el señalizador RBIF, que es el bit 0 del
registro INTCON, se pondrá a 1. Esta interrupción es muy utilizada en el manejo de teclados ma-
triciales.
La patita RB0/INT también puede programarse como petición de interrupción externa, si se
autoriza con el correspondiente bit de permiso, que también está ubicado en INTCON. La Figura 4.4
muestra algunas características de los registros que manejan la puerta B.

4.1.3. Puerta C

Consta de 8 líneas bidireccionales cuyo sentido se configura mediante el registro TRISC. Todas las
patitas de esta puerta tienen multiplexadas diferentes funciones.

• RC0/T1OSO/T1CKI. Esta línea puede actuar como E/S digital, como salida del Timer 1 o como en-
trada de impulsos para el Timer 1.
• RC1/T1OSI/CCP2. E/S digital/Entrada al oscilador del Timer 1/Entrada del módulo de Captura 2; Sa-
lida del Comparador 2; Salida del PWM 2.
• RC2/CCP1. E/S digital/Entrada Captura 1; Salida Comparador 1; Salida PWM 1.
• RC3/SCK/SCL. E/S digital/Señal de reloj en modo SPI/Señal de reloj o en modo I2C.
• RC4/SDI/SDA. E/S digital/Entrada de datos en modo SPI/Línea de datos en modo I2C.
• RC5/SDO. E/S digital/Salida de datos en modo SPI.
• RC6/TX/CK. E/S digital/Línea de transmisión en USART/Señal de reloj síncrona en transmisión
serie.
• RC7/RX/DT. E/S digital/Línea de recepción del USART/Línea de datos en transmisión serie sín-
crona.

4.1.4. Puerta D

Esta puerta de 8 líneas bidireccionales sólo la tienen los PIC16F87x encapsulados con 40 patitas.
Ocupa la dirección 08h, mientras que su registro de configuración TRISD ocupa la dirección 88h.
Todas las patitas disponen en su entrada de un Trigger Schmitt.
86 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Además de usarse como líneas de E/S digitales normales, implementan una puerta paralela es-
clava de 8 líneas (PSP), que sirve para permitir la comunicación en paralelo con otros elementos del
sistema.
Las patitas se denominan RD0/PSP0-RD7/PSP7 y para que funcionen como puerta de comu-
nicación esclava en paralelo es preciso poner el bit PSPMODE = 1. Este bit es el 4 del registro TRI-
SE, que se comentará en la Puerta E.

4.1.5. Puerta E

Ocupa la dirección 09h y sólo la tienen los PIC16F87x con 40 patitas. Dispone de 3 patitas multi-
función, que se configuran como entrada o salida, según el valor de los tres bits de menos peso del
registro TRISE, que está ubicado en la dirección 89h.

• RE0/RD#/AN5. E/S digital/Señal de lectura en el modo de puerta paralela esclava/canal 5 del con-
versor A/D.
• RE1/WR#/AN6. E/S digital/Señal de escritura en modo PSP/canal 6 del conversor A/D.
• RE2/CS#/AN7. E/S digital/Selección de chip en el modo PSP/canal 7 del conversor A/D.

La PSP actúa como un puerto de comunicación paralelo de 8 líneas y para su activación hay que
poner el bit PSPMODE a 1. Dicho bit es el 4 del registro TRISE. Además de las 8 líneas de trans-
ferencia de datos, se precisan 3 señales de control, que determinan si la operación es de lectura, de
escritura y de permiso de funcionamiento (RD#, WR# y CS#). Estas tres líneas de control están im-
plementadas en la Puerta E.
La única diferencia apreciable entre los PIC16F87x de 40 patitas con los de 28 radica en que los
primeros tienen las Puertas D y E y los segundos carecen de ellas. Con esas dos puertas se puede dis-
poner de 11 líneas de E/S más, o bien de un canal paralelo de comunicación (PSP) con sus corres-
pondientes señales de control.

4.2. PALABRA DE CONFIGURACIÓN

Es una posición reservada de la memoria de programa FLASH, que ocupa la dirección 2007h y que
sólo es accesible durante la programación del PIC. El valor de sus bits determina algunas caracte-
rísticas fundamentales (Figura 4.5).

PALABRA DE CONFIGURACIÓN

CP1 CP0 DEBUG — WRT CPD LVP BODEN CP1 CP0 PWRTE# WDTE FOSC1 FOSC0

13 0

CP1:CP0 Código de Protección de la Memoria de Programa. Están repetidos en los bits 13:12 y 5:4.
Si los bits del código de protección no se programan, las posiciones de la memoria de có-
digo pueden ser leídas para verificación.
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 87

CP1 CP0 Protección desde... ...hasta Modelo PIC


0 0 0000h 0FFFh 16F873/4
0 0 0000h 1FFFh 16F876/7
0 1 0800h 0FFFh 16F873/4
0 1 1000h 1FFFh 16F876/7
1 0 0F00h 0FFFh 16F873/4
1 0 1F00h 1FFFh 16F876/7
1 1 No hay código protegido en la memoria FLASH

DEBUG Modo Depurador en Circuito.


1 = Desactivado. RB7:RB6 actúan como líneas de E/S
0 = Activado. RB7:RB6 actúan en modo depurador. La depuración se puede hacer desde
el MPLAB

WRT Permiso de Escritura en la Memoria FLASH.


1 = Se puede escribir en la parte no protegida de la memoria FLASH
0 = Prohibición de escritura

CPD Código de Protección de la Memoria EEPROM de Datos.


1 = No hay protección en la EEPROM
0 = Protección del código en la EEPROM

LVP Bit de Permiso para Programación en Bajo Voltaje.


1 = RB3/PGM tiene permitida la grabación en Bajo Voltaje
0 = RB3/PGM funciona como E/S digital. La programación se realiza en Alto Voltaje.

BODEN Bit de Permiso para el Reset por Caída de Tensión.


1 = BOR activada
0 = BOR desactivada

PWRTE# Bit de Permiso para el Timer de Conexión de Alimentación.


1 = PWRT desactivado
0 = PWRT activado

WDTE Bit de Permiso del Timer del Perro Guardián.


1 = WDT activado
0 = WDT desactivado

FOSC1:0 Tipo de oscilador.

FOSC1 FOSC0 Tipo


0 0 LP (Baja potencia. De 35 a 200 KHz)
0 1 XT (Estándar. De 100 KHz a 4 MHz)
1 0 HS (Alta velocidad. Más de 4 MHz)
1 1 RC (Resistencia-Condensador)

Figura 4.5. Denominación de los bits de la palabra de configuración, que ocupa la dirección 2007h
de la memoria de programa y que corresponde a los modelos PIC16F870/1/2.

4.3. PALABRAS DE IDENTIFICACIÓN

Se trata de cuatro palabras de la memoria de programa que se hallan comprendidas entre la direc-
ción 2000h y la 2003h y están reservadas para que el usuario las pueda emplear en funciones de
comprobación o «cheksums», códigos de identificación, números de serie, fecha, modelo, lote, nú-
88 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

meros secuenciales o aleatorios, etc. Estas cuatro posiciones sólo son accesibles en lectura y escri-
tura durante la operación de programación/verificación.
Sólo se deben emplear los 4 bits de menos peso de cada una de las palabras de identificación.

4.4. REINICIALIZACIÓN O RESET

Los PIC16F87x disponen de diversas maneras de reinicializarse, de forma similar a como ocurría
con el PIC16F84, que se citan a continuación.

1.a Reset por conexión de la alimentación (POR: Power-on Reset). El valor de la tensión de alimenta-
ción VDD sube entre 1,2 a 1,7 V.
2.a Activación de la patita MCLR# (nivel bajo en dicha patita durante una operación normal).
3.a Activación de la patita MCLR# estando el PIC trabajando en modo de Reposo o SLEEP.
4.a Reset provocado por el desbordamiento del perro guardián en una operación normal.
5.a Reset provocado por el desbordamiento del perro guardián durante el estado de Reposo.
6.a Reset provocado por una caída de voltaje (BOR: Brown-out Reset). VDD baja entre 3,8 y 4,2 V.

Los bits TO# y PD# del Registro de Estado toman un valor determinado en cada tipo de Reset.
También los bits 0 y 1 del registro PCON, llamados BOR# y POR#, respectivamente, sirven para es-
pecificar las causas de un Reset. En la la tabla de la Figura 4.6 se muestran estos bits y el tipo de Re-
set asociado.
Las x significan que pueden tener valor 0 o 1 indistintamente, ya que no se conoce su valor, y
las u que su valor no varía con respecto al que tenía antes del Reset.
En la Figura 4.7 se muestra el esquema eléctrico en el que se representan las causas y señales que
originan un Reset.
Como se deduce de dicha figura, la generación del Reset ocurre como consecuencia de la salida
de un nivel lógico alto de la puerta OR1, la cual es controlada por todas las causas que reinicializan
al PIC.

POR# BOR# TO# PD# TIPO DE RESET

0 X 1 1 Conexión de alimentación (POR)

0 x 0 x Ilegal

0 x x 0 Ilegal

1 0 1 1 Por Caída de Tensión (BOR)

1 1 0 1 Por WDT (operación normal)

1 1 0 0 Por WDT (modo sleep)

1 1 u u Activación normal (MCLR#)

1 1 1 0 MCLR# en sleep o interrupción para despertar de sleep

Figura 4.6. Determinación de la causa del Reset.


LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 89
MCLR#
RESET EXTERNO

SLEEP

PERRO GUARDIÁN OR1


DESBORDAMIENTO

VDD
POR
DETECTOR VDD

RESET CAÍDA BOR


TENSIÓN

BODEN

S
OSC1 OST

TEMPORIZADOR GENERACIÓN RESET


1024 TOSC R Q

HABILITACIÓN OST

PWRT

OSCILADOR TEMPORIZADOR
INTERNO RC 72 ms

HABILITACIÓN PWRT

Figura 4.7. La generación del Reset se produce al activar la entrada S de la báscula, cuando sucede
alguna de las condiciones que se aplican a la puerta OR1. Los temporizadores OST y
PWRT retardan el Reset al actuar sobre la entrada R de la báscula de salida.

1.a Activación de la patita MCLR#.


2.a Desbordamiento del perro guardián o WDT.
3.a Conexión de la alimentación (POR).
4.a Caída en la tensión de alimentación (BOR).

El temporizador PWRT retarda el Reset un tiempo fijo de 72 ms con la finalidad de garantizar


la estabilidad de VDD, mientras que el temporizador OST produce un retardo de 1.024 ciclos de la
frecuencia aplicada por la patita OSC, con el objetivo de asegurar que el cristal de cuarzo del osci-
lador principal está estabilizado y en marcha.
Tras un Reset, el Contador de Programa queda cargado con el valor 000h en todos los casos, me-
nos cuando se produce por el desbordamiento del WDT o cuando se despierta del modo SLEEP por
una interrupción, en cuyos casos el PC se carga con el valor PC+1. En la tabla de la Figura 4.8 se
90 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

indican los valores que toman los registros específicos del microcontrolador tras producirse los di-
versos tipos de Reset. Los registros CMCON y CVRCON corresponden sólo a los modelos que dis-
ponen de comparadores analógicos.

REGISTRO DISPOSITIVOS POR Y BOR MCLR# Y WDT DESPERTAR DE SLEEP

W 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
INDF 873 874 876 877 N/A N/A N/A
TMR0 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PCL 873 874 876 877 0000h 0000h PC + 1
STATUS 873 874 876 877 0001 1xxx 000q quuu uuuq quuu
FSR 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTA 873 874 876 877 —0x 0000 —0u 0000 —uu uuuu
PORTB 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTC 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTD 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTE 873 874 876 877 —— -xxx —— -uuu —— -uuu
PCLATH 873 874 876 877 —-0 0000 —-0 0000 —-u uuuu
INTCON 873 874 876 877 0000 000x 0000 000u uuuu uuuu
PIR1 873 874 876 877 r000 0000 r000 0000 ruuu uuuu
873 874 876 877 0000 0000 0000 0000 uuuu uuuu
PIR2 873 874 876 877 -r-0 0—0 -r-0 0—0 -r-u u—u
TMR1L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
TMR1H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
T1CON 873 874 876 877 —00 0000 —uu uuuu —uu uuuu
TMR2 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
T2CON 873 874 876 877 -000 0000 -000 0000 -uuu uuuu
SSPBUF 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
SSPCON 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
CCPR1L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCP1CON 873 874 876 877 —00 0000 —00 0000 —uu uuuu
RCSTA 873 874 876 877 0000 000x 0000 000x uuuu uuuu
TXREG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
RCREG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
CCPR2L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCP2CON 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
ADRESH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON0 873 874 876 877 0000 00-0 0000 00-0 uuuu uu-u
OPTION_REG 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISA 873 874 876 877 —11 1111 —11 1111 —uu uuuu
TRISB 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISC 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISD 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISE 873 874 876 877 0000 -111 0000 -111 uuuu -uuu
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 91

PIE1 873 874 876 877 r000 0000 r000 0000 ruuu uuuu
873 874 876 877 0000 0000 0000 0000 uuuu uuuu
PIE2 873 874 876 877 -r-0 0—0 -r-0 0—0 -r-u u—u
PCON 873 874 876 877 —— —qq —— —uu —— —uu
PR2 873 874 876 877 1111 1111 1111 1111 1111 1111
SSPADD 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
SSPSTAT 873 874 876 877 —00 0000 —00 0000 —uu uuuu
TXSTA 873 874 876 877 0000 –010 0000 -010 uuuu -uuu
SPBRG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
ADRESL 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON1 873 874 876 877 —0- 0000 —0- 0000 —u- uuuu
EEDATA 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEADR 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEDATH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEADRH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EECON1 873 874 876 877 x—- x000 u—- u000 u—- uuuu
EECON2 873 874 876 877 —— —— —— —— —— ——
CMCON 73A 974 76A 77A 0000 0111 0000 0111 uuuu uuuu
CVRCON 73A 74A 76A 77A 000- 0000 000- 0000 uuu- uuuu

Figura 4.8. Valores de los registros específicos tras los diversos tipos de Reset.

4.5. PERRO GUARDIÁN (WDT: WATCHDOG TIMER)

El WDT de los PIC16F87x es similar al del PIC16F84. Se trata de un contador que funciona con los
impulsos de su propio oscilador y que provoca un Reset cuando se desborda en funcionamiento nor-
mal. Si el desbordamiento se produce cuando el microcontrolador se halla en estado de Reposo, se
despierta y sigue su comportamiento normal. En la Figura 4.9 se muestra un esquema con los blo-
ques principales que constituyen al perro guardián.
Las instrucciones CLRWDT y SLEEP borran o ponen a cero el valor de contaje del WDT y el
del Postdivisor. Si se ejecuta la instrucción CLRWDT y el Predivisor de Frecuencia está asignado
al Perro Guardián, se borra, pero no cambia su configuración.

4.6. MODO DE REPOSO O DE BAJO CONSUMO

En este modo especial de funcionamiento microcontrolador se introduce cuando se ejecuta la ins-


trucción SLEEP, igual que en el PIC16F84. Esta manera de trabajo se caracteriza por su bajo con-
sumo y parece que el PIC se ha «congelado». Las líneas de E/S digitales que se utilizaban mantie-
nen su estado, las que no se empleaban reducen al mínimo su consumo, se detienen algunos
temporizadores y no se ejecutan instrucciones.
Al entrar en el modo de Reposo, si estaba funcionando el WDT se borra pero sigue trabajando.
Para salir de este estado («despertar») y pasar a ejecutar la instrucción direccionada por PC+1
existen varias causas.
92 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 4.9. Esquema simplificado por bloques del Perro Guardián.

1.a Activación externa de la patita MCLR#.


2.a Desbordamiento del WDT que sigue trabajando en Reposo.
3.a Generación de interrupción por activación de la patita RB0/INT o por cambio de estado en las 4
patitas de más peso de la Puerta B.
4.a Interrupción originada por alguno de los nuevos periféricos de los PIC16F87x tales como:
a) Lectura o escritura en la puerta paralela (PSP).
b) Interrupción del Timer 1.
c) Interrupción del módulo CCP en modo captura.
d) Disparo especial del Timer 1 funcionando en el modo asíncrono con reloj externo.
e) Interrupción en el módulo de comunicación SSP (Start/Stop).
f) Transmisión o recepción del MSSP en modo esclavo (SPI/I2C).
g) Transmisión o recepción del USART.
h) Fin de la conversión en el conversor A/D.
i) Fin de la operación de escritura sobre la EEPROM.

4.7. PROGRAMACIÓN DE LOS PIC16F87X

La posibilidad de programar a esta subfamilia de PIC en serie permite grabar en la memoria de có-
digo el programa de trabajo, estando colocado el PIC sobre el circuito o producto de aplicación fi-
nal. Esta característica permite a los fabricantes construir y montar completamente la tarjeta de cir-
cuito impreso y dejar pendiente la grabación del programa en el PIC hasta el momento de la venta,
pudiendo incluir el firmware más reciente de que se disponga en cada momento.
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 93

La programación en serie típica, que se realiza con un Voltaje Alto de 12 a 14 V aplicado por la
patita MCLR#/VPP, requiere el uso de 5 patitas del PIC:

a) VDD = 5V.
b) GND o Tierra.
c) VPP = 12 a 14 V que se introducen por la patita MCLR# /VPP.
d) RB6: recibe los impulsos de reloj.
e) RB7: línea de datos con los bits en serie.

Una gran aportación en los PIC16F87x la constituye la programación con Voltaje Bajo (LVP:
Low Voltage Programming), que no requiere la tensión de 12 a 14 V. Para grabar en este modo, hay
que poner el bit LVP = 1, que reside en la Palabra de Configuración y la patita RB3/PGM se debe
conectar a nivel alto. Entonces por la patita MCLR#/VPP se aplica la tensión VDD de 5 V mientras
dura la operación de grabado. Cuando no se opera en este modo de programación se puede usar la
patita RB3 como una línea de E/S digital.
Programar PIC es fácil

UTILIZACIÓN DE LOS RECURSOS DEL PIC

En el capítulo anterior, vimos cómo se trabajaba con las puertas de E/S. Vamos ahora a partir del
mismo ejercicio pero se va a introducir el modo de reposo o bajo consumo y el Perro Guardián. El
esquema eléctrico no varía con respecto al del capítulo anterior, pero sí el organigrama.

Organigrama

Según el valor de dos interruptores, se encenderán o apagarán los diodos de la Puerta B pero, antes
de volver a mirar el valor de dichos interruptores, se meterá al microcontrolador en estado de repo-
so, del cual despertará al desbordarse el Perro Guardián, iniciándose de nuevo el proceso.

Figura 4.10. Organigrama del ejercicio.

94
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR 95

Programa comentado

El programa, una vez adaptado al uso de estos nuevos recursos, queda de la siguiente manera:

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería
ORG 0x00 ; Inicio en el Vector de
; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salta el Vector de
; Interrupción
INICIO bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
clrf TRISB ; Puerta B como salida
movlw b’00000110’ ; Puerta A E/S digitales
movwf ADCON1
* movlw b’00000110’ ; RA1-RA2 entradas
* movwf TRISA
movlw b’11001111’ ; Predivisor de 128
movwf OPTION_REG ; asociado al perro guardián
bcf STATUS,RP0 ; Cambio a banco 0
clrf PORTB ; Borrado de LEDs
clrf PORTA ; Borrado de líneas no
; utilizadas de Puerta A
BUCLE movf PORTA,W ; Puerta A W
btfss STATUS,Z ; Comprobación de Z = 1
goto APAGAR ; Si RA1-RA2 no son 0
goto ENCENDER ; Si RA1-RA2 son 0

APAGAR clrf PORTB ; Se apagan los LEDs


* goto REPOSO ; Para entrar en sleep

ENCENDER movlw 0xFF ; Se encienden los LEDs


movwf PORTB
* goto REPOSO ; Para entrar en sleep

* REPOSO clrwdt ; Refresca el perro guardián


* sleep ; Entra en bajo consumo
* goto BUCLE ; Para volver a comprobar

END ; Fin de programa


96 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Los cambios son mínimos y aparecen marcados con *.

La configuración del perro guardián consiste en asignarle el predivisor de frecuencias, de modo


que tarde más en desbordarse si no se le refresca, lo cual amplía considerablemente el tiempo entre
refrescos y evita así muchas instrucciones de ese tipo.
Tras encender o apagar los LED y, tras borrar el Perro Guardián, se entra en estado de reposo o
bajo consumo, del cual saldrá al desbordarse el Perro Guardián, volviendo así a comprobar los in-
terruptores para volver a encender/apagar los LED. En este caso no es necesaria la instrucción de re-
fresco del Perro Guardián, ya que al entrar en sleep se resetea él solo.

Prueba del programa

Para la puesta en marcha de este programa, se seguirán los mismos pasos que en el capítulo anterior
con excepción de la grabación. La Palabra de Configuración, modificable en el proceso de graba-
ción, sirve entre otras cosas para habilitar o no el Perro Guardián. Puesto que estamos controlando
su funcionamiento, se deberá activar poniendo a SÍ la opción Watchdog T. De este modo, a efec-
tos del usuario, el programa seguirá funcionando del mismo modo. En caso de no habilitar el Perro
Guardián, una vez que se hayan encendido o apagado los LED en la primera ejecución del progra-
ma, éste entrará en estado de reposo, del cual no podrá salir.
Diseñar con PIC es fácil

AMPLIACIÓN DE LOS RECURSOS DEL PIC

Aunque la filosofía de los microcontroladores PIC es actuar como sistemas cerrados, limitados a sus
propios recursos, a veces se hace necesaria su ampliación para dotarles de más memoria, aumentar
su capacidad de manejo de periféricos de E/S, e incluso conectarle con otros PIC para delegar en
ellos subtareas, de modo que se permita el trabajo en paralelo. Éstas son algunas de las posibilida-
des que nos presenta la tarjeta de ampliación Micro’PIC Trainer Plus, de la que se puede obtener
más información en www.microcontroladores.com.

La tarjeta de ampliación Micro’PIC Trainer Plus

El Micro’PIC Trainer Plus es un equipo que conectado al sistema de desarrollo Micro’PIC Trainer
permite ampliar y experimentar con los recursos más avanzados de los microcontroladores PIC. Co-
mo se verá en los Capítulos 8 y 9, los PIC16F87x incorporan en su chip distintos módulos que per-
miten la comunicación con dispositivos externos.
Tal es el caso del USART, que permite la comunicación con, por ejemplo, periféricos como el
ordenador. Las partes fundamentales de que consta esta tarjeta se muestran en la Figura 4.11.

Figura 4.11. Tarjeta de ampliación Micro’PIC Trainer Plus con las partes más significativas señaladas.

97
98 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.a Picbus: mediante cable plano insertado en dicho conector se permite comunicar la tarjeta con
el Micro’PIC Trainer, que es el que normalmente contendrá el PIC.
2.a Teclado matricial hexadecimal: para controlar este tipo de teclados son necesarias 8 lí-
neas de E/S, que en esta tarjeta se corresponden con las 8 líneas de la Puerta B.
3.a Canal de comunicaciones RS-232: consta de un conector DB9 macho y la circuitería au-
xiliar, entre la que destaca el circuito integrado MAX232. Está preparado para trabajar con las
líneas RC6 y RC7 en los PIC que, como los 16F87x, implementan el USART por hardware, o con
las líneas RB4 y RB5 si se gestiona por software. La selección entre ambas modalidades se
realiza con los jumpers adjuntos.
4.a Display de 4 dígitos de 7 segmentos: su control se realiza con el dispositivo I2C SAA1064
integrado en la tarjeta.
5.a 8 líneas de E/S digital: proporcionadas por el dispositivo I2C PCF8574. Cada línea está aso-
ciada a un LED que funciona por lógica inversa, con los cuales se puede conocer el estado de las
líneas disponibles en el exterior.
6.a 4 canales analógicos y 1 canal digital/analógico: disponibles en el exterior por bornas
para conectar los distintos transductores. Tanto uno como otros los proporciona el dispositivo I2C
PCF8591.
7.a Reloj calendario: en tiempo real controlado por el dispositivo PCF8583 y alimentado por una
batería recargable que lo mantiene en hora aun con falta de tensión de alimentación.

Descripción del esquema electrónico

En la Figura 4.12 se ofrece el esquema electrónico de la tarjeta de ampliación de periféricos Mi-


cro’PIC Trainer Plus.
Está compuesta por 6 bloques principales:

1.o Teclado.
2.o Canal serie RS-232.
3.o Reloj/calendario.
4.o Módulo de visualización.
5.o Módulo conversor ADC/DAC.
6.o E/S paralelo.

El teclado

La conexión con el Micro’PIC Trainer de esta tarjeta de ampliación se realiza a través del conector
CN1, que proporciona todas las líneas del PIC, así como las de alimentación.
El teclado matricial de 4x4 está conectado con las líneas de la Puerta B (RB0-RB7). El pro-
grama de control del teclado configurará RB7-RB4 como salidas para ir activando secuencialmen-
te las filas una a una. Las líneas RB3-RB0 se configuran como entradas desde las columnas del te-
clado y son leídas para detectar si hay alguna tecla pulsada.
En caso de trabajar con un PIC que utilice el bus I2C, se usa RC3 y RC4 para las señales SCL
y SDA, respectivamente, para lo cual hay que utilizar adecuadamente los jumpers J1 y J2.
LAS PUERTAS DE E/S Y RECURSOS ESPECIALES DEL PROCESADOR
Figura 4.12. Esquema electrónico del Micro’PIC Trainer Plus.

99
100 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

El canal serie RS-232

El circuito principal de esta sección es el MAX232 (U5), que convierte los niveles TTL presentes en
la patita 11 de transmisión (Tx), en niveles lógicos RS-232, que se obtienen en la patita 14 (TxD) y
se aplican al conector DB9 (CN2). La señal de recepción RxD llega desde el canal serie a la patita
13 de U5 con niveles RS-232, que son convertidos a niveles TTL y se obtienen en la patita 12 (Rx).
Las señales Tx y Rx se controlan desde RC6 y RC7 si se trabaja con un PIC, que incorpora un
USART en su hardware. Si se gestiona la comunicación con software, se emplean las líneas RB4 y
RB5. La selección de uno u otro modo se realiza mediante los jumpers J3 y J4.

Reloj calendario

Está basado en el circuito integrado PCF 8583P (U2), diseñado para conectar al bus I2C. Además
de las funciones horarias clásicas, también realiza funciones de alarma y temporización.
Contiene 256 posiciones de RAM estática de 8 bits cada una, de las cuales las 16 primeras están
usadas para las funciones de reloj, calendario, alarma y temporización. Quedan 40 posiciones libres
para el usuario, quien puede usarlas como RAM no volátil en caso de alimentar al PCF8583 con una
batería recargable de Ni/Cd.

Módulo de visualización

Está compuesto por 4 displays de 7 segmentos controlados por el circuito integrado SAA1064 (U1)
adaptable al bus I2C.
Mediante las líneas SDA y SCL, el PIC maestro envía la información a visualizar en los displays,
mediante un multiplexado sobre las mismas. Inicialmente, por las líneas P1-P8 aparece la informa-
ción a representar en el dígito 1 y por P9-P16 la correspondiente al dígito 3. Simultáneamente se ac-
tiva la señal MX1 que hace conducir al transistor Q1, que gobierna los ánodos comunes de dichos
dígitos. Después, por P1-P8 y P9-P16 aparece la información a visualizar en los dígitos 2 y 4 con la
señal MX2 que controla Q2. Este proceso se repite a gran velocidad y de forma indefinida, provo-
cando la sensación visual de tener encendidos los 4 dígitos a la vez.

Módulo ADC y DAC

Está centrado en el circuito integrado PCF8591 (U3) para el bus I2C. Consta de un Conversor Ana-
lógico/Digital ADC de 8 bits con 4 canales de entrada AN0-AN3. También dispone de un Conver-
sor Digital/Analógico DAC de 8 bits cuya tensión de salida se obtiene por AOUT.
La señal analógica de tierra, así como la tensión de referencia necesaria, se aplican por AGND y VREF.

Puerta de E/S paralelo

El circuito integrado PCF8574A (U4) diseñado para conectarse al bus I2C proporciona una puerta
paralelo con 8 líneas de Entrada o Salida, dependiendo que se lean o escriban P0-P7. De esta ma-
nera, usando el bus I2C soportado por dos líneas, se pueden ampliar las puertas de E/S de un PIC.
5 Los temporizadores

5.1. TIPOS Y CARACTERÍSTICAS GENERALES

Los PIC16F87x disponen de un potente conjunto de temporizadores para manejar eficientemente to-
das las operaciones que involucran al tiempo y al contaje. Dichos temporizadores son tres y se de-
nominan técnicamente TMR0, TMR1 y TMR2.
El TMR0 es idéntico al que tiene el PIC16F84 y sus funciones más representativas son:

1.a TMR0 es un Contador/Temporizador de 8 bits.


2.a Leíble y escribible.
3.a Reloj interno o externo.
4.a Selección del flanco en el reloj externo.
5.a Predivisor de la frecuencia de reloj programable.
6.a Generación de interrupción opcional en el desbordamiento.

En el tema anterior, se presentó al registro OPTION, encargado del control del TMR0 y cuyas
funciones son conocidas del PIC16F84.
Los nuevos temporizadores que incluyen los PIC16F87x son más potentes y flexibles que el sen-
cillo TMR0. Así, el TMR1 se caracteriza por:

1.a TMR1 es un Contador/Temporizador de 16 bits.


2.a Leíble y escribible.
3.a Selección de reloj interno o externo.
4.a Interrupción opcional por desbordamiento de FFFFh a 0000h.
5.a Posible reinicialización desde los módulos CCP.

Finalmente, el TMR2 tiene las siguientes características fundamentales.


101
102 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.a TMR2 es un Temporizador de 8 bits.


2.a Dispone de un Registro de Período de 8 bits (PR2).
3.a Leíble y escribible.
4.a Predivisor de frecuencia programable.
5.a Postdivisor de frecuencia programable.
6.a Interrupción opcional al coincidir TMR2 y PR2.
7.a Posibilidad de generar impulsos al módulo SSP.

5.2. ESTRUCTURA INTERNA Y FUNCIONAMIENTO DEL TMR1

El TMR1 es el único Temporizador/Contador ascendente con un tamaño de 16 bits, lo que requiere


el uso de dos registros concatenados de 8 bits: TMR1H:TMR1L, que son los encargados de guardar
el valor del contaje en cada momento. Dicho valor evoluciona desde 0000h hasta FFFFh, instante
en el que se activa el señalizador TMR1IF y se regresa al valor inicial 0000h. También, si se desea,
se puede provocar una petición de interrupción, que se permite o prohibe con el bit TMR1IE (PIE).
El valor contenido en TMR1H:TMR1L puede ser leído o escrito y los impulsos de reloj que ori-
ginan el contaje ascendente pueden provenir del exterior o de la frecuencia de funcionamiento del
microcontrolador (Fosc/4).
El TMR1 es capaz de funcionar de tres formas:

1.a Como temporizador.


2.a Como contador síncrono.
3.a Como contador asíncrono.

En el modo temporizador el valor concatenado TMR1H:TMR1L se incrementa con cada ciclo


de instrucción (Fosc/4). En el modo contador, el incremento se puede producir con los flancos as-
cendentes de un reloj externo, cuya entrada se aplica a las líneas RC0 y RC1 de la Puerta C, o por
impulsos aplicados en la línea RC0. En la Figura 5.1 se muestra el diagrama por bloques del TMR1,
en el que destacan las diversas señales de control y el predivisor de frecuencia.

Figura 5.1. Esquema interno de los principales bloques del TMR1 con sus señales de control.
LOS TEMPORIZADORES 103

5.3. REGISTRO DE CONTROL DEL TMR1 (T1CON)

El funcionamiento del TMR1 está gobernado por el valor con el que se programan los bits del re-
gistro T1CON, que ocupa la dirección 10h de la memoria RAM y cuya denominación y distribución
se presentan en la Figura 5.2.
El bit TMR1ON gobierna el permiso o la prohibición de funcionamiento del Timer1. En caso de
poner un 0 en dicho bit el TMR1 no funciona.
El bit TMR1CS selecciona la fuente de los impulsos de contaje. Si vale 0 elige el reloj interno
(Fosc/4) y si vale 1 el reloj externo que se aplica por las patitas RC0 y RC1.
Cuando los impulsos proceden de un reloj externo, es preciso que el bit T1OSCEN tenga valor
1, en cuyo caso las patitas RC0/T1OSO/T1CKI y RC1/T1OSI/CCP2 actúan como entradas del os-
cilador externo. Si T1OSCEN vale 0 los impulsos vendrán a través de RC0/T1OSO/T1CKI. En am-
bos casos, el TMR1 funciona como contador de eventos externos y los bits 1 y 0 (utilizados) del re-
gistro TRISC carecen de significado, ya que una o ambas patitas RC1 y RC0 no pueden actuar al
mismo tiempo como entrada de impulsos y como líneas de E/S.
Entre las patitas RC1 y RC0 se puede poner un cristal de hasta una frecuencia de 200 KHz. En
estas condiciones, el oscilador puede seguir funcionando aunque se fuerce el estado de bajo consu-
mo o SLEEP.
El predivisor de frecuencia (Preescaler) es un simple divisor de la frecuencia de los impulsos
que se aplican al TMR1 por 1, 2, 4 u 8. El rango de división lo eligen los bits T1CKPS1 y T1CKPS0
según la siguiente tabla.

T1CKPS1 T1CKPS0 RANGO DEL PREDIVISOR


0 0 1:1
0 1 1:2
1 0 1:4
1 1 1:8

El bit T1SYNC# determina la posible sincronización o no de los impulsos del reloj externo con
los del reloj interno, según valga 0 o 1 respectivamente, permitiendo el funcionamiento del TMR1
como contador síncrono.
El TMR1 puede generar una petición de interrupción cuando se produce el sobrepasamiento
del contaje, es decir, cuando se pasa desde FFFFh a 0000h. En esta situación, se pone automáti-
camente a 1 el flag TMR1F, que es el bit 0 del Registro Específico PIR1, que está ubicado en la
dirección 0Ch de la RAM. El permiso o prohibición de la producción de interrupción del TMR1,
está controlada por el bit TMR1IE, que ocupa la posición de menos peso del Registro Específico
PIE1 (8Ch).

REGISTRO T1CON

— — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON

7 0

Figura 5.2. Nomenclatura y distribución de los bits del registro de control del TMR1.
104 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Cuando el módulo CCP (captura-comparación-PWM) está configurado como comparador para


generar un «disparo especial» (CCP1M3-CCP1M0 = 1011), dicha señal resetea el TMR1. Para
aprovechar esta característica, el TMR1 debe estar configurado en modo temporizador o contador
síncrono. En otro caso no se produce el Reset.

5.4. CHULETA-RESUMEN DE LOS REGISTROS ASOCIADOS AL TMR1

En la Figura 5.3 se ofrece una tabla con los registros principales que controlan el comportamiento
del TMR1 y la distribución de los bits.

5.5. FUNCIONAMIENTO Y PROGRAMACIÓN DEL TMR2

Se trata de un Temporizador ascendente de 8 bits, que se puede leer y escribir, y que también pue-
de realizar funciones especiales para la Puerta Serie Síncrona (SSP) y con los módulos de captura y
comparación. Ocupa la dirección 11h del mapa de los registros específicos.
La señal de reloj del TMR2 es interna Fosc/4, y antes de ser aplicada pasa por un predivisor de
frecuencia con rangos de 1:1, 1:4 y 1:16. La salida del TMR2 atraviesa un postdivisor de frecuen-
cia con rangos de división desde 1:1 a 1:16, pasando por los 16 valores posibles.
Al entrar el microcontrolador en modo de reposo o SLEEP, se detiene el oscilador interno y al
no existir la señal Fosc/4 deja de funcionar el TMR2.
Para controlar el funcionamiento del TMR2 se usa el registro T2CON, que ocupa la dirección
12h del mapa de los registros específicos y cuya distribución y asignación de bits se muestra en la
Figura 5.4.

DIREC- VALOR VALOR


CIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR, EN EL RESTO
BOR DE RESETS
0Bhh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10B,
18Bh

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

0Eh TMR1L Registro de carga del byte de menos peso del registro de 16 bits TMR1 xxxx xxxx uuuu uuuu

0Fh TMR1H Registro de carga del byte de más peso del registro de 16 bits TMR1 xxxx xxxx uuuu uuuu

10h T1CON — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON –00 0000 –uu uuuu

Figura 5.3. Resumen de los registros más importantes que se encargan de programar el funciona-
miento del TMR1, con la nomenclatura de sus bits, sus direcciones y el estado que toman
después de diversas situaciones de Reset. El valor ‘x’ significa indeterminado, ‘u’ que per-
manece invariable y los no implementados (-) se leen como 0.
LOS TEMPORIZADORES 105

REGISTRO T2CON

— TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPSI T2SCKPS0

7 0

Figura 5.4. Distribución y asignación de los bits del registro T2CON, que sirven para programar el
trabajo del TMR2.

Los bits 1 y 0 del T2CON (T2CKPS1:T2CKPS0) sirven para seleccionar el rango de división del
predivisor de impulsos de la siguiente forma:

T2CKPS1 T2CKPS0 RANGO DEL PREDIVISOR


0 0 1:1
0 1 1:4
1 x 1:16

El bit TMR2ON sirve para permitir (1) o prohibir (0) el funcionamiento del TMR2. El bit de más
peso no es significativo y los cuatro bits restantes (TOUTPS3-TOUTPS0) determinan el rango por
el que divide la frecuencia el postdivisor, de acuerdo al siguiente código:

TOUTPS3-TOUTPS0 RANGO DEL POSTDIVISOR


0000 1:1
0001 1:2
0010 1:3
... ...
1111 1:16

El señalizador de desbordamiento del TMR2 es el bit 1 (TMR2IF) del registro PIR1, que ocupa
la dirección 0Ch. Ver la chuleta-resumen de registros de la Figura 5.6.
El predivisor y el postdivisor se ponen a 0 al escribir el TMR2, al escribir el T2CON o con un
Reset. Sin embargo, cuando se escribe el T2CON no se borra el TMR2. Pasa a valer 0 el contenido
del TMR2 cuando se produce un Reset.
El TMR2 tiene asociado un Registro de Período PR2, que ocupa la dirección 92h. Cuando el
valor de contaje del TMR2 coincide con el valor cargado en PR2 se genera un impulso en la salida
EQ (Figura 5.5) y se resetea el TMR2. Estos impulsos en EQ pueden ser divididos por el postdivi-
sor antes de activar el señalizador TMR2IF.
Este temporizador también tiene la capacidad de producir una petición de interrupción si se po-
ne a 1 el bit TMR2IE de habilitación, que reside en el registro PIE1 (8Ch). Además, con la progra-
mación adecuada, los impulsos de salida del TMR2 (antes del postdividor) pueden actuar como ba-
se de tiempos para el módulo SSP.
106 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 5.5. Esquema por bloques de la estructura del TMR2.

5.6. CHULETA-RESUMEN DE LOS REGISTROS ASOCIADOS AL TMR2

En la Figura 5.6 se ofrece una tabla que resume los bits de los registros que se utilizan en el mane-
jo del TMR2.

DIREC- VALOR VALOR


CIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR, EN EL RESTO
BOR DE RESETS

0Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10B,
18Bh

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

11h TMR2 Registro del módulo TMR2 xxxx xxxx uuuu uuuu

12h T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 xxxx xxxx uuuu uuuu

92h PR2 Registro de período del TMR» –00 0000 –uu uuuu

Figura 5.6. Resumen de los bits de los registros que se utilizan en el manejo y programación
del TMR2.
Programar PIC es fácil

MIDIENDO EL TIEMPO

La mayoría de los programas tienen una o más rutinas de temporización. Dicha temporización se
puede realizar mediante bucles anidados en que se van decrementando el valor de varios contado-
res hasta llegar a 0 o, más eficientemente, descargando de esta tarea a la CPU, utilizándola para otras
cosas, mientras un temporizador especial que lleva la cuenta. En este capítulo se ha hablado del as-
pecto teórico de los temporizadores; vamos ahora a llevarlo a la práctica mediante un ejercicio. El
uso de los temporizadores es tan común que en capítulos posteriores se seguirán mostrando ejem-
plos de utilización aunque no sea el recurso a estudiar.

Enunciado

Se quiere que el temporizador TMR1 se comporte como un contador de eventos externos. Dichos
eventos vendrán por la línea RC0/T1CKI desde el generador de onda del Micro’PIC I/O. Si cuenta
los eventos durante 0,250 seg y el resultado se multiplica por 4, se obtiene el número de pulsos por
segundo (herzios). Cambiando el intervalo de tiempo de medición se podrían medir KHz, MHz, etc.
Si en lugar de ser el generador el que proporcionara los pulsos, fuera el optoacoplador asociado al
motor del Micro’PIC I/O, estaríamos consiguiendo medir su velocidad. Los herzios se van a mos-
trar, además, por la pantalla LCD del Micro’PIC Trainer. El TMR0 va a funcionar como tempori-
zador auxiliar.

Esquema eléctrico

La única conexión que deberá realizarse entre el Micro’PIC I/O y el Micro’PIC Trainer, además del
PICBUS, es entre la salida del generador y la patita RC0/T1CKI de entrada de pulsos para el TMR1.
En la Figura 5.7 se muestran las conexiones al completo.

Organigrama

Una vez más, el organigrama del programa principal es tan simple como la inicialización de los di-
ferentes registros y recursos a utilizar, y la espera en un bucle a que se produzca una interrupción,
que será la que realmente realice las operaciones necesarias. (Figura 5.8.)
107
108 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Vss Vdd Vo RS R/W# E D0 D1 D2 D3 D4 D5 D6 D7


1 2 3 4 5 6 7 8 9 10 11 12 13 14

+5V

CONTRASTE

+5V

10K

In4148

100

RESET
PIC16F873

1 MCLR#/VPP/THV RB7/PGD 28
2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/VREF- RB4 25
5 RA3/AN3/VREF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
RB0/INT 21
15 pF 8 VSS
9 OSC1/CLKIN
VDD 20 +5 V
10 OSC2/CLKOUT VSS 19
CRISTAL 4 Mhz
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15

GENERADOR
MICRO’PIC I/O

Figura 5.7. Esquema eléctrico del ejercicio propuesto.


LOS TEMPORIZADORES 109

Figura 5.8. Organigrama del ejercicio.

Se entrará en la rutina de interrupción cada 50 ms. Éste es el tiempo aproximado que tarda el
TMR0 en desbordarse con los valores cargados. Como se requiere una temporización de 250 ms, se
entrará en dicha interrupción 5 veces, antes de hacer el tratamiento «verdadero». Una vez llegado a
este punto se visualizará el TMR1, que se habrá ido incrementando con los pulsos proporcionados
por el generador, en la pantalla LCD y, tras reponer los valores adecuadamente, se volverá al pro-
grama principal hasta que se produzca una nueva interrupción. (Figura 5.9.)

Figura 5.9. Organigrama de la rutina de tratamiento de interrupción.


110 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Programa comentado

El programa quedará de la siguiente manera:


LIST P=16F873 ; Se indica el tipo de
; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería

Lcd_var EQU 0x20 ; Variables para LCD


BYTE_L EQU 0X22 ; Parte baja del byte a
BYTE_H EQU 0X23 ; convertir y parte alta
BCD_2 EQU 0x24 ; Variables BCD
BCD_1 EQU 0x25
BCD_0 EQU 0x26
CONTADOR EQU 0x27
TEMPORAL EQU 0x28
DELAY EQU 0x29 ; Variable de temporización

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x04 ; Vector de
goto INTER ; interrupción

INCLUDE «LCD_CXX.INC» ; Incluye rutinas de LCD

; Se visualiza por el LCD los cinco dígitos situados en las variables BCD2-0

VISUALIZAR movlw 0x80


call LCD_REG
movlw 3
movwf CONTADOR
movlw BCD_0
movwf FSR
VISU_LOOP swapf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
movf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
decf FSR,F
decfsz CONTADOR,F
goto VISU_LOOP
return
LOS TEMPORIZADORES 111

; Rutina de conversión de un número binario de 16 bits a 5 dígitos BCD para el LCD

BITS16_BCD bcf STATUS,C


clrf CONTADOR
bsf CONTADOR,4
clrf BCD_0
clrf BCD_1
clrf BCD_2
LOOP_16 rlf DATOC_L,F
rlf DATOC_H,F
rlf BCD_2,F
rlf BCD_1,F
rlf BCD_0,F
decfsz CONTADOR,F
goto AJUSTE
return
AJUSTE movlw BCD_2
movwf FSR
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
goto LOOP_16
AJUSTE_BCD movf INDF,W
addlw 0x03
movwf TEMPORAL
btfsc TEMPORAL,3
movwf INDF
movf INDF,W
addlw 0x30
movwf TEMPORAL
btfsc TEMPORAL,7
movwf INDF
return

; Rutina de tratamiento de la interrupción

INTER decfsz DELAY,F ; ¿Han pasado 250 ms?


goto NO_250_MS ; No
SI_250_MS bcf T1CON,0 ; Sí. Para el TMR1
bcf STATUS,C
rlf TMR1L,F ; Lo multiplica por 4
rlf TMR1H,F
rlf TMR1L,F
rlf TMR1H,F
movf TMR1L,W ; Salva el contador
movwf BYTE_L
movf TMR1H,W
movwf BYTE_H
112 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

call BITS16_BCD ; Lo convierte a BCD


call VISUALIZAR ; Lo visualiza por el LCD
movlw ~.195 ; Repone el valor del TMR0
movwf TMR0 ; para volver a temporizar
movlw .5 ; 50 x 5 = 250 ms
movwf DELAY
bcf INTCON,2 ; Repone flag
clrf TMR1L
clrf TMR1H
bsf T1CON,0 ; Activa TMR1
retfie
NO_250_MS movlw ~.195 ; Para volver a contar otros
movwf TMR0 ; 50 ms, hasta llegar a los
bcf INTCON,2 ; 250
retfie
; Comienzo del programa principal
INICIO clrf PORTB ; Limpia salidas
clrf PORTA
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
movlw b’00000110’ ; Puerta A E/S digitales
movwf ADCON1
clrf TRISB ; Puerta B como salida
clrf TRISA ; Puerta A salida
movlw FF ; Puerta C como entrada
movwf TRISC
movlw b’11000111’ ; Configuración del TMR0
movwf OPTION_REG ; con predivisor de 256
bcf STATUS,RP0 ; Cambio a banco 0
movlw b’00000010’ ; Desactivación del TMR1
movwf T1CON
clrf TMR1L ; Inicialización del TMR1
clrf TMR1H
call UP_LCD ; Configuración de líneas
; para LCD
call LCD_INI ; Inicialización de LCD
movlw b’00001100’ ; LCD On, Cursor y Blink
call LCD_REG ; Off
movlw ~.195 ; Inicialización del TMR0
movwf TMR0
bsf T1CON,0 ; Activación del TMR1
movlw .5 ; Preparación de
movwf DELAY ; temporización de 250 ms
movlw b’10100000’ ; Habilitación de
movwf INTCON ; interrupción del TMR0
BUCLE clrwdt ; Refresca perro guardián
goto BUCLE
END
LOS TEMPORIZADORES 113

Prueba del programa

Se deberán conectar las líneas tal y como muestra el esquema eléctrico. Además, se deberá tener en
cuenta:

1.o En la ejecución, el jumper J6 del Micro’PIC Trainer debe estar cerrado.


2.o Los interruptores RA0-RA2 del Micro’PIC Trainer deben permanecer activados para no interferir
con el funcionamiento del LCD.

La Figura 5.10 muestra una fotografía del programa funcionando. En el LCD puede observarse
el valor numérico que muestra los herzios y el osciloscopio los pulsos generados por el oscilador del
Micro’PIC I/O.

Figura 5.10. Fotografía del ejercicio propuesto en ejecución.


Diseñar con PIC es fácil

APLICACIÓN DE LOS PIC AL CONTROL DE MOTORES Y SENSORES

Tarjetas como la Micro’PIC Trainer Plus y la Micro’PIC I/O pueden ser muy adecuadas para la de-
puración de programas, ya que cada una de ellas dispone de periféricos de E/S variados junto con
sus controladores. Esto permite la prueba de diferentes rutinas facilitando así el aprendizaje.
Sin embargo, cuando se acomete un proyecto real, a menudo los sensores y actuadores no se en-
cuentran sobre la tarjeta, sino sobre el elemento al cual controlan. Para esto se hace necesario que
la circuitería de control guarde cierta independencia de los sensores y actuadores.

La tarjeta MSx84

Se trata de una controladora de motores y sensores que puede contener un PIC16F84 de 18 patitas
para su gobierno o puede conectarse a otro sistema como el Micro’PIC Trainer que, a través del
PICBUS, puede pasarle las señales de un PIC de un máximo de 28 patitas. (Figura 5.11.)

SENSORES
ALIMENTACIÓN AC

PICBUS HF40106
PIC18

SW3
L2938

SW1 MOTORES BATERÍA

Figura 5.11. Fotografía que muestra las partes más importantes de la MSx84.

114
LOS TEMPORIZADORES 115

1.a Alimentación: se alimenta mediante un transformador de 12 VAC.


2.a Interruptor SW3: para el encendido y apagado de la placa.
3.a Entrada de batería J5: que permite la posibilidad de alimentación a pilas o con baterías, lo cual la
hace muy apta para entornos en que se necesita autonomía de alimentación.
4.a Conexión de Motores J6 y J7: con el driver L293B que contiene la placa, que permite controlar a
través de estos bornes 2 motores DC o uno PAP. Están asociados a las líneas RA0-RA3 del PIC.
5.a PICBUS: para la conexión con el Micro’PIC Trainer a través de este bus que permite, además de
la disposición de las líneas de E/S de un PIC externo, la grabación del PIC que se encuentra en la
propia tarjeta sin necesidad de sacarlo del zócalo.
6.a Conectores J -J4: asociados a las líneas RB0-RB3 y RA4 del PIC y que sirven para la conexión de
5 sensores, usando dos circuitos integrados HF40106.
7.a Dip-Switch SW1: son los encargados de realizar la asociación periféricos-líneas del PIC, tal y co-
mo se muestra en la Figura 5.12, donde S0-S4 se refiere a los sensores, INx al sentido de los mo-
tores y ENx a su encendido/apagado. En el caso de que se quiera realizar otra asociación, se de-
berán quitar los microrruptores e interconectar las líneas mediante cables.
8.a PIC18: zócalo sobre el que se alojará el PIC16F84.

Descripción del esquema electrónico

En la Figura 5.13 se muestra el esquema de la tarjeta MSx84, que está compuesto de cuatro bloques
principales:

1.o Fuente de alimentación.


2.o Sección del microcontrolador.
3.o Control de motores.
4.o Sección de sensores.

Figura 5.12. Zócalos que muestran la asociación de líneas con los sensores y actuadores.
116
MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 5.13. Esquema electrónico de la tarjeta MSx84 para el control de motores y sensores.
LOS TEMPORIZADORES 117

Fuente de alimentación

Está formada por dos secciones. La primera recibe en el puente rectificador (D1) por J8 una tensión
de 12 VAC y proporciona una tensión de 13 VDC, mediante el regulador UA7812 (U4) y los dio-
dos D2, D3, D4 y D5.
Al cerrar el interruptor SW3, se consigue una tensión de 5 VDC a través del regulador UA7805
(U5) en el borne +VCC, mientras que en el borne +VBAT se tienen los 13 VDC.
En lugar de la sección rectificadora del UA7812 se puede introducir una tensión de CC por me-
dio de una batería en el conector J5.

Microcontrolador

La tarjeta contiene su propio microcontrolador PIC16F84, que pone a disposición del usuario todas
sus patitas a través del conector PICBUS. Igualmente, usando este conector PICBUS puede conec-
tarse al Micro’PIC Trainer para grabar y borrar el microcontrolador directamente sobre la tarjeta de
aplicación.
La circuitería que envuelve al PIC16F84 es la mínima necesaria: cristal X1 de 4 MHz, junto a
los condensadores C7 y C8, y el circuito de Reset formado por el pulsador SW2 y la resistencia R11.

Sección de sensores

La tarjeta MSx84 puede controlar las señales digitales procedentes de 5 sensores externos que se
aplican por los conectores J0-J4. Dichas señales se aplican a puertas Trigger inversoras para la adap-
tación de niveles, evitando ruidos y deformaciones, mediante dos circuitos integrados HF40106.
Los microrruptores de SW1 permiten que cada una de las cinco señales de los sensores puedan
desconectarse de las líneas del microcontrolador, caso de no emplearse.
6 Módulos de captura,
comparación
y modulación
de anchura de pulsos

6.1. INTRODUCCIÓN A LOS MÓDULOS CCP

Los microcontroladores PIC16F87x disponen de dos módulos CCP, llamados CCP1 y CCP2, que
son idénticos excepto en lo referente a la modalidad de «Disparo Especial», que luego se comenta.
Dada esta similitud, la descripción se orienta hacia el módulo CCP1. Estos módulos pueden reali-
zar tres funciones principales:

1.o Modo captura: una pareja de registros de un módulo CCPx captura el valor que tiene el TMR1
cuando ocurre un evento especial en la patita RC2/CCP1 (para el módulo CCP1) o en la
RC1/T1OSI/CCP2 (para el módulo CCP2).
2.o Modo comparación: se compara el valor de 16 bits del TMR1 con otro valor cargado en una pare-
ja de registros de un módulo CCPx y cuando coinciden se produce un evento en la/s patita/s
RC2/CCP1 y/o RC1/T1OSI/CCP2.
3.o Modo modulación de anchura de pulsos (PWM): dentro del intervalo del período de un impulso
controla la anchura en que la señal vale nivel alto.

El módulo CCP1 utiliza un registro de trabajo de 16 bits que está formado por la concatenación
de los registros CCPR1H-CCPR1L (direcciones 16h y 15h). El registro de control del módulo
CCP1 es el CCP1CON, que ocupa la dirección 17h. (Figura 6.1.) El módulo CCP2 tiene como re-

REGISTRO CCPxCON (x puede ser 1 o 2)

— — CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

7 0

Figura 6.1. Asignación de los bits de los registros CCPxCON para los módulos CCP1 y CCP2. Todos
sus bits son leíbles y escribibles y pasan a 0 cuando se produce un Reset.

119
120 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

CCPxM3-0 MODO DE TRABAJO DEL MÓDULO


0000 Módulo CCPx desconectado
0100 Modo captura con cada flanco descendente en RCy/CCPx
0101 Modo captura con cada flanco ascendente en RCy/CCPx
0110 Modo captura cada 4 flancos ascendentes en RCy/CCPx
0111 Modo captura cada 16 flancos ascendentes en RCy/CCPx
1000 Modo comparación que activa la patita RCy/CCPx al coincidir valores
1001 Modo comparación que desactiva (0) la patita RCy/CCPx al coincidir valores
1010 Modo comparación que genera una interrupción software (no afecta a RCy/CCPx)
1011 Modo comparación en el que se produce un disparo especial diferente para cada módulo
11xx Modo PWM

gistros de trabajo a CCPR2H-CCPR2L (direcciones 1Ch y 1Bh) y como registro de control a


CCP2CON en la dirección 1Dh. Las parejas de registros son las encargadas de capturar el valor del
TMR1, de comparar el valor que tienen con el del TMR1 o, en el modo PWM, de modular la an-
chura del impulso. Los dos bits CCPxX y CCPxY actúan como los dos bits de menos peso en mo-
do PWM, estando ubicados los otros ocho en el registro CCPRxL.

6.2. MODO CAPTURA

En este modo, la pareja de registros CCPxH-L del módulo CCPx captura el valor de 16 bits que con-
tiene el TMR1 cuando sucede un evento en la patita RCy/CCPx de la Puerta C, que previamente ha
sido configurada como entrada poniendo a 1 el bit correspondiente del registro TRISC.
Los eventos posibles que pueden ocurrir sobre la patita RCy/CCPx para producir la captura del
valor del TMR1 sobre la pareja de registros CCPxH-L son:

1.o Un flanco ascendente.


2.o Un flanco descendente.
3.o Cada 4 flancos ascendentes.
4.o Cada 16 flancos ascendentes.

Los cuatro bits CCP1M3-0 del registro CCP1CON seleccionan el evento adecuado en el módu-
lo CCP1 y otro tanto sucede con el módulo CCP2.
Al efectuar la captura, se activa el señalizador CCP1IF del registro PIR1. Además, si se pone a
1 el bit de permiso de interrupción PIE1<CCP1IE>, se genera una petición de interrupción cuando
se carga en CCPR1H-L el valor del TMR1. En la Figura 6.2 se muestran los elementos más signi-
ficativos que intervienen en el trabajo del modo Captura.
Cuando se emplea el módulo CCP1 en modo captura, el TMR1 debe estar configurado para tra-
bajar como Temporizador o como contador síncrono. Nunca en modo asíncrono.
Si se van a cambiar las condiciones de funcionamiento en el modo captura, conviene detener o
desactivar al módulo CCP para evitar que se produzcan falsas interrupciones durante la operación.
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 121

Figura 6.2. Esquema de los bloques principales del Módulo de Captura del CCP1.

Si no se ha leído el contenido de los registros CCPR1H-L y se produce una nueva captura, di-
chos registros pasan a contener el nuevo valor.
Cuando se desactiva el módulo CCP o deja de funcionar en modo captura se borra la codifica-
ción del predivisor de frecuencia que determinan los bits CCP1M3-0.
Una aplicación muy interesante del modo captura puede ser la medición de los intervalos de
tiempo que existen entre los impulsos que llegan a la patita RC2/CCP1 que se halla configurada co-
mo entrada. El TMR1 debe trabajar con entrada de reloj externo sincronizada.

6.3. MODO COMPARACIÓN

En esta forma de trabajo, la pareja de registros CCPR1H-L compara su contenido, de forma conti-
nua, con el valor del TMR1. Cuando coinciden ambos valores, a la patita RC2/CCP1, que se halla
configurada como salida, la acontece uno de los siguientes eventos, de acuerdo con la programación
de los bits CCP1M3-0:

• Pasa a nivel alto.


• Pasa a nivel bajo.
• No cambia su estado pero se produce una interrupción.

Al coincidir los valores del TMR1 con los de la pareja de registros CCPR1H-L se pone a 1 el se-
ñalizador CCP1IF.
El TMR1 debe trabajar en modo temporizador o contador síncrono, pero nunca en modo
asíncrono.
Si el bit de permiso de interrupción está a 1, cuando coinciden los valores mencionados se ori-
gina una petición de interrupción. En la Figura 6.3 se ofrece un esquema por bloques de la estruc-
tura general del módulo CCP1 en modo comparación.
122 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 6.3. Esquema por bloques del módulo CCP1 cuando funciona en modo Comparador.

Si con los bits CCP1M3-0 se selecciona el modo de trabajo de «disparo especial», el módulo
CCP1 pone a 0 el TMR1 y el CCPR1 funciona como un Registro de Período, capaz de provocar pe-
riódicamente interrrupciones. En ese modo de disparo especial, el CCP2 pone a 0 el TMR1 y, ade-
más, inicia una conversión en el conversor A/D, con lo que también y, con carácter periódico, pue-
de realizar conversiones analógico/digitales sin el control del programa de instrucciones.

6.4. CHULETA-RESUMEN DE LOS REGISTROS ASOCIADOS AL MÓDULO


DE CAPTURA Y AL DE COMPARACIÓN

En la tabla de la Figura 6.4 se presentan los registros, con la distribución de sus bits, que participan
en la programación de los módulos de captura y comparación de los dispositivos CCP1 y CCP2.

DIREC- VALOR VALOR


CIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR, EN EL RESTO
BOR DE RESETS
0Bhh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10B,
18Bh
0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

87h TRISC Registro de configuración de la Puerta C


8Ch PIE1 Registro de carga del byte de menos peso del registro de 16 bits TMR1

0Eh TMR1L Registro de carga de byte más peso del registro de 16 bits TMR1 xxxx xxxx uuuu uuuu

10h T1CON — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON –00 0000 –uu uuuu
15h CCPR1L Registro de byte de menos peso del módulo de captura/comparación/modulación xxxx xxxx uuuu uuuu

16h CCPR1H Registro del byte de más peso del módulo de captura/comparación/modulación xxxx xxxx –0 0000
17h CCP1CON — — CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1MO –00 0000 –00 0000

Figura 6.4. Tabla resumida con los registros que manejan los modos de captura y comparación de
los módulos CCP.
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 123

6.5. MODO DE MODULACIÓN DE ANCHURA DE PULSOS (PWM)

Con este modo de trabajo, se consiguen impulsos lógicos cuya anchura del nivel alto es de duración
variable, que son de enorme aplicación en el control de dispositivos tan populares como los moto-
res y los triacs.
La patita RC2/CCP1 está configurada como salida y bascula entre los niveles lógicos 0 y 1 a in-
tervalos variables de tiempo. Lo que se intenta es obtener un impulso cuyo nivel alto tenga una an-
chura variable (Duty Cycle) dentro del intervalo del período de trabajo. (Figura 6.5.)
Para lograr el basculado de la patita de salida RC2/CCP1 se usa un comparador que pone a 1
(Set) un flip-flop cuando el valor del registro PR2 coincide con la parte alta del TMR2, momento
en que el TMR2 toma el valor 00h. Luego el flip-flop se resetea (se pone a 0) cuando otro compa-
rador detecta la coincidencia del valor existente en CCPR1H con el de la parte alta del TMR2. (Fi-
gura 6.6.) De esta manera, variando los valores que se cargan en PR2 y en CCPR1L (que luego se
traspasa al CCPR1H) se varía el intervalo de tiempo en el que la patita de salida está a 1 y a 0.
Cuando se trabaja con una precisión de 10 bits, los 2 bits CCP1CON<5:4> se concatenan con los
8 de CCPR1L y, de la misma forma, los 8 bits de más peso del TMR2 se concatenan con los dos bits
de menos peso del reloj interno, haciendo que el TMR2 cuente cada TOSC en vez de cada 4•TOSC.
El tiempo que dura el período de la onda depende del valor cargado en PR2, según la fórmula si-
guiente:

Período = [(PR2) + 1] • 4 • TOSC • Valor Predivisor TMR2

Cuando el valor del TMR2 coincide con el del PR2 suceden tres acontecimientos:

1.o Se borra el TMR2.


2.o La patita RC2/CCP1 se pone a 1.
3.o El valor de CCPR1L, que es el que determina la anchura del impulso, se carga en CCPR1H.

PERÍODO

ANCHURA IMPULSO
(DUTY CYCLE)

TMR2 = PR2 TMR2 = PR2

Figura 6.5. Se desea conseguir un impulso de nivel alto con anchura controlada dentro del período.
124 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 6.6. Esquema de la estructura interna del módulo CCP1 cuando funciona en modo PWM.

El tiempo que la patita de salida está a nivel alto, que es la anchura del impulso, depende del
contenido cargado en CCPR1L y de los dos bits 5 y 4 del CCP1CON, cuando se trabaja con una
precisión de 10 bits.

Anchura Impulso = (CCPR1L:CCP1CON<5:4>) • TOSC • Valor Predivisor TMR2.

El valor CCPR1L:CCP1CON<5:4> puede cargarse en cualquier momento, puesto que el mismo


no se traspasa a CCPR1H y se compara hasta que coincidan PR2 con TMR2. En el modo PWM el
registro CCPR1L sólo puede ser leído.
Los pasos a seguir para realizar la configuración del modo PWM son los siguientes:

1.o Asignar el período cargando el oportuno valor en PR2.


2.o Asignar la anchura del pulso cargando el registro CCPR1L y los dos bits 5 y 4 del CCP1CON.
3.o Configurar la línea RC2/CCP1 como salida.
4.o Asignar el valor del predivisor y activar el TMR2 escribiendo en T2CON.
5.o Configurar el Módulo CCP1 en modo PWM.

6.6. CHULETA-RESUMEN DE LOS REGISTROS ASOCIADOS AL MÓDULO PWM

En la Figura 6.7 se ofrece una tabla resumida de los registros que intervienen en la programación del
modo PWM.
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 125

DIREC- VALOR VALOR


CIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR, EN EL RESTO
BOR DE RESETS
0Bhh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10B,
18Bh

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
08h PIE1 PSPIE ADIE RCIE TXIE SSPIE CCPIIE TMR2IE TMR1IE 0000 0000 0000 0000

87Ch TRISC Registro DE CONFIGURACIÓN DE LA PUERTA C 1111 1111 1111 1111

11Eh TMR2L Registro del módulo TMR2 xxxx xxxx uuuu uuuu
12h T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPSI T2CKPS0 xxxx xxxx uuuu uuuu

92h PR2 Registro de período del TMR2 ––00 0000 ––uu uuuu
15h CCPR1L Registro del byte de menos peso del módulo de captura/comparación/modulación xxxx xxxx uuuu uuuu

16h CCPR1H Registro del byte de más peso del módulo de captura/comparación/modulación xxxx xxxx –0 0000

17h CCP1CON — — CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1MO –00 0000 –00 0000

Figura 6.7. Tabla que recoge los registros que se manejan en la programación del modo PWM.
Programar PIC es fácil

TRABAJO CON LOS MÓDULOS CCP

En este capítulo, se ha visto la teoría concerniente a los módulos CCP. Vamos ahora a mostrar con
dos ejemplos los tres modos de funcionamiento posibles: captura/comparación/modulación de an-
chura de pulsos.

Enunciado primero

Se quiere hacer trabajar al módulo CCP1 en modo comparación. El TMR1 asociado a este modo tra-
bajará en modo contador de impulsos externos, donde la señal que se le aplica es proporcionada por
el generador de la Micro’PIC I/O. Los pulsos que deberá contar vienen determinados por una cons-
tante n.
A su vez, la señal de salida generada por el módulo CCP1 cuando el TMR1 llegue a su valor, es
aplicada a la patita RA4/T0CKI, de modo que incremente el valor del TMR0, que estará configura-
do como contador de eventos externos. El tratamiento se realizará con interrupciones y un LED bas-
culará cada vez que el TMR0 se desborde.
Jugando con los valores de los predivisores de frecuencia y de la constante n se pueden obtener
diferentes temporizaciones.

Esquema eléctrico

Con este ejercicio se pueden obtener grandes temporizaciones, ya que se está enlazando el funcio-
namiento de dos temporizadores. Para ello, la señal de salida del módulo CCP1 (RC2/CCP1) debe-
rá unirse físicamente con la señal de entrada de impulsos del TMR0 (RA4/T0CKI). (Figura 6.8.)
La entrada de impulsos del TMR1, por su parte, vendrá dada por la unión de la patita
RC0/T1CKI con el generador del Micro’PIC I/O. El LED se corresponderá con la línea RB0, por lo
que se puede utilizar uno de los diodos de la barra de LED del Micro’PIC Trainer.

Organigrama

En el cuerpo principal del programa sólo se realizará la configuración e inicialización de los regis-
tros que se van a utilizar, tal y como se muestra en la Figura 6.9. Luego el programa deberá quedarse
en un bucle infinito a la espera de que se produzca una interrupción. A la vuelta de la interrupción
se seguirá en dicho bucle.
126
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 127

+5V

10K

In4148

100

RESET
PIC16F873

1 MCLR#/V PP/THV RB7/PGD 28


2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/V REF- RB4 25
5 RA3/AN3/V REF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
8 RB0/INT 21
15 pF VSS
9 VDD 20 +5 V
OSC1/CLKIN
10 OSC2/CLKOUT VSS 19
CRISTAL 4 Mhz
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15

330

LED
GENERADOR
MICRO’PIC I/O

Figura 6.8. Esquema eléctrico del ejercicio propuesto.

Cuando se trabaja con interrupciones se necesita utilizar, al menos, dos organigramas: uno para
el tratamiento de la interrupción y otro para el programa principal. Si el programa principal o la in-
terrupción son complejos, sus organigramas mostrarán los llamamientos a subrrutinas y éstas debe-
rán especificarse en otros organigramas.
La Figura 6.10 muestra el organigrama de tratamiento de interrupción.
El primer recuadro INTER no se traduce en ninguna instrucción; representa la entrada a la ruti-
na. La salida, asimismo, también debe ser única.
Siempre que se habilite más de una interrupción, el primer paso será discriminar de entre los ti-
pos posibles aquel que la ha producido. En nuestro caso, tenemos la interrupción del TMR0 al des-
bordarse, lo cual hará cambiar de estado al LED conectado en RB0, y la interrupción provocada
cuando el comparador del módulo CCP1 detecta la igualdad del TMR1 con el valor programado. En
ambos casos se debe poner a 0 el señalizador de interrupción antes de volver.
128 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 6.9. Organigrama del cuerpo principal del ejercicio propuesto.

Figura 6.10. Organigrama de la rutina de tratamiento de interrupción.


MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 129

Programa comentado

El programa correspondiente al enunciado dado queda como sigue:

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería
n EQU .500 ; N.o de pulsos externos a
; contar por el TMR1
ORG 0x00 ; Inicio en el Vector de
; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x04 ; Vector de interrupción

INTER btfsc INTCON,T0IF ; ¿Interrupción del TMR0?


goto INTER_TMR0 ; Sí. Ir a tratamiento
btfss PIR1,CCP1IF ; No. ¿Interrupción por
; CCP1?
goto VOLVER ; No. Falsa interrupción. Ir
; a VOLVER

INTER_CCP1 movf CCP1CON,W ; Se bascula el disparo


xorlw b’00000001’ ; de RC2/CCP1
movwf CCP1CON
bcf PIR1,CCP1IF ; Reponer el flag de CCP1
goto INI_TMR1 ; Ir a parte común

INTER_TMR0 movlw b’00000001’ ; Variar el valor del LED


xorwf PORTB,F
bcf INTCON,T0IF ; Reponer el flag del TMR0

INI_TMR1 clrf TMR1L ; Inicializar el TMR1


clrf TMR1H

VOLVER retfie ; Vuelta de interrupción

; Comienzo del programa principal

INICIO clrf PORTB ; Limpia salidas


clrf PORTA
clrf PORTC
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
130 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

movlw b’00000110’ ; Puerta A E/S digitales


movwf ADCON1
clrf TRISB ; Puerta B como salida
movlw b’00011111’ ; Puerta A como entrada
movwf TRISA
movlw b’11111011’ ; RC0 entrada, RC2 salida
movwf TRISC
movlw b’11101111’ ; Predivisor de 128 asociado
movwf OPTION_REG ; al perro guardián
bsf PIE1,CCP1IE ; Habilitación de
; la interrupción del CCP1
bsf INTCON,T0IE ; Habilitación de
; la interrupción del TMR0
bcf STATUS,RP0 ; Cambio a banco 0

movlw b’00000010’ ; Se deshabilita el TMR1


movwf T1CON
movlw b’00001000’ ; Se configura el CCP1 en
movwf CCP1CON ; modo comparación
clrf TMR1L ; Inicializar el TMR1
clrf TMR1H

movlw HIGH n ; Mueve la parte alta del


movwf CCPR1H ; valor a contar por el TMR1
movlw LOW n ; Mueve la parte baja del
movwf CCPR1L ; valor a contar por el TMR1

clrf TMR0 ; Inicializar TMR0


bsf T1CON,TMR1ON ; Activación del TMR1
movlw b’11000000’ ; Habilitación de las
movwf INTCON ; interrupciones en general

BUCLE clrwdt ; Refresca el perro guardián


goto BUCLE

END

Prueba del programa

Para la prueba del programa vamos a hacer uso de los sistemas Micro’PIC Trainer y Micro’PIC I/O.
La grabación del microcontrolador se realizará como en capítulos anteriores. Además, deberá te-
nerse en cuenta:

1.o Deberán conectarse las patitas del PIC como se explica en el apartado de Esquema Eléctrico. Di-
chas patitas están accesibles en el Micro’PIC I/O.
2.o Los LED del Micro’PIC Trainer deberán estar activados mediante el jumper J7.
3.o El interruptor RA4 del Micro’PIC Trainer debe estar a ‘1’ para no interferir con la señal que genera
RC2/CCP1.
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 131

Figura 6.11. Fotografía del programa en ejecución.

La Figura 6.11 muestra la conexión de las tarjetas Micro’PIC I/O y Micro’PIC Trainer para la
ejecución del programa.
De los dos LED encendidos en el Micro’PIC Trainer, uno de ellos es el de conexión de la placa
y el otro el que bascula cuando el TMR0 se desborda. El poliscopio, por su parte, muestra los pul-
sos aplicados por el generador del Micro’PIC I/O al TMR1.

Enunciado segundo

Los módulos CCP1 y CCP2 pueden trabajar simultáneamente en diferente modo. En este ejercicio
vamos a hacer trabajar al módulo CCP2 en modulación de anchura de pulsos para el gobierno de un
motor, y al módulo CCP1 en comparación para controlar el desplazamiento de dicho motor. El
TMR1 actuará en modo contador de eventos externos, donde los impulsos serán generados por el
encoder asociado al motor.
La secuencia que se pretende realizar con este programa es:

1.o Arrancar el motor suavemente en el sentido horario hasta llegar a la velocidad máxima.
2.o Girar en sentido horario tantos pasos como determine la constante «HORARIO».
3.o Parar un segundo.
4.o Girar en sentido antihorario tantos pasos como indique la constante «ANTIHORARIO», a la velo-
cidad que determinen los interruptores (RA4-RA0)• 8.
5.o Decrecer la velocidad hasta llegar a detener el motor.
6.o Parar un segundo.
7.o Vuelta al paso 1.o.
132 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Esquema eléctrico

Para la realización de este ejercicio se deben hacer las conexiones mostradas en la Figura 6.12 y que
se enuncian a continuación:

1.o La salida del encoder debe unirse con la entrada de pulsos del TMR1 (RC0/T1CKI).
2.o La salida del módulo CCP2 (RC1/CCP2) se conecta a la entrada de activación del motor.
3.o Las salidas RB1:RB0 se conectan con las líneas IN2:IN1 del motor para controlar el sentido del giro.

Organigrama

Los pasos a realizar tras configurar los registros adecuadamente se pueden ver como una secuencia
de acciones. En este caso, cada recuadro se corresponderá con un bloque de instrucciones.
Se trata de comenzar con una velocidad nula en el motor e ir incrementándola en uno de los sen-
tidos de giro. Esto se hará mediante PWM, aumentando la anchura del pulso en un bucle hasta lle-
gar al máximo. En esa velocidad, el motor girará un número dado de pasos. Dichos pasos serán pul-
sos que el encoder acoplado al motor introduce en la patita RC0/T1CKI del TMR1.

+5V

10K

In4148

100

RESET
PIC16F873

1 MCLR#/V PP/THV RB7/PGD 28


2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/V REF- RB4 25
5 RA3/AN3/V REF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
8 RB0/INT 21
15 pF VSS
9 VDD 20 +5 V
OSC1/CLKIN
10 VSS 19
CRISTAL 4 Mhz OSC2/CLKOUT
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15

GENERADOR ON IN1 IN2


MICRO’PIC I/O MOTOR
MICRO’PIC I/O

Figura 6.12. Esquema de conexionado del PIC con el motor y el encoder.


MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 133

INICIALIZACIÓN
PA ENTRADA
PB SALIDA
RC 0 ENTRADA
RC 1 SALIDA

PREDIVISOR TMR0
CCP2 COMPARACIÓN
VELOCIDAD = 0

ACTIVAR MOTOR
SENTIDO HORARIO

INCREMENTAR VELOCIDAD
HASTA MÁXIMA

AVANZAR PASOS
SEGÚN HORARIO

PARAR 1 SG.

GIRO ANTIHORARIO
PASOS SEGÚN ANTIHORARIO
VELOCIDAD SEGÚN (RA4-RA0) . 8

DECRECER VELOCIDAD
HASTA PARAR

PARAR 1 SG

Figura 6.13. Organigrama del segundo ejercicio propuesto.

Se parará el motor de golpe y permanecerá así durante un segundo. A velocidad marcada por
unos interruptores el motor volverá a girar, esta vez en sentido contrario al anterior y, por ultimo, por
la misma PWM se irá decrementando la velocidad del motor hasta pararlo durante otro segundo.
Durante el programa, además, se va a controlar el estado del perro guardián, introduciendo instruc-
ciones de borrado para que resetee el PIC en el caso de que se produzca un fallo en el sistema.
134 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Programa comentado

El programa para este segundo enunciado queda:

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería
HORARIO EQU .1500 ; N.o de pasos en sentido
; horario
ANTIHORARIO EQU .1000 ; N.o de pasos en sentido
; antihorario
PERIODO EQU .255 ; Período de 255 ∑ predivisor
; de 16 (4 mS)
TEMPORAL EQU 0x20 ; Variable temporal
DELAY_CONT EQU 0x21 ; Variable de temporización

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salta vector de interrupción

DELAY movlw ~.78 ; Inicialización del TMR0


movwf TMR0 ; para cuenta de 20 mS
DELAY_1 clrwdt ; refresco del perro guardián
btfss INTCON,T0IF ; ¿Se ha desbordado el
; TMR0?
goto DELAY_1 ; No
bcf INTCON,T0IF ; Sí. Reponer el flag
decfsz DELAY_CONT,F ; ¿Se ha repetido tantas
; veces como indica
; DELAY_CONT?
goto DELAY ; No. Repetir otros 20 mS
return ; Sí. Volver de la
; temporización

; Comienzo del programa principal

INICIO clrf PORTB ; Limpia salidas


clrf PORTA
clrf PORTC
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
movlw b’00000110’ ; Puerta A E/S digitales,
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 135

movwf ADCON1
clrf TRISB ; Puerta B como salida
movlw b’00011111’ ; Puerta A como entrada
movwf TRISA
movlw b’11111101’ ; RC0 entrada, RC1 salida
movwf TRISC
movlw b’11000111’ ; Predivisor de 256 asociado
movwf OPTION_REG ; al TMR0
movlw PERIODO-1 ; Carga el registro de
movwf PR2 ; períodos
bcf STATUS,RP0 ; Cambio a banco 0

BUCLE clrwdt ; Refresca el perro guardián


movlw b’00001100’ ; Configuración de CCP2
movwf CCP2CON
movlw .255 ; Máxima velocidad deseada
movwf TEMPORAL
clrf CCPR2L ; Velocidad inicial nula

movlw b’00000111’ ; Habilitación del TMR2 con


movwf T2CON ; predivisor de 16

; Paso 1. Partiendo de velocidad 0 irla incrementando hasta llegar a la


; máxima girando en sentido horario

movlw b’00000010’ ; Motor en marcha en


movwf PORTB ; sentido horario
PASO_1 movlw 2 ; temporización de 40 mS
movwf DELAY_CONT
call DELAY
incf CCPR2L,F ; Incremento de velocidad
; con el aumento de la
; anchura de pulso
decfsz TEMPORAL,F ; ¿Ha llegado a la máxima?
goto PASO_1 ; No. Seguir incrementando

; Paso 2. Avance en sentido horario tantos pasos como indique HORARIO

PASO_2 clrf TMR1L ; Inicialización del TMR1


clrf TMR1H
movlw HIGH HORARIO ; Inicialización de los pasos
movwf CCPR1H ; a contar en sentido horario
movlw LOW HORARIO
movwf CCPR1L

movlw b’00001011’ ; Configuración de CCP1


movwf CCP1CON ; con reset en el TMR1

movlw b’00000011’ ; Configuración del TMR1


movwf T1CON ; con predivisor de 1. Activ.

bcf PIR1,CCP1IF ; Reposición del flag de


; CCP1
136 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

PASO_2_1 clrwdt ; Refresca perro guardián


btfss PIR1,CCP1IF ; ¿Se han dado los pasos en
; sentido horario?
goto PASO_2_1 ; No. Seguir
bcf PIR1,CCP1IF ; Sí. Reponer flag
clrf PORTB ; Desconectar motor

; Paso 3. Parada de 1 sg.

PASO_3 movlw .50 ; Parada de 1 sg


movwf DELAY_CONT
call DELAY

; Paso 4. Avance en sentido antihorario

PASO_4 movlw HIGH ANTIHORARIO ; Carga el N.o de pasos


movwf CCPR1H ; antihorario
movlw LOW ANTIHORARIO
movwf CCPR1L
movf PORTA,W ; Lee estado de RA4-RA0
movwf TEMPORAL ; que es la velocidad
bcf STATUS,C
rlf TEMPORAL,F ; Multiplica por 8
rlf TEMPORAL,F
rlf TEMPORAL,W
movwf CCPR2L ; Carga la anchura de pulso

movlw b’00000001’ ; Activa el motor en sentido


movwf PORTB ; antihorario

PASO_4_1 clrwdt ; Refresca perro guardián


btfss PIR1,CCP1IF ; ¿Se han dado los pasos?
goto PASO_4_1 ; No. Seguir
bcf PIR1, CCP1IF ; Sí. Reponer el flag

; Paso 5. Disminución de la velocidad

PASO_5 movlw .2 ; Temporiza 40 mS


movwf DELAY_CONT
call DELAY
decfsz CCPR2L,F ; Disminuye anchura de
; pulso ¿Es la mínima?
goto PASO_5 ; No. Sigue decreciendo

; Paso 6. Parada del motor, espera de 1 sg y vuelta a empezar

PASO_6 clrf PORTB ; Parada del motor.


movlw .50 ; Temporización de 1 sg
movwf DELAY_CONT
call DELAY
goto BUCLE ; Repetir el ciclo

END
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 137

Prueba del programa

Como en el ejercicio anterior, se usan los sistemas Micro’PIC Trainer y Micro’PIC I/O, teniendo en
cuenta que se deben conectar las líneas del PIC a los diferentes periféricos utilizados, tal y como se
explica en el apartado del esquema eléctrico. En la Figura 6.14 se muestran dichas conexiones, don-
de se puede apreciar la modulación aplicada al motor en el poliscopio.

Figura 6.14. Fotografía del montaje propuesto.


Diseñar con PIC es fácil

APLICACIÓN DE LOS MICROCONTROLADORES: LA MICROBÓTICA

La Microbótica es una tecnología derivada de la Robótica Industrial que se está imponiendo en mul-
titud de aplicaciones y que proliferará masivamente en la primera década del siglo XXI.
El microbot es un dispositivo móvil que reacciona ante el entorno de acuerdo con un plan de ac-
ciones programadas por el usuario. Para moverse utiliza motores y para reconocer el entorno emplea
sensores de todo tipo. Finalmente, para controlar motores, sensores y actuadores dispone de un com-
putador en miniatura programado en función de la finalidad a la que se destina.
Existen multitud de tareas sencillas y rutinarias que nos ocupan una gran parte del día como co-
cinar, limpiar, controlar parámetros como la temperatura del agua y la calefacción, lavar, conducir,
vigilar, transportar, y muchos más.
La gran función de los microbots es resolver estas pequeñas tareas con rapidez y precisión: ex-
plorar, medir y tomar el valor de magnitudes, cuidar jardines, recolectar frutos, vigilar zonas de se-
guridad, acompañar a los visitantes, transportar todo tipo de objetos, guiar a invidentes, ayudar a mi-
nusválidos, trabajar en entornos peligrosos como los radioactivos o submarinos, y hasta ser
excelentes compañeros.
En la Figura 6.15 se presenta al microbot que en 1997 exploró el planeta Marte.

Figura 6.15. Fotografía del Sojourner, que la NASA utilizó para explorar Marte.
138
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 139

Un microbot consta de 4 partes principales:

1.a Sistema computerizado basado en un microcontrolador.


2.a Armazón.
3.a Órganos motrices que emplea para moverse y realizar operaciones.
4.a Sensores de información.

El cerebro del microbot es un microcontrolador programado. Recibe información de los senso-


res, la procesa y de acuerdo con su aplicación ordena las acciones precisas a los órganos motrices.
Entre los microcontroladores más usados en España destacan los PIC y los Motorola.
El armazón debe soportar rígidamente a todos los componentes del microbot. La estructura pue-
de ser mecánica, plástica o hecha a medida.
Los motores más usados en Microbótica son los de corriente continua y los PAP. Son muy po-
pulares los servomotores de Futaba, que incluyen un grupo reductor y una gran estabilidad en la ve-
locidad de giro. Además, se caracterizan por tener una baja inercia en los instantes de arranque y pa-
rada. (Figura 6.16.)
En cuanto a sensores y actuadores que maneja un microbot, el abanico de modelos es muy am-
plio. Los más utilizados en esta tecnología son los sensores de rayos infrarrojos, los mecánicos de
posición y contacto (bumpers), los de proximidad de tipo magnético y por efecto hall, los de lumi-
nosidad, distancia, luz, temperatura, etc.

EL PICBOT-3

Utilizando la potencia del PIC16F876 y gran cantidad de avanzados sensores, como los mostrados
en la Figura 6.16, Ingeniería de Microsistemas Programados ha comercializado el robot inteligente
PICBOT-3. (Figura 6.17.)

Figura 6.16. Fotografía de los módulos de sensor ultrasónico de movimiento MSE-S120 (izquierda) y
sensor IR detector de obstáculos MSE-S135 (derecha).
140 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 6.17. Fotografía del microbot PICBOT-3 con diferentes módulos de ampliación.

El PICBOT-3 es un nuevo concepto de robot móvil inteligente y modular. Está basado en los mi-
crocontroladores PIC16F87x dotados del programa monitor PICMOS’7X y gestionado y progra-
mado con el software de comunicaciones Real_PIC para PC bajo Windows. Admite la fácil adap-
tación de todo tipo de sensores y su aplicación para cualquier tarea de complejidad mediana.
Los PICBOT ya se han usado en el desarrollo de proyectos tales como:

1.o Inspector de tuberías y localizador de piezas.


2.o Teledirigido por R.F. para operaciones en ambientes peligrosos.
3.o Paletizador de yogures.
4.o Medidor automático de perímetros y áreas de superficies irregulares.
5.o Controlador de mensajes en el guiado de invidentes por ciudades.
6.o Vigilante de edificios.
7.o Transportador de piezas en factorías.
8.o Aspirador automático para apartamentos.

Sólo la imaginación de los ingenieros que proyectan y programan estas bestias inteligentes cons-
tituye el límite de sus posibilidades.
Prueba de su importancia y su proyección de futuro en las facultades de Ingeniería Informática
y Electrónica de todo el mundo es la organización de Certámenes anuales en los que participan los
ingenios más inverosímiles. (Figura 6.18.)
MÓDULOS DE CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA DE PULSOS 141

Figura 6.18. Fotografía de un momento del Certamen de Robots Rastreadores celebrado en la


Universidad de Deusto.
7 El conversor A/D

7.1. PRESENTACIÓN DEL CONVERSOR ANALÓGICO/DIGITAL

Los microcontroladores PIC16F87x poseen un conversor A/D de 10 bits de resolución y 5 canales


de entrada en los modelos con 28 patitas (PIC16F873/6) y 8 canales en los que tienen 40 patitas
(PIC16F874/7).
La resolución que tiene cada bit procedente de la conversión tiene un valor que es función de la
tensión de referencia Vref, de acuerdo con la fórmula siguiente:

Resolución = (Vref+ - Vref-) / 1.024 = Vref / 1.024

Así, por ejemplo, si la Vref+ = 5 VDC y la Vref- es tierra, la resolución es de 4,8 mV/bit. Por tan-
to, a la entrada analógica de 0 V le corresponde una digital de 00 0000 0000 y para la de 5 V una de
11 1111 1111. La tensión de referencia determina los límites máximo y mínimo de la tensión ana-
lógica que se puede convertir. El voltaje diferencial mínimo es de 2 V.
A través del canal de entrada seleccionado, se aplica la señal analógica a un condensador de cap-
tura y mantenimiento (sample and hold) y luego se introduce al conversor, el cual proporciona un
resultado digital de 10 bits de longitud usando la técnica de «aproximaciones sucesivas».
El conversor A/D es el único dispositivo que puede funcionar en modo Reposo (SLEEP), para
ello el reloj del conversor deberá conectarse al oscilador RC interno.
En los PIC16F873/6 los 5 canales de entrada están soportados por las 5 líneas multifunción de
la Puerta A. En la configuración de dichas líneas habrá que expresar la función que realizan.
La tensión de referencia puede implementarse con la tensión interna de alimentación VDD, o
bien, con una externa que se introduce por la patita RA3/AN3/VREF+, en cuyo caso la polaridad ne-
gativa se aplica por la patita RA2/AN2/VREF-.

7.2. REGISTROS DE TRABAJO

El funcionamiento del conversor A/D requiere la manipulación de cuatro registros:


143
144 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.o ADRESH: parte alta del resultado de la conversión.


2.o ADRESL: parte baja del resultado de la conversión.
3.o ADCON0: registro de Control 0.
4.o ADCON1: registro de Control 1.

En la pareja de registros ADRESH:ADRESL se deposita el resultado de la conversión, que al es-


tar compuesta por 10 bits, sólo son significativos 10 de los bits de dicha pareja.
El registro ADCON0 controla la operación del conversor A/D, mientras que el ADCON1 sirve
para configurar las patitas de la Puerta A como entradas analógicas o E/S digitales. (Figura 7.1.)

REGISTRO ADCON0

ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# — ADON

7 0
REGISTRO ADCON1

ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0

7 0

Figura 7.1. Asignación de los bits de los registros de control del conversor A/D ADCON0 y ADCON1.

Los bits ADCON0<7:6> sirven para seleccionar la frecuencia de reloj que se emplea en la con-
versión, con la siguiente asignación:

ADCS1:0 FRECUENCIA

00 FOSC/2

01 FOSC/8

10 FOSC/32

11 FRC (procede del oscilador RC interno)

Se designa como TAD el tiempo que dura la conversión de cada bit y en el caso de trabajar con valores
digitales de 10 bits, se requiere un tiempo mínimo de 12•TAD. El valor de TAD se selecciona por software
mediante estos bits (ADCS1:ADCS0) y en los PIC16F87x nunca debe ser menor de 1,6 microsegundos.

ADCS1:0 TAD

00 2•TOSC

01 8•TOSC

10 32•TOSC

11 Oscilador RC interno en el C A/D


EL CONVERSOR A/D 145

SELECCIÓN TAD FRECUENCIA DE TRABAJO

TAD ADCS1:ADCS0 20 MHz 5 MHz 1,25 MHz 333,33 kHz

2•TOSC 00 100 ηs 400 ηs 1,6 μs 6 μs

8•TOSC 01 400 ηs 1,6 ηs 6,4 μs 24 μs

32•TOSC 10 1,6 μs 6,4 μs 2,6 μs 96 μs

RC 11 2-6 μs 2-6 μs 2-6 μs 2-6 μs

Figura 7.2. Tabla que presenta los valores que toma TAD, tiempo de convesión por bit, según la pro-
gramación de ADCS1:ADCS0 y la frecuencia de funcionamiento del microcontrolador.
Para el conversor A/D de los PIC16F87x el valor mínimo de TAD es de 1,6 microsegundos.

En la tabla de la Figura 7.2 se presentan los diversos valores que toma TAD según los bits
ADCS1:ADCS0 y la frecuencia de trabajo del microcontrolador. Así, por ejemplo, si dichos bits to-
man el valor 00, TAD = 2•TOSC y si el PIC funciona a 20 MHz resulta que TAD = 100 ns, tiempo no
válido. Si la frecuencia es de 5 MHz, TAD = 400 ns, valor que tampoco es válido. Si la frecuencia es
de 1,25 MHz, TAD = 1,6 microsegundos, valor justamente válido. Finalmente, para una frecuencia
de 333,33 KHz, TAD = 6 microsegundos.
Los bits CHS2-0 seleccionan el canal por el que se introduce la señal analógica a convertir, de
acuerdo con el siguiente código:

CH2-0 CANAL

000 Canal 0 (RA0/AN0)

001 Canal 1 (RA1/AN1)

010 Canal 2 (RA2/AN2)

011 Canal 3 (RA3/AN3)

100 Canal 4 (RA5/AN4)

101 Canal 5 (RE0/AN5). Los PIC16F87x de 28 patitas no tienen este canal

110 Canal 6 (RE1/AN6). Los PIC16F87x de 28 patitas no tienen este canal

111 Canal 7 (RE2/AN7). Los PIC16F87x de 28 patitas no tienen este canal

El bit GO/DONE# es el «bit de estado de la conversión». Poniéndolo a 1 se inicia la conversión


y mientras esté a 1 está realizándose dicha operación. Cuando GO/DONE# pasa a 0 confirma el fi-
nal de la conversión y la puesta del resultado en la pareja de registros ADRESH:L.
El bit ADON sirve para activar el C A/D poniéndolo a 1 y para inhibir su funcionamiento po-
niéndolo a 0.

7.3. ESTRUCTURA INTERNA Y CONFIGURACIÓN DEL CONVERSOR A/D

En la Figura 7.3 se ofrece un esquema del conexionado del conversor A/D con las patitas que
soportan los canales de entrada y las de la tensión de referencia.
146 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

CHS2-0

RE2/AN7

RE1/AN6
CONVERTIDOR
A/D RE1/AN5

RA5/AN4

RA3/AN3/VREF+

RA2/AN2/VREF-

RA1/AN1

RA0/AN0

VDD

VREF+

4
PCFG3-0

VREF-
VSS

4
PCFG3-0

Figura 7.3. Estructura del conexionado del conversor A/D.

El bit de más peso (ADFM) del registro ADCON1 selecciona el formato del resultado de la con-
versión. Si vale 1, el resultado está justificado en el registro ADRESH, que tiene sus 6 bits de más
peso a 0; mientras que si vale 0 la justificación se realiza sobre el registro ADRESL, que tiene sus
6 bits de menos peso a 0. Esto significa que los 16 bits que forman la concatenación de
ADRESH:ADRESL unas veces tiene a 0 los 6 bits de más peso y otras los 6 bits de menos peso (ali-
neación del resultado a la derecha o a la izquierda).
EL CONVERSOR A/D 147

Figura 7.4. Alineamiento del resultado digital de 10 bits de la conversión a la izquierda y a la


derecha.

En la Figura 7.4 se muestran las dos formas posibles del alineamiento del resultado sobre la pa-
reja de registros ADRESH:ADRESL.
Los restantes cuatro bits (PCFG3-0) de ADCON1 se usan para configurar las patitas de los ca-
nales de entrada al conversor como analógicas o como E/S digitales, de acuerdo con la tabla de la
Figura 7.5.

AN7/ AN6/ AN5/ AN4/ AN3/ AN2/ AN1/ AN0/ CANAL/


PCFG3-0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 VREF+ VREF– REFS

0000 A A A A A A A A VDD VSS 8/0

0001 A A A A VREF+ A A A RA3 VSS 7/1

0010 D D D A A A A A VDD VSS 5/0

0011 D D D A VREF+ A A A RA3 VSS 4/1

0100 D D D D A D A A VDD VSS 3/0

0101 D D D D VREF+ D A A RA3 VSS 2/1

011x D D D D D D D D VDD VSS 0/0

1000 A A A A VREF+ VREF- A A RA3 RA2 6/2

1001 D D A A A A A A VDD VSS 6/0

1010 D D A A VREF+ A A A RA3 VSS 5/1

1011 D D A A VREF+ VREF- A A RA3 RA2 4/2

1100 D D D A VREF+ VREF- A A RA3 RA2 3/2

1101 D D D D VREF+ VREF- A A RA3 RA2 2/2

1110 D D D D D D D A VDD VSS 1/0

1111 D D D D VREF+ VREF- D A RA3 RA2 1/2

Figura 7.5. Tabla que determina las patitas del PIC que actúan como entradas analógicas o como E/S
digitales, según el valor de los 4 bits de ADCON1<PCFG3-0>.
148 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

A continuación, se indican los pasos que hay que efectuar para realizar una conversión
A/D:

1.o Configurar el módulo C A/D

• Configurar las patitas que actuarán como entradas analógicas, las que trabajan como E/S di-
gitales y las usadas para la tensión de referencia (ADCON1).
• Seleccionar el reloj de la conversión (ADCON0).
• Seleccionar el canal de entrada A/D (ADCON0).
• Activar el módulo A/D (ADCON0).

2.o Activar, si se desea, la interrupción escribiendo sobre PIE1 y PIR1

• Borrar el señalizador ADIF.


• Poner a 1 el bit ADIE.
• Poner a 1 los bits habilitadores GIE y PEIE.

3.o Tiempo de espera para que transcurra el tiempo de adquisición

4.o Inicio de la conversión

• Poner a 1 el bit GO/DONE# (ADCON0).

5.o Tiempo de espera para completar la conversión A/D que puede detectarse:

a) Por la exploración del bit GO/DONE#, que al completarse la conversión pasa a valer 0.
b) Esperando a que se produzca la interrupción si se ha programado, al finalizar la conver-
sión.
c) Aunque no se permita interrupción, el señalizador ADIF se pondrá a 1 al finalizar la conver-
sión.

6.o Leer el resultado en los 10 bits válidos de ADRESH:L y borrar el flag ADIF

7.o Para una nueva conversión regresar al paso 1.o o al 2.o El tiempo de conversión por bit está defi-
nido por TAD. Se exige esperar un mínimo de 2•TAD para reiniciar una nueva conversión.

Si se elige como reloj para la conversión al oscilador RC interno del conversor A/D, éste puede
seguir funcionando cuando se introduce el microcontrolador al modo de Reposo o SLEEP. En los
restantes modos, se aborta la conversión y se desactiva el conversor A/D. En la Figura 7.6 se ofre-
ce el organigrama sobre la operatividad del conversor A/D.
Se propone un programa general para el manejo del conversor A/D. En él se carga con 0 al re-
gistro ADCON1, con lo que todas las patitas correspondientes a los canales de entrada del C A/D
se configuran como entradas analógicas (PCFG3-0 = 0000) y se toma como VREF+ = VDD y como
VREF- = VSS. Al ser el bit de más peso ADFM = 0, el resultado depositado en ADRESH:ADRESL
queda justificado a la izquierda (los 6 bits de menos peso de ADRESL son 0). Se permite la inte-
rrupción del C A/D (bsf PIE1, ADIE). Como reloj para la conversión se elige al oscilador interno
RC como consecuencia de cargar a ADCON0 con el valor 11000001 y se elige como canal de en-
trada a la patita RA0/AN0.
EL CONVERSOR A/D 149

CONFIGURACIÓN
CONVERSOR A/D


¿ADON = 0?

NO

ADQUISICIÓN
CANAL
SELECCIONADO


¿GO = 0?

NO

SÍ INICIO A/D SÍ FIN CONVERSIÓN


¿RELOJ A/D = RC? ¿INSTRUCCIÓN SLEEP? GO = 0
RETARDO 1 CICLO
INSTRUCCIÓN ADIF = 1
NO NO

¿DISPOSITIVO EN REPOSO?
FIN CONVERSIÓN
GO = 0 ¿DESPERTAR DEL REPOSO?

.
ESPERA 2 TAD
ADIF = 1
NO
NO

FIN CONVERSIÓN .
ESPERA 2 TAD
QUEDA EN SLEEP
GO = 0 HASTA POWER-DOWN
ADIF = 1 DEL A/D

.
ESPERA 2 TAD

Figura 7.6. Organigrama de la operación del conversor A/D.

bsf STATUS,RP0 ; Selección del Banco 1


bcf STATUS,RP1
clrf ADCON1 ; Patitas de entrada analógicas
bsf PIE1,ADIE ; Permite la interrupción del C A/D
bcf STATUS,RP0 ; Banco 0
movlw 11000001 ; Oscilador RC interno, Canal 0,
movwf ADCON0 ; Activación del conversor
bcf PIR1,ADIF ; Borra el señalizador A/D
bsf INTCON,PEIE ; Permiso de interrupciones a los
; periféricos
bsf INTCON,GIE ; Permiso global de interrupciones

; Tiempo de espera suficiente para la toma de muestra en el Canal 0

bsf ADCON0,GO ; Inicio de la conversión

; Al terminar la conversión ADIF = 1 y el bit GO/DONE# = 0


150 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

7.4. CHULETA-RESUMEN DE LOS REGISTROS ASOCIADOS


AL CONVERSOR ANALÓGICO/DIGITAL

En la Figura 7.7 se presenta una tabla que recoge todos los registros que participan en la programa-
ción del conversor A/D.

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

0Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10Bh,
18Bh

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

08h PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

1Eh ADRESH Bit de más peso del resultado de la conversión A/D xxxx xxxx uuuu uuuu

9Eh ADRESL Bit de menos peso del resultado de la conversión A/D — —

1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# — ADON 0000 00-0 0000 00-0

9Fh ADCON1 ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0 —0- 0000 —0- 0000

85h TRISA — — Registro de configuración de la Puerta A —11 1111 —11 1111

05h PORTA — — RA5 RA4 RA3 RA2 RA1 —0x 0000 —0u 0000

89h TRISE IBF OBF IBOV PSPMODE — Registro de configuración 0000 –111 0000 -111
de la Puerta E

09h PORTE — — — — — RE2 RE1 RE0 —— -xxx —— -uuu

Figura 7.7. Tabla que ofrece la distribución de los bits de los registros que intervienen en la progra-
mación del conversor A/D.
Programar PIC es fácil

ADQUISICIÓN DE VALORES CON LOS CONVERSORES A/D

De los recursos contenidos en el PIC16F87x, quizá el conversor A/D sea del que más aplicaciones
estamos acostumbrados a ver en nuestra vida diaria. Sensores de temperatura, luz, humedad, hu-
mo..., son valores que nos interesa monitorizar pero que necesitan ser traducidos a valores digitales
para ser entendidos por el sistema de control, labor que realizan los conversores A/D. La tarea de
conversión es siempre igual, sea cual sea el sensor utilizado. Por ello, vamos a realizar un ejercicio
con uno de los sensores disponibles en el Micro’PIC I/O, teniendo en cuenta que lo que variará en
el programa al cambiar de sensor será el tratamiento que se haga del valor una vez convertido.

Enunciado

Se quiere controlar el valor de la temperatura, de modo que cuando pase por debajo de un valor pre-
fijado se active un relé que emula la puesta en marcha de la calefacción y cuando sube por encima
de un valor máximo prefijado active un motor a modo de ventilador. Además, por una pantalla LCD
se irá visualizando dicha temperatura.

Esquema eléctrico

En el Micro’PIC I/O el sensor de temperatura se aplica al canal 4 (patita RA5/AN4) del conversor
A/D. La tensión de referencia para el conversor puede ser la propia del PIC (5 V) o, como vamos a
hacer en este ejercicio, de 2,5 V. En este último caso, dicha tensión se introduce por RA3/VREF+, el
relé 1 está conectado a RC0 y el motor a RC1 y RC2. El LCD ocupa las líneas RB0-RB7 para da-
tos y RA0-RA2 para control. (Figura 7.8.)

Organigrama

Como se muestra en el organigrama de la Figura 7.9, tras configurar las líneas adecuadamente se ac-
tivará el conversor, y se captará un nuevo valor cada segundo, aproximadamente. Se sabrá cuándo
se ha producido el fin de la conversión mirando, por ejemplo, el valor del señalizador ADIF, que se
pondrá a ‘1’ cuando este hecho ocurra. En el caso de hacer el tratamiento mediante interrupciones,
este bucle sería vacío y no se haría nada más en el programa principal; el resto formaría parte de la
rutina de tratamiento de interrupción.
151
152 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Vss Vdd Vo RS R/W# E D0 D1 D2 D3 D4 D5 D6 D7


1 2 3 4 5 6 7 8 9 10 11 12 13 14

+5V

CONTRASTE

+5V

10K

In4148

100

RESET
PIC16F873

1 MCLR#/VPP/THV RB7/PGD 28
2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/VREF- RB4 25
5 RA3/AN3/VREF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
RB0/INT 21
15 pF 8 VSS
9 OSC1/CLKIN
VDD 20 +5 V
10 OSC2/CLKOUT VSS 19
CRISTAL 4 Mhz
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15

VREF+ SENSOR
MICRO’PIC I/O

RELÉ MOTOR
MICRO’PIC I/O

Figura 7.8. Esquema eléctrico del ejercicio propuesto.


EL CONVERSOR A/D 153

INICIALIZACIÓN
RA3 ENTRADA
RA5 ENTRADA ANALÓGICA

PREDIVISOR TMR0 = 128

ACTIVAR CONVERSOR

ESPERAR 1 SG

NO
¿FIN CONVERSIÓN?

VISUALIZAR RESULTADO
EN LCD

SÍ NO
APAGAR VENTILADOR
ACTIVAR VENTILADOR ¿TEMP.>MÁXIMA?


NO
¿TEMP.<MÍNIMA?

ACTIVAR CALEFACTOR APAGAR CALEFACTOR

Figura 7.9. Organigrama del ejercicio propuesto.

El encendido y apagado de los sistemas de ventilación y calefacción dependerá de los valores


máximo y mínimo fijados como constantes en el programa principal. Una ampliación interesante se-
ría dejar que estos valores los introdujera un usuario externo mediante, por ejemplo, un teclado y
que, además de lo ya controlado, se mostrara la temperatura existente mediante unos displays de 7
segmentos o incluso en una pantalla LCD.
154 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Programa comentado

El programa de este ejercicio es casi una traducción inmediata del organigrama.

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería

T_MIN EQU 0x25 ; Temperatura mínima


T_MAX EQU 0x35 ; Temperatura máxima
Lcd_var EQU 0x20 ; Variables para LCD
DUTY_H EQU 0x22 ; Anchura de pulso
DUTY_L EQU 0x23
DATOA_H EQU 0x24 ; Multiplicando de 16 bits
DATOA_L EQU 0x25
DATOB_H EQU 0x26 ; Multiplicando de 16 bits
DATOB_L EQU 0x27
DATOD_H EQU 0x28 ; Resultado de 32 bits
DATOD_L EQU 0x29
DATOC_H EQU 0x2A
DATOC_L EQU 0x2B
CONTADOR EQU 0x2C
BCD_2 EQU 0x2D ; Variables BCD
BCD_1 EQU 0x2E
BCD_0 EQU 0x2F
TEMPORAL EQU 0x30
DELAY EQU 0x31 ; Variable de temporización

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salva vector de

; interrupción
INCLUDE «LCD_CXX.INC» ; Incluye rutinas de LCD

; Multiplicación de 16x16 de dos números sin signo

MUL16x16 movlw .16 ; Inicialización de contador


movwf CONTADOR
clrf DATOD_H ; Borra parte alta del
; resultado
clrf DATOD_L

MUL_LOOP rrf DATOB_H,F


EL CONVERSOR A/D 155

rrf DATOB_L,F
btfss STATUS,C
goto NO_SUMA
movf DATOA_L,W
addwf DATOD_L,F
btfsc STATUS,C
incf DATOD_H,F
movf DATOA_H,W
addwf DATOD_H,F
NO_SUMA rrf DATOD_H,F
rrf DATOD_L,F
rrf DATOC_H,F
rrf DATOC_L,F
decfsz CONTADOR,F
goto MUL_LOOP
return

; Rutina de conversión de un número binario de 16 bits a 5 dígitos BCD para sacar


; por el LCD

BITS16_BCD bcf STATUS,C


clrf CONTADOR
bsf CONTADOR,4
clrf BCD_0
clrf BCD_1
clrf BCD_2
LOOP_16 rlf DATOC_L,F
rlf DATOC_H,F
rlf BCD_2,F
rlf BCD_1,F
rlf BCD_0,F
decfsz CONTADOR,F
goto AJUSTE
return
AJUSTE movlw BCD_2
movwf FSR
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
goto LOOP_16
AJUSTE_BCD movf INDF,W
addlw 0x03
movwf TEMPORAL
btfsc TEMPORAL,3
movwf INDF
movf INDF,W
addlw 0x30
movwf TEMPORAL
156 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

btfsc TEMPORAL,7
movwf INDF
return

; Comienzo del programa principal

INICIO clrf PORTB ; Limpia salidas


clrf PORTA
clrf PORTC
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
movlw b’00000110’ ; Puerta A E/S digitales
movwf ADCON1
clrf TRISB ; Puerta B como salida
clrf TRISA ; Puerta A salida
clrf TRISC ; Puerta C salida
movlw b’11000111’ ; Configuración del TMR0
movwf OPTION_REG ; con predivisor de 256
bcf STATUS,RP0 ; Cambio a banco 0

call UP_LCD ; Configuración de líneas


; para LCD
call LCD_INI ; Inicialización de LCD
movlw b’00001100’ ; LCD On, Cursor y Blink
call LCD_REG ; Off
BUCLE bsf STATUS,RP0 ; Selecciona banco 1
bcf STATUS,RP1
movlw b’00101000’ ; RA3 y RA5 entradas
movwf TRISA
movlw b’10000001’ ; Justificación Drch. RA3 y
movwf ADCON1 ; RA5 entradas analógicas
bcf STATUS,RP0 ; Vuelta a banco 0

movlw b’10100001’ ; Configuración y activación


movwf ADCON0 ; del conversor

movlw .20 ; Temporización de un sg


movwf DELAY
DELAY_1 movlw ~.195
movwf TMR0
bcf INTCON,T0IF
DELAY_2 clrwdt
btfss INTCON,T0IF
goto DELAY_2
decfsz DELAY,F
goto DELAY_1

bcf PIR1,ADIF ; Restaurar flag del


; conversor
bsf ADCON0,GO ; Iniciar conversión
EL CONVERSOR A/D 157

ADC_WAIT btfss PIR1,ADIF ; ¿Ha terminado?


goto ADC_WAIT ; No. Esperar

; Se pasa el valor binario obtenido a un valor en grados que pasa a BCD

bsf STATUS,RP0 ; Paso a banco 1


bcf STATUS,RP1
movf ADRESL,W
bcf STATUS,RP0
movwf DATOB_L
movf ADRESH,W
movwf DATOB_H
movlw .243
movwf DATOA_L
clrf DATOA_H
call MUL16x16
call BITS16_BCD

; Visualiza el resultado en la pantalla LCD

bsf STATUS,RP0 ; Selecciona banco 1


bcf STATUS, RP1
movlw b’00000110’ ; Puerta A digital
movwf ADCON1
bcf STATUS,RP0 ; Vuelta a banco 0

call UP_LCD ; Configuración líneas LCD


movlw 0x80 ; Posiciona cursor
call LCD_REG
movf BCD_0,W ; Visualiza decenas de grado
andlw 0x0f
iorlw 0x30
call LCD_DATO
swapf BCD_1,W ; Visualiza unidades de
andlw 0x0f
iorlw 0x30
call LCD_DATO
movlw ‘.’ ; Visualiza punto decimal
call LCD_DATO
movf BCD_1,W ; Visualiza décimas de grado
andlw 0x0f
iorlw 0x30
call LCD_DATO
movlw ‘‘ ; Visualiza espacio blanco
call LCD_DATO
movlw 0xdf ; Visualiza símbolo º
call LCD_DATO
movlw ‘C’ ; Visualiza C
call LCD_DATO
158 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

; Se junta en un solo byte la temperatura para hacer comparaciones

swapf BCD_0,W
andlw 0xf0
movwf TEMPORAL
swapf BCD_1,W
andlw 0x0F
iorwf TEMPORAL,F
; Se compara la temperatura con los máximos y mínimos para activar motor y relé

movlw T_MAX
subwf TEMPORAL,W
btfsc STATUS,C ; ¿Mayor que la máxima?
goto SUP_MAX ; Sí
bcf PORTC,2 ; No. Desconectar motor
; (ventilador)
movlw T_MIN
subwf TEMPORAL,W
btfss STATUS,C ; ¿Inferior a la mínima?
goto INF_MIN ; Sí
bcf PORTC,0 ; No. Desconectar relé
; (calefactor)
goto BUCLE
SUP_MAX bsf PORTC,2 ; Encender motor (ventil.)
goto BUCLE
INF_MIN bsf PORTC,0 ; Activar relé (calefactor)
goto BUCLE

END

Prueba del programa

En esta ocasión, también se van a utilizar las tarjetas Micro’PIC I/O y Micro’PIC Trainer. Esta úl-
tima va a tener la misión de alojar el microcontrolador en el zócalo de 28 patitas y de mostrar la tem-
peratura en el LCD. La configuración de líneas que hay que tener en cuenta es:

1.o Se deberá abrir el jumper J8(3) del Micro’PIC Trainer para que la línea RA3 no esté unida al po-
tenciómetro ni al interruptor de la placa.
2.o El jumper JP2 del Micro’PIC I/O debe estar en la posición de 2,5 V, ya que será esa la tensión de
referencia elegida.
3.o Dicha tensión de referencia se tendrá que conectar a la línea RA3/VREF+ del Micro’PIC I/O.
4.o El sensor de temperatura deberá unirse al canal RA5/AN4.
5.o RC0 será la línea que active el Relé 1.
6.o Las líneas RC2:RC1 se conectarán a IN2:IN1 para controlar el motor.
7.o Los interruptores RA2-RA0 del Micro’PIC Trainer deben tener nivel «1» para no bloquear el LCD.
8.o En ejecución, el jumper J6 del Micro’PIC Trainer debe estar cerrado para habilitar el LCD.
Diseñar con PIC es fácil

VISUALIZACIÓN DE VALORES POR PANTALLAS LCD

Las pantallas alfanuméricas de cristal líquido, denominadas abreviadamente LCD, constituyen uno
de los visualizadores de mensajes más económicos, prácticos y eficaces.
Las controladoras de LCD son tarjetas diseñadas para gobernar la presentación de mensajes, con
la colaboración de un programa que facilita su manejo.

La controladora LCD-CON

En este tema, describimos la controladora «LCD-CON», que es capaz de gobernar pantallas de


hasta 80 caracteres en cualquiera de las diferentes configuraciones de líneas y caracteres existen-
tes en el mercado. También puede controlar LCD que dispongan de luz de fondo (backlight). En la
Figura 7.10 se ofrece una fotografía de la LCD-CON fabricada por Ingeniería de Microsistemas
Programados S. L.

Figura 7.10. Fotografía de la tarjeta controladora de LCD, basada en un PIC16C73. Cortesía de


Ingeniería de Microsistemas Programados.

159
160 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Para preparar los mensajes a presentar en la LCD a través de la controladora, existe un softwa-
re que permite preparar y realizar todas las presentaciones desde un PC y que se escapan de nuestra
exposición.

Principio de funcionamiento

El control interno de la pantalla LCD es trasparente para el usuario. La controladora LCD-CON, que
actúa como Esclava, se conecta mediante dos líneas con cualquier sistema maestro capaz de comuni-
carse en serie vía RS232, como puede ser un PC, un terminal, un microcontrolador, etc. (Figura 7.11.)
El maestro comienza enviando una serie de instrucciones/comandos que son interpretados por la
LCD-CON, la cual actúa directamente sobre la pantalla LCD, ejecutando los efectos de visualiza-
ción que recibe.
Tras la ejecución de una instrucción, la LCD-CON envía al maestro un código de reconoci-
miento que debe ser interpretado por éste para la transmisión de una nueva instrucción.
Existen dos versiones de controladoras LCD-CON. La LCD-CON1 se gobierna con conexión
permanente (on-line) con el maestro. Recibe y ejecuta secuencialmente todas las instrucciones que
le va enviando el maestro. Esta tarjeta está especialmente indicada para aplicaciones en las que se
necesita un control rápido y fácil de distintas funciones de visualización en la pantalla LCD.
El modelo LCD-CON2, dispone, además de lo propio del LCD-CON1, de una memoria EE-
PROM que va almacenando todas las instrucciones según se van recibiendo (modo programación).
Así, puede almacenar un programa que puede ejecutar autónomamente, sin estar conectado al
maestro. Por este motivo, este producto está indicado para sistemas autónomos de presentación de
mensajes.

Figura 7.11. Conexionado de la tarjeta LCD-CON con el maestro y con la pantalla LCD.
EL CONVERSOR A/D 161

Características generales

A continuación, se muestra el aspecto del software utilizado con la controladora de LCD y se citan
las características más relevantes.

1.a Alimentación de 12 VAC, con los circuitos de rectificación, filtrado y estabilización en la misma
tarjeta.
2.a Comunicación con el maestro, vía RS232, con una velocidad máxima de 19.200 baudios.
3.a Reloj/calendario en tiempo real con batería recargable propia.
4.a Controlada por un microcontrolador PIC16C73.
5.a Regulación del contraste del LCD mediante potenciómetro.
6.a Interface para diferentes modelos de LCD: simple o doble hilera, hasta 80 caracteres, con o sin
luz de fondo, y en distintas versiones de filas y columnas.
7.a Memoria EEPROM de programa de 24 KB para el almacenamiento de los comandos a ejecutar
(versión LCD-CON2).
8.a Conector de acceso de 8 señales para control de periféricos externos (versión LCD-CON2).
9.a Cuatro modalidades de trabajo: Test, On-line, Programación y Ejecución. Las dos últimas sólo en
versión LCD-CON2.
10.a Software bajo Windows. Se trata de un entorno integrado de desarrollo para un fácil manejo de
la controladora por parte del usuario para: envío de instrucciones a la controladora en el modo
On-line, edición, simulación y desarrollo de programas de presentación en el LCD y envío del
programa obtenido a la controladora para su posterior ejecución. (Figura 7.12.)

Figura 7.12. Software que acompaña a la controladora LCD-CON para su manejo.


162 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Descripción técnica

Vamos a mostrar la serigrafía de la placa controladora LCD-CON con la distribución de los distin-
tos componentes, resaltándose los elementos más importantes.

Conector de alimentación

Es el conector a través del cual se aplica la tensión de alimentación a la controladora LCD-CON. Di-
cha tensión puede ser alterna o continua y de un valor de 12 V. La propia controladora dispone del
circuito de rectificación, filtrado y estabilización.
Es posible, anulando el circuito de estabilización, alimentar el sistema aplicando una tensión de
+5 Vcc entre la patilla central (-) y la derecha (+) de dicho circuito.

Potenciómetro de contraste

Mediante este potenciómetro, se aplica a la pantalla LCD una tensión variable de entre 0 y +5 Vcc.
Con dicha tensión se consigue ajustar el contraste de los caracteres en la pantalla, según las necesi-
dades del usuario.

Microcontrolador PIC16C73

Es el zócalo que aloja el microcontrolador PIC16Cxx grabado con el software diseñado al efecto por
Ingeniería de Microsistemas Programados S. L. y que gestiona el funcionamiento general de la tar-
jeta controladora de LCDs. Por un lado se encarga de las comunicaciones vía serie RS232 con el ma-
estro, recibiendo las distintas instrucciones.
Esas instrucciones son posteriormente interpretadas para actuar directamente sobre la pan-
talla LCD que se está gobernando, produciendo sobre la misma distintos efectos de visualiza-
ción.
De esta manera, el usuario no tiene que ocuparse del funcionamiento interno del LCD ni de có-
mo se le programa. Basta simplemente conocer las distintas instrucciones de control diseñadas al
efecto para poder sacar el máximo provecho a las posibilidades de las pantallas LCD.

LCD Interface 1

Este conector de simple hilera (SIL) permite la conexión directa con pantallas LCD cuyo conector
sea del mismo tipo que éste.
Son 16 las señales entre las que se encuentran 5 líneas de diversas alimentaciones, 3 líneas de
control del LCD y 8 líneas de datos.
La distribución de estas señales es común en todos los modelos de pantalla LCD analizados en
los laboratorios de Ingeniería de Microsistemas Programados S. L., correspondientes a las marcas
WINTEK, NORITAKE y SHARP.
Algunos modelos que no disponen de luz de fondo (backlight), las patitas designadas para ese
uso, o bien no están disponibles, o se encuentran sin conexión interna.
EL CONVERSOR A/D 163

Reloj/calendario

Las controladoras LCD-CON disponen de un reloj/calendario en tiempo real alimentado por bate-
ría de NiCd.
Dicho reloj está formado por el dispositivo PCF8583 de Philips. Este dispositivo controlado por
un cristal de cuarzo de 32.768 KHz es capaz de mantener en constante funcionamiento diferentes
funciones horarias y de calendario. Dispone también de 250 bytes de memoria RAM estática que,
al alimentarse mediante batería, resulta no volátil. La LCD-CON la utiliza para guardar una serie de
parámetros internos.
Gracias a la presencia de este dispositivo, la controladora LCD-CON es capaz de realizar sobre
la pantalla LCD, diferentes presentaciones en las que se incluye presentaciones de hora y fecha.

Memoria de programa

La versión LCD-CON2 de la controladora tiene capacidad para almacenar las distintas instruccio-
nes que se van recibiendo de manera que puedan, posteriormente, ser ejecutadas de forma autóno-
ma e independiente del Maestro (off Line).
Un conjunto de instrucciones forma un programa. Dicho programa se almacena en los disposi-
tivos 24C65 (U2, U3 y U4). Cada uno de éstos tiene capacidad para guardar 8 Kbytes de informa-
ción, con lo que la capacidad total disponible es de 24 KB.
Estos dispositivos consisten en memoria del tipo EEPROM. Se trata de una memoria no volátil
pero reutilizable. Su fabricante garantiza 100.000 ciclos de borrado y/o escritura de la misma.
Su empleo en la controladora LCD-CON2 permitirá al usuario grabar programas de manejo de
la pantalla LCD de forma no volátil, aunque modificable en cualquier momento.

Conector RS232

Permite la conexión de la controladora con el maestro mediante una comunicación serie RS232 es-
tándar.
A través de él, el maestro envía las instrucciones que la controladora, tras interpretarlas, las al-
macena en memoria y/o ejecuta.
De esta forma, la conexión entre una pantalla LCD y el maestro que la gobierna queda reducida
a la mínima expresión. Tan sólo se emplean tres conductores. El pin 3 de este conector J5 se co-
rresponde con la señal de recepción de la controladora. Por ella se reciben las instrucciones trans-
mitidas por el maestro.
El pin 2 de J5 corresponde a la línea de transmisión de la controladora. Cada vez que ésta eje-
cuta una instrucción, se transmite un carácter de reconocimiento que, cuando sea recibido por el
maestro, permitirá a éste actuar en consecuencia.
Finalmente, el pin 5 de J5 es la señal de tierra. Ésta debe ser común con la señal de tierra del
maestro.
Como se ha comentado con anterioridad, la figura del maestro que gobierna la controladora pue-
de estar representada por cualquier sistema capaz de realizar una comunicación RS232 estándar. Es-
to incluye terminales, microcomputadores, PCs, microordenadores, microcontroladores o cualquier
otro sistema informático en general, con aplicaciones en las que sea necesario una representación vi-
sual y donde la pantalla LCD y su controladora deba actuar como sub-sistema de dicho maestro.
164 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

La batería

Se trata de una batería recargable de NiCd que permite mantener constantemente alimentado al re-
loj/calendario de la controladora, así como ciertos parámetros constantes del sistema.
El circuito de carga lo forman un diodo y una resistencia. Cuando la controladora está conecta-
da a una tensión externa, la batería se va cargando a través de dicho circuito de carga.
Cuando se desconecta la tensión de alimentación externa, es la batería la que aporta la tensión
necesaria de 3,6 V para mantener activo dicho reloj/calendario.

El reset

Se trata de un micropulsador situado en la parte inferior de la tarjeta controladora. Permite al usua-


rio reiniciar el sistema si en alguna ocasión se bloquea o cada vez que, mediante los switches de con-
figuración, se cambie el modo de trabajo de la controladora.

Configuración

Se trata de un conjunto de cuatro micro-switches que permiten, por un lado, establecer los baudios
de la comunicación serie entre la controladora y el maestro (SW1-3 y SW1-4) y, por otro, los dis-
tintos modos de trabajo existentes (SW1-1 y SW1-2).
Siempre que se cambia de modo de trabajo, es necesario reinicializar todo el sistema para que
se adopte el nuevo modo recién seleccionado. Para ello, basta con pulsar el pulsador de Reset
SW2.
Se cita a continuación una breve descripción de cada uno de los modos de trabajo posibles:

1.o On-Line: la controladora ejecuta todas las instrucciones según se van recibiendo. En este modo
hay total dependencia con el maestro. Está pensado para aquellas aplicaciones en las que el LCD
y su control forman parte de otro sistema mayor y las distintas visualizaciones dependen del cur-
so de la ejecución de las tareas de dicho sistema. Las visualizaciones se realizarán dinámica-
mente según el maestro las requiera.
2.o Programación: en este modo, la controladora se limita a recibir secuencialmente todos los
comandos procedentes del maestro, a modo de programa. Los almacena en la memoria EE-
PROM para su posterior ejecución. Este modo de trabajo sólo está disponible en la versión
LCD-CON2.
3.o Ejecución: al seleccionar este modo de trabajo, la controladora de LCD se limita a leer de la me-
moria EEPROM de programa, y a ejecutar las instrucciones previamente almacenadas en el mo-
do de programación. Este modo sólo está disponible en la versión LCD-CON2.
4.o Test: este modo de trabajo está disponible en ambas versiones LCD-CON1 y LCD-CON2. No es
un modo de trabajo operativo en sí mismo. Realiza un chequeo general del sistema. Empieza vi-
sualizando sobre la pantalla LCD el juego completo de caracteres disponible. Seguidamente, che-
quea la memoria RAM del sistema y, finalmente, la memoria EEPROM de programa indicando la
cantidad de bytes disponibles. Terminado el chequeo, la controladora queda en standby siendo
necesario reinicializarla mediante el pulsador Reset SW2.
EL CONVERSOR A/D 165

Ext. input

La controladora LCD-CON2 permite la gestión de hasta ocho señales de entrada digitales que se
aplican mediante el conector Ext.Input (J4).
Es posible, por tanto, la interacción entre dichas señales de entrada y las diferentes presentacio-
nes sobre la pantalla LCD, pudiéndose establecer condiciones de visualización en base al estado ló-
gico de esas señales.
Esto es especialmente útil cuando las instrucciones a ejecutar por la controladora tienen una es-
tructura de programa almacenado en la EEPROM (modo ejecución).
Existen instrucciones del tipo «Salto Condicional», que permiten desviar el flujo de la ejecución
de un programa en base al estado lógico de esas ocho entradas. Con ellas se pueden establecer has-
ta 255 condiciones de salto según las combinaciones binarias presentes en las mismas.
Las señales se muestrean sólo en el momento de la ejecución de la instrucción de salto condi-
cional correspondiente, por lo que deben mantenerse activas hasta llegar a la ejecución de dicha ins-
trucción. Es por ello que existe una novena señal de entrada llamada STB. Cuando se activa (por
pulso bajo) a modo de «Strobe», la controladora cancela la ejecución de toda instrucción que tuvie-
ra en ese momento y reinicia la ejecución desde la primera instrucción del programa. Es tarea del
usuario colocar, al principio de su programa, las instrucciones de salto condicional, para que sean
reconocidas y se actúe en consecuencia, justo después de llegar la señal STB.
Realmente, la señal STB provoca en la controladora de LCDs una reacción similar a la que se
produce cuando se pulsa el pulsador RESET (SW2), pero sin mediación del usuario.

LCD Interface 2

Este conector de doble hilera (DIL) permite la conexión directa con pantallas LCD cuyo conector
sea del mismo tipo que éste. Sus conexiones son similares a J4 y ambos están en paralelo.
Son 16 las señales entre las que se encuentran 5 líneas de diversas alimentaciones, 3 líneas de
control de la LCD y 8 líneas de datos.
La distribución de estas señales es común en todos los modelos de pantalla LCD analizados en
los laboratorios de Ingeniería de Microsistemas Programados S. L., correspondientes a las marcas
WINTEK, NORITAKE y SHARP.
Algunos modelos que no disponen de luz de fondo (backlight), las patitas designadas para ese
uso, o bien no están disponibles, o se encuentran sin conexión interna.
8 Módulo
de comunicación
serie síncrona: MSSP

8.1. INTRODUCCIÓN

La comunicación serie es una forma muy apreciada de transferir datos digitales entre sistemas y cir-
cuitos integrados, dada la reducida cantidad de líneas que precisa.
En el PIC16F84, cuando se quería comunicarle en serie con otro dispositivo, había que destinar
varias de sus patitas generales de E/S a soportar las líneas de datos y de reloj. También había que
desarrollar un programa específico para soportar el protocolo de comunicación.
En los PIC16F87x, Microchip ha implantado en el silicio de sus chips el módulo MSSP (Mas-
ter Synchronous Serial Port), que proporciona un excelente interfaz de comunicación de los micro-
controladores con otros microcontroladores y diversos periféricos, entre los que destacan las me-
morias EEPROM serie, los conversores A/D, los controladores de displays, etc. De esta forma, el
usuario dispone de algunas patitas de la Puerta C, que correctamente programadas sirven para ma-
nejar directamente la comunicación serie. Además, el módulo MSSP admite dos de las alternativas
más usadas en la comunicación serie síncrona:

1.a SPI (Serial Peripheral Interface).


2.a I2C (Inter-Integrated Circuit).

La comunicación serie en modo SPI la utilizan principalmente las memorias (RAM y EEPROM)
y utiliza tres líneas para llevarla a cabo. En el modo I2C sólo se emplean dos líneas y, recientemente,
ha conseguido una importante implantación en la comunicación de circuitos integrados, existiendo
en el mercado todo tipo de periféricos capaces de trabajar con este protocolo (memorias, controla-
dores, relojes, conversores, etc.).

El módulo MSSP consta básicamente de dos registros: el SSPSR, que es un registro de desplaza-
miento que transforma la información serie en paralelo y viceversa, y el registro SSPBUF, que actúa
como buffer de la información que se recibe o transmite.

167
168 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

El funcionamiento del módulo MSSP es muy sencillo. En transmisión, el byte que se quiere
transmitir se carga en el registro SSPBUF a través del bus de datos interno y automáticamente
se traspasa al registro SSPSR, que va desplazando bit a bit el dato, sacándolo ordenadamente al
exterior al ritmo de los impulsos de reloj. En recepción, los bits van entrando al ritmo de reloj
por una patita y se van desplazando en el SSPSR hasta que lo llenan, en cuyo momento la in-
formación se traspasa al SSPBUF, donde queda lista para su lectura. Este doble almacenamien-
to del dato recibido permite iniciar la recepción de un nuevo dato antes de que se haya leído el
último.
Cuando se han recibido 8 bits durante la recepción en SSPSR, se traspasa dicha información
a SSPBUF y entonces el bit señalizador BF (Buffer Full) se pone a 1, al igual que el flag de inte-
rrupción SSPIF. Cualquier escritura en el SSPBUF se ignora durante una transferencia de infor-
mación y se señaliza poniendo a 1 el bit WCOL, que advierte de este tipo de colisiones. Recae en
la responsabilidad del programador pasar el bit WCOL a 0 una vez completada la escritura en
SSPBUF.
En la Figura 8.1 se ofrece un esquema básico sobre la estructura interna del módulo
MSSP.

Figura 8.1. Estructura básica del módulo MSSP con los dos registros de trabajo (SSPBUF y SSPSR).
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 169

8.2. MODO SPI

Permite la transferencia de datos de 8 bits en serie, que pueden ser transmitidos y recibidos de for-
ma síncrona y simultánea. Para el establecimiento de la comunicación se utilizan tres líneas:

1.o SDO (Serial Data Out): salida de datos en serie.


2.o SDI (Serial Data In): entrada de datos en serie.
3.o SCK (Serial Clock): reloj de sincronización.

Puede ser necesaria utilizar una cuarta línea de control más cuando el PIC que se utiliza trabaja
en modo esclavo. En este caso, la patita SS# (selección de esclavo) se debe activar a tierra. En la Fi-
gura 8.2 se ofrece un esquema de un sistema intercomunicado en modo SPI en el que un PIC actúa
como maestro y otros dos como esclavos. Las 4 líneas que utilizan se corresponden con las patitas
multifunción RC3/SDO, RC4/SDI, RC5/SCK y RA5/SS#.
La conexión habitual del PIC maestro se suele realizar con circuitos de memoria con el objeto
de ampliar su capacidad. Como se aprecia en la Figura 8.2, la línea SDO del maestro se correspon-
de con las SDI de los esclavos y la línea SCK por la que circulan los impulsos de reloj siempre par-
te del maestro, que es el encargado de generar y controlar la sincronización.
Si, por ejemplo, actuase como esclavo un chip de memoria RAM de 256x8 de tamaño, la co-
municación SPI la iniciaría el maestro enviando por la línea SDO un byte con la dirección de la me-
moria a acceder, seguido de otro byte que especificaría la operación (lectura/escritura) y un tercero
que contendría el dato a escribir en caso de que se tratase de una operación de escritura. En el caso
de que se tratase de una lectura, el maestro, después de enviar los 2 bytes iniciales, quedaría a la es-
pera del byte que sacaría el esclavo por su línea SDO y que se introduciría al Maestro por su línea
SDI. Si fuese una memoria con más posiciones, la dirección se tendría que especificar con más de
un byte.
Cuando el PIC trabaja como maestro hay que programar la línea RC3/SDO como salida, la línea
RC4/SDI como entrada y la línea RC5/SCK también como salida. Si actuase como esclavo, la línea
RC5/SCK debería configurarse como entrada y la RA5/SS# debería conectarse a tierra.

Figura 8.2. Comunicación SPI entre un PIC maestro y otros dos esclavos.
170 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

8.3. MANEJO Y PROGRAMACIÓN EN EL MODO SPI

En la Figura 8.3 se muestra la estructura del módulo MSSP cuando funciona en modo SPI.

8 BUS INTERNO DE DATOS

8
8

LECTURA ESCRITURA

8 8

SSPBUF

SSPSR
SDI
BIT 0
RELOJ DE
DESPLAZAMIENTO

SDO

PERMISO DE SS#

SS#

SELECCIÓN
DE FLANCO
MPX

SELECCIÓN
DE RELOJ

SMP:CKE SSPM3-0

4
2
SALIDA TMR2 / 2
SELECCIÓN
DE FLANCO MPX
TOSC
SCK PREDIVISOR
4, 16, 64

DATO EN SSPSR A TX/RX


BIT DE DIRECCIÓN DE DATO

Figura 8.3. Estructura interna del módulo MSSP cuando trabaja en modo SPI.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 171

Al comenzar el funcionamiento en el modo SPI, es necesario establecer las condiciones de tra-


bajo programando adecuadamente los bits <5-0> del registro SSPCON y los <7:6> del registro
SSPSTAT, para determinar las siguientes especificaciones:

1.a Si trabaja en modo maestro, SCK debe ser salida.


2.a Si trabaja en modo esclavo, la línea SCK del reloj debe ser entrada.
3.a Hay que determinar la polaridad de la señal de reloj, es decir, su estado de inactividad.
4.a Se debe precisar el momento en el que se toma la muestra del dato de entrada, que puede ser en
la mitad o al final del impulso.
5.a Flanco de reloj activo, que puede ser el ascendente o descendente de SCK.
6.a Rango de trabajo del reloj en el modo maestro.
7.a Selección del modo esclavo, en caso de trabajar de esta forma.

En la Figura 8.4 se presenta la distribución y nomenclatura de los bits del registro SSPSTAT, que
ocupa la dirección 94h y es uno de los que seleccionan las características mencionadas.
Se describe la misión de tres de los bits del registro SSPSTAT que participan en la configuración
del modo SPI. También estos bits participan en la configuración del modo I2C junto a los restantes,
que se estudiarán al presentar dicho protocolo.

SMP
• El bit 7 del registro SSPSTAT determina el momento del muestreado del bit de entrada.
• En modo maestro SPI, si SMP = 1 el dato de entrada se muestrea al final del impulso de reloj y
si vale 0 en la mitad del mismo.
• En modo esclavo el bit SMP no tiene cometido y debe valer 0.

CKE
• Con este bit se selecciona el flanco de reloj activo.
• Si el bit CKP = 0 en el registro SSPCON significa que el estado de inactividad en la señal de re-
loj es el bajo y entonces si CKE = 1 el dato se transmite en el flanco ascendente de SCK y si CKE
= 0 en el flanco descendente.
• Si CKP = 1, lo que supone que es el estado alto el de inactividad en la señal de reloj, cuando
CKE = 1 el dato se transmite en el flanco descendente de SCK y si CKE = 0 en el ascendente.

BF
• Indica cuando vale 1 que el registro SSPBUF está lleno.

En la Figura 8.5 se presenta la distribución de los bits del registro SSPCON, que está ubicado en
la dirección 14h y sirve para programar el módulo MSSP en los dos modos que puede trabajar.

REGISTRO SSPSTAT

SMP CKE D/A# P S R/W# UA BF

7 0

Figura 8.4. Estructura interna del registro SSPSTAT para la configuración del modo SPI e I2C.
172 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

REGISTRO SSPCON

WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

7 0

Figura 8.5. Estructura interna del registro SSPCON.

SSPM3-SSPM0
• Con los 4 bits de menos peso del registro SSPCON se establece el modo de trabajo del módu-
lo MSSP.

SSPM3-0 MODO DE TRABAJO


0000 Modo maestro SPI, con reloj a FOSC / 4
0001 Modo maestro SPI, con reloj a FOSC / 16
0010 Modo maestro SPI, con reloj a FOSC / 64
0011 Modo maestro SPI, con reloj igual a la salida del TMR2 / 2
0100 Modo esclavo SPI, con reloj igual a la patita SCK y SS# a nivel bajo
0101 Modo esclavo SPI, con reloj igual a la patita SCK, SS# no activo y libre para usar-
se como E/S
0110 Modo esclavo I2C, con dirección de 7 bits
0111 Modo esclavo I2C, con dirección de 10 bits
1000 Modo I2C maestro con reloj = FOSC / (4• (SSPAD + 1))
1011 Modo I2C maestro controlado por firmware
1110 Modo I2C maestro controlado por: firmware, con bits inicio y stop, activada in-
terrupción, dirección de 7 bits
1111 Modo I2C maestro controlado por firmware, con bits inicio y stop, activada inte-
rrupción, dirección de 10 bits

CKP
• Determina la polaridad o el estado de inactividad del reloj.
• En el modo SPI si CKP = 1 dicho estado de inactividad es el alto y si CKP = 0 es el bajo.

SSPEN
• Bit de activación del módulo MSSP.
• Si SSPEN = 1 queda activada la puerta serie en modo SPI y las patitas SCK, SDO, SDI y SS# re-
alizan la labor correspondiente. Si SSPEN = 0 no funciona el modo SPI y las patitas anteriores
se utilizan para E/S digitales.

SSPOV
• Al ponerse a 1 indica «sobrepasamiento», lo que significa que la información recibida en SSPSR
y que ha pasado al SSPBUF, cuando llega otro byte al SSPSR aún no se ha leído y se macha-
cará la información existente en el SSPBUF.

WCOL
• Cuando este bit se pone a 1 indica que se ha producido una «colisión». El dato a transmitir que
se ha almacenado en el SSPBUF se traspasa al SSPSR para irlo sacando en serie. Cuando el SSP-
BUF carga en el SSPSR un byte sin haber dado tiempo a salir al anterior, se produce una colisión.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 173

El registro SSPSR no es direccionable directamente y en los programas hay que acceder a él a


través del SSPBUF, tal como se expone en el siguiente programa de transferencia de información.

bsf STATUS,RP0 ; Banco 1


bcf STATUS,RP1
BUCLE btfss SSPSTAT,BF ; ¿Buffer lleno? ¿BF = 1?
goto BUCLE ; El buffer aún no está lleno
; y hay que esperar
bcf STATUS,RP0 ; El buffer está lleno y se
; accede al banco 0
movf SSPBUF,W ; El contenido del buffer se
; carga en W
movwf RXDATA ; El dato se guarda en un
; registro temporal de la
; RAM
movf TXDATA,W ; Un nuevo dato a transmitir
; en TXDATA se carga en
;W
movwf SSPBUF ; El dato a transmitir se
; carga en SSPBUF y de allí
; automáticamente pasará al
; SSPSR desde donde saldrá
; en serie

8.4. MÓDULO MSSP TRABAJANDO EN MODO I2C

El protocolo de comunicación serie I2C fue desarrollado por Philips para cubrir sus propias necesidades
en la implementación de diversos productos electrónicos que requerían una elevada interconexión de cir-
cuitos integrados. El protocolo I2C (Inter-Integrated Circuit) utiliza únicamente dos líneas para la transfe-
rencia de información entre los elementos que se acoplan al bus. Una de dichas líneas se dedica a sopor-
tar los datos, es bidireccional y se llama SDA; la otra lleva los impulsos de reloj para la sincronización, es
unidireccional y recibe el nombre de SCL. Los impulsos de reloj siempre los genera el maestro y tienen la
función de sincronizar las transferencias con todos los esclavos colgados a las dos líneas. (Figura 8.6.)

Figura 8.6. El maestro se conecta con todos los esclavos en el bus I2C con sólo dos líneas. Por SDA
circulan los datos en serie y por SCL el maestro envía los impulsos de reloj que genera.
174 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

8.5. CONCEPTOS FUNDAMENTALES SOBRE EL BUS I2C

En algunas aplicaciones, especialmente las que emplean microcontroladores mono-chip, se deben


establecer ciertos criterios.

• Cierto tipo de microcontroladores no son ampliables desde el exterior, por lo que la aplicación se
tiene que ceñir al tipo y cantidad de elementos que contenga en su interior: memoria RAM de da-
tos, EEPROM, líneas de E/S, temporizadores, contadores, etc. Si éstos no son suficientes habrá que
elegir otro modelo de microcontrolador con más prestaciones o emplear un sistema ampliable ex-
ternamente.

• Normalmente, un sistema completo, además del microcontrolador, necesita de otros circuitos peri-
féricos como memorias, ampliación de las líneas de E/S, convertidores A/D y D/A, relojes en tiem-
po real, controladores de display, de LCD, etc.

• El coste de conexión de todos estos periféricos con el microcontrolador debe reducirse al mínimo.

• Normalmente, la aplicación no requiere una gran velocidad de transferencia entre el microcontrola-


dor y los distintos dispositivos.

• La eficacia general del sistema depende de la versatilidad de los dispositivos conectados al mismo.

Estos criterios se pueden implementar con una estructura de bus serie. Este tipo de bus no pue-
de alcanzar velocidades similares a las conseguidas con una estructura de bus paralelo, pero requiere
mucho menos cableado y el hardware es mucho más sencillo.
Los distintos dispositivos conectados al bus serie deben comunicarse entre sí mediante un
protocolo que evite el bloqueo de la información y garantice la comunicación entre todos
ellos.
El sistema debe ser independiente de los dispositivos conectados al bus, con objeto de poder
realizar futuras ampliaciones y/o modificaciones. Mediante el protocolo adecuado se decide qué dis-
positivo se hace cargo del bus y cuándo.
Todos estos conceptos se contemplan en las especificaciones del bus I2C.

8.5.1. Concepto del Bus I2C

Dos líneas, SDA (datos) y SCL (reloj), transportan la información entre los diferentes dispositivos
conectados al bus. Cada dispositivo se identifica por una única dirección y puede transmitir o reci-
bir dependiendo de la operación que se vaya a realizar. Un controlador de LCD, por ejemplo, sólo
recibe mientras que una memoria de tipo RAM puede transmitir o recibir datos en función de que
se vaya a leer o a escribir.
Los dispositivos pueden clasificarse en maestro (master o principal) o esclavo (slave o secunda-
rio). El maestro es el que inicia la transferencia de datos y genera la señal de reloj. Cualquiera de los
dispositivos direccionados por un maestro se considera un esclavo.
El I2C es un bus multi-maestro; puede haber más de un maestro conectado y controlando el bus.
Normalmente se trata de micocontroladores o microcomputadores. (Figura 8.7.)
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 175

Figura 8.7. Conexiones al bus.

Supongamos que en un momento dado el microcontrolador A actúa como maestro:

1.er caso: envía información al B

a) A, emisor, direcciona a B.
b) A, emisor, envía el dato a B, receptor.
c) A termina la transferencia.

2.o caso: recibe información desde el B

a) A, emisor, direcciona a B.
b) A, receptor, recibe el dato desde el B, transmisor.
c) A, termina la transferencia.

Esta configuración puede no ser permanente. En otro momento, puede ser el B quien actúe de
maestro. Todo depende de la dirección del dato a transferir en un momento dado.
Dada la posibilidad de que existieran varios maestros, podría ocurrir que más de uno inicie la
transferencia en un mismo instante de tiempo. Para evitar el caos que pueda producir esta situación,
se ha desarrollado un sistema de arbitraje del bus. El procedimiento consiste en una conexión tipo
AND entre todos los dispositivos conectados al bus.
Cuando uno o más maestros colocan información en la línea SDA, verifican si el bit que ellos
sacan coincide con el nivel lógico de dicha línea. Si un maestro saca un «1» pero la línea SDA está
a «0» coincidiendo con un pulso de reloj, pierde la posesión del bus cancelando desde ese momen-
to la transmisión. El nivel lógico «0» (bit dominante) presente en la línea SDA procederá de un ma-
estro distinto.
176 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Las señales de reloj durante el arbitraje del bus son una combinación entre las señales de clock
de los distintos maestros conectadas entre sí a la línea SCL mediante una conexión tipo AND.

8.5.2. Terminología del Bus I2C

RECEPTOR Dispositivo que recibe información por la línea SDA.

MAESTRO Dispositivo que inicia la transferencia, genera la señal de reloj y finaliza la


transferencia.

ESCLAVO Dispositivo seleccionado por el maestro.

MULTI-MAESTRO Cuando más de un maestro puede hacerse con el control del bus sin co-
rromper la información.

ARBITRAJE Procedimiento que garantiza que, si más de un maestro accede simultá-


neamente al bus, únicamente uno de ellos se hace cargo del mismo con ob-
jeto de no alterar la información.

SINCRONIZACIÓN Procedimiento para sincronizar la señal de reloj en un sistema multi-maestro.

8.6. CARACTERÍSTICAS GENERALES

Tanto las líneas SDA como SCL son líneas bidireccionales que se conectan a +Vdd mediante resis-
tencias de carga pull-up, tal y como se muestra en la Figura 8.8.
Cuando el bus está libre, ambas líneas están a nivel lógico «1». Los transistores de salida co-
nectados a las líneas del bus I2C deben ser de colector abierto para que todos ellos se puedan co-
nectar entre sí formando una conexión tipo AND.

+VDD

DISPOSITIVO 1 DISPOSITIVO 2

RESISTENCIAS DE PULL-UP RP RP

SDA (LÍNEA DE DATOS SERIE)


SDA
SCL (LÍNEA DE RELOJ) SCL

Figura 8.8. Conexión de SDA y SCL al bus.


MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 177

Los bits de datos sobre el bus pueden transferirse a una velocidad de 100 Kbits/s. La capacidad
máxima en el bus es de 400 pF y el número de dispositivos conectados no debe superarla.

8.6.1. Transferencia del bit

Debido a la variedad de tecnologías empleadas en los dispositivos diseñados para conectarse al bus
I2C (CMOS, NMOS, TTL, etc.,) los niveles lógicos «0» y «1» de los bits transferidos no tienen una
tensión fija, sino que dependen de la tensión Vdd de alimentación. Cada bit que se transfiere por la
línea SDA debe ir acompañado de un pulso de reloj por la línea SCL.

Validez del bit

El bit de datos transferido por la línea SDA debe mantenerse estable durante el período en que la se-
ñal de reloj está a nivel «1». La línea de datos SDA sólo puede cambiar de estado durante el perío-
do en que la señal de reloj esté a «0», tal y como se muestra en la Figura 8.9.

Condiciones de inicio (start) y parada (stop)

Existen dos situaciones únicas que son definidas como las condiciones de inicio (inicio) y parada
(parada), que determinan el inicio y final de toda transferencia de datos entre el maestro y el escla-
vo. (Figura 8.10.)
Una transición de «1» a «0» (flanco descendente) en la línea SDA al tiempo que SCL está a
nivel lógico «1», determina la condición de inicio. Una transición de «0» a «1» (flanco ascen-
dente) sobre la línea SDA al tiempo que SCL permanece a nivel «1» determina la condición de
parada.
Ambas condiciones son siempre generadas por el maestro que, en todo momento, inicia y fina-
liza toda transferencia. El bus se considera ocupado (BUSY) tras la condición de inicio y, se consi-
dera libre, cierto tiempo después de la condición de parada.

Figura 8.9. Validación del bit de datos.


178 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 8.10. Condiciones de inicio y parada.

8.6.2. Transferencia de datos

Formato del Byte

Todos los bytes colocados sobre la línea SDA deben constar de 8 bits. Cada byte va seguido de un
bit de reconocimiento, ACK, y comienza siempre por el bit de más peso (MSB), tal y como se mues-
tra en la Figura 8.11.
Entre un byte y el siguiente puede haber un tiempo «t» de espera que se puede aprovechar para,
por ejemplo, dar servicio a una interrupción. En este caso, la línea SCL se mantiene a «0» para for-
zar al transmisor a un estado de espera.

Figura 8.11. Formato del Byte.


MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 179

Un mensaje cualquiera puede finalizar mediante la generación de la condición de parada duran-


te la transferencia de un byte. En este caso no se generará el bit de reconocimiento ACK.

Reconocimiento

El bit de reconocimiento ACK es obligatorio en la transferencia de cada byte. El pulso de reloj aso-
ciado a este bit n.o 9 lo genera el maestro. El transmisor pone la línea SDA a «1» durante dicho pul-
so de reloj.
El receptor, por su parte, pone a «0» la línea SDA durante el pulso de reloj correspondiente al
ACK y lo mantiene estable durante todo el período de dicho pulso.
En la línea SDA prevalece por tanto el nivel «0», como se aprecia en la Figura 8.12.
Normalmente, el receptor que ha sido direccionado está obligado a generar el bit ACK después
de recibir cada byte. Cuando un receptor esclavo no genera el bit ACK (NACK) al ser direcciona-
do (por ejemplo cuando está realizando una función interna y no está dispuesto a recibir), debe man-
tener la línea SDA a nivel «1» durante el bit ACK (NACK). Esta situación es detectada por el
maestro, que debe generar la condición de parada y abortar así la transferencia.
Igualmente, si un esclavo receptor reconoce ser direccionado pero no está dispuesto a recibir más
bytes, el maestro debe abortar la transferencia. Esta situación se identifica porque el esclavo tam-
poco genera el ACK en el siguiente byte que recibe. En su lugar pone la línea SDA a «1» (NACK)
y el maestro genera la condición de parada.
Si un maestro está recibiendo debe generar ACK tras cada byte enviado por el esclavo excepto
en el último, en el que el bit ACK lo mantiene a «1» (NACK) y genera la condición de parada.

Figura 8.12. El reconocimiento.


180 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

8.6.3. Arbitraje sin sincronización de reloj

Es la técnica necesaria por la cual, en un sistema donde existen varios maestros, se evitan conflic-
tos en el bus y pérdidas de información.

Sincronización

Todos los Maestros generan una señal de reloj sobre la línea SCL para transferir mensajes sobre el
bus I2C. Los bits de información son válidos cuando dicha señal de reloj está a nivel lógico «1».
La sincronización del reloj se realiza mediante una conexión tipo AND de todos los maestros
existentes en el bus. (Figura 8.13.)
Cuando un maestro cualquiera, por ejemplo el 1, genera un flanco descendente en CLK1, la lí-
nea SCL pasa a «0». Todos los dispositivos comienzan a temporizar sus respectivos períodos bajos
de reloj.
Sin embargo, un flanco ascendente en CLK1 no cambia el estado de SCL, ya que en ese instan-
te CLK2 está a «0».
La línea SCL se mantiene a «0» durante el período de aquel dispositivo cuyo nivel «0» sea más
largo. El resto de dispositivos entran en estado de espera.
Cuando todos los dispositivos finalizan su período bajo, SCL pasa a «1». De esta forma, todos
inician el período alto al mismo tiempo. El primer dispositivo en finalizar este período alto pone
SCL a «0», y el proceso se repite.

Figura 8.13. Sincronización del reloj.


MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 181

La señal de reloj presente en la línea SCL queda sincronizada y…

El período bajo Se determina por aquel cuyo período sea el de mayor duración.

El período alto Es determinado por aquel dispositivo cuyo período alto sea el de menor
duración.

Arbitraje

El arbitraje consiste en determinar qué maestro se hace cargo del bus en un sistema multi-maestro.
Cada maestro debe comparar si el bit de datos que transmite junto con su pulso de reloj en un mo-
mento dado, coincide con el nivel lógico presente en la línea de datos SDA. De no ser así, pierde el
acceso al bus. Si un maestro saca un nivel lógico «1» al tiempo en que otro saca un «0», en la línea
SDA prevalece el segundo (bit «dominante»), por lo que el primero debe dejar el bus libre al menos
hasta que se detecte la condición de parada generada por el maestro que se hizo cargo de dicho bus.
La Figura 8.14 muestra el caso de dos maestros. En el momento en que hay diferencia entre el
nivel lógico interno del maestro, que genera el DATO1 y el nivel actual presente en la línea SDA,
éste pierde el derecho a usar el bus y su nivel interno pasa a «1», liberando así la línea SDA.
La comparación para determinar el arbitraje puede continuar en varios bits hasta que haya una
falta de coincidencia.
El maestro que pierde el arbitraje puede seguir generando pulsos de reloj hasta que finalice el by-
te en que lo perdió.

Figura 8.14. Arbitraje del bus.


182 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Si un maestro pierde el arbitraje en el momento en que está direccionando a un esclavo, es posi-


ble que el maestro «ganador» lo estuviera direccionando precisamente a él. Es por ello que el
maestro «perdedor» se debe poner inmediatamente en modo receptor y como esclavo.

8.6.4. Formato

Los datos que se transfieren tienen el formato mostrado en la Figura 8.15.


Tras la condición de inicio, el maestro envía la dirección del esclavo al que se quiere dirigir. Es-
ta dirección es de 7 bits más el bit R/W# que indica lectura (R/W# = 1) o escritura (R/W# = 0) del
esclavo. Toda transferencia de datos finaliza con la condición de parada, también generada por el
maestro. A pesar de todo, si un maestro aún desea comunicar por el bus, puede generar otra condi-
ción de inicio y direccionar a otro esclavo sin generar previamente la condición de parada.
En las Figuras 8.16, 8.17 y 8.18 se muestran posibles formatos de transferencia.

Figura 8.15. Formato de los datos transferidos.

Figura 8.16. El maestro transmite al esclavo receptor. No cambia el byte de dirección.

Figura 8.17. El maestro recibe desde el esclavo después de enviarle a éste la dirección.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 183

Figura 8.18. El maestro cambia el byte de dirección y selecciona un esclavo distinto.

Tras el primer ACK enviado por el esclavo, el maestro transmisor se convierte en receptor y el
esclavo receptor en transmisor.

El formato combinado de la Figura 8.18 permite seleccionar un esclavo para leer-


lo, por ejemplo, y luego para escribirlo. En el caso de un dispositivo I2C de tipo memo-
ria RAM puede ser útil.
El tipo de datos o comandos que se envían pueden servir para realizar distintos tipos
de operaciones según el dispositivo I2C empleado. Habrá que consultar las características
y posibilidades de cada cual.

8.7. DIRECCIONAMIENTO

El proceso de direccionamiento del bus I2C consiste en que el primer byte que envía el maestro tras
la condición de inicio es un código que determina y selecciona a un determinado esclavo. Existe una
excepción en el código denominada «llamada general». Cuando un maestro realiza una «llamada ge-
neral» (código 0000 000) todos los esclavos existentes deben responder con el bit ACK. Puede dar-
se el caso de dispositivos que ignoren esta llamada. El siguiente byte tras la misma indicará la ope-
ración a realizar.

8.7.1. Definición del primer byte

Los 7 bits de más peso del primer byte se emplean para direccionar a un determinado esclavo. El de
menos peso, el octavo enviado, determina si se realizará una operación de lectura o de escritura
(R/W#) sobre el esclavo direccionado, tal y como se muestra en la Figura 8.19.
Cuando el maestro envía una dirección por el bus, todos los esclavos conectados la comparan
con la suya propia interna. Aquel en que coincida se considerará seleccionado por el maestro.
De los 7 bits que forman una dirección hay una parte que son fijos y ya están definidos interna-
mente por el propio dispositivo esclavo, y otra parte que son programables. De esta forma, es posi-
ble conectar al mismo bus dispositivos idénticos cuya parte fija de dirección es la misma pero la pro-
gramable es diferente.
El número de dispositivos iguales que se pueden instalar a un mismo bus depende del número
de bits programables disponibles. Por ejemplo, si un determinado modelo de dispositivo recibe una
dirección de 7 bits, 4 de los cuales son fijos y los 3 restantes programables, se podrán conectar al bus
un máximo de 8 dispositivos de ese mismo modelo.
184 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

MSB LSB

S DIRECCIÓN DE ESCLAVO 1 R/W#

DIRECCIÓN R/W# FUNCIÓN


0000 000 0 Dirección de «llamada general» (1)

0000 000 1 Byte de inicio (2)

0000 001 x Dirección CBUS (3)

0000 010 x Reservada para un formato diferente (4)


0000 011 x No definida

0000 100 x No definida

0000 101 x No definida

0000 110 x No definida

0000 111 x No definida

(1) Para aquellos dispositivos que la admitan y/o necesiten.

(2) No está permitido el bit ACK tras la recepción del byte. Empleado por
ciertos dispositivos.

(3) La dirección CBUS está reservada para permitir la combinación de


dispositivos I2C y CBUS en un mismo sistema. Los dispositivos I2C no
responden a esta dirección.

(4) Esta dirección está reservada para combinar el formato I2C con otros
protocolos. Únicamente los dispositivos I2C que estén diseñados pa-
ra trabajar con esos formatos y protocolos responden a esta dirección.

Figura 8.19. El primer byte.

El comité I2C creado al efecto coordina las direcciones asignadas a los diferentes dispositivos.
La dirección 1111 111 está reservada como extensión de dirección en el que el proceso de direccio-
namiento de un dispositivo continua en los siguientes bytes transferidos por el maestro. La dirección
1111 xxx está reservada también con propósitos de direccionamientos extendidos y la emplean cier-
tos dispositivos que tienen 10 bits de direccionado. La dirección 0000 xxx está reservada para un
grupo especial de dispositivos:

8.8. ESPECIFICACIONES ELÉCTRICAS

El bus I2C permite la comunicación entre dispositivos fabricados con diferentes tecnologías y
diferentes tensiones de alimentación. Para conexiones con niveles de entrada fijos y alimentación
de +5 V, se definen los siguientes valores:
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 185

VIL = 1,5 V (máxima tensión de entrada a «0»).

VIH = 3 V (mínima tensión de entrada a «1»).

Para dispositivos capaces de trabajar con un rango variado de tensiones de alimentación (por
ejemplo, CMOS), se definen los siguientes niveles:

VIL = 0,3 VDD (máxima tensión de entrada a «0»).

VIH = 0,7 VDD (mínima tensión de entrada a «1»).

En ambos casos, la máxima tensión de salida a «0» es:

VOL = 0.4 VARM

La corriente máxima de entrada a «0» en las líneas SDA y SCL de un dispositivo compatible con
el bus es de –10 μA. A nivel «1», la corriente de entrada es de 10 μA. La capacidad de dichas líne-
as es de 10 pF máximo.
Los dispositivos con niveles fijos de entrada pueden alimentarse desde diferentes fuentes de ali-
mentación de +5 V, como se muestra en la Figura 8.20.
Los dispositivos I2C cuyos niveles lógicos de entrada están en relación a VDD’ deben alimentar-
se conjuntamente según la Figura 8.21.
Cuando se combinan ambos tipos de dispositivos, los de niveles fijos de entrada (NMOS, TTL)
y los dependientes de VDD (CMOS), estos últimos deben conectarse a una alimentación común de
+5 V, como se muestra en la Figura 8.22.
La capacidad máxima del bus es de 400 pF, que incluye la capacidad entre cables y la de los dis-
positivos conectados.

VDD 1-4 = 5 V

VDD 1 VDD 2 VDD 3 VDD 4

NMOS NMOS NMOS NMOS


SDA SCL SDA SCL SDA SCL SDA SCL

RP RP

SDA SDA

SCL SCL

Figura 8.20. Alimentación de dispositivos con niveles fijos de entrada.


186 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

VDD = 3 V

CMOS CMOS CMOS CMOS


SDA SCL SDA SCL SDA SCL SDA SCL

RP RP

SDA SDA

SCL SCL

Figura 8.21. Alimentación de dispositivos con niveles de entrada dependientes de VDD.

VDD 1-3 = 5 V
VDD 1 VDD 2 VDD 3

CMOS CMOS NMOS TTL


SDA SCL SDA SCL SDA SCL SDA SCL

RP RP

SDA SDA

SCL SCL

Figura 8.22. Alimentación de dispositivos con niveles de entrada fijos junto con dependientes de VDD.

8.8.1. Tiempos

La señal de reloj en el bus I2C tiene un período a «0» de como mínimo 4,7 ms y a «1» de como
mínimo 4 ms. De esta forma, el maestro puede generar una frecuencia de hasta 100 KHz. La Fi-
gura 8.23 muestra el valor de cada tiempo.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 187

SÍMBOLO PARÁMETRO MÍNIMO MÁXIMO UNIDAD

TBUF Tiempo en que el bus debe estar libre antes de 4,7 μs


iniciar una nueva transmisión

THD:STA Tiempo entre el Inicio y primer pulso en SCL 4 μs

TLOW Duración del período bajo del reloj 4,7 μs

THIGH Duración del período alto del reloj 4 μs

TSU;STA Tiempo antes de una nueva condición de Inicio 4,7 μs

THD:DAT Tiempo de mantenimiento del dato 0 μs

TSU:DAT Tiempo de puesta del dato 250 μs

TR Tiempo del flanco ascendente para las líneas SDA y SCL 1 μs

TF Tiempo del flanco descendente para las líneas SDA y SCL 300 ns

TSU:STO Tiempo para la condición de parada 4,7 μs

Figura 8.23. Valor y nomenclatura de los diferentes tiempos.

8.9. EL BUS I2C Y LOS PIC16F87X

En los PIC16F87x, el bus I2C está implementado en silicio tanto en el modo maestro (master) co-
mo en el esclavo (slave). Como en general es el modo maestro el más usado, todos los ejercicios los
hemos realizado de esta forma y las explicaciones también se refieren a dicho modo.
Recuérdese que en modo maestro es el dispositivo, en este caso el PIC16F87x, el que inicia y fi-
naliza la transferencia y genera los impulsos de reloj. También selecciona el esclavo al que se des-
tina la información. (Figura 8.24.)
Como ya se ha comentado al hablar del bus I2C, en general, cada transferencia comienza con la
condición de inicio (start) y termina con la condición de parada (stop). Ambas condiciones las ge-
nera el maestro, y la primera consiste en un flanco descendente en SDA mientras SCL tiene nivel
alto. La condición de parada es un flanco ascendente mientras SCL tiene nivel alto.
Los datos que se colocan sobre la línea SDA son bytes de 8 bits, que comienzan con el MSB y
terminan con el bit de menos peso, al cual sigue en el noveno bit la condición de Reconocimiento
(ACK). Para este caso, el transmisor pone SDA = 1, mientras que el receptor pone SDA = 0 en di-
cho impulso de reloj, prevaleciendo sobre la línea el nivel bajo.
El primer byte que envía el maestro tras la condición de inicio contiene la dirección del es-
clavo con el que se desea realizar la comunicación. El código 0 se usa para realizar una «llama-
da general» sobre todos los esclavos. La dirección en realidad consta de 7 bits, estando destina-
do el octavo a indicar la operación a realizar (R/W#: Lectura/Escritura#). Tras este byte inicial
de direccionamiento se manda otro byte que especifica las características de la operación a rea-
lizar.
Para activar el bus I2C hay que poner el bit SSPEN = 1 que es el bit 5 del registro SSPCON
(SSPCON<5>). A partir de ese momento las patitas SDA y SCL quedan configuradas para sopor-
tar el protocolo I2C. Previamente dichas patitas de la Puerta C (RC3/SCL) y RC4/SDA) han de es-
tar configuradas como entradas mediante la escritura de los bits correspondientes del registro
TRISC.
Como se aprecia en la Figura 8.24, hay seis registros para controlar el bus I2C.
188 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 8.24. Estructura general de los registros que controlan la transferencia por las patitas SDA y SCL
en el modo maestro del bus I2C.

1.o SSPCON: registro de control.


2.o SSPCON2: registro de control 2.
3.o SSPSTAT: registro de estado.
4.o SSPBUF: buffer para los dato.
5.o SSPSR: registro de desplazamiento no accesible directamente.
6.o SSPADD: registro de dirección.

Mediante el bit CKE se ponen a nivel alto las patitas SDA y SCL en el modo maestro y esclavo.
Cuando CKE = 0 los niveles de dichas patitas se configuran según las especificaciones del bus I2C.
Los 4 bits de menos peso del registro SSPCON sirven para seleccionar el modo de trabajo entre
estos tres posibles:
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 189

1.o Modo I2C maestro. Relo j = (SPADD + 1)•OSC/4.


2.o Modo I2C esclavo con 7 bits para la dirección.
3.o Modo I2C esclavo con 10 bits para la dirección.

El registro de Estado SSPSTAT contiene la información que representa el estado de la transferen-


cia de datos. Detecta las condiciones de inicio y parada, así como la recepción del byte de la dirección.
SSPBUF es el registro que actúa como buffer y soporta el dato que se va a transmitir o que se ha
recibido. El registro de desplazamiento SSPSR realiza la conversión serie/paralelo y viceversa jun-
to al SSPBUF. Cuando se ha completado la llegada del byte, que se recibe en el registro SSPSR, se
traspasa a SSPBUF y se activa el señalizador SSPIF. Si se recibe otro byte antes de haber leído al
SSPBUF, se activa el señalizador de desbordamiento SSPOV (SSPCON<6>).
El registro SSPADD guarda la dirección del esclavo. Cuando se emplean direcciones de 10 bits,
el usuario debe escribir el byte alto de la dirección con el siguiente código donde A9:A8 son los dos
bits de más peso: 1-1-1-1-0-A9-A8-0.
En la Figura 8.25 se muestra la distribución de los bits del registro SSPSTAT, que ocupa la di-
rección 94h de los registros específicos de la memoria RAM.
El bit SMP se SSPSTAT en el modo maestro es un bit de muestreo que vale 1 cuando los bits de
datos se muestrean al final del período, o vale 0 cuando se hace en la mitad del período. El bit CKE
selecciona los niveles de las patitas SCL y SDA en el modo maestro o multi-maestro. El bit D/A#
(Dato/Dirección#) indica si el dato recibido es de información (1) o es una dirección (0). La llegada
del bit o condición de Stop la detecta el bit P, que se pone a 1. El bit S detecta la condición de Inicio
o Start. R/W# indica si se trata de una Lectura/Escritura#. El bit UA cuando vale 1 indica que la di-
rección es de 10 bits y que hay que cargar el byte alto, según la codificación antes expresada, en el
registro SSPADD. Si es 0 la dirección es de 7 bits. Finalmente, el bit BF actúa como señalizador del
buffer de datos. Si BF = 1 indica que tiene un dato y la transmisión está en progreso sin terminar.
En la Figura 8.26 se muestra la estructura del registro de control SSPCON, que ocupa la direc-
ción 14h del mapa de memoria.

REGISTRO SSPSTAT

SMP CKE D/A# P S R/W# UA BF

7 0

Figura 8.25. Distribución de los bits del registro de Estado SSPSTAT. Todos los bits son leíbles, siendo
sólo escribibles los dos de más peso. Tras un Reset todos se ponen a 0.

REGISTRO SSPCON

WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

7 0

Figura 8.26. Registro de Control SSPCON. Todos sus bits son leíbles y escribibles y se ponen a 0 tras
un Reset.
190 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

El bit WCOL es un detector de colisiones en escritura y cuando vale 1 significa que se ha inten-
tado escribir en SSPBUF en condiciones no válidas para el protocolo. El bit SSPON si vale 1 indica
desbordamiento, o sea, que llega un byte a SSPBUF sin haberse leído el anterior. Si SSPEN = 1
la Puerta Serie queda configurada con las patitas SCL y SDA. Si SSPEN = 0 las patitas
RC3/SCL y RC4/SDA funcionan como líneas de E/S digitales. El bit CKP sirve para activar el
reloj en el modo esclavo, no usándose en el modo maestro. Mediante los 4 bits de menos peso
de SSPCON se selecciona la frecuencia de reloj. Se indican los códigos más interesantes para el
modo maestro:

SSPCON3-0 FRECUENCIA DE RELOJ

0000 Reloj = FOSC/4

0001 Reloj = FOSC/16

0010 Reloj = FOSC/61

0011 Reloj = Salida del TMR2/2

1000 Reloj = (SSPADD + 1) • FOSC/4

En la Figura 8.27 se muestra la distribución de los bits del registro de control 2 SSPCON2.
El bit GCEN sólo se usa en el modo esclavo. Cuando se pone el bit ACKSTAT = 1 significa
que se ha recibido el bit de reconocimiento ACK del esclavo. ACKDT es el bit de reconoci-
miento en el modo maestro en recepción. Si ACKDT = 0 el maestro ha transmitido el bit de Re-
conocimiento, pero si vale 1 no lo ha hecho. Cuando se pone ACKEN = 1 se inicia la secuencia
de generación de la condición de reconocimiento. Este bit se borra automáticamente por hard-
ware.
Para habilitar el modo de recepción del maestro hay que poner el bit RCEN = 1. Para generar la
condición de parada en las líneas SCL y SDA hay que poner PEN = 1. El bit RSEN cuando se po-
ne a 1 inicia la repetición de la condición de inicio. Finalmente, para iniciar la condición de inicio
hay que poner SEN = 1.

REGISTRO SSPCON2

GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN

7 0

Figura 8.27. Registro de control 2 SSPCON2. Todos sus bits son leíbles y escribibles y quedan a 0 tras
un Reset.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 191

8.10. CHULETA-RESUMEN DE LOS REGISTROS USADOS


PARA EL BUS I2C

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

0Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh,
10Bh,
18Bh

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

0Eh SSPBUF Registro de recepción/transmisión de datos en puerto serie síncrono xxxx xxxx uuuu uuuu

0Fh SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

91h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000

10h SSPSTAT SMP CKE D/A# P S R/W# UA BF 0000 0000 0000 0000

Figura 8.28. Tabla que recoge los principales registros que intervienen en el control del módulo MSSP
con el protocolo bus I2C.

8.11. FUNCIONAMIENTO DEL MODO MAESTRO

El trabajo en el modo maestro se pone en marcha escribiendo los valores adecuados en los bits del
registro de control SSPCON y SSPEN = 1. Una vez puesto en funcionamiento este modo, el usua-
rio tiene 6 opciones:

1.a Generar la condición de inicio.


2.a Generar la condición de repetición de inicio.
3.a Escribir sobre SSPBUF para iniciar la transmisión de un dato o una dirección.
4.a Generar la condición de parada.
5.a Configurar el modo I2C en recepción.
6.a Generar la condición de reconocimiento al final de la recepción de un byte de datos.

El maestro es el encargado de generar los impulsos de reloj y las condiciones de inicio y parada
en cada byte transferido. Cuando el maestro es receptor, el primer byte indica la dirección del es-
clavo (7 bits más el bit R/W#). Por cada byte recibido por el maestro se transmite un bit de recono-
cimiento ACK.
A continuación, se describe la secuencia de pasos que hay que realizar en una transmisión del
maestro:
192 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1.o El usuario genera la condición de inicio, poniendo SEN = 1 en el registro SSPCON2.


2.o Se pone SSPIF = 1. El módulo esperará a que finalice la operación de inicio antes de empezar otra.
3.o Se carga en SSPBUF la dirección del esclavo a transmitir.
4.o Se saca por SDA la dirección del esclavo.
5.o El esclavo genera el bit de reconocimiento ACK y en el maestro se escribe en SSPCON2<6>.
6.o Se genera una interrupción al final del noveno impulso de reloj y SSPIF = 1.
7.o El usuario carga en SSPBUF un dato de 8 bits.
8.o Se transmiten los 8 bits por SDA.
9.o Se recoge el bit de reconocimiento del esclavo y se escribe el bit ACKSTAT del SSPCON2.
10.o El módulo genera una interrupción en el noveno impulso de reloj y pone SSPIF = 1.
11.o Se genera la condición de parada con PEN = 1 en SSPCON2.
12.o Una vez completada la condición de parada, se genera una interrupción.

En el modo maestro el valor usado en la generación de la frecuencia se escribe en SSPADD, se-


gún los 4 bits de menos peso. Después, este valor se carga en el contador descendente BRG, que lo
va decrementando hasta llegar a 0, donde se para hasta que se vuelve a recargar. El BRG se decre-
menta 2 unidades por cada ciclo de instrucción.

8.11.1. Condición de inicio (start)

Para generar la condición de start, el usuario debe escribir el bit SEN = 1 en SSPCON2. Si SDA y
SCL se mantienen a nivel alto, el contador BRG se carga con el valor de 7 bits de SSPADD. Cuan-
do termina el contaje de BRG la línea SDA pasa a nivel bajo. La condición de inicio consiste en un
flanco descendente de SDA mientras SCL permanece con nivel alto. Pone el bit S = 1 del registro
SSPSTAT. Luego se recarga el BRG con el valor SSPADD <6-0> y vuelve a decrementarse. Al lle-
gar a 0 el contador el bit SEN pasa a 0 automáticamente.

8.11.2. Condición de repetición de inicio (start)

Esta situación se produce cuando RSEN = 1. Entonces SCL pasa a nivel bajo y el contador BRG se car-
ga con los 7 bits de menos peso de SSPADD y comienza el contaje. Al finalizar el contaje SCL pasa
de nivel bajo a nivel alto mientras SDA sigue en nivel bajo. Luego nuevamente SCL = 1 y SDA = 1
y se vuelve a cargar BRG.

8.11.3. Modo maestro en transmisión

La transmisión de un byte de datos debe ir precedida de la transmisión de la dirección del esclavo,


la cual debe cargarse en el registro SSPBUF, en cuyo momento se pone el bit BF = 1 y se pone en
marcha el reloj y el inicio de la transmisión. Cada bit que sale por la línea SDA lo hace en el flanco
descendente del impulso de reloj en SCL. Tras sacar los 8 bits se borra el bit BF y el esclavo debe
generar la condición de reconocimiento en el noveno impulso de reloj. El bit ACK se coloca en el
bit ACKDT en el flanco descendente de SCL. Tras el noveno impulso SSPIF = 1 y se detiene el ge-
nerador de frecuencia hasta que no se cargue otro dato en SSPBUF.
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 193

En transmisión BF = 1 cuando la CPU escribe en el SSPBUF y BF pasa a 0 cuando han salido


los 8 bits. El señalizador WCOL vale 1 cuando el usuario escribe sobre el SSPBUF estando una
transmisión del dato previo en progreso. Este bit hay que pasarlo a 0 por software.
El bit ACLSTAT pasa a 0 cuando el esclavo ha enviado el bit de reconocimiento.

8.11.4. Modo maestro en recepción

Para poner en marcha el modo maestro en recepción, hay que poner el bit RCEN = 1 estando en repo-
so el módulo MSSP. El generador de frecuencia empieza a funcionar y SCL cambia de estado en cada
período controlado por el decremento del contador BRG. Entonces el dato empieza a desplazarse sobre
el registro SSPSR. Al final del octavo clock se ponen BF = SSPIF = 1 y se transfiere el contenido de
SSPSR al SSPBUF, con lo que RCEN = 0. El módulo queda en estado de reposo a la espera de un nue-
vo comando. Cuando el buffer es leído por la CPU BF se pone a 0 automáticamente. El usuario puede
enviar un bit de reconocimiento al finalizar la recepción, escribiendo ACKEN = 1 (SSPCON2 <4>).
Cuando un dato o una dirección se carga en SSPBUF desde SSPSR, el bit BF = 1 y este bit pa-
sa a 0 cuando la CPU lee SSPBUF. El señalizador de desbordamiento SSPOV es 1 cuando se reci-
be un byte en SSPSR y aún no ha leído la CPU el dato anterior.
Si el usuario escribe en SSPBUF mientras hay una recepción en progreso, el bit WCOL se pone
a 1 y el contenido del buffer no cambia.

8.11.5. Secuencia de reconocimiento

Se produce automáticamente en cuanto se pone ACKEN = 1. Entonces la patita SCL pasa a nivel bajo
y aparece en SDA el bit de reconocimiento al finalizar el dato. Al poner ACKEN = 1 y ACKDT = 0 la

Figura 8.29. Diagrama de tiempos de una secuencia de reconocimiento.


194 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

patita SCL queda a nivel bajo, mientras el generador de frecuencia cuenta un período (TBRG). Luego
SCL pasa a nivel alto y al completarse otro período SCL vuelve a pasar a nivel bajo y ACKEN = 0. El
flag SSPIF = 1 cuando finaliza la secuencia de reconocimiento. (Figura 8.29.)

8.11.6. Condición de parada (stop)

Se genera la condición o bit de stop al final de la transmisión/recepción, poniendo el bit PEN = 1


(SSPCON2 <2>). En el flanco descendente del noveno impulso de reloj la línea SCL queda a nivel
bajo. Entonces si PEN = 1 la línea SDA pasa a nivel bajo y el generador cuenta un período, tras el
cual SCL pasa a nivel alto. Tras otro período TBRG, la línea SDA pasa a nivel alto y P = 1. Tras otro
período PEN, se pone a 0 automáticamente. (Figura 8.30.)
El impulso de reloj en SCL se produce cuando es muestreada dicha línea cada ciclo TOSC•4, y es-
tá a nivel alto, en cuyo momento se carga el contador BRG con los 7 bits de menos peso de SSPADD
y comienza a contar otro período, pasando SCL a 0 al completarlo.

AL ESCRIBIR SSPCON2 CUANDO SCL = 1 Y EL SEGUNDO SDA = 1,


SE ACTIVA PEN SE ACTIVA EL BIT P

FLANCO DESCENDENTE EL BIT PEN SE DESACTIVA POR HARDWARE


DEL 9.º IMPULSO Y EL BIT SSPIF ES ACTIVADO
P

TBRG
SCL

SDA ACK#

TBRG TBRG TBRG

SCL PASA A NIVEL ALTO TRAS TBRG

SDA PASA A 0 ANTES DEL FLANCO ASCENDENTE


DEL RELOJ PARA CONFIGURAR
LA CONDICIÓN DE PARADA

Figura 8.30. Diagrama de tiempos de la condición de parada.


Programar PIC es fácil

COMUNICACIÓN MEDIANTE EL MÓDULO MSSP

En los PIC16F87x, se ha potenciado al máximo los recursos de comunicación. Tanto el USART co-
mo el módulo MSSP se utilizan en un sinfín de aplicaciones. En este apartado nos vamos a centrar
en este último y, más concretamente, en su uso en modo I2C por la gran cantidad de periféricos exis-
tentes.

Enunciado

Se pretende realizar un sencillo ejemplo que muestre cómo se realiza la comunicación entre un PIC
y dispositivos que funcionan bajo I2C. En este caso, se leerán los valores del dispositivo PCF8574
(puerto de E/S de 8 bits) y se mostrará por diodos LED del Micro’PIC Trainer.

Esquema eléctrico

Como se ha visto en este capítulo, el protocolo I2C utiliza dos únicas líneas para la comunicación;
RC3/SCL, que será la señal de reloj proveniente del maestro, y RC4/SDA, que será la línea de da-
tos, tanto de recepción como de transmisión. (Figura 8.31.)
En el caso de que se empleasen más dispositivos esclavos, todos ellos colgarían de las mismas
2 líneas.

Organigrama

El organigrama de este ejercicio muestra la secuencia de pasos ya vistas en teoría. Como dato cu-
rioso puede observarse que en este caso no se envía una condición de parada, ya que el PIC se que-
da en un bucle infinito leyendo y mostrando datos. En la resolución del programa podrá verse la sim-
plicidad de las subrrutinas de «Enviar Condición de Inicio», «Direccionar Esclavo» etc., en
comparación con el mismo ejercicio resuelto para un PIC16F84. Mientras que en éste dichas ruti-
nas eran del todo software, con los PIC16F87x sólo tenemos que preocuparnos de saber cuándo el
hardware interno del PIC ha terminado de transmitir, recibir, etc.
195
196 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

+5V

10K

In4148

100

RESET
PIC16F873

1 MCLR#/VPP/THV RB7/PGD 28
2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/VREF- RB4 25
5 RA3/AN3/VREF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
8 RB0/INT 21
15 pF VSS
9 VDD 20 +5 V
OSC1/CLKIN
10 OSC2/CLKOUT VSS 19
CRISTAL 4 Mhz
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15
LÍNEA
SEÑAL DE RELOJ DE DATOS

LÍNEA
SEÑAL DE RELOJ
DE DATOS

DISPOSITIVO I2C
MICRO’PIC TRAINER PLUS

Figura 8.31. Esquema eléctrico del ejercicio propuesto.

Figura 8.32. Organigrama del ejercicio propuesto.


MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 197

Programa comentado

Como puede verse, el programa mostrado a continuación recoge todas la rutinas necesarias para la
transmisión y recepción de datos por I2C. Aunque el ejemplo es sencillo, el modo de actuar en otros
casos sería similar.

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x05 ; Salta vector de interrupción

; Envía la condición de inicio

S_START bcf PIR1,SSPIF ; Restaura el flag de MSSP


bsf STATUS,RP0 ; Selección de banco 1
bcf STATUS,RP1
bsf SSPCON2,SEN ; Activa secuencia de inicio
bcf STATUS,RP0 ; Banco 0
START_W btfss PIR1,SSPIF ; ¿Ha terminado?
goto START_W ; No. Esperar
return

; Envía la secuencia de parada

S_STOP bcf PIR1,SSPIF ; Restaura flag MSSP


bsf STATUS,RP0 ; Banco 1
bcf STATUS,RP1
bsf SSPCON2,PEN ; Activa secuencia parada
bcf STATUS,RP0 ; Banco 0
STOP_W btfss PIR1,SSPIF ; ¿Ha terminado?
goto STOP_W ; No. Esperar
return

; Envío del byte que se encuentra en W vía I2C. La rutina finaliza cuando se recibe
; un ACK#

SEND_B bcf PIR1,SSPIF ; Restaura flag MSSP


movwf SSPBUF ; Llevar byte a buffer salida
SEND_B_W btfss PIR1,SSPIF ; ¿Recibido ACK#?
goto SEND_B_W ; No. Esperar
return
198 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

; Lee un byte procedente del dispositivo I2C seleccionado y lo mete en W.


; A continuación genera y transmite un bit ACK#

READ_B bcf PIR1,SSPIF ; Restaura flag MSSP


bsf STATUS,RP0 ; Banco 1
bcf STATUS,RP1
bsf SSPCON2,RCEN ; Activa modo receptor
bcf STATUS,RP0 ; Banco 0
READ_W btfss PIR1,SSPIF ; ¿Byte recibido?
goto READ_W ; No. Esperar
bcf PIR1,SSPIF ; Sí. Restaura flag MSSP
bsf STATUS,RP0 ; Selecciona banco 0
bcf STATUS,RP1
bcf SPCON2,ACKDT ; Pone bit ACK a «0»
bsf SSPCON2,ACKEN ; Activa generación de ACK
bcf STATUS,RP0 ; Banco 0
ACK_W btfss PIR1,SSPIF ; ¿Secuencia ACK
; finalizada?
goto ACK_W ; No. Esperar
movf SSPBUF,W ; Sí. Lee el byte recibido
return

; Comienzo del programa principal

INICIO clrf PORTB ; Limpia salidas


clrf PORTC
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
clrf TRISB ; Puerta B como salida
movlw b’00000110’ ; Puerta A digital
movwf ADCON1
movlw b’11111111’ ; Puerta A entrada
movwf TRISA
movwf TRISC ; Puerta C entrada
movlw b’11001111’ ; Predivisor de 128 asociado
movwf OPTION_REG ; al perro guardián
movlw b’10000000’ ; Velocidad estándar con
movwf SSPSTAT ; niveles I2C
movlw .9 ; Velocidad del bus I2C
movwf SSPADD ; 100 KHz
bcf STATUS,RP0 ; Banco 0

; Configuración del módulo MSSP en modo Master I2C

movlw b’00101000’ ; Módulo MSSP en On


movwf SSPCON
call S_START ; Envía condición de inicio
movlw b’01110001’ ; Dirección de PCF8574
call S_BYTE ; (lectura)
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 199

BUCLE clrwdt ; Refresca perro guardián


call R_BYTE ; Lee dispositivo PCF8574
movwf PORTB ; Visualiza dato sobre LEDs
goto BUCLE

END

Prueba del programa

Se van a utilizar el Micro’PIC Trainer para mostrar los valores leídos en los LEDs (RB0-RB7), y el
Micro’PIC Trainer Plus, que entre otros dispositivos I2C incorpora el PCF8574, utilizado en este ca-
so para la lectura de valores. Para una correcta configuración de los periféricos utilizados:

1.o En el Micro’PIC Trainer Plus los jumpers J1-J4 deberán estar en la posición 2-3.
2.o Durante la ejecución, el jumper J7 del Micro’PIC Trainer debe estar cerrado para habilitar los LEDs.
Diseñar con PIC es fácil

COMUNICACIÓN DE DATOS DIGITALES POR RADIO FRECUENCIA

La transferencia de información entre sistemas digitales usando la radio frecuencia es una de las más
interesantes aplicaciones que puede utilizarse en cantidad de situaciones. La comunicación de dos
sistemas sin conexión física alguna abre una extensa plataforma de mejora de productos.
En este apartado, se describen en forma resumida las principales características de las tarjetas,
que basadas en un PIC16F84 cada una, permiten la transferencia de información digital por R.F.
MSETX y MSERX son los nombres que asigna el fabricante Microsystems Engineering a la tar-
jeta emisora y receptora, respectivamente. La comunicación entre ambas tarjetas es trasparente pa-
ra el usuario, que únicamente tiene que encargarse de fijar los parámetros de configuración y los da-
tos que desea enviar.
En la fotografía de la Figura 8.33 se muestran las tarjetas MSETX y MSERX de transferencia de
información digital por R.F.

Figura 8.33. Fotografía de las tarjetas emisora y receptora basadas en un PIC16F84.


200
MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 201

El emisor de radio frecuencia

La tarjeta MSETX es la encargada de transmitir los datos digitales por R.F. El emisor MSETX se
alimenta con una tensión de 12 VAC, que luego internamente rectifica, filtra y estabiliza para obte-
ner 5 VDC para el circuito del PIC16F84, y 13 VDC para el módulo transmisor de R.F.
El emisor se conecta al sistema digital desde el que se envía la información mediante comuni-
cación RS232 o niveles TTL. Dicho sistema digital puede tratarse de un ordenador personal, o bien,
de un sistema con microcontrolador, como puede ser un microbot. (Figura 8.34.)
En realidad, en el emisor MSETX existen dos bloques fundamentales: módulo transmisor y cir-
cuito del microcontrolador PIC16F84. Cuando el PIC del emisor se comunica con el Sistema del Usua-
rio lo hace en serie y de forma bidireccional. Recibe comandos y datos pero también puede enviar in-
formación sobre su configuración interna. Por otro lado, el PIC se comunica en serie con el Módulo
Transmisor RT1-433, el cual envía la información bit a bit por R.F., según se muestra en la Figura 8.35.

Figura 8.34. Conexión del emisor con un PC.

Figura 8.35. Comunicación del PIC con el Sistema del Usuario y con el Módulo Transmisor de R.F.
202 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

El emisor MSETX puede considerarse un subsistema que forma parte de un sistema principal
que lo requiere para enviar datos digitales por R.F.
El MSETX recibe desde el Sistema de Usuario los comandos y la información a enviar en
formato RS232 o mediante niveles lógicos TTL. Después, el PIC configura la transmisión y se
encarga de que el Módulo Transmisor envíe por R.F., la información deseada según el protoco-
lo utilizado.
Los elementos más relevantes que componen el emisor MSETX son:

1.o Alimentación mediante transformador externo de 12 VAC.


2.o Circuito de rectificación, filtrado y estabilización que proporciona +5 VDC para el circuito electró-
nico y +13 VDC para el Módulo Transmisor.
3.o El Módulo Transmisor es el modelo RT1-433 de Telecontrolli, que funciona con una portadora de
433,92 MHz en AM y cubre una distancia de algunas decenas de metros.
4.o El interface con el Sistema del Usuario puede realizarse por canal serie RS232 por conector DB9
hembra y/o mediante niveles lógicos TTL a través del conector TTL DATA.
5.o Velocidad de comunicación con el Sistema de Usuario seleccionable a 9600, 4800 o 2400 bau-
dios.
6.o Velocidad de transmisión de datos digitales por R.F., de 1.200 o 2.000 baudios.
7.o El control de los protocolos de R.F., y de las comunicaciones se basa en un PIC16F84, cuyo firm-
ware lo ha desarrollado Microsystems Engineering.

Receptor de radio frecuencia

En la Figura 8.36 se ofrece un esquema de adaptación del Módulo Receptor de R.F. MSERX con el
Sistema de Usuario, que en este caso se representa como un PC.

Figura 8.36. Interconexión del Módulo Receptor de R.F. y el PC.


MÓDULO DE COMUNICACIÓN SERIE SÍNCRONA: MSSP 203

RECE PTO R MSE RX

Figura 8.37. El PIC hace de intermediario entre el Sistema de Usuario y el Módulo Receptor de R.F.

Aunque en la Figura 8.36 la aplicación del usuario está representada como un PC, también el receptor
podría entregar los datos digitales recibidos por R.F., a un terminal de datos o a un sistema con microcon-
trolador o microprocesador.
El receptor MSERX es un subsistema que forma parte de un sistema principal y al cual le proporciona
la información digital que recibe por R.F. Se limita a recibir los datos, empaquetarlos, verificarlos y, final-
mente, entregarlos en serie al Sistema del Usuario para que los procese.
La Figura 8.37 ofrece un esquema más detallado de la constitución del Receptor de R.F.
El Sistema del Usuario comienza enviando al emisor MSERX datos para su configuración, luego este
último le devuelve el estado de su configuración interna, así como los datos digitales que ha recibido por
R.F., bit a bit.
Las características más relevantes del Receptor MSERX son:

1.a Alimentación mediante transformador externo de 12 VAC o bien aplicando +5 VDC por el conec-
tor TTLDATA.
2.a Circuito de rectificación, filtrado y estabilización de +5 VDC que alimenta al circuito electrónico y
al Módulo Receptor.
3.a El Módulo Receptor es el modelo RR3-433 de Telecontrolli, que está sintonizado a 433.92 MHz en
AM.
4.a Interface de adaptación con la aplicación del usuario a través del canal serie RS232 con conec-
tor DB9, o bien, mediante niveles TTL aplicados directamente por el conector TTLDATA.
5.a Comunicación con la aplicación del usuario con velocidades seleccionables de 9.600, 4.800 o
2.400 baudios.
6.a Velocidad de recepción de datos digitales por R.F., de 1.200 o 2.000 baudios.
7.a El circuito de control de protocolos de R.F., así como la comunicación serie con el usuario está go-
bernado por un PIC16F84.
9 El USART:
Transmisor/Receptor
Síncrono/Asíncrono
serie

9.1. COMUNICACIÓN SERIE ASÍNCRONA

Los PIC16F87x contienen un módulo MSSP con dos puertas para la comunicación serie «síncrona»,
o sea, con señal de reloj. Además, también disponen de un módulo USART capaz de soportar la co-
municación serie síncrona y asíncrona.
El USART, llamado SCI (Serial Comunications Interface), puede funcionar como un sistema
de comunicación full duplex o bidireccional asíncrono, adaptándose a multitud de periféricos y
dispositivos que transfieren información de esta forma, tales como el monitor CRT o el ordena-
dor PC. También puede trabajar en modo síncrono unidireccional o half duplex para soportar
periféricos como memorias, conversores, etc. En resumen, el USART puede trabajar de tres
maneras:

1.a ASÍNCRONA (Full duplex, bidireccional).


2.a SÍNCRONA-MAESTRO (Half duplex, unidireccional).
3.a SÍNCRONA-ESCLAVO (Half duplex, unidireccional).

En la Figura 9.1 se muestra un esquema del comportamiento del USART en modo asíncrono y
síncrono. En el primero, las transferencias de información se realizan sobre dos líneas TX (trans-
misión) y RX (recepción), saliendo y entrando los bits por dichas líneas al ritmo de una frecuencia
controlada internamente por el USART. En el modo síncrono, la comunicación se realiza sobre dos
líneas, la DT que traslada en los dos sentidos los bits a la frecuencia de los impulsos de reloj que sa-
len por la línea CK desde el maestro. En ambos modos las líneas de comunicación son las dos de
más peso de la Puerta C: RC6/TX/CK y RC7/RX/DT.
Dada la importancia del protocolo asíncrono del USART, según la popular norma RS-232-C, se
dedica este capítulo a estudiar este modo de comunicación, proponiendo un ejercicio de manejo de
dicho protocolo en la sección «Programar PIC es fácil».
En esta forma de comunicación serie, se usa la norma RS-232-C, donde cada palabra de infor-
mación o dato se envía independientemente de los demás. Suele constar de 8 o 9 bits y van prece-
205
206 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 9.1. En el modo asíncrono, la comunicación serie del USART en los PIC16F87x está
soportada por las líneas RC6/TX/CK y RC7/RX/DT por las que se mueven los bits a la
frecuencia interna de reloj. En el modo síncrono, los bits de información circulan en
ambos sentidos por la línea DT a la frecuencia de los impulsos que genera el maestro
por la línea CK.

didos por un bit de START (inicio) y detrás de ellos se coloca un bit de STOP (parada), de acuerdo
con las normas del formato estándar NRZ (NonReturn-to-Zero). (Figura 9.2.) Los bits se transfie-
ren a una frecuencia fija y normalizada.
Los cuatro bloques que configuran la arquitectura del USART, en modo asíncrono, son:

1.o Circuito de muestreo.


2.o Generador de baudios.
3.o Transmisor asíncrono.
4.o Receptor asíncrono.

El circuito de muestreo actúa sobre la patita RC7/RX/DT, que es por donde se recibe el bit
de información o control y se encarga de muestrear tres veces su valor, para decidir éste por ma-
yoría.
EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 207

Figura 9.2. En el protocolo de comunicación asíncrono, cada palabra de información o dato consta
de 8 o 9 bits, estando precedidos por un bit de INICIO y les sigue un bit de PARADA. Los
bits se transfieren al ritmo de la frecuencia de reloj establecida.

9.2. GENERADOR DE BAUDIOS

En el protocolo asíncrono RS-232-C, la frecuencia en baudios (bits por segundo) a la que se rea-
liza la transferencia se debe efectuar a un valor normalizado: 330, 600, 1.200, 2.400, 4.800,
9.600, 19.200, 38.400, etc. Para generar esta frecuencia, el USART dispone de un Generador de
Frecuencia en Baudios, BRG, cuyo valor es controlado por el contenido grabado en el registro
SPBRG.
Además del valor X cargado en el registro SPBRG, la frecuencia en baudios del generador de-
pende del bit BRGH del registro TXSTA<2>. En el caso de que BRGH sea 0 se trabaja en baja ve-
locidad y si BRGH = 1 se trabaja en alta velocidad. Según este bit se obtendrá el valor de una cons-
tante K necesaria en la determinación de la frecuencia de funcionamiento.

Frecuencia en Baudios = FOSC / (K • (X + 1))

X es el valor cargado en el registro SPBRG

Si BRGH = 0, baja velocidad y K = 64


Si BRGH = 1, alta velocidad y K = 16
208 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

De donde se desprende que:

X = FOSC / Frecuencia / K – 1

EJEMPLO

Si en un PIC16F873 funcionando con una FOSC = 16 MHz se desea trabajar con el USART en modo
asíncrono y baja velocidad, con una frecuencia de 9.600 baudios, calcular el valor X que hay que car-
gar en el registro SPBRG y el error que se origina.

(Baja velocidad) K = 64

Frecuencia = FOSC / (64 x (X + 1))

9.600 = 16.000.000 / (64 x (X + 1))

X = 25

Si se carga el registro SPBRG con 25 la frecuencia real de trabajo será:

Frecuencia = 16.000.000 / (64 x (25 + 1)) = 9615 baudios

El error que se origina cargando 25 en el SPBRG será:

Error = (9.615 – 9.600) / 9.600 = 0,16%

En la Figura 9.3 se presenta la estructura interna junto a otros datos de interés de los registros que
intervienen en la determinación de la frecuencia en baudios a la que transfiere información el
USART.

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

98h TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

Figura 9.3. Características relevantes de los registros que intervienen en la determinación de la


frecuencia en baudios de la transferencia de información en el modo asíncrono del
USART.
EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 209

9.3. TRANSMISOR ASÍNCRONO

En la Figura 9.4, se muestra un esquema simplificado de la comunicación entre un USART trans-


misor y otro receptor, contenidos en sus respectivos microcontroladores.
El dato que se desea transmitir por el USART transmisor de la Figura 9.4 se deposita en el re-
gistro TXREG y a continuación se traspasa al registro de desplazamiento TSR, que va sacando los
bits secuencialmente y a la frecuencia establecida. Además, antes de los bits del dato de informa-
ción incluye un bit de INICIO y después de sacar todos los bits añade un bit de PARADA. El
USART receptor recibe, uno a uno, los bits, elimina los dos de control y los de información una vez
que han llenado el registro de desplazamiento RSR los traslada automáticamente al registro
RCREG, donde quedan disponibles para su posterior procesamiento.
En la Figura 9.5 se presenta el diagrama por bloques de la sección transmisora del USART.
El núcleo está constituido por el registro de desplazamiento TSR, que obtiene el dato desde el

Figura 9.4. Esquema simplificado del conexionado entre dos módulos USART funcionando en
modo asíncrono.

Figura 9.5. Diagrama por bloques de la sección de transmisión del USART en modo asíncrono.
210 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

registro TXREG y luego lo va desplazando y sacando bit a bit, en serie, por la patita
RC6/TX/CK. El primer bit que sale es el de menos peso. El dato a transferir se carga por soft-
ware en TXREG y se transfiere al TSR en cuanto se haya transmitido el bit de PARADA del
dato anterior. La transferencia entre los dos registros se realiza en un ciclo y entonces el seña-
lizador TXIF se pone a 1, para advertir que el registro de transmisión se ha vaciado. También
en este momento puede producirse una interrupción si se ha posibilitado programando el bit
TXIE = 1 en el registro PIE1<4>. Cuando se escribe otro dato sobre TXREG, el señalizador
TXIF se pone a 0. El bit TRMT sirve para indicar el estado del registro TSR y vale 1 cuando
está vacío.
La secuencia de pasos a seguir para implementar una transmisión en el USART es la si-
guiente:

1.o Hay que configurar las líneas RC6/TX/CK como salida y RC7/RX/DT como entrada.
2.o Poner SYNC = 0 y SPEN = 1 para activar el USART en modo asíncrono.
3.o Si se desea trabajar con interrupción, poner TXIE = 1, además de habilitar las interrupciones en
general.
4.o Si el dato consta de 9 bits, en lugar de los 8 típicos, poner el bit TX9 = 1. El noveno bit se coloca-
rá en TX9D (TXSTA).
5.o Se carga el valor X adecuado en el registro SPBRG, para producir la frecuencia de trabajo de-
seada. Hay que controlar el bit BRGH (alta y baja velocidad).
6.o Activar la transmisión con TXEN = 1. El bit TXIF tendrá valor 1, ya que TXREG se encuentra vacío.
7.o Cargar en TXREG el dato a transmitir. Comienza la transmisión.

El siguiente ejemplo muestra una posible configuración.

clrf PORTC ; Se borran los bits de la Puerta C


bsf STATUS,RP0 ; Banco 1
bcf STATUS,RP1
movlw b’1011111’ ; RC7/RX/DT, entrada y RC6/TX/CK, salida
movwf TRISC
bcf STATUS,RP0 ; Banco 0
bsf RCSTA,SPEN ; Se activa el USART
movlw b’00100100’ ; Se elige el modo asíncrono (SYNC = 0),
; dato de 8 bits
movwf TXSTA ; y alta velocidad (BRGH = 1)
movlw .25 ; Se carga 25 en W
movwf SPBRG ; Se carga 25 en el registro SPBRG, con lo
; que se trabaja a 9.600 baudios
bsf TXSTA,TXEN ; Se activa la transmisión
movlw 48 ; Se mueve a TXREG el dato a transmitir.
movwf TXREG ; Comienza la transmisión

En la Figura 9.6, se ofrecen las características más relevantes de los registros asociados con la
transmisión asíncrona y en la Figura 9.7 se especifica la distribución y asignación de funciones de
los bits del registro TXSTA.
EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 211

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010

19h TXREG Registro de Transmisión del USART 0000 0000 0000 0000

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

Figura 9.6. Características más relevantes de los registros asociados con la transmisión asíncrona.

Registro TXSTA

CSRC TX9 TXEN SYNC — BRGH TRMT TX9D

7 0

CSRC Bit de selección del reloj.


Modo asíncrono: no influye.
Modo síncrono:
1 = Modo maestro (reloj generado internamente desde BRG)
0 = Modo esclavo (reloj generado por una fuente externa)

TX9 Habilita el bit 9 de transmisión.


1 = Selecciona transmisión de 9 bits
0 = Selecciona transmisión de 8 bits

TXEN Activa la transmisión.


1 = Transmisión activada
0 = Transmisión desactivada

SYNC Bit de selección del modo del USART.


1 = Modo síncrono
0 = Modo asíncrono

BRGH Bit de selección de la velocidad de baudios.


Modo asíncrono:
1 = Alta velocidad
0 = Baja velocidad
Modo síncrono: no utilizado.

TRMT Bit de estado del registro de desplazamiento de transmisión.


1 = TSR vacío
0 = TSR no vacío

TX9D Bit 9 del dato a transmitir (puede ser el bit de paridad)

Figura 9.7. Asignación de funciones de los bits del registro TXSTA para el control de la sección
transmisora del USART.
212 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

9.4. RECEPTOR ASÍNCRONO

Los datos se reciben en serie, bit a bit, por la patita RC7/RX/DT y se van introduciendo secuencial-
mente en el registro desplazamiento RSR (Figura 9.4), que funciona a una frecuencia 16 veces más
rápida que la de trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 y el no-
veno bit de información se colocará en el bit RX9D del registro RCSTA. Obsérvese en la Figura 9.8
el control sobre el noveno bit con las puertas de control y las señales que se aplican (ADDEN = 1).
Cuando CREN = 1 en el registro RCSTA<4>, se habilita la recepción.
Cuando un procesador maestro intenta enviar información a uno de los esclavos, primero envía
un byte de dirección que identifica al destinatario. El byte de dirección se identifica porque el bit
RX9D que llega vale 1. Si el bit ADDEN = 1 en el esclavo se ignoran todos los bytes de datos. Pe-
ro si el noveno bit que se recibe vale 1, quiere decir que se trata de una dirección y el esclavo pro-
vocará una interrupción, y se transferirá el contenido del registro RSR al buffer de recepción. Tras
la interrupción, el esclavo deberá examinar la dirección y si coincide con la suya poner ADDEN =
0 para poder recibir datos del maestro.
Si ADDEN = 1 como los datos son ignorados, el bit de PARADA no se carga en RSR, por lo que
este hecho no produce interrupción.

Figura 9.8. Diagrama por bloques de la sección receptora del USART.


EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 213

Los pasos a seguir en el modo de recepción son los siguientes:

1.o Se carga con el valor X al registro SPBRG para trabajar con la frecuencia deseada, controlando
además el valor de BRGH.
2.o Se habilita el USART en modo asíncrono con SPEN = 1 y SYNC = 0.
3.o Si se desea que se genere una interrupción con la llegada del bit PARADA, se pone RCIE = 1,
además de habilitar las interrupciones en general.
4.o Poner RX9 = 1 para permitir la recepción del bit 9.
5.o Para detectar la dirección, poner ADDEN = 1.
6.o Se habilita la recepción poniendo CREN = 1.
7.o Al completarse la recepción RCIF se pondrá a 1 y se produce una interrupción si se había per-
mitido.
8.o Se lee el registro RCSTA y se averigua si se ha producido algún error.
9.o Leer los 8 bits del registro RCREG para determinar si el dispositivo ha sido el direccionado.
10.o Si se ha producido algún error, poner CREN = 0.
11.o Si ha sido direccionado el dispositivo, poner ADDEN = 0 para permitir la recepción de la infor-
mación.

En la Figura 9.9 se muestra la estructura interna y la asignación de funciones de los bits del re-
gistro RCSTA.

Registro RCSTA

SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

7 0

SPEN Habilitación del puerto serie.

1 = Puerto serie habilitado (se configuran las patitas RC7/RX/DT y RC6/TX/CK)


0 = Puerto serie deshabilitado

RX9 Habilita el bit 9 de recepción.

1 = Selecciona recepción de 9 bits


0 = Selecciona recepción de 8 bits

SREN Configura la recepción sencilla.

Modo asíncrono: no influye.


Modo síncrono maestro:
1 = Habilita recepción sencilla
0 = Deshabilita recepción sencilla
Modo síncrono esclavo: no se utiliza.

CREN Configura la recepción continua.

Modo asíncrono:
1 = Habilita modo de recepción continua
0 = Deshabilita recepción continua
214 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Modo síncrono:
1 = Habilita recepción continua hasta que el bit CREN es borrado
0 = Deshabilita recepción continua

ADDEN Detección de dirección.

Modo asíncrono con 9 bits (RX9 = 1):


1 = Activa la detección de dirección, activa la interrupción y descarga el buffer de recepción
al activarse RSR<8>
0 = Desactiva la detección de dirección, todos los bits son recibidos y el bit 9 puede ser uti-
lizado como bit de paridad

FERR Bit de error de trama.

1 = Error de trama (puede ser actualizado leyendo el registro RCREG y recibir el siguiente dato válido
0 = No hay error de trama

OERR Bit de error de sobrepasamiento.

1 = Error de sobrepasamiento (puede ser borrado escribiendo un 0 en el bit CREN)


0 = No hay error de sobrepasamiento

RX9D Bit 9 del dato recibido (puede ser el bit de paridad).

Figura 9.9. Registro RCSTA para el control de la sección receptora del USART, en modo asíncrono.

En la Figura 9.10 se ofrecen las características más relevantes de los registros que intervienen en
la recepción asíncrona de datos en el USART.

VALOR
VALOR EN EL
DIREC- NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR. RESTO
CIÓN BOR DE
RESETS

8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

1Ah RCREG Registro de Recepción del USART 0000 0000 0000 0000

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

Figura 9.10. Características de interés de los registros que intervienen en la sección receptora del
USART en modo asíncrono.
Programar PIC es fácil

COMUNICACIÓN SERIE CON EL USART

De los dos modos de funcionamiento del USART, la comunicación serie asíncrona es la más utili-
zada. El PIC16F87x incorpora el hardware para comunicarse vía RS-232 con un ordenador tipo PC.
Para ello, el PC deberá emular un terminal con el software apropiado.

Enunciado

El programa que vamos a realizar va a hacer que el PIC se comunique vía serie con un programa ter-
minal que correrá sobre un PC. El PIC esperará a recibir un carácter, lo visualizará en forma bina-
ria sobre LED y lo volverá a transmitir a modo de ECO. La recepción del carácter se controlará me-
diante interrupción.

Esquema eléctrico

En este ejercicio se van a utilizar tres elementos, tal y como se muestra en la Figura 9.11.

1.o Micro’PIC Trainer: en él se alojará el PIC y los LED conectados a la Puerta B serán usados para
mostrar el carácter recibido en forma binaria.
2.o Micro’PIC Trainer Plus: en él se encuentra la circuitería necesaria para comunicar el PIC con el or-
denador vía RS-232.
3.o Ordenador tipo PC: se deberá conectar al Micro’PIC Trainer Plus mediante un cable de comuni-
caciones serie debidamente preparado, esto es, un cable que consta de tres hilos donde un ex-
tremo GND va unido con el otro extremo GND, y los hilos de transmisión (TxD) y recepción (RxD)
de cada extremo deben estar cruzados. Este ordenador funcionará como un terminal de comuni-
caciones empleando el software TERMINAL.EXE.

215
216 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

+5V

10K

In4148

100

RESET
PIC16F873 LEDs
MICRO’PIC TRAINER
1 MCLR#/VPP/THV RB7/PGD 28
2 RA0/AN0 RB6/PGC 27
3 RA1/AN1 RB5 26
4 RA2/AN2/VREF- RB4 25
5 RA3/AN3/VREF+ RB3/PGM 24
6 RB2 23
RA4/T0CKI
7 RB1 22
RA5/AN4/SS#
8 RB0/INT 21
15 pF VSS
9 VDD 20 +5 V
OSC1/CLKIN
10 OSC2/CLKOUT VSS 19
CRISTAL 4 Mhz
11 RC0/T1OSO/T1CKI RC7/RX/DT 18
12 RC1/T1OSI/CCP2 RC6/TX/CK 17
15 pF
13 RC2/CCP1 RC5/SDO 16
14 RC3/SCK/SCL RC4/SDI/SDA 15

CABLE PARA
COMUNICACIÓN SERIE
CIRCUITERÍA PARA
RxD TxD
COMUNICACIÓN SERIE
TxD RxD MICRO’PIC I/O

ORDENADOR

Figura 9.11. Esquema eléctrico del ejercicio propuesto.

Organigrama

Como se muestra en la Figura 9.12, el programa principal de este ejercicio es sencillo, ya que tras
configurar los registros a utilizar sólo hay que dejar al USART en modo escucha y esperar en un bu-
cle a que se genere una interrupción al recibir un carácter desde el PC.

Figura 9.12. Organigrama del ejercicio propuesto.


EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 217

Figura 9.13. Organigrama de tratamiento de interrupción.

En el tratamiento de interrupción se leerá el dato recibido, se mostrará por la Puerta B y se vol-


verá a retransmitir hacia el PC a modo de ECO. Antes de volver se deberá restaurar el señalizador
de interrupción.

Programa comentado

El programa una vez terminado quedará así:

LIST P=16F873 ; Se indica el tipo de


; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE «P16F873.INC» ; Se incluye la definición de
; los registros internos en
; una librería

ORG 0x00 ; Inicio en el Vector de


; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x04 ; Vector de interrupción

; Se transmite vía serie el dato que está en el registro W

TX_DATO bcf PIR1,TXF ; Restaura flag del


; transmisor
218 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

movwf TXREG ; Mueve el byte a


; transmitir al registro
; de transmisión
bsf STATUS,RP0 ; Selecciona banco 1
bcf STATUS, RP1
TX_DAT_W btfss TXSTA,TRMT ; ¿Byte transmitido?
goto TX_DAT_W ; No. Esperar
bcf STATUS,RP0 ; Sí. Vuelta banco 0
return

; Tratamiento de interrupción

INTER btfss PIR1,RCIF ; ¿Interrupción por


; recepción?
goto VOLVER ; No. Falsa interrupción
bcf PIR1,RCIF ; Sí. Reponer flag
movf RCREG,W ; Lectura del dato recibido
movwf PORTB ; Visualización del dato
call TX_DATO ; Transmisión del dato como
; eco
VOLVER retfie

; Comienzo del programa principal

INICIO clrwdt ; Refresca perro guardián


clrf PORTB ; Limpia salidas
clrf PORTC
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
clrf TRISB ; Puerta B como salida
movlw b’10111111’ ; RC7/Rx entrada,
movwf TRISC ; RC6/Tx salida
movlw b’11101111’ ; Predivisor de 128 asociado
movwf OPTION_REG ; al perro guardián
movlw b’00100100’ ; Configuración de USART
movwf TXSTA ; y activación de transmisión
movlw .25 ; 9600 baudios
movwf SPBRG
bsf PIE1,RCIE ; Habilita interrupción en
; recepción
bcf STATUS,RP0 ; Cambio a banco 0

movlw b’10010000’ ; Configuración del USART


movwf RCSTA ; para recepción continua.
; Puesta en On
movlw b’11000000’ ; Habilitación de las
movwf INTCON ; interrupciones en general

BUCLE clrwdt ; Refresca el perro guardián


goto BUCLE
END
EL USART: TRANSMISOR/RECEPTOR SÍNCRONO/ASÍNCRONO SERIE 219

Prueba del programa

Además de las conexiones ya comentadas en el esquema eléctrico, se deberá tener en cuenta


que:

1.o Los jumpers J1-J4 del Micro’PIC Trainer Plus deberán estar en la posición 2-3.
2.o Durante la ejecución, el jumper J7 del Micro’PIC Trainer deberá estar cerrado para habilitar la ba-
rra de LED.
3.o Hay que conectar un extremo del cable serie preparado al conector CN2 del Micro’PIC Trainer
Plus y el otro al canal serie COMx disponible en el PC.

Una vez hecho esto y grabado el programa en el PIC, se ejecutará el programa TERMI-
NAL.EXE desde el PC. Cada tecla que se pulse será recibida por el microcontrolador, que la sa-
cará por los LED y la devolverá al ordenador de modo que pueda verse su eco en el monitor.

El programa de comunicaciones TERMINAL

Se trata de un programa de comunicaciones que funciona bajo MS-DOS o en Windows con ven-
tana MS-DOS, en cualquier ordenador IBM PC/XT/AT o compatible, contenido en un único fi-
chero ejecutable llamado TERMINAL. Su ejecución tiene lugar al teclear la siguiente línea de co-
mandos:

TERMINAL COM=n [BAUD=b] [B=d] [PARIDAD=p]

Donde:
n = 1, 2, 3 o 4 (n.o de canal serie)
b = 75, 150, 300, 600, 1.200, 2.400, 4.800, 9.600 o 19.200 (baudios)
d = 5, 6, 7 u 8 (bits de datos)
s = 1 o 2 (bits de stop)
p = NONE, ODD, EVEN, MARK o SPACE (paridad)

Por defecto : BAUD=9600 B=8 PARIDAD=NONE

Al ejecutar el programa, aparece la pantalla de trabajo que se muestra en la Figura 9.14.


El programa hace que el PC emule a un terminal serie capaz de comunicarse con cualquier otro
dispositivo.
Pulsando las teclas Alt-X, se cancela el programa de comunicación, devolviendo el control al
sistema. Con la tecla F1 se accede a una ventana de ayuda para el manejo del programa TERMI-
NAL. Tras la Figura 9.14 se explica resumidamente la función de cada uno de los comandos eje-
cutables.
220 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 9.14. Pantalla de trabajo del programa TERMINAL.

Alt-E Activa o no el eco local, de modo que cada tecla pulsada se active directamente en la pan-
talla.
Alt-I Cada retorno de carro (CR) que se recibe se convierte o no además en avance de línea
(CRLF).
Alt-O Cada retorno de carro (CR) que se transmite se convierte o no además en avance de línea
(CRLF).
Alt-T Transmite ficheros binarios en formato INTEL por la línea de transmisión. Aparecerá una ven-
tana pidiendo el nombre de fichero a transmitir. Así, el contenido del fichero pasará a la me-
moria RAM del microcontrolador.
Alt-R Recibe por la línea de recepción el contenido de las posiciones de memoria indicadas y lo
guarda en formato INTEL en un fichero cuyo nombre solicita. Se empleará para guardar en
disco el contenido de un área de memoria del microcontrolador.
Alt-B Borra la pantalla del TERMINAL.
Alt-X Sale del programa TERMINAL y retorna al MS-DOS, dándose por terminada la comunicación
con el microcontrolador.
ESC Cierra la ventana de ayuda.
10 Características
y aportaciones
de la gama mejorada

10.1. EL ESPECTACULAR DESARROLLO DE LOS PIC18F

La nueva familia PIC18F fue anunciada por Microchip en julio de 1999 y se presentó como una nue-
va gama de microcontroladores RISC de 8 bits con arquitectura Harvard que incluía los últimos
avances y la mayoría de los periféricos para potenciar miles de aplicaciones centradas en las áreas
de automoción, comunicaciones, ofimática, productos de gran consumo y control industrial.
El objetivo del fabricante era facilitar a sus usuarios de las familias entonces existentes, como
la PIC16F y la PIC12F, su transición a modernos dispositivos, que con una relación precio/presta-
ciones muy competitiva, integraban la mayoría de los recursos necesarios para implementar desa-
rrollos eficientes, de mayor rendimiento y complejidad. Pero esta migración resultó indolora por-
que se aprovecharon todas las inversiones realizadas en hardware y software de las anteriores
familias de PIC.
Con la familia PIC18F Microchip ha resuelto dos grandes metas:

1.o Compatibilidad
a) Manteniendo el núcleo de la nueva familia compatible con el de los PIC16F y sus periféricos.
b) Soportando la compatibilidad del software a nivel de código Ensamblador y de lenguaje C. No
hay compatibilidad a nivel de código Objeto.
2.o Elevado rendimiento
a) Máxima eficiencia del compilador C, que supera en un 50% al de los PIC16F.
b) Elevada productividad que alcanza un rendimiento de 10 MIPS a 10 MHz.

Inicialmente, esta familia nació con cuatro modelos dotados de memoria de programa EPROM
y cuyas características más representativas se muestran en la tabla de la Figura 10.1. De los cuatro
primeros modelos, dos estaban encapsulados con 28 patitas y los otros dos con 40. Pronto la me-
moria EPROM fue reemplazada por la FLASH.
El éxito alcanzado por los microcontroladores de la gama mejorada ha superado todas las ex-
pectativas y en 2006 dispone de una oferta comercial de 80 modelos y una previsión de 41 nuevos
para un futuro inmediato. Los modelos actuales se pueden clasificar en tres grandes categorías.
221
222 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

CARACTERÍSTICAS PIC18C242 PIC18C252 PIC18C442 PIC18C452

FREC. MAX. DC – 40 MHz DC – 40 MHz DC – 40 MHz DC – 40 MHz

MEM. PROG. Bytes 16 K 32 K 16 K 32 K


EPROM (BYTES) Instrucciones 8192 16384 8192 16384

MEM. DATOS (Bytes) 512 1536 512 1536

FUENTES INTERRUPCIÓN 16 16 17 17

PUERTAS E/S A, B, C A, B, C A, B, C, D, E A, B, C, D, E

TEMPORIZADORES 4 4 4 4

CCP 2 2 2 2

COMUNICACIÓN SERIE MSSP, MSSP, MSSP, MSSP,


USART USART USART USART
direccionable direccionable direccionable direccionable

COMUNICACIÓN PARALELO — — PSP PSP

C A/D (10 bits) 5 canales 5 canales 8 canales 8 canales

RESETS POR, BOR POR, BOR POR, BOR POR, BOR


Instrucción Instrucción Instrucción Instrucción
de reset, de reset, de reset, de reset,
Pila llena, Pila llena, Pila llena, Pila llena,
Desbordamiento Desbordamiento Desbordamiento Desbordamiento
pila pila pila pila

TEMPORIZADORES RESET PWRT, OST PWRT, OST PWRT, OST PWRT, OST

PROGRAMACIÓN Sí Sí Sí Sí
CON VOLTAJE BAJO

BOD (Detección de baja tensión) Sí Sí Sí Sí

JUEGO DE INSTRUCCI0NES 77 77 77 77

ENCAPSULADOS DIP 28 DIP 28 DIP 40 DIP 40


SOIC 28 SOIC 28 PLCC 40 PLCC 40
JW 28 JW 28 TQFP 40 TQFP 40
JW 40 JW 40

Figura 10.1. Tabla que recoge las principales características de los cuatro primeros modelos de la
familia PIC18F.

a) PIC18FXXXX, con un rendimiento de 10 MIPS, un voltaje de alimentación comprendido entre 2 y 5,5


V, un juego de 77 instrucciones máquina, la mayoría con una longitud de 16 bits, y un diseño orien-
tado a la programación en lenguaje C. La versión MPLAB C-18 está especializada en esta familia.
En el 2006 la oferta comercial de este tipo de microcontroladores contempla 66 modelos de los
cuales destaca el PIC18F8722 que tiene 64 K palabras de 16 bits de memoria de programa FLASH;
1 KB de memoria de datos EEPROM, 3936 bytes de memoria de datos RAM, 70 líneas de E/S, to-
do ello dentro de un encapsulado de 80 patitas.
b) PIC18XXJXX, caracterizada por tener una tensión de alimentación comprendida entre 2 y 3,6 V.
Existen 14 modelos entre los que destaca el PIC18F87J10 con 64 K palabras de 16 bits de me-
moria de programa FLASH, 3936 bytes de RAM, 68 líneas de E/S y un encapsulado de 80 patitas.
Crecen de memoria EEPROM.
c) PIC18FXXKXX, que se distinguen porque el voltaje de alimentación está comprendido entre 1,8 y
3,6 V y disponen de memoria EEPROM.
CARACTERÍSTICAS Y APORTACIONES DE LA GAMA MEJORADA 223

Con esta gran diversidad de modelos y la puesta a punto de las herramientas hardware y software
necesarias para el desarrollo de proyectos, los microcontroladores de 8 bits de Microchip han con-
seguido mantenerse en la cabeza del ranking mundial en esta categoría durante varios años.
En la Tabla de la Figura 10.2 se detallan las características más interesantes de dos modelos muy
populares de la familia PIC18FXXXX. Uno se le considera el más humilde (PIC18F1220) y el otro
el más poderosos (PIC18F8722).

CARACTERÍSTICAS PIC18F1220 PIC18F8722


FREC.MAX. DC-40MHz DC-40MHz

MEM,PROG. FLASH 2K palabras 64K palabras

MEM.DATOS (Bytes) 256 Bytes 3936 Bytes

MEM DATOS EEPROM 256 Bytes 1KBytes

FUENTES DE INTERRUPCIÓN 16 17

LINEAS E/S 16 70

TEMPORIZADORES 3-16 bits,1-8 bits, 1-WDT 3-16 bits,2-8 bits, 1-WDT

ECCP 1 3

E/S SERIE EUSART 2xEUSART, 2xI2C

ALIMENTACION 2,0-5,5V 2-5,5V

C A/D (10bits) 7 canales, 30 Ksps 16 canales, 100 Ksps

RENDIMIENTO 10MIPS a 10MHz 10MIPS a 10MHz

COMPARADOR ANALÓGICO - 2

TECNOLOGÍA NANOWAT Sí Sí

JUEGO DE INSTRUCCIONES 77 77

ENCAPSULADOS 18P, 1850, 2055, 28ML 80PT

Figura 10.2. Tabla con las principales características de dos modelos extremos en la subfamilia
PIC18FXXXX.

10.2. APORTACIONES ESPECÍFICAS

Los microcontroladores de la gama mejorada tienen una serie de mejoras técnicas que redundan en
un gran rendimiento destacando las 7 siguientes.

1.a Tecnología “nanoWat”


Reduce el consumo de energía considerablemente. El usuario puede activar modos de bajo con-
sumo en cualquier parte del programa, además se puede modificar el modo de ejecución contro-
lando la frecuencia del oscilador en el Timer1 o el oscilador interno R-C. Incluso es posible dete-
ner el funcionamiento de la CPU manteniendo el trabajo de los periféricos en algunos casos
concretos.
224 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

2.a Espacio de direccionamiento lineal


Se puede controlar un espacio de direccionamiento lineal de la memoria de programa de hasta 2
MB. Aunque los dispositivos comerciales actuales sólo alcanzan un tamaño máximo de memoria de
programa FLASH de 64 K palabras de 16 bits, existe un interfaz que se adapta a una memoria ex-
terna de hasta 2 MB que puede alojar instrucciones o datos según las necesidades de la aplicación.
3.a Compatibilidad software
Todos los modelos de la gama mejorada soportan un repertorio de 77 instrucciones máquina, la
mayoría de las cuales tienen una longitud de 16 bits. Sólo hay 4 que tienen un tamaño doble. Ade-
más, casi todas son similares a las empleadas en los PIC de gamas inferiores. Se resaltan algu-
nas novedades:
a) Existen instrucciones que pueden mover información entre dos posiciones de la memoria
de datos.
b) Hay instrucciones que permiten mover información entre posiciones de la memoria de da-
tos y la de programa.
c) Una instrucción multiplica 8x8 bits.
d) Se puede explorar o modificar un bit de un registro o una puerta de E/S con ciertas instruc-
ciones.
4.a Compatibilidad hardware
Independiente de la capacidad de memoria, todos los modelos de la gama mejorada comparten
el mismo conjunto de periféricos, lo que posibilita una rápida y fácil transición entre ellos. La simi-
litud en la distribución de funciones entre las patitas del encapsulado simplifica el cambio de mi-
crocontroladores de 64 patitas por otro con 80.
5.a Orientación al lenguaje C
El aumento en la capacidad de las memorias y en los modos de direccionamiento facilita el trabajo
de los compiladores C. Recursos que han propiciado el uso del lenguaje C han sido los direcciona-
mientos con pre y post incremento/decremento, así como la flexibilidad en el manejo de la Pila.
6.a Autoprogramabilidad
Los PIC18 son capaces de escribir en sus propios espacios de memoria de programa bajo el con-
trol de un software interno. Es factible que una aplicación actualice y modifique los campos del pro-
grama mediante una rutina “bootloader” colocada en la cima de la memoria de programa en el
área protegida denominada “Boot Block”.
7.a Diversidad de periféricos integrados
Entre los múltiples recursos complementarios que integran los PIC18 destacan los módulos de co-
municación disponibles como el USART, SSP, SPI, I2C, etc. También los módulos CCP de Captu-
ra/Comparación/PWM y los conversores AD de hasta 16 canales.

10.3. NOMENCLATURA

En la Figura 10.3 se muestra la función de los diferentes campos que conforman la denominación
técnica de los modelos de la gama mejorada PIC18.
Por ejemplo, el modelo PIC18F 2331 tiene las características que se expresan en la Figura 10.4,
en la que se analizan los campos de su nomenclatura.

10.4. DIAGRAMA DE CONEXIONES

La familia PIC18 dispone dos modelos, el PIC18F1220 y el PIC18F1320, que sólo tienen 18 pati-
tas y cuyo diagrama de conexiones se muestra en la Figura 10.5.
CARACTERÍSTICAS Y APORTACIONES DE LA GAMA MEJORADA 225

TECNOLOGÍA DE MEMORIA
ESPECIFICACIÓN CPU C-OTP
R-ROM
F-FLASH

PIC18VTABCD
ESPECIFICACIÓN VOLTAJE
N/A-Normal
DÍGITOS ARBITRARIOS
L-Baja potencia

a-Encapsulado
0: pines o menos 5:
1: >8-20 pines 6: >44-68 pines
2:>20-28 pines 7:
3: 8:>68-100
4: >28-44 pines 9: >100 o más
b-Tamaño de memoria de programa
0: ROMless 5: 16Kw
1: 1Kw 6: 32Kw
2: 2Kw 7: 64Kw
3: 4Kw 8:128Kw
4: 8Kw 9: 256Kw o más

Figura 10.3. Funciones que representan los diversos campos de la nomenclatura de los dispositivos
de la gama mejorada.

TECNOLOGÍA DE MEMORIA
ESPECIFICACIÓN CPU PIC18 C-OTP
R-ROM
F-FLASH

PIC18 F 2 3 31
ESPECIFICACIÓN VOLTAJE
N/A-Nada (Normal:2-5,5V) DÍGITOS ARBITRARIOS

a-Encapsulado
0: pines o menos 5:
1: >8-20 pines 6: >44-68 pines
2:>20-28 pines 7:
3: 28 pines 8:>68-100
4: >28-44 pines 9: >100 o más
b-Tamaño de memoria de programa
0: ROMless 5: 16Kw
1: 1Kw 6: 32Kw
2: 2Kw 7: 64Kw
3: 4Kw 8:128Kw
4: 8Kw 9: 256Kw o más

Figura 10.4. Significado de los campos de la nomenclatura del modelo PIC18F2331.


226 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

RA2/AN2 1 18 RA1/AN1
RA3/AN3/CMP1/Vrefin 2 17 RA0/AN0
RA4/TOCK1/CMP2 3 16 OSC1/CLKIN/RA7

18 pines
Familia
MCLR/Vpp/RA5/THV 4 15 OSC2/CLKOUT/RA6
Vss 5 14 Vdd
RB0/INT 6 13 RB7/T1OSI
RB1/RX/DT 7 12 RB6/T1OSI/T1CKI
RB2/TX/CK 8 11 RB5
RB3/CCP1 9 10 RB4/PGM

Figura 10.5. Diagrama de conexiones de los dos modelos de la familia PIC18 con 18 patitas.

El diagrama de conexionado de los 26 modelos que disponen de 28 patitas se ofrece en la Figu-


ra 10.6 (arriba). Dos de dichos dispositivos tienen memoria OTP, programable una sola vez, que son
el PIC18C242 y el PIC18C252. Los 24 modelos restantes contienen memoria FLASH. En la parte
de abajo de la Figura 10.6 se presenta el diagrama de conexionado de los 26 modelos existentes con
encapsulado de 40 patitas.

MCLR/Vpp 1 28 RB7/PGD
RA0/AN0 2 27 RB6/PGC
RA1/AN1 3 26 RB5/PGM
RA2/AN2/VRL/Vref- 4 25 RB4
RA3/AN3/VRH/Vref+ 5 24 RB3/CCP2/CANRX
28 pines

RA4/T0CKI
Familia

6 23 RB2/INT2/CANTX
RA5/SS/AN4/AVDD/LVDIN 7 22 RB1/INT1
Vss 8 21 RB0/INT0
OSC1/CLKI 9 20 Vdd
OSC2/CLKO/RA6 10 19 Vss
RC0/T1OSO/T1CKI 11 18 RC7/RX/DT
RC1/T1OS/CCP2I 12 17 RC6/TX/CK
RC2/CCP1 13 16 RC5/SDO/D+
Vref/RC3/SKC/SCL 14 15 RC4/SKI/SDA/D-

MCLR/Vpp 1 40 RB7/PGO/KB14
RA0/AN0 2 39 RB6/PGC/KB12
RA1/AN1 3 38 RB5/PGM/KBI2
RA2/AN2/VRL/vref 4 37 RB4/KBI0
RA3/AN3/VRH/Vref+ 5 36 RB3/CCP2/CANRX
RA4/TOCKI 6 35 RB2/INT2/CANTX
RA5/SS/AN4/AVDD/LVDIN 7 34 RB1/INT1
REO/RD/AN5 8 33 RB0/INT0
40 pines
Familia

RE1/WR/AN6 9 32 Vdd
RE3/CS/AN7 10 31 Vss
Avdd 11 30 RD7/PSP7/PD
Avss 12 29 RD6/PSP6/PC
OSC1/CLKI 13 28 RD5/PSP5/PB
OSC2/CLKO/RA6 14 27 RD4/PSP4/ECC/PA
RC0/T1OSO/T1CKI 15 26 RC7/RX/DT
RC1/T1OSI/CCP2 16 25 RC6/TX/CK
RC2/CCP1 17 24 RC5/SDO/D+
RC3/SCK/SCL 18 23 RC4/SDI/SDA/D-
RD0/PSP0/C1IN+ 19 22 RD3/PSP3/C2IN-
Vref/RD1/PSP1/C1IN- 20 21 RD2/PSP2/C2IN+

Figura 10.6. Diagrama de conexionado de los modelos de la familia PIC18F encapsulados con 28 y
40 patitas.
CARACTERÍSTICAS Y APORTACIONES DE LA GAMA MEJORADA 227

En la Figura 10.7 se muestra el diagrama de conexionado de los modelos PIC18F encapsulados


con 64 patitas.

RE7/CCP

RD1/PSP
RD0/PSP

RD2/PSP
RD3/PSP
RD4/PSP
RD5/PSP
RD6/PSP
RD7/PSP
RE5/P1C
RE6/P1B
RE2/CS
RE3
RE4

Vdd
Vss
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
RE1/WR 1
RE0/RD 2
RG0/CANTX1 3 48 RB0/INT0
RG1/CANTX2 4 47 RB1/INT1
RG2/CANRX 5 46 RB2/INT2
RG3 6 45 RB3/INT3
RG5/MCLR/Vpp 7 44 RB4/KBIO
RG4/P1D 8 43
Vss 9
Familia 42
RB5/KBI1/PGM
RB6/KBI2/PGC
Vdd
RF7/SS
10
11
64 pines 41
40
Vss
OSC2/CLKO/RA6
RF6/AN11/C1N- 12 39 OSC1/CLKI
RF5/AN10/C1N+/CVref 13 38 Vdd
RF4/AN9/C2IN- 14 37 RB7/KBI3/PGD
RF3/AN8/C2IN+ 15 36 RC5/SDO
RF2/AN7/C1OUT 16 35 RC4/SDI/SDA
17 34 RC3/SCK/SCL
18 33 RC2/CCP1/P1A
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
RC0/T1OSO/T13CKI
Vss
Vdd

RC1/T1OSI/CCP2

RC7/RX/DT
RA3/AN3/Vref+

RA4/TOCK
RA2/AN2/Vref-
RA1/AN1
RA0/AN0

RC6/TX/CK
RF1/AN6/C2OUT
RF0/AN5
Avdd
Avss

RA5/AN4/LVDIN

Figura 10.7. Diagrama de conexionado de los modelos PIC18F con 64 patitas.

10.5. ENCAPSULADOS

En la Figura 10.8 se presentan los encapsulados utilizados en la gama mejorada.

Figura 10.8. Diferentes tipos de encapsulados empleados en la familia PIC18F.


11 Arquitectura
interna

11.1. DESCRIPCIÓN GENERAL

Entre los numerosos modelos existentes en la gama mejorada se ha elegido al conjunto de disposi-
tivos que se conocen bajo la denominación PIC18FXX20 al contener casi todos los recursos posi-
bles, así como unas excelentes características técnicas. Aunque Microchip actualiza y mejora todos
sus modelos periódicamente, esta subfamilia consta de 6 miembros destacados: PIC18F6520/6620/
6720/8520/8620/8720. (Figura 11.1.)
Como se deduce de la tabla de la Figura 11.1 el dispositivo PIC18F6520 tiene 32 KB de memo-
ria de programa FLASH y 2.048 bytes de memoria de datos RAM, mientras que el PIC18F8720 al-
canza los 128 KB de memoria FLASH y 3.840 bytes de RAM. El conversor AD de 10 bits en al-
gunos modelos tiene 12 canales y en otros 16.
El número de líneas de E/S está dentro de un rango comprendido entre 52 y 68. Finalmente,
sólo los dispositivos PICC18F8X20 disponen de un interfaz para ampliar externamente la me-
moria.
En la Figura 11.2 se muestra la arquitectura correspondiente a los dispositivos PIC18F8X20.
En la sección del Camino de Datos de la arquitectura correspondiente al esquema de la Figura
11.2 aparece un multiplicador hardware 8 x 8 que actúa de forma independiente de la ALU y se ali-
menta del registro de trabajo WREG y del bus de datos, depositando el resultado del producto en la
pareja de registros PRODH:PRODL. (Figura 11.3.)
Para el conexionado con el mundo exterior estos dispositivos disponen de 68 líneas de E/S re-
partidas en 9 puertas (A, B, C, D, E, F, G, H y J). Todas las líneas de dichas puertas soportan varias
funciones multiplexadas y las puertas D (AD7:AD0), E (AD15:AD8) y H (A19:A16), actúan como
líneas de los buses de datos y direcciones empleadas para la ampliación externa de la memoria del
dispositivo.
La memoria de programa integrada en el chip es de tipo FLASH y según el modelo que se trata
contienen capacidades de 32 KB, 64 KB y 128 KB.
Como memoria de datos hay una zona volátil y rápida de tipo RAM que puede alcanzar los 3.840
bytes y otra independiente, no volátil y de acceso lento, de tipo EEPROM de 1 KB.
229
230 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Entre los recursos más interesantes de este grupo de dispositivos destacan:

Características PIC18F6520 PIC18F6620 PIC18F6720 PIC18F8520 PIC18F8620 PIC18F8720


Frecuencia
DC-40MHz DC-25MHz DC-25MHz DC-40MHz DC-25MHz DC-25MHz
de operación
Memoria
32K 64K 128K 32K 64K 128K
de programa (Bytes)
Memoria
de programa 16384 32768 65536 16384 32768 65536
(Instrucciones)
Mem. de Datos
2048 3840 3840 2048 3840 3840
(Bytes)
Datos EEPROM
1024 1024 1024 1024 1024 1024
(Bytes)
Interfaz
No No No Sí Sí Sí
de memoria externa
Causas
17 17 17 18 18 18
de interrupción
Puertas Puertas Puertas Puertas Puertas Puertas
Puertas E/S
A,B,C,D,E,F,G A,B,C,D,E,F,G A,B,C,D,E,F,G A,B,C,D,E,F,G,H,J A,B,C,D,E,F,G,H,J A,B,C,D,E,F,G,H,J

Temporizadores 5 5 5 5 5 5

Captura/Compara-
5 5 5 5 5 5
ción/Módulos PWM

MSSP, MSSP, MSSP, MSSP, MSSP, MSSP,


Comunicaciones
Direccionable Direccionable Direccionable Direccionable Direccionable Direccionable
Serie
USART (2) USART (2) USART (2) USART (2) USART (2) USART (2)

Comunicaciones
PSP PSP PSP PSP PSP PSP
Paralelo
Conversor 10 bit 12 canales 12 canales 12 canales 16 canales 16 canales 16 canales
Analógico/Digital de entradas de entradas de entradas de entradas de entradas de entradas

POR,BOR, POR,BOR, POR,BOR, POR,BOR, POR,BOR, POR,BOR,


RESET RESET RESET RESET RESET RESET
Instrucción, Instrucción, Instrucción, Instrucción, Instrucción, Instrucción,
Resets y Delays Pila llena, Pila llena, Pila llena, Pila llena, Pila llena, Pila llena,
Sobrepasamiento Sobrepasamiento Sobrepasamiento Sobrepasamiento Sobrepasamiento Sobrepasamiento
de pila de pila de pila de pila de pila de pila
(PWRT,OST) (PWRT,OST) (PWRT,OST) (PWRT,OST) (PWRT,OST) (PWRT,OST)

Detección de voltaje
Sí Sí Sí Sí Sí Sí
bajo programable
Reset programable
Sí Sí Sí Sí Sí Sí
Brown-Out
Set de Instrucciones 77 77 77 77 77 77

Encapsulado 64-pines TQFP 64-pines TQFP 64-pines TQFP 80-pines TQFP 80-pines TQFP 80-pines TQFP

Figura 11.1. Tabla que recoge las principales características de la subfamilia PIC18FXX20.
ARQUITECTURA INTERNA 231

Bus de Datos <8>


PORTA
Puntero a tabla <21>
RA0/AN0
RA1/AN1
8 8 Registro de Datos RA2/AN2/VREF-
Logica de inc/dec RA3/AN3/VREF+
MEMORIA DATOS RA4/T0CKI
PCLATU PCLATH RA5/AN4/SS/LVDIN
20 RA6
Registro de Dirección
21
PCU PCH PCL
12
Contador de Programa
Dirección Datos <12> PORTB
RB0/INT0
31 Niveles de Pila 4 12 4 RB1/INT1
RB2/INT2
BSR FSR0 Acceso
RB3/INT3/CCP2
Interfaz Bus Del Sistema

Registro de dirección FSR1 Banco RB4/KBI0


FSR2 RB5/KBI1/PGM
MEMORIA PROGRAMA RB6/KBI2/PGC
(48/64) Kbytes) RB7/KBI3/PGD
Inc/
Registro de datos dec 12
lógico 8
8
/ Registro de Tabla
PORTC
Decodificador
Registro de ROM de Dirección RC0/T1OSO/T13CKI
Bus de Instrucciones <16> RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
IR RC4/SDI/SDA
RC5/SDO
RC6/TX1/CK1
/8 RC7/RX1/DT1
Señales de
Control y
control del
/ 20 Decodificación
estado de PORTD
de Instrucción
la máquina 3 PRODH PRODL 8
AD15:AD0,A19:A16 RD7/PSP7/AD7:RD0/PSP0/AD0
Multiplicador 8x8
8
8
BITOP W PORTE
8 8 RE0/RD/AD8
RE1/WR/AD9
Temporizador de MPX 8 RE2/CS/AD10
Puesta en marcha RE3/AD11
OSC2/CLK0 8
RE4/AD12
OSC1/CLK1 Generación Temporizador RE5/AD13
de arranque del ALU<8> RE6/AD14
de Tiempos del oscilador RE7/CCP2/AD15
8
Activación del
reset PORTF

Temporizador del RF0/AN5


perro guardián RF1/AN6/C2OUT
RF2/AN7/C1OUT
Desactivación RF3/AN8
del reset RF4/AN9
RF5/AN10/CVREF
RF6/AN11
RF7/SS

MCLR VDD,VSS PORTG


RG0/CCP3
Puerto RG1/TX2/CK2
USART1 USART2 EEPROM RG2/RX2/DT2
Serie de datos RG3/CCP4
Síncrono RG4/CCP5

8 PORTH
4
RH3/AD19:RH0/AD16
RH7/AN15:RH4/AN12
4
PORTJ
BOR Timer0 Timer1 Timer2 Timer3 Timer4 RJ0/ALE
LVD RJ1/OE
RJ2/WRL
8 RJ3/WRH
RJ4/BA0
RJ5/CE
RJ6/LB
10-bit RJ7/UB
Comparador CCP1 CCP2 CCP3 CCP4 CCP5
A/D

Figura 11.2. Arquitectura interna de los dispositivos PIC18F8X20.


232 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

/8

PRODH PRODL

Multiplicador 8x8
8
8
BITOP W
8 8

MPX 8
8

ALU<8>
8

Figura 11.3. Detalle del conexionado del multiplicador 8x8 dentro de la sección del Camino de
Datos.

a) Hasta 5 temporizadores.
b) Conversor AD de 10 bits y hasta 16 canales de entrada.
c) 5 módulos de Captura/Comparación /PWM.
d) Comparadores duales analógicos.
e) Módulo de Detección de Voltaje Bajo programable.
f) Interfaces de comunicación USART (RS-485 y RS-232) , módulo SSP Maestro con capacidad de
SPI e I2C y Puerta Paralela Esclava.
g) Posibilidad de autoprogramación bajo el control del software usando una rutina “bootloader” en la
cima de la memoria de programa.
h) Módulos de gestión de la energía y de la frecuencia de funcionamiento.

11.2. DIAGRAMA DE CONEXIONADO

En la Figura 11.4 se muestra el diagrama de conexionado de las 80 patitas correspondientes a los


modelos PIC18F8520/8620/8720 con encapsulado tipo TQFP.
De las 80 patitas hay 8 destinadas a soportar la aplicación del voltaje de alimentación princi-
pal (VDD y VSS), 2 en cada hilera de patitas. Hay dos patitas para recibir la tensión necesaria para
el funcionamiento de los módulos analógicos (AVDD y AVSS). Una patita se dedica al Reset y a la
tensión alta para la programación de la memoria (MCLR#/VPP); otra se dedica para las frecuen-
cias (OSC1/CLKI). Las 68 patitas restantes corresponden a las líneas de las 9 puertas de E/S que
ARQUITECTURA INTERNA 233

RE7/CCP2/AD1

RD7/PSP7/AD7
RD6/PSP6/AD6
RD5/PSP5/AD5
RD4/PSP4/AD4
RD3/PSP3/AD3
RD2/PSP2/AD2
RD1/PSP1/AD1
RD0/PSP0/AD0
RE2/CS/AD10
RE3/AD11
RE4/AD12
RE5/AD13
RE6/AD14
RH1/A17
RH0/A16

RJ0/ALE
RJ1/OE
Vdd
Vss
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
RH2/A18 1 60 RJ2/WRL
RH3/A19 2 59 RJ3/WRH
RE1/WR/AD9 3 58 RB0/INT0
RE0/RD/AD8 4 57 RB1/INT1
RG0/CCP3 5 56 RB2/INT2
RG1/TX2/CK2 6 55 RB3/INT3/CCP2
RG2/RX2/DT2 7 54 RB4/KBI0
RG3/CCP4
MCLR/Vpp
8
9
PIC18F8520 53
52
RB5/KBI0
RB6/KBI2/PGC
RG4/CCP5 10 PIC18F8620 51 Vss
Vss 11 50 OSC2/CLK0/RA6
Vdd 12 PIC18F8720 49 OSC1/CLK1
RF7/SS 13 48 Vdd
RF6/AN11 14 47 RB7/KBI3/PGD
RF5/AN10/Cvref 15 46 RC5/SDO
RF4/AN9 16 45 RC4/SDI/SDA
RF3/AN8 17 44 RC3/SCK/SCL
RF2/AN7/C1OUT 18 43 RC2/CCP1
RH7/AN15 19 42 RJ7/UB
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
RH6/AN14 20 41 RJ6/LB
RA3/AN3/Vref+
RH5/AN13
RH4/AN12

RF0/AN5
A Vdd

RA2/AN2/Vref-
RF1/AN6/C2OUT

A Vss

RA1/AN1
RA0/AN0
Vss
Vdd
RA5/AN4/LVDIN
RA4/TOCK1
RC1/T1OSI/CCP2
RC0/T1OSO/T13CK1
RC6/TX1/CK1

RJ4/BA0
RJ5/CE
RC7/RX1/DT1

Nota:
1.-CCP2 es multiplexado con RC1 cuando CCP2MX es puesto a uno (valor ‘set’)
2.-CCP2 es multiplexado por defecto con RE7 cuando el dispositivo es configurado como microcontrolador
3.-PSP está disponible sólo en modo microcontrolador

Figura 11.4. Diagrama de conexionado de los dispositivos PIC18F8520/8620/8720 de 80 patitas con


encapsulado tipo TQFP.

siempre tienen multiplexadas otras funciones, que en general sirven para controlar el trabajo de los
periféricos integrados.

11.3. CONFIGURACIÓN DEL OSCILADOR

11.3.1. Tipos de oscilador

Los PIC18FXX20 pueden operar con ocho tipos de oscilador. Para configurarlos se utilizan 3 bits:
FOSC2, FOSC1, FOSC0, que sirven para seleccionar el tipo de oscilador que se dispondrá.
234 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1. LP, Cristal baja potencia


2. XT, Cristal
3. HS, Cristal de alta velocidad/Resonador
4. HS+PLL, Cristal de alta velocidad con PLL activado
5. RC, Resistencia Externa
6. RCIO, Resistencia Externa con bit E/S activado
7. EC, Reloj Externo
8. ECIO, Reloj Externo con bit E/S activado

Adicionalmente, hay otros PIC como el PIC18F1220 o el PIC18F1320 que tienen 2 tipos más de
osciladores:

1. INTIO1, Oscilador Interno con Fosc/4 como salida en RA6 y E/S en RA7
2. INTIO2, Oscilador Interno con E/S en RA6 y RA7

A continuación se analizan los 4 primeros, que son los más utilizados.

11.3.2. El oscilador de cristal

En los tipos de oscilador XT, LP, HS o HSPLL, el cristal de cuarzo se conecta a las patitas OSC1 y
OSC2 para establecer la oscilación. La Figura 11.5 muestra el conexionado de dicho cristal.

Figura 11.5. Conexionado del cristal de cuarzo del oscilador.

Las frecuencias de trabajo de cada tipo viene expresada a continuación:

MODO FREQ C1 C2
32 kHz
LP 15-22 pF 15-22 pF
200 kHz
1 MHz
XT 15-22 pF 15-22 pF
4 MHz
4 MHz
HS 8 MHz 15-22 pF 15-22 pF
20 MHz
ARQUITECTURA INTERNA 235

11.3.3. Selección del oscilador

Los PIC18FXX20 incluyen una característica que permite que el reloj del sistema cambie del osci-
lador principal a un reloj de baja frecuencia. Para los PIC18FXX20 este reloj alternativo es el osci-
lador del Timer1.
Si el oscilador del Timer1 ha sido activado y un oscilador de baja frecuencia (32kHz) ha sido co-
nectado a los bornes del Timer1, el dispositivo puede cambiar a un modo de trabajo de baja energía.
Esta característica de seleccionar el oscilador se activa poniendo a 1 el bit OSCSEN del registro
CONFIG1H.

11.3.4. El registro OSCCON

La selección de la fuente del oscilador se realiza mediante software, programando el registro


OSCCON.

REGISTRO OSCCON

— — — — — — — SCS

7 0

SCS: Bit de selección del reloj


Cuando el bit de Configuración OSCSEN = 0 y T1OSCEN = 1
1 = Cambia al oscilador del Timer1
0 = Usa el oscilador principal.
Cuando OSCSEN y T1OSCEN están en otros estados, el bit SCS esta forzado a 0.

El bit SCS se pondrá a 0 en cualquier tipo de Reset.

El oscilador del Timer1 debe ser activado y estar funcionando para que se pueda elegir la fuen-
te del reloj. El Timer1 se activa poniendo a 1 el bit T1OSCEN del registro T1CON. Si el Timer1
no está activado el bit SCS del registro OSCCON será ignorado y el oscilador principal seguirá
funcionando.

11.3.5. Otros registros de configuración

REGISTRO CONFIG1H

— — OSCSEN# — — FOSC2 FOSC1 FOSC0

7 0
236 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

OSCSEN: Bit de activación de selección del tipo de oscilador


1 = La selección de oscilador está desactivada. El oscilador princi pal es el que funciona.
0 = Opción de selección de reloj de la oscilación del Timer 1

FOSC2:FOSC0: Bits de selección de oscilador


111 = Oscilador RC con OSC2 configurado como RA6
110 = Oscilador HS con PLL, con frecuencia = 4 x Fosc
101 = Oscilador EC con OSC2 configurado como RA6
100 = Oscilador EC con OSC2 configurado como divisor entre 4
011 = Oscilador RC con OSC2 configurado como divisor entre 4
010 = Oscilador HS
001 = Oscilador XT
000 = Oscilador LP

A continuación se muestra la distribución de los bits del registro T1CON que controla el fun-
cionamiento del Timer1.

REGISTRO T1CON

RD16 — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

7 0

T1CKPS1:T1CKPS0: Bits de selección del predivisor de frecuencia


11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1

T1OSCEN: Bit de activación del oscilador del Timer1


1 = Oscilador del Timer1 activado.
0 = Oscilador del Timer1 desactivado.

TMR1CS: Bit de selección del reloj del Timer1


1 = Reloj externo en la patita RC0/T1OSO/T13CKI RC
0 = Reloj interno

TMR1ON: Bit de activación del Timer1


1 = Timer1 activado.
0 = Timer1 detenido.
12 La memoria
de datos

12.1. ORGANIZACIÓN DEL ESPACIO DE DATOS

La memoria de datos SRAM puede alcanzar un tamaño de 4 KB disponiendo de 12 bits para direc-
cionar a sus posiciones. El mapa de memoria se divide en 16 bancos de 256 bytes cada uno. Para
seleccionar el banco a acceder se utilizan los 4 bits de menos peso del Registro de Selección de Ban-
co (BSR<3:0>). Los 4 bits de más peso de BSR no están implementados. Para cargar un valor lite-
ral en el registro BSR se utiliza la instrucción MOVLB. (Figura 12.1.)

000
….

GPR Banco 0

0FF
100

GPR Banco 1

1FF
200

Selección del banco GPR Banco 2

4 2FF

...
F00
REGISTO BSR
SFR Banco 15

FFF

Figura 12.1. El espacio de la memoria de datos se organiza en 16 bancos de 256 bytes cada uno.
La selección del banco se lleva a cabo con los 4 bits de menos peso del registro BSR.

237
238 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

En la memoria de datos existen posiciones que actúan como Registros de Propósito General
(GPR) en los que se puede depositar todo tipo de información y operandos. Los GPR comienzan
desde la dirección inferior (0x000) del Banco 0 y se expansionan hacia las direcciones superiores.
Los Registros Específicos de Control (SFR) actúan como registros de control de la CPU y de los pe-
riféricos, comenzando desde la posición superior (0xFFF) del Banco 15 y extendiéndose hacia las
direcciones inferiores. Las posiciones de la memoria de datos que no están implementadas física-
mente se leen como 0.
Los registros SFR se clasifican en dos grupos, uno de los cuales contiene aquéllos que gobier-
nan el funcionamiento de la CPU y el otro los que regulan el comportamiento de los periféricos. En
la Figura 12.2 se muestra la distribución de los SFR en el Banco 15.

FFFh TOSU FDFh INDF2 (3) FBFh CCPR1H F9Fh IPR1


FFEh TOSH FDEh POSTINC2 (3) FBEh CCPR1L F9Eh PIR1
FFDh TOSL FDDh POSTDEC2 (3) FBDh CCP1CON F9Dh PIE
FFCh STKPTR FDCh PREINC2 (3) FBCh CCPR2H F9Ch MEMCON(2)
FFBh PCLATU FDBh PLUSW2 (3) FBBh CCPR2L F9Bh __(1)
FFAh PCLATH FDAh FSR2H FBAh CCP2CON F9Ah TRISJ
FF9h PCL FD9h FSR2L FB9h CCPR3H F99h TRISH
FF8h TBLPTRU FD8h STATUS FB8h CCPR3L F98h TRISG
FF7h TBLPTRH FD7h TMR0H FB7h CCP3CON F97h TRISF
FF6h TBLPTRL FD6h TMR0L FB6h __(1) F96h TRISE
FF5h TABLAT FD5h T0CON FB5h CVRCON F95h TRISD
FF4h PRODH FD4h __(1) FB4h CMCON F94h TRISC
FF3h PRODL FD3h OSCCON FB3h TMR3H F93h TRISB
FF2h INTCON FD2h LVDCON FB2h TMR3L F92h TRISA
FF1h INTCON2 FD1h WDTCON FB1h T3CON F91h LATJ
FF0h INTCON3 FD0h RCON FB0h PSPCON F90h LATH
FEFh INDF0 (3) FCFh TMR1H FAFh SPBRG1 F8Fh LATG
FEEh POSTINC0 (3) FCEh TMR1L FAEh RCREG1 F8Eh LATF
FEDh POSTDEC0 (3) FCDh T1CON FADh TXREG1 F8Dh LATE
FECh PREINCO0(3) FCCh TMR2 FACh TXSTA1 F8Ch LATD
FEBh PLUSW0 (3) FCBh PR2 FABh RCSTA1 F8Bh LATC
FEAh FSR0H FCAh T2CON FAAh EEADRH F8Ah LATB
FE9h FSR0L FC9h SSPBUF FA9h EEADR F89h LATA
FE8h WREG FC8h SSPADD FA8h EEDATA F88h PORTJ
FE7h INDF1 (3) FC7h SSPSTAT FA7h EECON2 F87h PORTH
FE6h POSTINC1 (3) FC6h SSPCON1 FA6h EECON1 F86h PORTG
FE5h POSTDEC1 (3) FC5h SSPCON2 FA5h IPR3 F85h PORTF
FE4h PREINCC1 (3) FC4h ADRESH FA4h PIR3 F84h PORTE
FE3h PLUSW1 (3) FC3h ADRESL FA3h PIE3 F83h PORTD
FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC
FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB
FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA
LA MEMORIA DE DATOS 239

F7Fh __(1) F5Fh __(1) F3Fh __(1) F1Fh __(1)


F7Eh __(1) F5Eh __(1) F3Eh __(1) F1Eh __(1)
F7Dh __(1) F5Dh __(1) F3Dh __(1) F1Dh __(1)
F7Ch __(1) F5Ch __(1) F3Ch __(1) F1Ch __(1)
F7Bh __(1) F5Bh __(1) F3Bh __(1) F1Bh __(1)
F7Ah __(1) F5Ah __(1) F3Ah __(1) F1Ah __(1)
F79h __(1) F59h __(1) F39h __(1) F19h __(1)
F78h TMR4 F58h __(1) F38h __(1) F18h __(1)
F77h PR4 F57h __(1) F37h __(1) F17h __(1)
F76h T4CON F56h __(1) F36h __(1) F16h __(1)
F75h CCPR4H F55h __(1) F35h __(1) F15h __(1)
F74h CCPR4L F54h __(1) F34h __(1) F14h __(1)
F73h CCP4CON F53h __(1) F33h __(1) F13h __(1)
F72h CCPR5H F52h __(1) F32h __(1) F12h __(1)
F71h CCPR5L F51h __(1) F31h __(1) F11h __(1)
F70h CCP5CON F50h __(1) F30h __(1) F10h __(1)
F6Fh SPBRG2 F4Fh __(1) F2Fh __(1) F0Fh __(1)
F6Eh RCREG2 F4Eh __(1) F2Eh __(1) F0Eh __(1)
F6Dh TXREG2 F4Dh __(1) F2Dh __(1) F0Dh __(1)
F6Ch TXSTA2 F4Ch __(1) F2Ch __(1) F0Ch __(1)
F6Bh RCSTA2 F4Bh __(1) F2Bh __(1) F0Bh __(1)
F6Ah __(1) F4Ah __(1) F2Ah __(1) F0Ah __(1)
F69h __(1) F49h __(1) F29h __(1) F09h __(1)
F68h __(1) F48h __(1) F28h __(1) F08h __(1)
F67h __(1) F47h __(1) F27h __(1) F07h __(1)
F66h __(1) F46h __(1) F26h __(1) F06h __(1)
F65h __(1) F45h __(1) F25h __(1) F05h __(1)
F64h __(1) F44h __(1) F24h __(1) F04h __(1)
F63h __(1) F43h __(1) F23h __(1) F03h __(1)
F62h __(1) F42h __(1) F22h __(1) F02h __(1)
F61h __(1) F41h __(1) F21h __(1) F01h __(1)
F60h __(1) F40h __(1) F20h __(1) F00h __(1)

Nota: 1: Registros no implementados son leídos como ‘0’


2: Registro no disponible en dispositivos PIC18F6X20
3: No es un registro físico

Figura 12.2. Distribución de los registros SFR en las posiciones del Banco 15 de la memoria de datos.

12.2. MODOS DE DIRECCIONAMIENTO

Existen tres maneras de acceder a la información guardada en la memoria de datos.

1.a Direccionamiento Directo.


2.a Direccionamiento Indirecto.
3.a Acceso a Banco.
240 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

12.2.1 Modo de direccionamiento directo

Los 12 bits que forman la dirección completa de la posición a acceder en la memoria de datos se ob-
tienen de los 4 bits de más peso del registro BSR, que seleccionan el Banco, y los 8 bits de menos
peso del código binario de la instrucción que seleccionan el byte dentro del Banco. En la Figura 12.3
se ofrece la estructura general de las instrucciones que utilizan el direccionamiento directo.

CÓDIGO DE OPERACIÓN d a F F F F F F F F

15 7 0

Figura 12.3. Estructura del código binario de una instrucción con direccionamiento directo.

El significado de los campos de la Figura 12.3 es el siguiente:

● F: Son los 8 bits que seleccionan una posición en un Banco.


● d: Destino (si d = 1 el destino es la dirección de memoria y si d = 0 es el registro W).
● a: Si vale 1 se emplea el Acceso a Banco y si vale 0 se usa el direccionamiento directo o indirecto.

En la Figura 12.4 se muestra gráficamente la forma de seleccionar el Banco con los bits
BSR<3:0> y la dirección en dicho Banco con los bits F del código máquina de la instrucción.

BSR <3:0>
7 0
F F F F F F F F
Selección de Byte

Selección de banco
8
4

000 100 200 F00

0FF 1FF 2FF FFF


Banco 0 Banco 1 Banco 3 Banco 15

Figura 12.4. Selección de la posición a acceder en el direccionamiento directo.


LA MEMORIA DE DATOS 241

12.2.2. Modo de direccionamiento indirecto

Requiere el empleo del registro FSRn y el correspondiente INDFn. Cada registro FSRn guarda una
dirección de 12 bits completa, que direcciona la memoria de datos sin tener en cuenta la división en
bancos. Como el registro FSRn está en la memoria de datos, su contenido puede modificarse por
programa permitiendo la organización y manejo de tablas y pilas.
Los registros INDFn no están implementados físicamente y cuando se aplica el direccionamien-
to indirecto en su lugar se manejan automáticamente los valores almacenados en los registros FSRn,
que son tres:

1.o FSR0H:FSR0L, que conforman el registro FSR0


2.o FSR1H:FSR1L, que conforman al registro FSR1
3.o FSR2H:FSR2L, que conforman al registro FSR2

También hay tres registros INDFn aunque no estén físicamente implementados. Leyendo o es-
cribiendo a estos registros se activa el direccionamiento indirecto, pero manejando los valores de los
registros FSRn correspondientes. Si se escribe un valor con una instrucción en el registro INDF1,
en realidad dicho valor se escribe en FSR1. La lectura de INDF2 corresponde con la posición que
está direccionada por FSR2.
Se propone un ejemplo sobre el empleo del direccionamiento indirecto.

EJEMPLO

Se desea borrar todas las posiciones del Banco 3 con el mínimo de instrucciones y usando el direc-
cionamiento indirecto.

LFSR FSR0, 0x300 ; FSR0 0x300


SIGUIENTE CLRF INDF0 ; Borra INDF0 que es la dirección apuntada
; por FSR0 y luego incrementa el puntero
BTFSS FSR0H ; ¿Todos los bits de FSR0H valen 1?
GOTO SIGUIENTE ; No, y pasa a borrar la siguiente posición del Banco 3

Al efectuar un acceso por direccionamiento indirecto el registro FSRn asociado al INDFn que se
maneja puede post-incrementarse, post-decrementarse, pre-incrementarse, sumarle un offset conte-
nido en WREG, o no modificar su valor. Los incrementos y decrementos afectan a los 12 bits del
FSRn pero no a los señalizadores del registro de estado.

12.2.3. Acceso a Banco

Este procedimiento de acceso a la memoria de datos se basa en una mejora estructural de la CPU que
permite acceder en un solo ciclo a las posiciones más importantes de las zonas GPR y SFR. Opti-
miza el código generado por el Compilador de C y es muy útil en los programas escritos en En-
samblador para manejar valores intermedios, variables locales de subrutinas y para la obtención rá-
pida de valores de datos o de registros SFR.
242 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

0x000

15 11 0 12
FSR n DIRECCIÓN

MEMORIA DE DATOS 4 KB

0xFFF

Figura 12.5. Funcionamiento del direccionamiento indirecto.

El Acceso a Banco funciona con los 96 bytes iniciales GPR del Banco 0 y los 160 bytes de di-
recciones más altas correspondientes a registros SFR del Banco 15, que forman un Banco especial
de 256 bytes. (Figura 12.6.)

0x000
….

GPR
96 bytes
0x05F
Banco 0 0x05F

0x0FF

Banco 1
0x00
GPR
BANCO 0x5F
ESPECIAL 0x60
SFR
0xFF
...

0xF00
0xF60

Banco 15 SFR
160 bytes
0xFFF

Figura 12.6. En el Acceso a Banco se construye un Banco formado por los 96 bytes iniciales GPR del
Banco 0 y los 160 bytes finales SFR del Banco 15.
LA MEMORIA DE DATOS 243

Para que funcione este modo de direccionado es preciso que el bit “a” del código binario de la
instrucción valga 1 (Figura 12.3).
Con este procedimiento se ignoran los bits BSR<3:0> de selección de Banco y sólo se usan
los 8 bits de menos peso (“F”) del código binario de la instrucción para acceder a una posición
de un Banco especial formado por los 96 bytes iniciales del Banco 0 y los 160 finales del Ban-
co 15.

12.3. EL REGISTRO DE ESTADO (SR)

Contiene los señalizadores que indican las características especiales que se han producido en la
última operación aritmética generada por la ALU. Se puede manejar como el registro destino de
cualquier instrucción, pero en tal caso la escritura está prohibida en los bits Z, DC, C, OV y N.
Por ejemplo, la instrucción CLR STATUS pone a 0 los tres bits de más peso del registro SR, po-
ne a 1 el señalizador Z y no modifica el valor de los restantes señalizadores (000u u1uu). (Figu-
ra 12.7.)

REGISTRO DE ESTADO

— — — N OV Z DC C

7 0
Figura 12.7. Estructura interna del Registro de Estado.

12.4. EL REGISTRO DE CONTROL DEL RESET (RCON)

Contiene los señalizadores que permiten conocer la causa que ha provocado un Reset. Es un regis-
tro de lectura y escritura. (Figura 12.8.)

REGISTRO DE CONTOL DE RESET (RCON)

IPEN — — RI# TO# PD# POR# BOR#

7 0
Figura 12.8. Estructura interna del Registro de Control del Reset.

La misión de los bits de RCON es la siguiente:

IPEN: Cuando vale 1 permite trabajar a las interrupciones con niveles de prioridad y cuando vale 0 los
prohibe.

RI#: Cuando vale 0 se ha ejecutado la instrucción RESET y se ha provocado una reinicialización al dis-
positivo. Cuando vale 0 no ha pasado eso.
244 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

TO#: Si vale 0 se ha producido un Reset por desbordamiento del Perro Guardián. Si vale 1 no se ha
desbordado el Perro Guardián.

PD#: Si Vale 0 se ha ejecutado la instrucción SLEEP.

POR#: Si Vale 0 se ha producido un Reset al conectar la tensión de alimentación al microcontrolador.

BOR#: Si vale 0 se ha generado un Reset por bajada de la tensión de alimentación.

12.5. LA MEMORIA EEPROM

La memoria EEPROM es una memoria no volátil, leíble y escribible. Tiene una capacidad de 1
KB en un rango de direcciones comprendidas entre 000h y 3FFh. No es directamente mapeable
y se direcciona indirectamente mediante unos registros especiales SFR, que se citan a continua-
ción:

● EECON1
● EECON2
● EEDATA
● EEADRH
● EEADR

Cuando se realiza una operación de lectura o escritura en la EEPROM, el registro EEDATA guar-
da los 8 bits que que se leen o van a escribirse. EADDR y EADDRH guardan la dirección de la me-
moria a acceder.
Antes de escribir un dato, se borra lo que estaba previamente guardado en esa dirección. El tiem-
po de escritura variará en función del voltaje y la temperatura del chip.

12.5.1. Los registros EEADR y EEADRH

Este par de registros pueden direccionar hasta un máximo de 1024 bytes de datos EEPROM mane-
jando direcciones de 10 bits. Los 8 bits menos significativos de la dirección se guardan en EEADR
mientras que los 2 más significativos se guardan en EEADRH. Los 6 bits más significativos de EE-
ADRH no se usan y valen 0.

12.5.2. Los registros EECON1 y EECON2

EECON1 es el registro de control para acceder a las memorias EEPROM y Flash. (Figura 12.8.)
Sin embargo, EECON2 no es un registro físico. Una lectura sobre EECON2 leerá todo ceros ya
que se utiliza exclusivamente en la secuencia de escritura como un registro de seguridad.
LA MEMORIA DE DATOS 245

Los bits de control RD y WR inician la operación de lectura y escritura respectivamente. Pero


estos bits, por software, no pueden ser puestos a 0, sólo se puede “activar” a 1, poniéndose automá-
ticamente a 0 cuando se termina la operación de lectura o escritura. La imposibilidad de poner a 0
el bit WR previene finalizaciones accidentales o prematuras de una operación de escritura.
El bit WREN, cuando se activa, permite realizar operaciones de escritura. Cuando se inicializa
el procesador, el bit WREN está a 0. El bit WRERR es un bit que se pone a 1 cuando una operación
de escritura es interrumpida por un Reset en MLCR o por el WatchDog durante una operación nor-
mal. En estas situaciones, cuando WERR = 1, es necesario volver a cargar los registros EEDATA y
EEADR ya que cuando se produce un Reset se ponen automáticamente a 0.
El bit flag EEIF en el registro PIR2, se activará cuando ha finalizado una escritura y se debe po-
ner a 0 mediante software.

REGISTRO EECON1

EEPGD CFGS — FREE WRERR WREN WR RD

7 0

Figura 12.9. Estructura interna del registro EECON1.

EEPGD: Selecciona el acceso a la memoria EEPROM o la memoria Flash


1 = Accede a la memoria FLASH.
0 = Accede a la memoria EEPROM.
CFGS: Bit de selección de configuración o de la memoria EEPROM/Flash
1 = Accede a los registros de configuración.
0 = Accede a la memoria EEPROM o a la Flash.
FREE: Bit de activación de borrado de una fila de Flash
1 = Borra una fila de la memoria de programa direccionada por TBLPTR en el siguiente co-
mando WR.
0 = Permite sólo escritura.
WRERR: Bit de error de la memoria EEPROM/Flash
1 = Una operación de escritura ha terminado prematuramente, ya sea por MCLR# o por
reset del WatchDog Timer. Cuando se produce este error los bits EEPGD y FREE no se ponen a 0.
0 = La escritura se ha terminado.
WREN: Bit de activación de la escritura en la EEPROM/Flash
1 = Permite escribir en la memoria Flash/EEPROM.
0 = No permite escribir en la memoria Flash/EEPROM.
WR: Bit de escritura
1 = Inicia el ciclo de borrado y escritura en la memoria EEPROM, o el ciclo de borrado y
escritura en la memoria de programa. El bit WR no se puede poner a 0 por software.
0 = El ciclo de escritura ha terminado.
RD: Bit de Lectura
1 = Inicia una lectura de la EEPROM/Flash. Este bit sólo puede ser puesto a 1, a 0 se pondrá
automáticamente por hardware cuando termine la lectura. RD no puede estar a 1 si EEPGD = 1.
0 = No inicia la lectura.
246 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

VALOR
NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR,
BOR
INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000
Registro de la Dirección
EEADRH — — — — — — ---- --00
alta de la EEPROM
EEADR Registro de direcciones de la EEPROM 0000 0000

EEDATA Registro de datos de la EEPROM 0000 0000

EECON2 Registro 2 de configuración de la EEPROM (no físico) ---- ----


EECON1 EEPGD CFGS — FREE WRERR WREN WR RD xx-0 x000
IPR2 — CMIP — EEIP BCLIP LVDIP TMR3IP CCP2IP -1-1 1111
PIR2 — CMIF — EEIF BCLIF LVDIF TMR3IF CCP2IF -0-0 0000
PIE2 — CMIE — EEIE BCLIE LVDIE TMR3IE CCP2IE -0-0 0000

Figura 12.10. Principales registros de control de las memorias EEPROM y Flash.

12.5.3. Lectura de la memoria EEPROM

Para leer un dato de una posición de memoria hay que escribir la dirección en el par de registros EE-
ADRH:EEADR, poner a 0 los bits EEPGD y CFGS del registro EECON1 y poner a 1 el bit RD del
mencionado registro. El dato estará disponible en el siguiente ciclo de instrucción en el registro EE-
DATA, que guardará este valor hasta la siguiente operación de lectura, o hasta que se escriba sobre él.

EJEMPLO

MOVLW DATA_EE_ADDRH ;
MOVWF EEADRH ; Se guarda la parte alta de la dirección de
; memoria.

MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Parte baja de la dirección de memoria

BCF EECON1, EEPGD ; Se apunta a la memoria de datos.

BCF EECON1, CFGS ; Se accede a la EEPROM.

BSF EECON1, RD ; Se lee de la EEPROM.

MOVF EEDATA, W; ; W = EEDATA

12.5.4. Escritura de la memoria EEPROM

Para escribir en una dirección de la memoria EEPROM de datos, primero la dirección debe estar
escrita en el par de registros EEADRH:EEADR y el dato en EEDATA.
Para iniciar la escritura hay que guardar previamente los datos 55h y AAh en el registro de
control EECON2, como medida de seguridad.
LA MEMORIA DE DATOS 247

Adicionalmente, el bit WREN del registro EECON1 debe estar a 1 para permitir la escritura. Es-
te mecanismo previene de escrituras accidentales o del mal uso del código. El bit WREN debería
mantenerse a 0 en todo momento, excepto cuando se está escribiendo, ya que no puede ser desacti-
vado por hardware. Después de que se haya iniciado la secuencia de escritura EECON1, EEADRH,
EEADR y EEDATA no pueden ser modificados.
El bit WR no se puede activar a menos que WREN esté a 1. Ambos bits no pueden ponerse a 1
en la misma instrucción.
Al final del ciclo de escritura WR se pondrá a 0 automáticamente por hardware y el señaliza-
dor de finalización de escritura de la EEPROM (EEIF) del registro PIR2 se pondrá a 1. El usuario
poniendo a 1 el bit EEIE del registro PIE2 puede habilitar que se genere una interrupción cuando
termine la escritura de la EEPROM o Flash.

EJEMPLO

MOVLW DATA_EE_ADDRH ;
MOVWF EEADRH ; Se guarda la parte alta de la dirección de
; memoria.
MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Parte baja de la dirección de memoria

MOVLW DATA_EE_DATA ;
MOVWF EEDATA ; Dato a escribir

BCF EECON1, EEPGD ; Se apunta a la memoria de datos.

BCF EECON1, CFGS ; Se accede a la EEPROM.

BSF EECON1, WREN ; Se permite la escritura.


BCF INTCON, GIE ; Se desactivan las interrupciones

; Secuencia obligatoria de seguridad


MOVLW 55h ; Escribir 55h
MOVWF EECON2 ;
MOVLW AAh ; Escribir AAh
MOVWF EECON2

BSF EECON1, WR ; WR=1 para empezar a escribir


BSF INTCON, GIE ; Se activan las interrupciones.

; Código de finalización.
BCF EECON1, WREN ; Se prohíbe la escritura
13 La memoria
de programa

13.1. ORGANIZACIÓN DE LA MEMORIA DE PROGRAMA

La memoria de programa de la subfamilia PIC18F8X20 es de tipo FLASH y contempla un espacio


de 2 MB direccionable por bytes a través del Contador de Programa (PC) de 21 bits. En la Figura
13.1 se muestra el espacio de la memoria de programa con las direcciones más importantes junto al
Contador de Programa y la Pila de 31 niveles de profundidad. Cada instrucción tiene una longitud
de 16 bits y en consecuencia su dirección siempre debe ser par.

16 0
0x000000
VECTOR RESET 0x000001

0x000008
ALTA PRIORIDAD
TABLA DE VECTORES
INTERRUPCIÓN
2 MB = 1MW BAJA PRIORIDAD
0x000018
MEMORIA DE PROGRAMA 20 0
(CAPACIDAD DEPENDIENTE DEL PC
MODELO) 21
DIRECCIÓN
21

20 0
SE LEE 0 NIVEL 1
NO IMPLEMENTADA NIVEL 2
0x200000

... PILA

NIVEL 31

Figura 13.1. Espacio de la memoria de programa con las direcciones más interesantes. Cada
instrucción ocupa 2 bytes.

249
250 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

La memoria FLASH puede ser leída, escrita y borrada durante el funcionamiento del dispositi-
vo siempre que sea correcta la tensión de alimentación VDD. La lectura se efectúa sobre un byte en
cada operación, la escritura en bloques de 8 bytes y el borrado sobre bloques de 64 bytes. Es posi-
ble leer y escribir posiciones de la memoria FLASH cuando se está ejecutando el programa del
usuario mediante la utilización de “bootloader”. La memoria FLASH consta de un espacio para el
usuario donde deposita sus programas y otros con los registros de configuración.

13.2 OPERACIONES DE LECTURA Y ESCRITURA DE TABLA

Para leer y escribir la memoria de programa existen dos instrucciones que permiten mover bytes bi-
direccionalmente entre el espacio de la memoria de programa y el de la de datos.

TBLRD: Lectura de Tabla


TBLWT: Escritura de Tabla

Como las posiciones de la memoria de programa son de 16 bits y las de datos de 8, las transfe-
rencias entre ambas se realizan a través de un registro intermedio de 8 bits llamado TABLAT. Así en
las operaciones de Lectura de Tabla un byte de la memoria de programa direccionado por el registro
Puntero de Tabla (TBLPTR) se carga en el registro TABLAT, como se muestra en la Figura 13.2.

23 PUNTERO DE TABLA 0 MEMORIA DE PROGRAMA


TBLPTRU TBLPTRH TBLPTRL
FLASH

15 0 REGISTO TABLA
(TBLPTR)
TABLAT
DIRECCIÓN
7 0

Figura 13.2. La operación de Lectura de Tabla (TBLRD) lee un byte de la memoria de programa y lo
carga en TABLAT.

La operación de Escritura de Tabla almacena un byte desde la memoria de datos en uno de los 8
registros de mantenimiento de la memoria de programa a través de TABLAT. El bloque mínimo de
escritura es de 8 bytes. (Figura 13.3.)

13.3. LOS REGISTROS DE CONTROL

Para ejecutar las operaciones de Tabla con las instrucciones TBLRD y TBLWT se precisa el correcto
manejo y programación de 4 registros de control:
LA MEMORIA DE PROGRAMA 251

23 PUNTERO DE TABLA 0 MEMORIA DE PROGRAMA


15 REGISTROS MANTENIMIENTO 0
TBLPTRU TBLPTRH TBLPTRL
FLASH

REGISTO TABLA
(TBLPTR)
TABLAT
DIRECCIÓN 7 0

Figura 13.3. El Puntero de Tabla (TBLPTR) apunta la dirección donde se escribe TABLAT. Los 3 bits de
menos peso de TBLPTRL seleccionan el registro a acceder.

● TABLAT
● TBLPTR
● EECON1
● EECON2

13.3.1. TABLAT

Es un registro de 8 bits ubicado en el espacio SFR de la memoria de datos que se usa para contener
la información de 8 bits que se transfiere entre la memoria de programa y la de datos.

13.3.2. TBLPTR

Es el Puntero de Tabla que direcciona un byte en la memoria de programa. Tiene 24 bits que lo con-
figuran 3 registros situados en el espacio SFR:

● TBLPTRU: Byte superior del Puntero de Tabla


● TBLPTRH: Byte alto del Puntero de Tabla
● TBLPTRL: Byte bajo del Puntero de Tabla

Los 22 bits de menos peso del conjunto de estos tres registros se emplean en la selección de uno
de los 2 MB del espacio de programa. El bit 22 selecciona entre el espacio destinado al usuario y la
zona destinada a la configuración e identificación del dispositivo.
El puntero TBLPTR se utiliza en las operaciones de lectura, escritura y borrado de la FLASH.
En caso de realizar una operación de Lectura de Tabla se usan los 22 bits de menos peso de
TBLPTR para determinar la dirección del byte de la memoria de programa que se lee y se alma-
cena en TABLAT.
252 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Cuando se lleva a cabo una Escritura de Tabla (TBLWT) como el mínimo bloque que se puede
escribir es de 8 bytes los 3 bits de menos peso de TBLPTR <2:0> seleccionan el registro de mante-
nimiento entre los 8 que conforman el bloque en el cual se depositará el contenido del registro TA-
BLAT. Los bits TBLPTR<21:3> apuntan al bloque de 8 bytes entre todos los que se descompone la
FLASH y que va a ser accedido.
Cuando se procede a una operación de borrado de la FLASH se realiza sobre bloques de 64 bytes
y los 16 bits TBLPTR<21:6> contienen la dirección de uno de los bloques de 64 bytes en los que se
particiona el espacio del programa. Se ignora el contenido de lo bits TBLPTR<5:0>. (Figura 13.4.)

TBLPTR
23 21 15 8 7 6 3 0

TBLPTRU TBLPTRH TBLPTRL

BORRADO TBLPTR <21:6>

ESCRITURA TBLPTR <21:3>

LECTURA TBLPTR <21:0>

Figura 13.4. Para cada una de las operaciones de lectura, escritura y borrado de la FLASH se emplea
en el direccionamiento un campo diferente del Puntero de Tabla TBLPTR.

13.3.3. EECON1 y EECON2

EECON1 es el verdadero registro de control de los accesos y operaciones en la memoria de pro-


grama. EECON2 no está implementado físicamente en la memoria y sólo se usa como registro pa-
ra potenciar la seguridad en las operaciones de borrado en las que se graba en él los datos 0x55 y
0xAA como sucedía con los PIC16F87x.
El bit EEPGD de EECON1 selecciona el acceso a la memoria FLASH cuando vale 1 y a la EE-
PROM cuando vale 0. (Figura 13.5.)
El bit CFGS cuando vale 1 permite el acceso al espacio que contiene los registros de configura-
ción de la FLASH y si vale 0 al espacio de usuario de la FLASH o a la EEPROM.
Cuando el bit FREE = 1 está permitida la operación de borrado de la FLASH que se inicia con
el siguiente comando WR. Si FREE = 0 sólo se permite la operación de escritura.
El bit WRERR es un señalizador de error en la operación de escritura sobre la FLASH o la EE-
PROM. El bit WREN sirve para permitir o prohibir la escritura sobre la FLASH o la EEPROM.
El bit WR cuando vale 1 inicializa el ciclo de escritura o borrado de la FLASH o la EEPROM.
Dicho bit pasa a 0 cuando se ha completado la operación. Finalmente, el bit RD cuando vale 1 co-
mienza una operación de lectura.

REGISTRO EECON1

EEPGD CFGS — FRER WRERR WREN WR RD

7 0
Figura 13.5. Distribución de los bits de EECON1 que controlan las operaciones sobre las memorias
FLASH y EEPROM. Ocupa la posición 0xFA6 del espacio SFR de la memoria de datos.
LA MEMORIA DE PROGRAMA 253

13.4. OPERACIÓN DE BORRADO DE LA MEMORIA FLASH

La operación de borrado de la memoria de programa afecta a bloques de 32 palabras o 64 bytes. Só-


lo con un programador externo o mediante control ICSP se pueden borrar bloques de mayor tamaño.
Los 16 bits del Puntero de Tabla, TBLPTR<21:6> apuntan a un bloque de 64 bytes de la FLASH.
El bit EEPGD de EECON1 debe valer 1 para seleccionar a la memoria FLASH. También WREN = 1
para permitir operaciones de escritura y FREE = 1 para seleccionar una operación de borrado.
Dada la larga duración de las operaciones de borrado y escritura se utiliza el registro EECON2 co-
mo seguridad. Hay una secuencia que graba en EECON2 sucesivamente los valores 0x55 y 0xAA.

EJEMPLO

Programa para realizar un borrado de un bloque de 64 bytes en la memoria de programa FLASH.

MOVLW ADDR_UPPER ; Inicializar TBLPTR


MOVWF TBLPTRU
MOVLW ADDR_HIGH
MOVWF TBLPTRH
MOVLW ADDR_LOW
BORRADO BSF EECON1,EEPGD ; Inicializar EECON1 e INTCON
BCF EECON1, CFGS
BSF EECON1,WREN
BSF EECON1, FREE
BCF INTCON, GIE ; Prohibición de interrupciones
MOVLW 0x55 ; Secuencia de seguridad
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1, WR ; Comienza el borrado
NOP
BSF INTCON, GIE ; Permiso de interrupciones

13.5. ESCRITURA DE LA MEMORIA FLASH

No está permitida la escritura de palabras o bytes independientes. El mínimo bloque que se puede
escribir es de 8 bytes. La FLASH se particiona para la escritura en bloques de 8 bytes que interna-
mente se distribuyen en 8 registros de mantenimiento. Como la información a escribir proviene del
registro de 8 bits TABLAT, la instrucción TBLWT se debe ejecutar 8 veces. (Figura 13.6.)

13.6. INTERFAZ PARA MEMORIA EXTERNA

Los microcontroladores PIC18F8x20 disponen de un interfaz físico para conectar dispositivos de


memoria externa (FLASH, EEPROM, RAM, etc.) que amplíen el espacio de la memoria de pro-
grama hasta un máximo de 2 MB. Esta propiedad puede reportar interesantes ventajas en ciertas
aplicaciones, entre las que destacan:
254 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

TABLAT

TBLPTR= xxxxx0 TBLPTR= xxxxx1 TBLPTR= xxxxx7

REGISTO
MANTENIMIENTO
REGISTO
MANTENIMIENTO ... REGISTO
MANTENIMIENTO

8 8 8

MEMORIA DE PROGRAMA FLASH

Figura 13.6. La instrucción TBLWT se debe ejecutar 8 veces para completar la operación de Escritura
de Tabla sobre 8 bytes.

a) El microcontrolador puede trabajar únicamente con la memoria externa.


b) Puede funcionar con la memoria interna y con la externa con un límite de 2 MB.
c) Puede emplear memoria FLASH externa para reprogramación de código y manejo de tablas de
datos muy grandes.
d) Admite la conexión de una RAM externa para almacenar grandes cantidades de datos tem-
porales.

Para la adaptación física de las memorias externas se precisa un conjunto de 28 señales que de-
ben ser soportadas por 28 patitas. Dichas señales conforman los buses de datos, de direcciones y de
control.

● AD0-AD15: 16 señales que multiplexan datos y direcciones.


● A16-A19: Son las 4 líneas de más peso del bus de direcciones.
● ALE: Permiso de direcciones en el bus multiplexado de datos y direcciones.
● OE#: Permiso de salida del bus.
● WRL#: Permiso de escritura del byte de menos peso del bus de datos.
● WRH#: Permiso de escritura del byte de más peso del bus de datos.
● BA0: Bit 0 de la dirección del bus de tamaño byte.
● CE#: Permiso de funcionamiento del chip.
● LB#: Permiso byte bajo.
● UB#: Permiso byte alto.

En la Figura 13.7 se muestra una tabla con la asignación de las 27 señales para la adaptación de
los dispositivos de memoria externos que se hallan multiplexadas con las líneas de E/S de las Puer-
tas D, E, H y J.
LA MEMORIA DE PROGRAMA 255

NOMBRE PUERTA NOMBRE PUERTA NOMBRE PUERTA NOMBRE PUERTA


RD0/AD0 PORTD RE0/AD8 PORTE RH0/A16 PORTH RJ0/ALE PORTJ
RD1/AD1 PORTD RE1/AD9 PORTE RH1/A17 PORTH RJ1/OE# PORTJ
RD2/AD2 PORTD RE2/AD10 PORTE RH2/A18 PORTH RJ2/WRL# PORTJ
RD3/AD3 PORTD RE3/AD11 PORTE RH3/A19 PORTH RJ3/WRH# PORTJ
RD4/AD4 PORTD RE4/AD12 PORTE RJ4/BA0 PORTJ
RD5/AD5 PORTD RE5/AD13 PORTE RJ5/CE# PORTJ
RD6/AD6 PORTD RE6/AD14 PORTE RJ6/LB# PORTJ
RD7/AD7 PORTD RE7/AD15 PORTE RJ7/UB# PORTJ

Figura 13.7. Las Puertas D, E, H y J de los PIC18Fx20 multiplexan sus líneas de E/S con las señales de
interfaz con las memorias externas.

El registro MEMCON ubicado en el espacio SFR dispone de varios bits que controlan el fun-
cionamiento del interfaz con la memoria externa. (Figura 13.8.)

REGISTRO MEMCON

EBDIS — WAIT1 WAIT0 — — WM1 WM0

7 0

Figura 13.8. Distribución de los bits del registro MEMCON.

Cuando el bit EBDIS de MEMCON vale 0 el bus externo del sistema para la adaptación de la
memoria externa del sistema está activo y las líneas de E/S de las Puertas correspondientes están in-
hibidas. Si EBDIS = 1 el bus externo está desactivado y funcionan normalmente las líneas de E/S
que comparten función con las señales del bus externo.
Los bits WAIT<1:0> sirven para elegir los ciclos de espera que se necesitan en las operaciones
de Lectura y Escritura de Tabla (00: 3 TCY, 01: 2 TCY, 10: 1 TCY y 11: 0 TCY).
Los bits WM<1:0> seleccionan el tipo de operación TBLWRT en el modo de bus de 16 bits
indicando la transferencia con el registro TABLAT (Selección Byte, Escritura Byte y Escritura
palabra).
Los PIC18F8x20 pueden funcionar en 4 modos de manejo de la memoria de programa:

1) Modo Microprocesador: El bus externo siempre se halla activo.


2) Modo Microcontrolador: El bus externo está inhibido y las líneas de las Puertas de E/S actúan co-
mo E/S. No se permite escribir en MEMCON.
3) Modo Microprocesador con “Boot Block”.
4) Modo Microcontrolador Extendido.

En los dos últimos modos se comparten las líneas de E/S con las funciones de interfaz con la me-
moria externa. Si EBDIS = 0 funciona como interfaz externo y si EBDIS = 1 como líneas de E/S de
las Puertas.
256 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

13.7. MODO DE 16 BITS

Los dispositivos de memoria externa acoplados a los PIC18F8x20 sólo trabajan en modo de 16 bits
y el modo de conexionado se elige con los bits WM<1:0> entre tres alternativas:

1) Escritura Byte
2) Escritura Palabra
3) Selección Byte

Con estos modos se puede optimizar el rendimiento de los elementos externos.


El bus de direcciones del sistema externo es de 20 líneas (A19-A0) y el bus de datos de 16
(D15-D0). Las líneas del bus de datos van multiplexadas con las 16 de menos peso del bus de di-
recciones (AD15-AD0) y la señal ALE discrimina cuando por ellas circulan direcciones. La se-
ñal OE# activa los dos bytes de una posición de la memoria de programa para acceder a una ins-
trucción.
Cuando el microcontrolador accede a la memoria externa se activa CE# . En el modo Selección
Byte la memoria FLASH usa el bit BA0 que selecciona la dirección del Byte. La memoria RAM
utiliza las señales UB# (byte alto) y LB# (byte bajo) en la selección del byte.
En la Figura 13.9 se muestra el esquema del conexionado de un PIC18F8x20 con dos disposi-
tivos de memoria con posiciones de 8 bits, mientras que en la Figura 13.10 se ofrece el conexio-
nado de dicho modelo de microcontrolador con la memoria externa con posiciones de 16 bits.

D<7:0>

PIC18F8X20 (LSB)
(MSB)
A<19:0>
AD<7:0> 373 A<x:0> A<x:0>

D<7:0> D<7:0>
D<15:8>
D<7:0>

CE
CE
AD<15:8> 373 OE WR (1)
OE WR (1)
ALE
A<19:16>

CE

OE
WRH

WRL

Bus de direcciones
(1) Sólo en escritura de Tabla Bus de Datos
Bus de Control

Figura 13.9. Esquema de conexionado de un PIC18F8x20 con dos dispositivos de memoria externa
acoplados en paralelo y que tienen posiciones de 8 bits.

En el modo Selección Byte el interfaz soporta operaciones de Escritura de Tabla con dispositi-
vos externos de posiciones con 16 bits y con la capacidad de seleccionar el byte.
LA MEMORIA DE PROGRAMA 257

PIC18F8X29
A<20:1>
AD<7:0> 373 A<x:0> EPROM

D<15:0>
D<7:0>

AD<15:8> 373
CE OE WR (1)
ALE
A<19:16>

CE

OE
WRH

Bus de direcciones
Bus de Datos
(1) Sólo en escritura de Tabla Bus de Control

Figura 13.10. Interfaz entre un microcontrolador PIC18F8x20 con una memoria externa EPROM con
posiciones de 16 bits.
14 Las
interrupciones

14.1. LOS REGISTROS DE CONTROL DE INTERRUPCIONES

Los PIC de esta familia disponen de 17 o 18 fuentes de interrupción, según el modelo, ordenadas en
dos prioridades, que se denominan alta y baja. Cada prioridad tiene su propio vector de interrupción,
siendo el de alta el 0008h y el de baja el 0018h. Los eventos de interrupción de alta prioridad po-
drán interrumpir las posibles interrupciones de baja prioridad en progreso.
Al producirse una interrupción, la dirección de retorno se guardará en la pila y el PC se cargará
con el vector correspondiente. Es conveniente guardar al menos, al comienzo de la rutina de servi-
cio de interrupción, los valores de los registros WREG, STATUS y BSR, por si sufrieran modifica-
ciones en dicha rutina, y restaurarlos antes de la vuelta al programa principal.
Cada fuente de interrupción tiene 3 bits de control, cuyas funciones son:

● Un bit señalizador, que indica que ha ocurrido el evento causante de la interrupción.


● Un bit habilitador, que permite el salto al vector de interrupción para ejecutar el programa corres-
pondiente cuando se active el bit señalizador.
● Un bit para seleccionar la prioridad alta o baja.

Los registros que contienen los bits de control para cada una de las fuentes de interrupción son
los siguientes:

● RCON. Contiene el bit IPEN, el cual es usado para activar la característica de prioridad de las inte-
rrupciones.
● INTCON, INTON2, INTCON3. Son de lectura y escritura y recogen las prioridades de las interrupciones.
● PIR1, PIR2, PIR3. Contienen el bit señalizador para cada una de las interrupciones de los periféricos.
● PIE1, PIE2, PIE3. Contienen el bit de habilitación para cada una de las interrupciones de los periféricos.
● IPR1, IPR2, IPR3. Contienen los bits de prioridad de las interrupciones de los periféricos.

259
260 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

14.2. REGISTRO RCON

Además del bit que habilita las prioridades de interrupción, este registro contiene los bits utilizados
para determinar la causa del último Reset o la causa del despertar del modo de bajo consumo.

REGISTRO RCON

IPEN — — RI# TO# PD# POR# BOR#

7 0

IPEN: Bit de habilitación de prioridad de interrupciones.


1 = Habilita prioridad de interrupciones.
0 = Deshabilita prioridad de interrupciones (compatible con modelos PIC16).
Bits 6-5: No implementados. Se leen como ‘0’.
RI#: Señalizador de la instrucción RESET.
TO#: Señalizador de desbordamiento del perro guardián.
PD#: Señalizador de entrada en modo de bajo consumo.
POR#: Señalizador de conexión de la alimentación.
BOR#: Señalizador de reseteo por tensión de alimentación baja.

Figura 14.1. Designación y misión de cada uno de los bits del registro RCON.

La característica de prioridad de interrupción se habilita activando el bit IPEN.

14.3. REGISTROS INTCON

Aunque su misión principal es la de habilitación de las prioridades de las interrupciones, también


dispone de bits para la habilitación y señalización de algunas de ellas, así como la determinación del
flanco de las interrupciones externas.

REGISTRO INTCON

GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

7 0

GIE/GIEH: Bit de permiso global de interrupciones.


Si IPEN=1
1 = Habilita interrupciones de alta prioridad.
0 = Deshabilita todas las interrupciones.
Si IPEN=0
1 = Habilita interrupciones con su bit habilitador activado.
0 = Deshabilita todas las interrupciones.
LAS INTERRUPCIONES 261

PEIE/GIEL: Bit de permiso de interrupción de los periféricos.


Si IPEN=1
1 = Habilita interrupciones de baja prioridad.
0 = Deshabilita interrupciones de baja prioridad.
Si IPEN=0
1 = Habilita interrupciones de periféricos con su bit habilitador activado.
0 = Deshabilita interrupciones de periféricos.
TMR0IE: Bit de permiso de interrupción por desbordamiento del TMR0.
INT0IE: Bit de permiso de interrupción externa por activación de la patita INT0.
RBIE: Bit de permiso de interrupción por cambio en RB7:RB4.
TMR0IF: Señalizador de desbordamiento de TMR0.
INT0IF: Señalizador de activación de INT0.
RBIF: Señalizador de cambio de estado en RB7:RB4.

Figura 14.2. Designación y misión de cada uno de los bits del registro INTCON.

Cuando la prioridad de interrupción es habilitada haciendo uso de IPEN (RCON<7>), hay dos bits
que habilitan interrupciones globalmente, que son el bit GIEH y el GIEL. Activando el primero se ha-
bilitan todas las interrupciones que tienen el bit de prioridad activado (prioridad alta). Activando
GIEL se habilitan todas las interrupciones que no tienen dicho bit activo (prioridad baja). Las inte-
rrupciones individuales pueden desactivarse a través de sus bits de habilitación correspondientes.
Cuando el señalizador de interrupción, el bit de habilitación y la interrupción global apropiada
son activadas, el programa se bifurcará al vector de interrupción 0008h o 0018h, dependiendo del
bit de prioridad. Cuando se limpia el bit IPEN (estado por defecto), la característica de prioridad de
interrupción se deshabilita y las interrupciones son compatibles con los dispositivos PIC. En modo
de compatibilidad, los bits de prioridad de interrupción para cada fuente no se ven afectados. PEIE
servirá en este modo para habilitar/deshabilitar las interrupciones de periféricos y GIE para habili-
tar/deshabilitar todas las interrupciones.
Cuando se produce una interrupción, el bit de habilitación global se pone a 0 automáticamente
para no permitir que se produzcan interrupciones posteriores hasta no terminar con el tratamiento en
curso. Si el bit IPEN está a 0 el bit de habilitación global es el GIE. Si se utilizan los niveles de prio-
ridad (IPEN=1) estos bits serán el GIEH o el GIEL. Dichos bits se activarán de nuevo con la ins-
trucción de vuelta de interrupción (RETFIE).
Las fuentes de interrupción de alta prioridad pueden interrumpir una interrupción de baja prio-
ridad, sin embargo, no puede ocurrir al contrario.

REGISTRO INTCON2

RBPU# INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP

7 0

RBPU#: Resistencias de Pull-up de la Puerta B.


1 = Desactivadas.
0 = Activadas.
262 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

INTEDG0: Flanco activo de la interrupción externa INT0.


1 = Flanco ascendente.
0 = Flanco descendente.
INTEDG1: Flanco activo de la interrupción externa INT1.
1 = Flanco ascendente.
0 = Flanco descendente.
INTEDG2: Flanco activo de la interrupción externa INT2.
1 = Flanco ascendente.
0 = Flanco descendente.
INTEDG3: Flanco activo de la interrupción externa INT3.
1 = Flanco ascendente.
0 = Flanco descendente.
TMR0IP: Bit de prioridad de interrupción por desbordamiento de TMR0.
1 = Prioridad alta.
0 = Prioridad baja.
INT3IP: Bit de prioridad de interrupción externa INT3.
1 = Prioridad alta.
0 = Prioridad baja.
RBIP: Bit de prioridad de interrupción por cambio de estado en RB7:RB4.
1 = Prioridad alta.
0 = Prioridad baja.

Figura 14.3. Designación y misión de cada uno de los bits del registro INTCON2.

Para eventos externos de interrupción, como las patitas INT o el cambio de estado de la PuertaB,
la latencia de interrupción será tres o cuatro ciclos de instrucción. No existe bit de prioridad asocia-
do con INT0, ya que se considera una interrupción de alta prioridad.

REGISTRO INTCON3

INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF

7 0

INT2IP: Bit de prioridad de interrupción externa por INT2.


1 = Prioridad alta.
0 = Prioridad baja.
INT1IP: Bit de prioridad de interrupción externa por INT1.
1 = Prioridad alta.
0 = Prioridad baja.
INT3IE: Bit de permiso de interrupción externa por INT3.
INT2IE: Bit de permiso de interrupción externa por INT2.
INT1IE: Bit de permiso de interrupción externa por INT1.
INT3IF: Señalizador de activación de INT3.
INT2IF: Señalizador de activación de INT2.
INT1IF: Señalizador de activación de INT1.

Figura 14.4. Designación y misión de cada uno de los bits del registro INTCON3
LAS INTERRUPCIONES 263

14.4. REGISTROS PIR

Estos registros contienen los bits señalizadores para las interrupciones provocadas por los periféricos.

REGISTRO PIR1

PSPIF ADIF RC1IF TX1IF SSPIF CCP1IF TMR2IF TMR1IF

7 0

PSPIF: Señalizador de lectura/escritura en el puerto paralelo esclavo (sólo en los dispositivos que lo
posean).
ADIF: Señalizador de fin de conversión AD.
RC1IF: Señalizador de fin de recepción en el módulo USART1.
TX1IF: Señalizador de fin de transmisión en el módulo USART1.
SSPIF: Señalizador de fin de recepción o transmisión en el módulo MSSP.
CCP1IF: Señalizador de captura o comparación en el módulo CCP1.
TMR2IF: Señalizador de igualdad de PR2 con TMR2.
TMR1IF: Señalizador de desbordamiento de TMR1.

Figura 14.5. Designación y misión de cada uno de los bits del registro PIR1.

REGISTRO PIR2

— CMIF — EEIF BCLIF LVDIF TMR3IF CCP2IF


7 0

Bit 7: No implementado. Se lee como ‘0’.


CMIF: Señalizador de cambio de valor de la entrada del comparador.
Bit 5: No implementado. Se lee como ‘0’.
EEIF: Señalizador de fin de escritura de la EEPROM de datos o de la FLASH de código.
BCLIF: Señalizador de colisión de bus en módulo MSSP (configurado en modo I2C) cuando dos o más
maestros tratan de transmitir al mismo tiempo.
LVDIF: Señalizador de detección de voltaje bajo.
TMR3IF: Señalizador de desbordamiento de TMR3.
CCP2IF: Señalizador de captura o comparación en el módulo CCP2.

Figura 14.6. Designación y misión de cada uno de los bits del registro PIR2.

REGISTRO PIR3

— — RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF

7 0
264 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Bits 7-6: No implementados. Se leen como ‘0’.


RC2IF: Señalizador de fin de recepción en el módulo USART2.
TX2IF: Señalizador de fin de transmisión en el módulo USART2.
TMR4IF: Señalizador de desbordamiento de TMR4.
CCPxIF: Señalizador de captura o comparación en el módulo CCPx.

Figura 14.7. Designación y misión de cada uno de los bits del registro PIR3.

14.5. REGISTROS PIE

Estos registros contienen los bits individuales de habilitación para las interrupciones de periféricos,
cuyos bits señalizadores han sido mostrados anteriormente. Cuando IPEN está desactivado, el bit
PEIE debe activarse para habilitar alguna de estas interrupciones de periféricos.
REGISTRO PIE1

PSPIE ADIE RC1IE TX1IE SSPIE CCP1IE TMR2IE TMR1IE

7 0

Figura 14.8. Designación de cada uno de los bits del registro PIE1.

REGISTRO PIE2

— CMIE — EEIE BCLIE LVDIE TMR3IE CCP2IE

7 0

Figura 14.9. Designación de cada uno de los bits del registro PIE2.

REGISTRO PIE3

— — RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE

7 0

Figura 14.10. Designación de cada uno de los bits del registro PIE3.

14.6. REGISTROS IPR

Estos registros contienen los bits individuales de prioridad para las interrupciones de periféricos ex-
puestos en el apartado anterior. El uso de los bits de prioridad requiere que el bit IPEN esté activo.

REGISTRO IPR1

PSPIP ADIP RC1IP TX1IP SSPIP CCP1IP TMR2IP TMR1IP

7 0

Figura 14.11. Designación de cada uno de los bits del registro IPR1.
LAS INTERRUPCIONES 265

REGISTRO IPR2

— CMIP — EEIP BCLIP LVDIP TMR3IP CCP2IP

7 0

Figura 14.12. Designación de cada uno de los bits del registro IPR2

REGISTRO IPR3

— — RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP

7 0

Figura 14.13. Designación de cada uno de los bits del registro IPR3.
15 El repertorio
de instrucciones

15.1. JUEGO DE INSTRUCCIONES ESTÁNDAR

Los PIC18Fxx20 incorporan el juego de instrucciones estándar de los PIC18. Éste contiene muchas
de las 35 instrucciones ya conocidas de la familia PIC16F87x, aunque su tamaño es ahora de 16 bits.
Entre las instrucciones añadidas, la mayoría siguen necesitando una única posición de memoria, a
excepción de tres que ocupan dos. En estas tres instrucciones, en la segunda palabra los 4 bits MSB
son ‘1’. Así, si la segunda palabra se ejecutase como una instrucción individual se ejecutaría como
una NOP. Todas las instrucciones de una palabra son ejecutadas en un único ciclo, a menos que un
test condicional sea verdadero o que el contador de programa sea cambiado con el resultado de la
instrucción, en cuyo caso se tiene un ciclo adicional ejecutado como una instrucción NOP. Las ins-
trucciones de doble palabra se ejecutan en dos ciclos. La totalidad de las instrucciones se puede
agrupar en cuatro categorías, atendiendo al tipo de operandos que utilizan.

● Operaciones orientadas al byte.


● Operaciones orientadas al bit.
● Operaciones con literales.
● Operaciones de control.

Antes de pasar a explicar cada grupo, se presenta una tabla con los campos de descripción que
aparecen más tarde reflejados en cada una de las instrucciones. (Figura 15.1.)

15.2. OPERACIONES ORIENTADAS AL BYTE

La mayoría de las instrucciones orientadas al byte tienen 3 operandos:

● El registro origen, especificado por ‘f’.


● El registro destino para almacenar el resultado, especificado por ‘d’.
● El acceso a memoria, especificado por’a’.

267
268 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

CAMPO DESCRIPCIÓN
a Bit de acceso a RAM:
a = 0; posición RAM en acceso de RAM
a =1; banco de registro especificado por el registro BSR
bbb Dirección de un bit dentro de un registro de 8-bit
BSR Registro de selección de banco
d Bit de selección de destino:
d = 0 resultado almacenado en WREG
d =1 resultado almacenado en registro f
dest Destino, a excepción de WREG o del registro especificado
f Dirección de un registro 8-bit
fs Dirección de un registro de 12-bit. Registro origen
fd Dirección de un registro de 12-bit. Registro destino
k Campo literal, dato constante o etiqueta
label Nombre de etiqueta
mm Modo de indicar el registro TBLPTR en instrucciones de tabla
* No cambiar registro
*+ Realizar un postincremento en el registro
*- Realizar un postdecremento en el registro
+* Realizar un preincremento en el registro
n Dirección relativa para instrucciones de salto relativo o dirección directa para instrucciones de salto tipo CALL
PRODH Byte alto del resultado de la multiplicación
PRODL Byte bajo del resultado de la multiplicación
s Bit de selección de modo rápido en llamada/retorno a subrutinas
s = 0; no actualizar los registros
s = 1; ciertos registros se guardan o recuperan
u No usado o no cambiado
WREG Registro de trabajo (acumulador)
x No importa el valor ‘0’ o ‘1’. El ensamblador suele generar código con x = 0
TBLPTR Puntero de tabla de 21bits (apunta a instrucciones)
TABLAT Registro Tabla de 8 bits
TOS Cima de la pila
PC Contador de programa
PCL Byte bajo de contador de programa
PCH Byte alto de contador de programa
PCLATH Registro cerrojo del byte alto de contador de programa
PCLATU Registro cerrojo del byte superior de contador de programa
GIE Bit de habilitación global de interrupciones
WDT Perro guardián
PD# Bit de bajo consumo
TO# Bit de desbordamiento
C, DC, Z, OV, N Bits de estado de la ALU o señalizadores
[] Parámetro opcional
(text) Contenido de text
➛ Asignado a
< > Bit de un registro
[ Perteneciente a un conjunto
italics Término definido por usuario

Figura 15.1. Tabla con los campos usados en la descripción de las instrucciones.

Los formatos que pueden seguir se muestran en la Figura 15.2 y su elección depende de si son
instrucciones de palabra simple o doble.
EL REPERTORIO DE INSTRUCCIONES 269

FORMATO INSTRUCCIÓN “ADDWF REG,W,B”

CÓDIGO OPERACIÓN d a REGISTRO f

15 10 9 8 7 0

FORMATO INSTRUCCIÓN “MOVFF REG1,REG2”

CÓDIGO OPERACIÓN REGISTRO FUENTE f


15 12 11 0

1111 REGISTRO DESTINO f


15 12 11 0

Figura 15.2. Formatos de las instrucciones orientadas al byte.

Las instrucciones contenidas en este grupo se muestran en la Figura 15.3.

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


addwf f, d , a SUMA de W con f 1 0010 01da ffff ffff C, DC, Z, OV, N
addwfc f, d, a SUMA de W con f y con acarreo 1 0010 00da ffff ffff C, DC, Z, OV, N
andwf f, d, a AND de W con f 1 0001 01da ffff ffff Z, N
clrf f, a BORRADO de f 1 0110 101a ffff ffff Z
comf f, d, a COMPLEMENTO de f 1 0001 11da ffff ffff Z, N
cpfseq f, a COMPARA W con f, BRINCO si f = W 1(2 o 3) 0110 001a ffff ffff
cpfsgt f, a COMPARA W con f, BRINCO si f > W 1(2 o 3) 0110 010a ffff ffff
cpfslt f, a COMPARA W con f, BRINCO si f < W 1(2 o 3) 0110 000a ffff ffff
decf f, d, a DECREMENTO de f 1 0000 01da ffff ffff C, DC, Z, OV, N
decfsz f, d, a DECREMENTO de f, BRINCO si 0 1(2 o 3) 0010 11da ffff ffff
dcfsnz f, d, a DECREMENTO de f, BRINCO si no 0 1(2 o 3) 0100 11da ffff ffff
incf f, d, a INCREMENTO de f 1 0010 10da ffff ffff C, DC, Z, OV, N
incfsz f, d, a INCREMENTO de f, BRINCO si 0 1(2 o 3) 0011 11da ffff ffff
infsnz f, d, a INCREMENTO de f, BRINCO si no 0 1(2 o 3) 0100 10da ffff ffff
iorwf f, d, a OR de W con f 1 0001 00da ffff ffff Z, N
movf f, d, a MOVIMIENTO de f 1 0101 00da ffff ffff Z, N
MOVIMIENTO de fs (registro fuente) 1100 ffff ffff ffff
movff fs, fd 2
a fd (registro destino) 1111 ffff ffff ffff
movwf f, a MOVIMIENTO de W a f 1 0110 111a ffff ffff
mulwf f, a MULTIPLICACIÓN de W con f 1 0000 001a ffff ffff
negf f, a COMPLEMENTO A 2 de f 1 0110 110a ffff ffff C, DC, Z, OV, N
rlcf f, d, a ROTACIÓN IZQUIERDA de f con acarreo 1 0011 01da ffff ffff C, Z ,N
rlncf f, d, a ROTACIÓN IZQUIERDA de f sin acarreo 1 0100 01da ffff ffff Z, N
rrcf f, d, a ROTACIÓN DERECHA de f con acarreo 1 0011 00da ffff ffff C, Z ,N
rrncf f, d, a ROTACIÓN DERECHA de f sin acarreo 1 0100 00da ffff ffff Z, N
setf f, a PUESTA a 1 de f 1 0110 100a ffff ffff
subfwb f, d, a RESTA f de W con llevada (W-f-C#) 1 0101 01da ffff ffff C, DC, Z, OV, N
subwf f, d, a RESTA W de f (f-W) 1 0101 11da ffff ffff C, DC, Z, OV, N
subwfb f, d, a RESTA W de f con llevada (f-W-C#) 1 0101 10da ffff ffff C, DC, Z, OV, N
swapf f, d, a CAMBIO de la parte alta y parte baja de f 1 0011 10da ffff ffff
tstfsz f, a TESTEO de f, BRINCO si 0 1(2 o 3) 0110 011a ffff ffff
xorwf f, d, a OR exclusiva de W con f 1 0001 10da ffff ffff Z, N

Figura 15.3. Instrucciones orientadas al byte.


270 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Muchas de estas instrucciones ya existían en los PIC16. A ellas se han añadido algunas instruccio-
nes que, si bien no aportan nada que antes no se pudiera hacer con la combinación de varias instruccio-
nes, facilitan enormemente la ejecución de acciones muy comunes en ciertas aplicaciones. Es el caso de
las instrucciones de comparación de registros, como son CPFSEQ, CPFSGT y CPFSLT. La primera
compara si el registro ‘f’ es igual a W. La segunda si ‘f’ es mayor que W y la tercera si ‘f’ es menor que
W. En los tres casos se producirá un brinco (salto de la siguiente instrucción) si se cumple la condición.

Operación: Brinco si (f)=(W)

DIRINI CPFSEQ REG,0


NO Instrucción_si_igual;
SI Instrucción_distintos;

Antes de la instrucción: Dirección PC = DIRINI


REG = 06h
W = 06h

Después de la instrucción: Dirección PC = SI

Figura 15.4. Ejemplo de utilización de la instrucción CPFSEQ.

Para dar un brinco cuando un registro toma valor cero también se facilita con la instrucción
TSTFSZ. El complemento a dos de un registro se realiza ahora con una sola instrucción: NEGF.

Operación: Complemento a 2 de (f)

NEGF REG,1

Antes de la instrucción: REG = 0110 0011

Después de la instrucción: REG =1001 1101

Figura 15.5. Ejemplo de utilización de la instrucción NEGF.

También con una sola instrucción se añade el acarreo a una suma: ADDWFC.

Operación: (destino)=(f)+(W)+(C)

ADDWFC REG,0,1

Antes de la instrucción: C=1


REG = 06h
W = 02h

Después de la instrucción: C=0


REG = 06h
W = 09h

Figura 15.6. Ejemplo de utilización de la instrucción ADDWFC.


EL REPERTORIO DE INSTRUCCIONES 271

Algunas instrucciones han cambiado de nombre pero siguen realizando la misma función, como
RLCF y RRCF para la rotación con acarreo a izquierda y derecha.
Otras han visto reforzadas su función con instrucciones complementarias, como la resta de dos
registros teniendo en cuenta la llevada previa.

Operación: (destino)=(W)-(f)-(C#)

SUBFWB REG,1,0

Antes de la instrucción: C= 0
REG = 05h
W = 02h

Después de la instrucción: C= 1
REG = 02h
W = 05h
N=0
Z=0

Figura 15.7. Ejemplo de utilización de la instrucción SUBFWB.

Otro grupo de nuevas instrucciones lo constituyen aquellas que realizan lo contrario de alguna
ya existente, como DCFSNZ, INFSNZ, SUBFWB, RLNCF, RRNCF y SETF.

Operación: (f)=FFh

SETF REG,1

Antes de la instrucción: REG = 06h

Después de la instrucción: REG = FFh

Figura 15.8. Ejemplo de utilización de la instrucción SETF.

Por último se encuentran dos instrucciones un poco más especiales. La instrucción MOVFF uti-
liza dos registros RAM, uno como origen y otro como destino. Lo que en los PIC16 se hacía con dos
instrucciones ahora es posible hacerlo con una sola, pero el tiempo en ciclos de instrucción sigue
siendo 2.

Operación: (fd)=(fs)

MOVFF REG1,REG2

Antes de la instrucción: REG1 = A8h


REG2 = 06h

Después de la instrucción: REG1 = A8h


REG2 = A8h

Figura 15.9. Ejemplo de utilización de la instrucción MOVFF.


272 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

La que sí supone una verdadera ayuda es la instrucción MULWF, que multiplica el valor del re-
gistro origen con W y deja el resultado en la pareja de registros PRODH:PRODL. Aunque es posi-
ble el resultado ‘0’, no es detectado en Z.

Operación: PRODH:PRODL=(f)x(W)

MULWF REG,1

Antes de la instrucción: REG = 04h


W = 02h

Después de la instrucción: REG = 04h


W = 02h
PRODH = 00h
PRODL = 08h

Figura 15.10. Ejemplo de utilización de la instrucción MULWF.

15.3. OPERACIONES ORIENTADAS AL BIT

Todas las instrucciones orientadas al bit tienen 3 operandos:

● El registro origen, especificado por ‘f’.


● El bit dentro del registro origen, especificado por ‘b’.
● El acceso a memoria, especificado por ’a’.

Su formato es el que se muestra en la Figura 15.11.

FORMATO INSTRUCCIÓN “BSF REG,BIT,B”

CÓDIGO OPERACIÓN BIT b a REGISTRO f

15 12 11 9 8 7 0

Figura 15.11. Formato de las instrucciones orientadas al bit.

Todas las instrucciones de este grupo menos una son ya conocidas de los PIC16, y un ejemplo
de su utilización se muestra en la Figura 15.13.

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


bcf f, b, a PUESTA a 0 del bit b de f 1 1001 bbaa ffff ffff
bsf f, b, a PUESTA a 1 del bit b de f 1 1000 bbba ffff ffff
btfsc f, b, a TESTEO del bit b ; BRINCO si 0 1(2 o 3) 1011 bbba ffff ffff
btfss f, b, a TESTEO del bit b ; BRINCO si 1 1(2 o 3) 1010 bbba ffff ffff
btg f, d, a COMPLEMENTO del bit b 1 0111 bbba ffff ffff

Figura 15.12. Instrucciones orientadas al bit.


EL REPERTORIO DE INSTRUCCIONES 273

Operación: (f<b>)=(f<b>)#

BTG REG,3,0

Antes de la instrucción: REG = 0110 0011

Después de la instrucción: REG = 0110 1011

Figura 15.13. Ejemplo de utilización de la instrucción BTG.

15.4. OPERACIONES CON LITERALES

Las instrucciones con literales pueden usar los siguientes operandos:

● Un valor literal para ser cargado dentro de un registro RAM, especificado por ‘k’.
● El registro FSR deseado para cargar el valor literal, especificado por ‘f’.
● No requiere operando, especificado por ’-’.

El formato más habitual es el de la Figura 15.14, que es el que siguen las instrucciones ya cono-
cidas de los PIC16 y que se muestran en la Figura 15.15.

FORMATO INSTRUCCIÓN “MOVLW 7Fh”

CÓDIGO OPERACIÓN LITERAL k

15 8 7 0

Figura 15.14. Formato de las instrucciones con literales.

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


addlw k SUMA de literal con W 1 0000 1111 kkkk kkkk C,DC,Z, OV, N
andlw k AND de literal con W 1 0000 1011 kkkk kkkk Z, N
iorlw k OR de literal con W 1 0000 1001 kkkk kkkk Z, N
1110 1110 00ff kkkk
lfsr f, k MOVIMIENTO de literal (12-bit) a FSRx 2
1111 0000 kkkk kkkk
movlb k MOVIMIENTO de literal a BSR <3:0> 1 0000 0001 0000 kkkk
movlw k MOVIMIENTO de literal a W 1 0000 1110 kkkk kkkk
mullw k MULTIPLICACIÓN de literal con W 1 0000 1101 kkkk kkkk
retlw k RETORNO devolviendo literal en W 2 0000 1100 kkkk kkkk
sublw k RESTA W de literal (k - W) 1 0000 1000 kkkk kkkk C, DC,Z, OV,N
xorlw k OR exclusiva de literal con W 1 0000 1010 kkkk kkkk Z, N
tblrd* LECTURA de tabla 2 0000 0000 0000 1000
tblrd*+ LECTURA de tabla con pos-incremento 0000 0000 0000 1001
tblrd*- LECTURA de tabla con post-decremento 0000 0000 0000 1010

Figura 15.15. Instrucciones con literales (continúa).


274 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


tblrd+* LECTURA de tabla pre-incremento 0000 0000 0000 1011
tblwt* ESCRITURA de tabla 2 (5) 0000 0000 0000 1100
tblwt*+ ESCRITURA de tabla con post-incremento 0000 0000 0000 1101
tblwt*- ESCRITURA de tabla con post-decremento 0000 0000 0000 1110
tblwt+* ESCRITURA de tabla con pre-incremento 0000 0000 0000 1111

Figura 15.15. Instrucciones con literales.

Las instrucciones contenidas en este grupo pueden dividirse en dos subgrupos. Por una parte
aquellas en que alguno de sus operandos es un valor literal y por otra las que trabajan con tablas.
Dentro del primer subgrupo es donde se encuentran las operaciones conocidas. Está además la
instrucción MOVLB, con la cual se mueve un literal al registro BSR, aunque hay que tener en cuen-
ta que los cuatro bits más significativos de BSR se mantendrán a valor 0 a pesar del valor literal.

Operación: BSR=k

MOVLB 05h

Antes de la instrucción: BSR = 06h

Después de la instrucción: BSR = 05h

Figura 15.16. Ejemplo de utilización de la instrucción MOVLB.

También para el trabajo con literales existe una instrucción de multiplicación que funciona igual
que la de multiplicación con registro. Por último, la instrucción LFSR, que es una instrucción de do-
ble palabra, y su tamaño se debe a que el literal que mueve es de 12 bits en lugar de los 8 habitua-
les. Este movimiento se realiza al registro FSR.

Operación: (FSRf)=k

LFSR 2,38Fh

Antes de la instrucción: FSR2H = 2h


FSR2L = 45h

Después de la instrucción: FSR2H = 3h


FSR2L = 8Fh

Figura 15.17. Ejemplo de utilización de la instrucción LFSR.

Para el trabajo con tablas se cuenta con ocho instrucciones. Todas ellas empiezan por TBL y el
resto del nombre indica la operación que realizan. Así, RD significa lectura y WT escritura, ambas
sobre tabla, que es como se considera a la memoria de programa. Por último, el ‘*’ no añade nada
nuevo, pero según vaya acompañado de los símbolos ‘+’ o ‘-’ y según la posición de dichos sím-
bolos se convierte en postincremento, postdecremento y preincremento. La opción de predecre-
EL REPERTORIO DE INSTRUCCIONES 275

mento no está contemplada. En las operaciones de lectura se cogerá el valor de la memoria de pro-
grama apuntada por TBLPTR, que es un puntero de 21 bits, y se almacenará en TABLAT, que es un
registro de 8 bits, teniendo en cuenta los incrementos o decrementos de dicho puntero y si se reali-
zan antes o después de la lectura. Se cambiará asimismo el valor de TBLPTR según dichos modifi-
cadores. La operación de escritura hará justo lo contrario; escribirá el valor de TABLAT en la posi-
ción de la memoria de programa apuntada por TBLPTR, teniendo en cuenta también los
modificadores.

Operación: Escritura o lectura de tabla según PTR

EJEMPLO1 TBLRD +*

Antes de la instrucción: TABLAT = 4Fh


TBLPTR = 00A235h
MEMORIA(00A235h) = 06h
MEMORIA(00A236h) = 24h

Después de la instrucción: TABLAT = 24h


TBLPTR = 00A236h

EJEMPLO2 TBLWT *

Antes de la instrucción: TABLAT = 4Fh


TBLPTR = 00A235h
MEMORIA(00A235h) = 06h

Después de la instrucción: TABLAT = 4Fh


TBLPTR = 00A235h
MEMORIA(00A235h) = 4Fh

Figura 15.18. Ejemplo de utilización de la instrucción TBL con dos modificadores.

15.5. OPERACIONES DE CONTROL

Las instrucciones de control pueden usar los siguientes operandos:

● Una dirección de memoria de programa, especificada por ‘n’.


● El modo de instrucciones como CALL y RETURN, especificado por ‘s’.
● Un valor literal especificado por ‘k’.
● No requiere operando, especificado por ‘-’.

Los formatos de las instrucciones de control son múltiples ya que en este grupo se recogen ins-
trucciones muy variadas.

FORMATO INSTRUCCIÓN “GOTO ETIQUETA”

CÓDIGO OPERACIÓN LITERAL n<7:0>

15 8 7 0
276 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

1111 LITERAL n<19:8>

15 12 11 0

FORMATO INSTRUCCIÓN “CALL SUBRUTINA”

CÓDIGO OPERACIÓN S LITERAL n<7:0>

15 9 8 7 0

1111 LITERAL n<19:8>

15 12 11 0

FORMATO INSTRUCCIÓN “BRA SUBRUTINA”

CÓDIGO OPERACIÓN LITERAL n<10:0>

15 11 10 0

FORMATO INSTRUCCIÓN “BC SUBRUTINA”

CÓDIGO OPERACIÓN LITERAL n<7:0>

15 8 7 0

Figura 15.19. Formatos de las instrucciones de control.

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


bc n BRINCO si acarreo = 1 1 (2) 1110 0010 nnnn nnnn
bn n BRINCO si negativo 1 (2) 1110 0110 nnnn nnnn
bnc n BRINCO si acarreo = 0 1 (2) 1110 0011 nnnn nnnn
bnn n BRINCO si no negativo 1 (2) 1110 0111 nnnn nnnn
bnov n BRINCO si no desbordamiento 1 (2) 1110 0101 nnnn nnnn
bnz n BRINCO si no 0 1 (2) 1110 0001 nnnn nnnn
bov n BRINCO si desbordamiento 1 (2) 1110 0100 nnnn nnnn
bra n BRINCO incondicional 2 1101 0nnn nnnn nnnn
bz n BRINCO si 0 1 (2) 1110 110s kkkk kkkk
LLAMADA a subrrutina ; primera palabra 1110 110s kkkk kkkk
call n, s 2
; segunda palabra 1111 kkkk kkkk kkkk
clrwdt BORRADO del perro guardián 1 0000 0000 0000 0100 #TO, #PD
daw AJUSTE decimal de W 1 0000 0000 0000 0111
SALTO a una dirección; primera palabra 1110 1111 kkkk kkkk
goto n 2
; segunda palabra 1111 kkkk kkkk kkkk
nop NO operación 0000 0000 0000 0000

Figura 15.20. Instrucciones de control (continúa).


EL REPERTORIO DE INSTRUCCIONES 277

NEMÓNICOS PARÁMETROS OPERACIÓN CICLOS FORMATO 16 BITS SEÑALIZADORES


nop NO operación 1111 xxxx xxxx xxxx
pop EXTRACCIÓN de un elemento de la pila 0000 0000 0000 0110
push INTRODUCCIÓN de un elemento a la pila 0000 0000 0000 0101
rcall n LLAMADA relativa 2 1101 1nnn nnnn nnnn
reset RESET por software 0000 0000 1111 1111
GIE/GIEH,PEI
retfie s RETORNO de interrupción 2 0000 0000 0001 000s
EIE/GIEL
retlw k RETORNO devolviendo literal en W 2 0000 1100 kkkk kkkk
return s RETORNO de subrutina 2 0000 0000 0001 001s
sleep PUESTA del microprocesador en reposo 1 0000 0000 0000 0011 #TO, #PD

Figura 15.20. Instrucciones de control.

Están por una parte las de salto incondicional, llamada y retorno de subrutina y retorno de interrup-
ción, que ya se conocían del PIC16. No obstante, algunas vienen con pequeñas mejoras. Así, en la
CALL se puede salvar en la Pila el entorno (WREG, STATUS y BSR) para recuperarlos a la vuelta con
RETURN si en ambas se pone el parámetro ‘s=1’. Con el retorno de interrupción sucede lo mismo. El
retorno de subrutina devolviendo un literal (RETLW) y el salto incondicional (GOTO) continúan igual.

Operación: Llamada a subrutina

DIRINI CALL subrutina

Antes de la instrucción: Dirección PC = DIRINI

Después de la instrucción: Dirección PC = Dirección (subrutina)


TOS = Dirección (DIRINI+4)
WS = W
BSRS = BSR
STATUSS = STATUS

Figura 15.21. Ejemplo de utilización de la instrucción CALL.

Se ha añadido además una nueva llamada a subrutina, RCALL, que realiza un salto relativo des-
de la posición en la que se encuentra la instrucción hasta un máximo de 1024 posiciones hacia ade-
lante o hacia atrás.

Operación: Llamada relativa a subrutina

DIRINI RCALL salto

Antes de la instrucción: Dirección PC = DIRINI

Después de la instrucción: Dirección PC = Dirección (salto)


TOS = Dirección (DIRINI+2)

Figura 15.22. Ejemplo de utilización de la instrucción RCALL.


278 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Los saltos condicionales que antes se realizaban combinando la GOTO con una BTFSS o
BTFSC y el bit de STATUS correspondiente, ahora se pueden realizar con instrucciones concretas
como la BC, que salta el número de posiciones de memoria de programa * 2 indicado por el pará-
metro si el bit de acarreo vale 1, con BN para saltar en el caso de que el bit de negativo valga 1, etc.

Operación: Salto si C=1

DIRINI BC 5
NO ;

Antes de la instrucción: Dirección PC = DIRINI

Después de la instrucción: Si C = 1
Dirección PC = DIRINI + 12
Si C = 0
Dirección PC = DIRINI + 2 (NO)

Figura 15.23. Ejemplo de utilización de la instrucción BC.

Con el mismo tipo de salto pero sin responder a ninguna condición se ha creado la BRA, que difie-
re de la GOTO en que esta última salta a una etiqueta mientras que la BRA salta un número de posi-
ciones de memoria de programa, de modo similar a como lo hace la BC. No obstante, hay que tener en
cuenta que si se quiere saltar a una instrucción concreta habrá que conocer el número de palabras de ca-
da instrucción, ya que algunas ocupan dos posiciones (palabra simple) y otras cuatro (doble palabra).
Instrucciones completamente nuevas son las de trabajo con pila, a la cual en los PIC16 no se tenía
acceso. Con POP se extrae un elemento de la cima de la pila y con PUSH se introduce un elemento.
La pila es la misma que se utiliza para almacenar las direcciones de retorno en llamadas a subrutinas
e interrupciones. El elemento extraído se pierde en la POP mientras que el que se guarda con PUSH
es la dirección de la instrucción siguiente a ésta.

Operación: Extracción y almacenamiento de valores en la pila

EJEMPLO1 POP
GOTO etiqueta

Antes de la instrucción: TOS = 00045Ah


PILA = 0123DAh

Después de la instrucción: TOS = 0123DAh


PC = Dirección (etiqueta)

EJEMPLO2 PUSH

Antes de la instrucción: TOS = 045Ah


PC = 0123h

Después de la instrucción: PC = 0125h


TOS = 0125h
PILA = 045Ah

Figura 15.24. Ejemplo de utilización de las instrucciones de pila.


EL REPERTORIO DE INSTRUCCIONES 279

Por último se encuentran instrucciones que no se clasifican dentro de ningún subgrupo, como la
de meter al microcontrolador en estado de reposo (SLEEP), la no-operación (NOP) o el borrado del
perro guardián (CLRWDT). Se han añadido a éstas una reinicialización de los registros por softwa-
re con RESET, que realiza la misma función que se conseguiría poniendo a nivel bajo la patita
MCLR#, y el ajuste decimal del registro W con DAW, para cuando se está trabajando con números
en BCD y se realizan operaciones de suma.

Operación: Ajuste decimal de W

EJEMPLO1 DAW

Antes de la instrucción: W = A5h


C=0
DC = 0

Después de la instrucción: W = 05h


C=1
DC = 0

EJEMPLO2 DAW

Antes de la instrucción: W = CEh


C=0
DC = 0

Después de la instrucción: W = 34h


C=1
DC = 0

Figura 15.25. Ejemplo de utilización de la instrucción DAW.


16 Periféricos y
recursos específicos

16.1. LAS PUERTAS DE ENTRADA/SALIDA

Dependiendo del dispositivo seleccionado dentro de la familia PIC18Fxx20, se puede disponer de


hasta nueve puertas de entrada/salida para los dispositivos de 80 patitas y siete para los de 64.
Todas estas líneas están multiplexadas, es decir, pueden realizar una función u otra según se con-
figuren en el programa. Cada puerta tiene tres registros que comienzan por TRIS, PORT y LAT, y
les sigue la letra que identifica a la puerta: A, B, C, D, E, F, G, H, J.

● TRIS: Para la configuración de las patitas como entrada/salida.


● PORT: Para almacenar los niveles lógicos de las patitas.
● LAT: Para inhibir la salida de los niveles.

En la Figura 16.1 se muestra un modelo simplificado de una puerta de entrada/salida sin las unio-
nes con otros periféricos.
Como ya ocurriera con sus antecesores, la configuración de las puertas se realiza poniendo ‘0’ o
‘1’ en cada una de las posiciones del registro TRIS correspondiente: ‘0’ para configurar esa patita
como salida y ‘1’ para configurarla como entrada. Si es entrada el valor que se encuentre en esa pa-
tita pasará a PORT y si es salida ocurrirá al contrario. Los registros LAT sirven para inhibir la sali-
da de los niveles lógicos.

16.1.1. La Puerta A

Esta puerta tiene 7 líneas. Todas ellas pueden ser entrada/salida digital configurando el registro AD-
CON1 de manera adecuada. Además, cinco de ellas pueden ser entradas al conversor analógico/di-
gital. RA2-RA3 pueden servir también como entradas de referencia a dicho conversor. La segunda
función de RA4 es la de entrada de pulsos para el TMR0. RA5 podrá cumplir además la función de
detección de voltaje bajo, o ser patita de entrada para la selección de esclavo en la comunicación
serie síncrona. Por último, RA6 podrá funcionar como línea de reloj. La explicación detallada de
281
282 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 16.1. Modelo simplificado de puerta de entrada/salida.

todas estas funciones se presenta en la tabla de la Figura 16.2. En la Figura 16.3 se muestran los re-
gistros asociados para la configuración de todas estas funciones.

NOMBRE LÍNEA DESCRIPCIÓN


RA0/AN0 Entrada/salida digital o entrada analógica

RA1/AN1 Entrada/salida digital o entrada analógica


RA2/AN2/VREF- Entrada/salida digital, entrada analógica o tensión de referencia negativa
RA3/AN3/VREF+ Entrada/salida digital, entrada analógica o tensión de referencia positiva

RA4/T0CKI Entrada/salida digital o entrada externa de reloj para el TMR0. La salida es de colector abierto

RA5/AN4/LVDIN Entrada/salida digital, selección de esclavo en MSSP, entrada analógica o detección de voltaje bajo

OSC2/CLKO/RA6 Entrada/salida digital, salida de reloj o patita 2 del oscilador

Figura 16.2. Funciones de las líneas de la Puerta A.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
PORTA — Registro de datos de la puerta A -x0x 0000

LATA — Registro cerrojo de la Puerta A -xx xxxx

TRISA — Registro de configuración de la Puerta A -111 1111

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000

Figura 16.3. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta A.

16.1.2. La Puerta B

Esta puerta tiene 8 líneas con resistencias de Pull-up internas que se pueden habilitar con el bit RB-
PU#. Todas ellas pueden ser entrada/salida digital. Conserva además las ya conocidas funciones de
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 283

servir de interrupción externa por flanco (RB0), aunque hay cuatro interrupciones externas (RB0 a
RB3) en lugar de una. También se mantiene la interrupción por cambio de nivel (RB4-RB7). Las
tres patitas para la programación serie en circuito (ICSPTM) están implementadas en esta puerta. Por
último, una de las patitas sirve de entrada/salida para el módulo CCP2. Las Figuras 16.4 y 16.5 re-
sumen las funciones y los registros que intervienen en el funcionamiento de la Puerta B.

NOMBRE LÍNEA DESCRIPCIÓN


RB0/INT0 Entrada/salida digital o entrada de interrupción externa 0
RB1/INT1 Entrada/salida digital o entrada de interrupción externa 1
RB2/INT2 Entrada/salida digital o entrada de interrupción externa 2
RB3/INT3/CCP2 Entrada/salida digital, entrada de interrupción externa 3 o entrada/salida de módulo CCP2
RB4/KBI0 Entrada/salida digital con interrupción por cambio
RB5/KBI1/PGM Entrada/salida digital con interrupción por cambio o habilitador de grabación en bajo voltaje ICSP
RB6/KBI2/PGC Entrada/salida digital con interrupción por cambio o reloj para programación serie
RB7/KBI3/PGD Entrada/salida digital con interrupción por cambio o datos para programación serie

Figura 16.4. Funciones de las líneas de la Puerta B.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
PORTB Registro de datos de la puerta B xxxx xxxx
LATB Registro cerrojo de la Puerta B xxxx xxxx
TRISB Registro de configuración de la Puerta B 1111 1111
INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000
INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP 1111 1111
INTCON3 INT2IP INT1IP INT3IP INT2IE INT1IE INT3IF INT2IF INT1IF 1100 0000

Figura 16.5. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta B.

16.1.3. La Puerta C

Esta puerta tiene 8 líneas. Además de actuar como entradas/salidas digitales guardan relación con
los módulos CCP, las comunicaciones del USART1 y del módulo MSSP, y el oscilador y entrada de
pulsos del TMR1 y TMR1/TMR3. El funcionamiento con estos periféricos puede variar el valor
asignado a las líneas de TRISC. Las Figuras 16.6 y 16.7 resumen las funciones y los registros que
intervienen en el funcionamiento de la Puerta C.

NOMBRE LÍNEA DESCRIPCIÓN


RC0/T1OSO/T13CKI Entrada/salida digital, salida de oscilador del TMR1 o entrada de reloj de TMR1/TMR3
RC1/T1OSI/CCP2 Entrada/salida digital, entrada de oscilador del TMR1 o entrada/salida de módulo CCP2
RC2/CCP1 Entrada/salida digital o entrada/salida de módulo CCP1
RC3/SCK/SCL Entrada/salida digital o reloj para los modos SPI e I2C
RC4/SDI/SDA Entrada/salida digital o línea de datos para los modos SPI e I2C
RC5/SDO Entrada/salida digital o línea de datos para el modo SPI
RC6/TX1/CK1 Entrada/salida digital, o línea de transmisión asíncrona de datos o de reloj del USART1
RC7/RX1/DT1 Entrada/salida digital, o línea de recepción asíncrona de datos o línea síncrona de datos del USART1

Figura 16.6. Funciones de las líneas de la Puerta C.


284 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
PORTC Registro de datos de la puerta C xxxx xxxx
LATC Registro cerrojo de la Puerta C xxxx xxxx
TRISC Registro de configuración de la Puerta C 1111 1111

Figura 16.7. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta C.

16.1.4. La Puerta D

Esta puerta tiene 8 líneas. Mantienen la función de entrada/salida digital y si se usa el puerto para-
lelo se utiliza como el puerto de datos. Todas sus líneas pueden configurarse además como bits del
bus de dirección/dato. Las Figuras 16.8 y 16.9 resumen las funciones y los registros que intervienen
en el funcionamiento de la Puerta D.

NOMBRE LÍNEA DESCRIPCIÓN


RD0/PSP0/AD0 Entrada/salida digital, bit 0 del puerto paralelo o bit 0 del bus de datos/direcciones

RD1/PSP1/AD1 Entrada/salida digital, bit 1 del puerto paralelo o bit 1 del bus de datos/direcciones

RD2/PSP2/AD2 Entrada/salida digital, bit 2 del puerto paralelo o bit 2 del bus de datos/direcciones

RD3/PSP3/AD3 Entrada/salida digital, bit 3 del puerto paralelo o bit 3 del bus de datos/direcciones

RD4/PSP4/AD4 Entrada/salida digital, bit 4 del puerto paralelo o bit 4 del bus de datos/direcciones

RD5/PSP5/AD5 Entrada/salida digital, bit 5 del puerto paralelo o bit 5 del bus de datos/direcciones

RD6/PSP6/AD6 Entrada/salida digital, bit 6 del puerto paralelo o bit 6 del bus de datos/direcciones

RD7/PSP7/AD7 Entrada/salida digital, bit 7 del puerto paralelo o bit 7 del bus de datos/direcciones

Figura 16.8. Funciones de las líneas de la Puerta D.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
PORTD Registro de datos de la puerta D xxxx xxxx

LATD Registro cerrojo de la Puerta D xxxx xxxx

TRISD Registro de configuración de la Puerta D 1111 1111

PSPCON IBF OBF IBOV PSPMODE — — — — 0000 ----

MEMCON EBDIS — WAIT1 WAIT0 — — WM1 WM0 0-00 --00

Figura 16.9. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta D.

16.1.5. La Puerta E

Esta puerta tiene 8 líneas. Junto con la función de entrada/salida digital, se encuentran las de servir
de líneas de control en la comunicación paralela o ser bits de dirección/dato. RE7 funciona además
con el módulo CCP2. Las Figuras 16.10 y 16.11 resumen las funciones y los registros que intervie-
nen en el funcionamiento de la Puerta E.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 285

NOMBRE LÍNEA DESCRIPCIÓN


RE0/RD#/AD8 Entrada/salida digital, línea de control de lectura del Puerto Paralelo Esclavo o bit 8 del bus de datos/direcciones

RE1/WR#/AD9 Entrada/salida digital, línea de control de escritura del Puerto Paralelo Esclavo o bit 9 del bus de datos/direcciones

RE2/RD#/AD10 Entrada/salida digital, línea de control de selección del Puerto Paralelo Esclavo o bit 10 del bus de datos/direcciones

RE3/AD11 Entrada/salida digital o bit 11 del bus de datos/direcciones

RE4/AD12 Entrada/salida digital o bit 12 del bus de datos/direcciones

RE5/AD13 Entrada/salida digital o bit 13 del bus de datos/direcciones

RE6/AD14 Entrada/salida digital o bit 14 del bus de datos/direcciones

RE7/CCP2/AD15 Entrada/salida digital, entrada/salida de módulo CCP2 o bit 15 del bus de datos/direcciones

Figura 16.10. Funciones de las líneas de la Puerta E.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
TRISE Registro de configuración de la Puerta E 1111 1111

PORTE Registro de datos de la puerta E xxxx xxxx

LATE Registro cerrojo de la Puerta E xxxx xxxx

PSPCON IBF OBF IBOV PSPMODE — — — — 0000 ----

MEMCON EBDIS — WAIT1 WAIT0 — — WM1 WM0 0-00 --00

Figura 16.11. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta E.

16.1.6. La Puerta F

Consta de 8 líneas. Además de entrada/salida digital, siete de sus líneas pueden ser entradas analó-
gicas para el conversor y la octava servir para la selección de esclavo cuando se trabaja con el mó-
dulo MSSP. De esas siete, seis guardan relación con el comparador pues actúan como entrada, sali-
da o tensión de referencia de éste. Si se quieren utilizar como líneas normales el comparador deberá
estar deshabilitado. Las Figuras 16.12 y 16.13 resumen las funciones y los registros que intervienen
en el funcionamiento de la Puerta F.

NOMBRE LÍNEA DESCRIPCIÓN


RF0/AN5 Entrada/salida digital o entrada analógica
RF1/AN6/C2OUT Entrada/salida digital, entrada analógica o salida 2 del comparador
RF2/AN7/C1OUT Entrada/salida digital, entrada analógica o salida 1 del comparador
RF3/AN8 Entrada/salida digital, entrada analógica o entrada al comparador
RF4/AN9 Entrada/salida digital, entrada analógica o entrada al comparador
RF5/AN10/CVREF Entrada/salida digital, entrada analógica, entrada al comparador o salida de referencia del comparador
RF6/AN11 Entrada/salida digital, entrada analógica o entrada al comparador
RF7/SS# Entrada/salida digital o patita de selección de esclavo en módulo MSSP

Figura 16.12. Funciones de las líneas de la Puerta F.


286 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
TRISF Registro de configuración de la Puerta F 1111 1111

PORTF Registro de datos de la puerta F xxxx xxxx

LATF Registro cerrojo de la Puerta F xxxx xxxx

ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000

CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000 0000

CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0000

Figura 16.13. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta F.

16.1.7. La Puerta G

Esta puerta tiene 5 líneas. Cada una tiene dos funciones: entrada/salida digital y ser entrada/salida
de uno de los módulos CCP o participar en la comunicación del USART2. Las Figuras 16.14 y
16.15 resumen las funciones y los registros que intervienen en el funcionamiento de la Puerta G.

NOMBRE LÍNEA DESCRIPCIÓN

RG0/CCP3 Entrada/salida digital o entrada/salida de módulo CCP3

RG1/TX2/CK2 Entrada/salida digital, o línea de transmisión asíncrona de datos o de reloj del USART2

RG2/RX2/DT2 Entrada/salida digital, o línea de recepción asíncrona de datos o línea síncrona de datos del USART2

RG3/CCP4 Entrada/salida digital o entrada/salida de módulo CCP4

RG4/CCP5 Entrada/salida digital o entrada/salida de módulo CCP5

Figura 16.14. Funciones de las líneas de la Puerta G.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR

PORTG — — — Registro de datos de la puerta G ---x xxxx

TRISG — — — Registro de configuración de la Puerta G ---1 1111

LATG — — — Registro cerrojo de la Puerta G ---x xxxx

Figura 16.15. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta G.

16.1.8 La Puerta H

Tiene 8 líneas. Además de funcionar cómo entrada/salida digital, cuatro de ellas pueden ser entra-
das analógicas y las otras cuatro, bits de dirección para el interfaz de memoria externa. Las Figu-
ras 16.16 y 16.17 resumen las funciones y los registros que intervienen en el funcionamiento de la
Puerta H.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 287

NOMBRE PATITA DESCRIPCIÓN


RH0/A16 Entrada/salida digital o bit 16 de dirección para interfaz de memoria externa
RH1/A17 Entrada/salida digital o bit 17 de dirección para interfaz de memoria externa
RH2/A18 Entrada/salida digital o bit 18 de dirección para interfaz de memoria externa
RH3/A19 Entrada/salida digital o bit 19 de dirección para interfaz de memoria externa
RH4/AN12 Entrada/salida digital o entrada analógica
RH5/AN13 Entrada/salida digital o entrada analógica
RH6/AN14 Entrada/salida digital o entrada analógica
RH7/AN15 Entrada/salida digital o entrada analógica

Figura 16.16. Funciones de las líneas de la Puerta H.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
TRISH Registro de configuración de la Puerta H 1111 1111
PORTH Registro de datos de la puerta H xxxx xxxx
LATH Registro cerrojo de la Puerta H xxxx xxxx
ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000
MEMCON EBDIS — WAIT1 WAIT0 — — WM1 WM0 0-00 --00

Figura 16.17. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta H.

16.1.9. La Puerta J

Dispone de 8 líneas que se dedican a ser entrada/salida digital o a participar en el control del inter-
faz de memoria externa. Las Figuras 16.18 y 16.19 resumen las funciones y los registros que inter-
vienen en el funcionamiento de la Puerta J.

NOMBRE PATITA DESCRIPCIÓN


RJ0/ALE Entrada/salida digital o control de habilitación de dirección para interfaz de memoria externa
RJ1/OE Entrada/salida digital o control de habilitación de salida para interfaz de memoria externa
RJ2/WRL Entrada/salida digital o control de escritura del byte bajo para interfaz de memoria externa
RJ3/WRH Entrada/salida digital o control de escritura del byte alto para interfaz de memoria externa
RJ4/BA0 Entrada/salida digital o control de byte de dirección 0 para interfaz de memoria externa
RJ5/CE Entrada/salida digital o control de selección de dispositivo para interfaz de memoria externa
RJ6/LB Entrada/salida digital o control de selección de byte inferior para interfaz de memoria externa
RJ7/UB Entrada/salida digital o control de selección de byte superior para interfaz de memoria externa

Figura 16.18. Funciones de las líneas de la Puerta J.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
PORTJ Registro de datos de la puerta J xxxx xxxx
LATJ Registro cerrojo de la Puerta J xxxx xxxx
TRISJ Registro de configuración de la Puerta J 1111 1111

Figura 16.19. Resumen de los bits de los registros que se utilizan en el manejo y programación de la
Puerta J.
288 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

16.2. TEMPORIZADORES

Todos los modelos de la familia PIC18Fxx20 disponen de 5 temporizadores, denominados TMR0,


TMR1, TMR2, TMR3 y TMR4, dos de ellos de 8 bits y tres de 16. Se pasa a describir cada uno de
ellos con sus registros asociados.

16.2.1. El TMR0

El TMR0 puede funcionar como temporizador o como contador de eventos en modo de 8 o 16 bits.
Los registros para llevar el contaje son TMR0H:TMR0L y su registro de control T0CON.
Este último registro es el encargado de controlar todos los aspectos de funcionamiento del mó-
dulo como son su encendido/apagado, funcionamiento en 8/16 bits, selección del reloj interno/ex-
terno, flanco del pulso en reloj externo y selección del predivisor. Todos los posibles valores se re-
cogen en la Figura 16.20.

REGISTRO T0CON

TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0

7 0

TMR0ON: Bit de control On/Off.


1 = Habilita Timer0.
0 = Deshabilita Timer0.

T08BIT: Bit de control de 8/16 bits.


1 = Timer0 es configurado como un temporizador/contador de 8 bits.
0 = Timer0 es configurado como un temporizador/contador de 16 bits.

T0CS: Bit de selección fuente de reloj.


1 = Transición en pin T0CKI.
0 = Reloj de ciclo de instrucción interna (CLK0).

T0SE: Bit selección flanco T0CKI.


1 = Incrementa en los flancos descendentes del pin T0CKI.
0 = Incrementa en los flancos ascendentes del pin T0CKI.

PSA: Bit asignación del predivisor.


1 = El predivisor de Timer0 no está asignado.
0 = El predivisor de Timer0 está asignado.

T0PS2- T0PS0: Bits de selección del predivisor.


111 = Predivisor 1:256
110 = Predivisor 1:128
101 = Predivisor 1: 64
100 = Predivisor 1:32
011 = Predivisor 1:16
010 = Predivisor 1:8
001 = Predivisor 1:4
000 = Predivisor 1:2

Figura 16.20. Designación y misión de cada uno de los bits del registro T0CON.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 289

Cuando el TMR0 se modifica, el incremento se inhibe durante dos ciclos, pero luego cuenta has-
ta desbordarse y activar el señalizador correspondiente, pudiendo provocar interrupción si ésta ha si-
do habilitada.
En la Figura 16.21 se muestra el diagrama de bloques simplificado del TMR0 en modo 16 bits.
La representación del modo 8 bits sería la misma quitando la parte correspondiente al ‘octeto alto’
y ‘TMR0H’ del dibujo (zona sombreada).

Figura 16.21. Diagrama de bloques simplificado del TMR0 en modo 16 bits.

Para realizar la lectura o escritura del TMR0 se debe hacer en un orden determinado para que no
se produzcan errores de actualización. En el caso de la escritura, se escribirá primero el valor de la
parte alta (TMR0H) y luego el de la parte baja (TMR0L). Al realizar esta segunda escritura el valor
de TMR0H pasa al ‘octeto alto’, que no es directamente escribible ni leíble, y de esta forma se rea-
liza al mismo tiempo la actualización de ambos registros. Una vez actualizado el TMR0 se deter-
minará su predivisor, ya que cualquier operación sobre el TMR0 lo habrá puesto a 0. De igual mo-
do, al realizar una lectura se hará del registro TMR0L, momento en el cual el valor del ‘octeto alto’
pasará a TMR0H y se tendrá la pareja de registros con los valores correctos. La Figura 16.22 pre-
senta la totalidad de registros que intervienen en el funcionamiento del TMR0.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
TMR0H Byte de mayor peso del registro Timer0 0000 0000

TMR0L Byte de menor peso del registro Timer0 xxxx xxxx

T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111

INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000

TRISA — Registro de configuración de la Puerta A -111 1111

Figura 16.22. Resumen de los bits de los registros que se utilizan en el manejo y programación del
TMR0.

16.2.2. El TMR1

El TMR1 es un módulo que puede funcionar como temporizador o como contador síncrono/asín-
crono, de 16 bits. Los registros para llevar el contaje son TMR1H:TMR1L y su registro de control
T1CON.
290 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Con este último registro se determina su encendido/apagado, la fuente de reloj, el predivisor, y


el modo de lectura/escritura. Todos los posibles valores se recogen en la Figura 16.23.

REGISTRO T1CON

RD16 — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON

7 0

RD16: Bit que habilita el modo lectura/escritura de 16-bit.


1 = Habilita el registro de lectura/escritura de Timer1 en una operación 16-bit.
0 = Habilita el registro de lectura/escritura de Timer1 en dos operaciones 8-bit.

Bit 6: No implementado. Se lee como ‘0’.

T1CKPS1- T1CKPS0: Bits de selección del predivisor de reloj de entrada.


11 = Predivisor 1:8
10 = Predivisor 1:4
01 = Predivisor 1:2
00 = Predivisor 1:1

T1OSCEN: Bit de habilitación del oscilador.


1 = El oscilador de Timer1 está habilitado.
0 = El oscilador de Timer1 está deshabilitado.

T1SYNC#: Bit de selección de la sincronización de salida del reloj externo.

Si TMR1CS=1:
1 = No sincroniza la entrada externa de reloj.
0 = Sincroniza la entrada externa de reloj.

Si TMR1CS=0:
El bit se ignora

TMR1CS: Bit de selección de fuente de reloj.


1 = Reloj externo desde el pin RC0/T1OSO/T13CKI.
0 = Reloj interno (FOSC/4).

TMR1ON: Bit de control On/Off.


1 = Habilita Timer1
0 = Deshabilita Timer1

Figura 16.23. Designación y misión de cada uno de los bits del registro T1CON.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 291

Figura 16.24. Diagrama de bloques simplificado del TMR1 con la operación en modo lectura/escritura.

En la Figura 16.24 se muestra el diagrama de bloques simplificado del TMR1 con la operación
en modo lectura/escritura.
Con el bit RD16 se configura el modo de lectura/escritura.
Cuando el TMR1 está habilitado las patitas RC1/T1OSI y RC0/T1OSO/T13CKI se convierten
en entradas, de modo que no se tiene en cuenta los valores de TRISC<1:0> y las patitas se leen co-
mo ‘0’.
Las fuentes de reloj pueden ser varias, como ya sucedía con el TMR1 de los PIC16, llegando in-
cluso a incorporar un oscilador propio de baja potencia, que puede cumplir funcionalidades como
la de implementación de un reloj en tiempo real. Para habilitar dicho oscilador se debe activar el bit
T1OSCEN y realizar un circuito como el que, por ejemplo, se presenta en la Figura 16.25, y lo más
cerca posible del microcontrolador. Los valores de condensadores y cristal son los recomendados
por Microchip para validar el circuito del oscilador, aunque luego el usuario pueda variarlos. Con
esta elección el TMR1 seguirá funcionando aunque el microcontrolador se meta en estado de bajo
consumo (SLEEP). Si se elige esta fuente de reloj, una vez activado el TMR1, se debe realizar una
rutina de retraso en el programa para asegurar la correcta puesta en marcha del oscilador.
El TMR1 puede ser configurado en el modo de baja potencia, lo cual significa que consume me-
nos pero es más sensible a interferencias. Esto se hace configurando el bit LPT1OSC, que es un bit
general del sistema. Por defecto, el modo es de nivel de energía alta.
Una vez configurado, el TMR1 contará hasta desbordarse, activar el señalizador correspondien-
te, y podrá provocar interrupción si ésta ha sido habilitada. También podrá ser inicializado por el
módulo CCP programado en evento especial. Para leer o escribir sus registros se deben seguir los
mismos pasos que para el TMR0.
La Figura 16.26 presenta la totalidad de registros que intervienen en el funcionamiento del
TMR1.
292 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 16.25. Circuito para un oscilador típico LP utilizado como fuente de reloj para el TMR1.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR

INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000

TMR1H Byte de mayor peso del Registro Timer1 xxxx xxxx

TMR1L Byte de menor peso del Registro Timer1 xxxx xxxx

T1CON RD16 — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON 0-00 0000

IPR1 PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 0111 1111

PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000

PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000

Figura 16.26. Resumen de los bits de los registros que se utilizan en el manejo y programación del
TMR1.

16.2.3. El TMR2 y el TMR4

El TMR2 y el TMR4 de los PIC18 tienen exactamente el mismo tipo de registros y se comportan de
igual forma que el TMR2 de los PIC16, ya explicados en el Capítulo 5, de modo que no los vamos
a repetir. Se muestran los registros asociados a estos temporizadores con la nomenclatura corres-
pondiente.
El esquema simplificado de la Figura 16.28 podría servir de igual forma para ambos temporiza-
dores sin más que cambiar los números contenidos en el nombre de los bits (2 para el TMR2 y 4 pa-
ra el TMR4). La única diferencia existente es que mientras la salida del TMR2 sirve tanto para el
módulo PWM como para el MSSP, el del TMR4 sólo se utiliza en el de PWM.

16.2.4. El TMR3

El TMR3 es muy similar al TMR1, ya que como él puede funcionar como temporizador o como
contador síncrono/asíncrono, pero de 16 bits. Los registros para llevar el contaje son
TMR3H:TMR3L y su registro de control T3CON.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 293

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR

INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000

IPR1 PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 0111 1111

PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000

PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000

TMR2 Registro del Timer2 0000 0000

PR2 Registro de periodo del Timer2 1111 1111

T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000

IPR3 — — RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP --11 1111

PIR3 — — RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF --00 0000

PIE3 — — RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE --00 0000

TMR4 Registro del Timer4 0000 0000

PR4 Registro de configuración de periodo del Timer4 1111 1111

T4CON — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000

Figura 16.27. Resumen de los bits de los registros que se utilizan en el manejo y programación del
TMR2 y del TMR4.

Figura 16.28. Diagrama de bloques simplificado del TMR2/TMR4.

Dicho registro de control tiene una variación con respecto al de control del TMR1, y es que po-
see un bit, T3CCP2, que sirve para determinar si los temporizadores TMR1 y/o TMR3 van a ser usa-
dos como fuentes de reloj para los módulos CCP. Todos los valores de este registro se recogen en la
Figura 16.29.

REGISTRO T3CON

RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC# TMR3CS TMR3ON

7 0
294 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

RD16: Bit que habilita el modo lectura/escritura de 16-bit.


1 = Habilita el registro de lectura/escritura de Timer3 en una operación 16-bit.
0 = Habilita el registro de lectura/escritura de Timer3 en dos operaciones 8-bit.

T3CCP2: Bit que habilita el TIMER3 y el TIMER1 con CCPx.


1 = TIMER3 es la fuente de reloj Captura/Comparación para los módulos CCP.
0 = Depende de T3CCP1.

T3CKPS1- T3CKPS0: Bits de selección del predivisor del reloj de entrada.


00 = Predivisor 1:8
01 = Predivisor 1:4
10 = Predivisor 1:2
11 = Predivisor 1:1

T3CCP1: Bit que habilita el TIMER3 y TIMER1 con CCPx.

Si = 1:
TIMER3 es la fuente de reloj Captura/Comparación para los módulos CCP2.
TIMER1 es la fuente de reloj Captura/Comparación para los módulos CCP1.

Si = 0:
TIMER1 es la fuente de reloj Captura/Comparación para los módulos CCP.

T3SYNC#: Bit de Sincronización de control del reloj externo.


(no se tiene en cuenta si el reloj viene de Timer1/Timer3)

Si TMR3CS=1:
1 = No sincroniza la entrada externa de reloj.
0 = Sincroniza la entrada externa de reloj.

Si TMR3CS=0:
El bit se ignora.

TMR3CS: Bit de selección de fuente de reloj.


1 = Reloj externo.
0 = Reloj interno (FOSC/4).

TMR3ON: Bit de control On/Off.


1 = Habilita Timer3.
0 = Deshabilita Timer3.

Figura 16.29. Designación y misión de cada uno de los bits del registro T3CON.

En la Figura 16.30 se muestra el diagrama de bloques simplificado del TMR3 con la operación
en modo lectura/escritura.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 295

Figura 16.30. Diagrama de bloques simplificado del TMR3 con la operación en modo lectura/escritura.

Cuando se elige como fuente de reloj un oscilador externo (TMR3CS=1) dicho oscilador se to-
ma del TMR1 por las patitas RC1/T1OSI y RC0/T1OSO/T13CKI. Para ello el oscilador debe estar
habilitado con T1OSCEN=1.
La activación del señalizador y llamada a interrupción, si se hubiera habilitado, también se pro-
ducirá por desbordamiento.
La Figura 16.31 presenta la totalidad de registros que intervienen en el funcionamiento del
TMR3.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000

IPR2 — CMIP — EEIP BCLIP LVDIP TMR3IP CCP2IP -1-1 1111

PIR2 — CMIF — EEIF BCLIF LVDIF TMR3IF CCP2IF -0-0 0000

PIE2 — CMIE — EEIE BCLIE LVDIE TMR3IE CCP2IE -0-0 0000

TMR3H Byte de mayor peso del Registro Timer3 xxxx xxxx

TMR3L Byte de menor peso del Registro Timer3 xxxx xxxx

T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC# TMR3CS TMR3ON 0000 0000

T1CON RD16 — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC# TMR1CS TMR1ON 0-00 0000

Figura 16.31. Resumen de los bits de los registros que se utilizan en el manejo y programación del
TMR3.
296 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

16.3. MÓDULOS CCP: CAPTURA, COMPARACIÓN Y MODULACIÓN DE ANCHURA


DE PULSOS

Todos los componentes de la familia PIC18Fxx20 incorporan cinco módulos CCP (captura/compa-
ración/PWM). Las operaciones de todos ellos son idénticas, a excepción de un evento especial só-
lo presente en CCP1 y CCP2.
Cada módulo CCP tiene asociado un registro de control (CCPxCON) y una pareja de registros
de datos, compuesta por dos registros de 8 bits: CCPRxH:CCPRxL, donde ‘x’ se sustituye por el nú-
mero del módulo. Todos los registros se pueden leer y escribir.
El registro CCPxCON con sus posibles valores se muestra en la Figura 16.32.

REGISTRO CCPxCON

— — DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0

7 0

Bits 7-6: No implementados. Se leen como ‘0’.

DCxB1-DCxB0: Bits más significativos (10-9) para PWM.

CCPxM3-CCPxM0: Bits de selección de modo del módulo CCPx.


0000 = Captura/Comparación/PWM deshabilitado (borra el módulo CCPx).
0001 = Reservado.
0010 = Modo comparación, activar.
0011 = Reservado.
0100 = Modo captura, cada flanco descendente.
0101 = Modo captura, cada flanco ascendente.
0110 = Modo captura, cada 4 flancos ascendentes.
0111 = Modo captura, cada 16 flancos ascendentes.
1000 = Modo comparación, pone a 1 el pin CCPx.
1001 = Modo comparación, pone a 0 el pin CCPx.
1010 = Modo comparación, genera interrupción por software.
1011 = Modo comparación, evento disparo especial. Se resetea TMR1 y TMR3
en CCP1 y CCP2.
11xx = Modo PWM.

Figura 16.32. Designación y misión de cada uno de los bits del registro CCPxCON.

Los módulos CCP utilizan los Temporizadores TMR1 o TMR3 para los modos de captura/com-
paración, y TMR2 o TMR4 para el modo PWM. En la Figura 16.33 se muestran las configuracio-
nes posibles.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 297

Figura 16.33. Interconexión de los módulos CCP y los temporizadores.

Cuando se selecciona el modo de disparo por eventos especiales, se resetea el par de registros del
temporizador, lo que hace que los módulos CCP sirvan como registros periódicos programables pa-
ra los temporizadores. El módulo CCP2 puede además activar una conversión, para lo cual el con-
versor ha debido ser habilitado previamente.

16.3.1. Modo captura

En el modo captura, CCPRxH:CCPRxL capturan el valor de 16 bits del registro TMR1 o del TMR3
cuando ocurre un evento en la patita asociada al módulo. Los eventos pueden ser alguno de los si-
guientes:

● Cada flanco de subida.


● Cada flanco de bajada.
● Cada cuatro flancos de subida.
● Cada dieciséis flancos de subida.

El evento es seleccionado por los bits de control CCPxM3:CCPxM0 (CCPxCON<3:0>). Cuan-


do la captura está hecha, el señalizador asociado CCPxIF se activa. Si ocurre otra captura antes de
que sea leído el valor en los registros CCPRxH:CCPRxL, el antiguo valor capturado se sobrescribe
por la nueva captura. Los temporizadores deben estar configurados en modo síncrono y la patita co-
rrespondiente como entrada. En la Figura 16.34 se muestra el diagrama de bloques que explica la
operación en modo captura.
298 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura 16.34. Diagrama de bloques simplificado de la operación del módulo en modo captura.

16.3.2. Modo comparación

En modo comparación, el valor de los registros CCPRxH:CCPRxL es constantemente comparado


con el valor del TMR1 o TMR3. Cuando coinciden, la patita correspondiente del módulo:

● Se pone a nivel alto.


● Se pone a nivel bajo.
● Cambia su nivel por el contrario al que tiene.
● Se mantiene sin cambio.

Los temporizadores deben estar configurados en modo síncrono y la patita correspondiente co-
mo salida.
En la Figura 16.35 se muestra el diagrama de bloques que explica la operación en modo com-
paración.

Figura 16.35. Diagrama de bloques simplificado de la operación del módulo en modo comparación.
PERIFÉRICOS Y RECURSOS ESPECÍFICOS 299

16.3.3. Modo modulación de anchura de pulsos (PWM)

En el modo PWM, la patita correspondiente al módulo produce una salida PWM (Modulación de
Anchura de Pulsos) de hasta una resolución de 10 bit. Como dicha patita es multiplexada con los da-
tos de PORTC, se debe configurar como salida.
En la Figura 16.36 se muestra el diagrama de bloques que explica la operación en modo PWM.

Figura 16.36. Diagrama de bloques simplificado de la operación del módulo en modo PWM.

La Figura 16.37 presenta la totalidad de registros que intervienen en el funcionamiento de los


módulos CCP.

NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VALOR EN POR, BOR
INTCON GIE/GIEH PEIE/GIEL INT0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 0000

RCON IPEN