Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primera parte
PIC12F508 Y PIC16F84A
Lenguajes Ensamblador, C y PBASIC
4.a edición
MICROCONTROLADORES «PIC»
DISEÑO PRÁCTICO DE APLICACIONES
Primera parte
PIC12F508 Y PIC16F84A
Lenguajes Ensamblador, C y PBASIC
4.a edición
No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la trans-
misió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.
McGraw-Hill/Interamericana
de España, S.A.U.
DERECHOS RESERVADOS © 2007, respecto a la cuarta 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)
www.mcgraw-hill.es
universidad@mcgraw-hill.com
ISBN: 978-84-481-5647-3
Depósito legal: M.
Editor: Carmelo Sánchez González
Asistente editorial: Israel Sebastián
Diseño de cubierta: Luis Sanz Cantero
Compuesto en: Fernández Ciudad, S. L.
Impreso en:
TEORÍA
Capítulo 1. Microcontrolador: la solución está en un chip .............................. 3
Capítulo 2. Los PIC, una familia numerosa ..................................................... 21
Capítulo 3. El más humilde de la gama básica: PIC12F508 ............................ 37
Capítulo 4. Las memorias ................................................................................ 49
Capítulo 5. Recursos y periféricos principales................................................. 61
Capítulo 6. Recursos auxiliares........................................................................ 75
Capítulo 7. El repertorio de instrucciones........................................................ 81
APLICACIONES PRÁCTICAS
TEORÍA
APLICACIONES PRÁCTICAS
vii
viii PRÓLOGO
Primera: PIC12F508
Teoría: Funcionamiento, arquitectura y repertorio de instrucciones. Práctica: Colec-
ción de doce aplicaciones desarrolladas con la PIC School de complejidad progresiva en
los lenguajes Ensamblador y C.
Segunda: PIC16F84A
Teoría: Funcionamiento, arquitectura y repertorio de instrucciones. Práctica: Colec-
ción de varias aplicaciones desarrolladas con la PIC School de complejidad progresiva
en Ensamblador y C.
PRÓLOGO ix
TEORÍA
CAPÍTULO
Microcontrolador:
la solución está en un chip
1
Figura 1.1. El microcontrolador es tan pequeño que podría incrustarse en un dado y cambiar su suerte.
3
4 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.2. Fotografía de un ratón para PC abierto. Se distingue el microcontrolador que se encarga de
recoger los movimientos de la «bola» y transferirlos al PC para producir los desplazamien-
tos correspondientes del cursor en la pantalla.
Figura 1.4. Distribución porcentual de la producción mundial de microcontroladores en las cinco grandes
áreas de aplicación.
1.o Comunicaciones.
2.o Gran consumo.
3.o Automoción.
4.o Informática.
5.o Industria.
Figura 1.5. Las comunicaciones absorben la mayor parte de la producción mundial de microcontrolado-
res, siendo el teléfono móvil uno de los dispositivos que más utilizan.
Figura 1.6. Los electrodomésticos de línea blanca y marrón, como el televisor, precisan numerosos mi-
crocontroladores para optimizar su funcionamiento y sus prestaciones.
Figura 1.7. Bastantes sistemas de control, confort y seguridad del automóvil son gobernados por micro-
controladores.
Figura 1.8. Casi todos los periféricos del computador, como la impresora, utilizan microcontroladores.
8 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.9. Los robots industriales precisan numerosos y potentes microcontroladores para su control.
Además de las cinco áreas comentadas, van apareciendo constantemente otras nue-
vas que precisan el empleo de microcontroladores, como la industria militar, la electro-
medicina, los juegos, la navegación espacial, etc.
Figura 1.10. Fotografía de una pistola para la medida del dolor en pacientes de fibromialgia basada en
microcontrolador.
MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP 9
1. Unidad de proceso:
A. Procesador.
B. Memoria de programa.
C. Memoria de datos.
D. Líneas de E/S.
2. Periféricos complementarios:
A. Temporizadores.
B. Conversores A/D.
C. Comparadores analógicos.
D. Puertos de comunicación.
E. Otros.
3. Recursos auxiliares:
A. Circuito de reloj.
B. Modos de bajo consumo.
C. Perro Guardián.
D. «Reset» al conectar la alimentación.
E. Otros.
Lo verdaderamente curioso es que con tantas cosas como hay dentro del microcon-
trolador sólo existe comunicación con el exterior a través de las patitas o «pines» exis-
tentes en la cápsula, que pueden ser tan pocas como seis u ocho. Dichas patitas sirven
para recibir la alimentación, la señal de reloj para sincronizar su funcionamiento, para
controlar los periféricos externos a gobernar y para sacar o introducir información con
el mundo exterior (Fig. 1.11).
Si sólo existiese un modelo de microcontrolador, éste debería tener muy potenciados
todos sus recursos para poderse adaptar a las exigencias de las múltiples aplicaciones
posibles. Esta potenciación supondría un despilfarro en muchos casos. En la práctica,
cada fabricante oferta un elevado número de modelos diferentes desde los más sencillos
hasta los más potentes. Es posible seleccionar la capacidad de la memoria, la velocidad
de funcionamiento, los periféricos y recursos complementarios, el número de líneas de
E/S, etc. Por todo ello, un aspecto muy destacado en la labor del ingeniero de diseño es
la elección del microcontrolador apropiado.
EJEMPLO
Un horno microondas se gobierna mediante un microcontrolador en el que se almacena
el programa, que tiene 382 instrucciones, cada una de las cuales ocupa una palabra
de la memoria de código. Para soportar el teclado y la pantalla LCD necesita de doce
10 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.11. El computador que hay en el microcontrolador sólo dispone de las patitas exis-
tentes en el encapsulado para comunicarse con los periféricos y dispositivos
externos a gobernar, recibir la alimentación y la señal de reloj.
Memoria instr.
Modelo Líneas E/S Precio (euros)
(palabras)
SOLUCIÓN
Para esta aplicación es suficiente el PIC16F83 y su empleo supone una importante eco-
nomía de material y mano de obra.
Figura 1.12. Un computador basado en un microprocesador es un sistema «abierto» que puede configu-
rarse a medida adaptando a sus buses los módulos necesarios.
Por las patitas de un microprocesador salen al exterior las líneas de los buses de
direcciones, de datos y de control para permitir comunicar el procesador con la Memo-
ria y los Módulos de E/S para configurar un computador completo. De esta manera, el
computador completo se construye con varios circuitos integrados y se dice que el sis-
tema que configura un microprocesador es «abierto» porque su estructura varía según la
aplicación a la que se destine (Fig. 1.12).
Figura 1.13. Alrededor del microprocesador Pentium se distribuyen y conectan los módulos de memoria
y de periféricos que configuran el PC.
1. Procesador o UCP.
2. Memoria para las instrucciones y para los datos.
3. Líneas de E/S para la comunicación con el exterior.
4. Periféricos, como temporizadores, conversores AD, comparadores analógicos, etc.
5. Recursos auxiliares, como Perro Guardián, circuito de reloj, modo de funcionamiento
con bajo consumo, etc.
1.5.1. El procesador
Es la parte más importante del computador y se compone de dos grandes bloques:
Figura 1.14. La Unidad de Control de la UCP recibe las instrucciones de la memoria, las interpreta y
gobierna al Camino de Datos para realizar las operaciones correspondientes con los datos.
Figura 1.15. La arquitectura Harvard, habitual en los microcontroladores, dispone de memorias inde-
pendientes para datos e instrucciones.
A) ROM
El programa se graba en la memoria del microcontrolador durante su fabricación me-
diante el uso de «máscaras». Los altos costes de diseño e instrumental sólo aconsejan el
uso de la ROM en series de producción muy altas, como sucede con los electrodomésti-
cos y productos de gran consumo. No se puede borrar ni volver a utilizar.
B) EPROM
Si el microcontrolador dispone de memoria EPROM para contener el programa, la gra-
bación del mismo se realiza con un dispositivo (grabador) gobernado desde un PC. En la
superficie de la cápsula del microcontrolador hay una ventana de cristal por la que puede
someterse al chip a rayos ultravioleta para conseguir el borrado de la memoria EPROM y
utilizarla nuevamente. Este tipo de memoria es muy interesante en la fase de diseño y de-
puración de programas, pero su coste unitario es elevado y su manipulación es complicada
y precisa de grabadores y «quemadores».
D) EEPROM
La grabación es similar a la de las memorias EPROM y OTP, pero el borrado para su
reutilización es mucho más simple, porque utiliza el mismo procedimiento eléctrico que
en la grabación. Sobre el mismo zócalo del grabador se puede programar y borrar tantas
veces como se desee. Es ideal en aplicaciones de diseño y educativas. Además de servir
para guardar el programa, en muchos modelos hay una parte de EEPROM como memo-
ria de datos no volátiles que tan necesarios son en algunas aplicaciones.
Es una memoria no volátil que suele garantizar el fabricante hasta un millón de
ciclos de grabación/borrado. Como inconveniente, destaca el elevado y variable tiempo
que se precisa para la escritura y el borrado, la dificultad de alcanzar grandes capacida-
des y el elevado consumo de energía. Está siendo desplazada por la tecnología FLASH.
E) FLASH
Se trata de una memoria no volátil, de bajo consumo, que se puede grabar y borrar en cir-
cuito al igual que las EEPROM, aunque disponen de mayor capacidad que estas últimas.
Se suelen garantizar los mil ciclos de grabado/borrado. El borrado y la escritura se realiza
sobre bloques completos en lugar de bytes en la EEPROM.
Son muy recomendables en aplicaciones en las que haya que modificar el programa
a lo largo de la vida del producto como consecuencia del desgaste o de cambios de piezas
o especificaciones, como ocurre con los automóviles.
a) Circuito de reloj, que genera los impulsos que sincronizan el funcionamiento de todo
el sistema.
b) Temporizadores, destinados a controlar tiempos y retardos.
c) Perro Guardián («watchdog»), que vigila el programa y lo reinicializa cuando se blo-
quea.
d) Conversores A/D y D/A.
e) Comparadores analógicos, para analizar las señales analógicas.
f) Sistemas de protección ante fallos de la alimentación.
g) Modos de funcionamiento de bajo consumo.
h) Protocolos de comunicación, como I2C, USART, bus CAN, USB, etc.
Figura 1.16. Un proyecto con microcontrolador se materializa en una tarjeta de circuito impreso que
contiene al microcontrolador con el programa grabado y unos pocos elementos auxiliares.
La fotografía muestra una tarjeta para la creación de prototipos basados en PIC.
MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP 17
Figura 1.17. El entorno MPLAB IDE de Microchip contiene todas las herramientas necesarias para el des-
arrollo del software de los proyectos que utilizan microcontroladores PIC.
18 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.18. Fotografía del grabador de PIC denominado «PIC’ Burner», de Ingeniería de Microsiste-
mas Programados.
Los lenguajes usados normalmente para la confección de los programas para mi-
crocontroladores son el Ensamblador, el C y el BASIC. Para todos ellos existen en el
mercado eficientes compiladores e intérpretes.
Confeccionado y puesto a punto el software, hay que grabar el programa ejecutable
en la memoria del microcontrolador, montar y conectar todos los componentes que con-
Figura 1.19. Fotografía de un emulador de Microchip que permite comprobar en tiempo real el compor-
tamiento del prototipo y depurarlo.
MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP 19
Figura 1.20. Los sistemas de desarrollo permiten grabar los microcontroladores, conectar los perifé-
ricos y comprobar en tiempo real el comportamiento del prototipo. Fotografía de la PIC
School empleada en esta obra para el desarrollo de las aplicaciones prácticas.
Figura 1.21. «Ranking» mundial de los principales fabricantes de microcontroladores de 8 bits ordenado
por el número de unidades vendidas (Dataquest).
• Sencillez de manejo.
• Magnífica información técnica.
• Precio ajustado y buena disponibilidad.
• Instrucciones comprensibles y poco numerosas.
• Excelente promedio de los parámetros de funcionamiento: velocidad, consumo, alimen-
tación, tamaño, etc.
• Herramientas de desarrollo abundantes, fáciles y baratas.
• Compatibilidad del software y hardware que facilitan la migrabilidad hacia modelos su-
periores.
• Gran variedad de modelos para encontrar el más apropiado para cada caso.
• Disposición del fabricante Microchip y de sus empleados para ayudar a sus clientes .
21
22 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 2.1. En el mercado existen excelentes y económicas herramientas para el entrenamiento y diseño
con PIC. En la fotografía, el sistema de desarrollo «Micro’ PIC Trainer», de Ingeniería de
Microsistemas Programados.
Figura 2.2. Espectacular crecimiento del número de modelos diferentes de microcontroladores PIC.
LOS PIC, UNA FAMILIA NUMEROSA 23
Figura 2.5. Las memorias independientes permiten el acceso simultáneo y la adecuación de la capacidad
y longitud de cada memoria a los datos y las instrucciones.
26 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 2.6. El cauce segmentado en dos etapas supone que cada T/2 sale de él una instrucción ejecu-
Figura 2.8. Al mantener la distribución de las patitas y sus funciones en los diversos encapsulados se
favorece la migrabilidad entre dispositivos; en este caso, de 8, 14 y 20 patitas.
28 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
A) Tecnología nanoWatt
Con ella se consigue una gran flexibilidad en el voltaje de alimentación (de 2 a 5,5 VDC),
múltiples modos de generar las señales de reloj y posibilidad de funcionamiento con bajo
consumo.
B) Encapsulados variados
Para poder usar en diferentes montajes.
E) Estrategia comercial
Red mundial de oficinas con soporte tecnológico y comercial.
F) Información técnica
Existe una sección en Internet completísima que incluye herramientas gratuitas, suministro
de muestras, atención exquisita y disponibilidad inmediata.
Figura 2.9. El mando a distancia para el control de la alarma de casa lo controla un PIC de la gama
básica.
• Cargadores de baterías.
• Control de motores eléctricos.
• Sensores remotos.
• Sistemas de seguridad.
30 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
• Temporizadores diversos.
• Termómetros.
• Juguetes.
• Detectores de gas.
• Mandos a distancia.
• Termostatos.
• Programadores.
• Secadores de pelo.
• Tostadoras.
• Máquinas de afeitar.
• Reostatos.
• Planchas.
• Paelleras.
• Relojes de pulsera.
Memoria Oscilador
RAM Líneas Encapsu- ADC Compa- Temporiza- F. máx
Modelo programa interno
bytes E/S lado canales rador dores MHz
Flash MHz
Figura 2.10. Los principales modelos de la gama básica tienen pocas patitas y poca capacidad de memoria.
La tabla recoge las principales características de algunos modelos PIC12F de ocho patitas.
LOS PIC, UNA FAMILIA NUMEROSA 31
Los PIC12F de oho patitas han revolucionado la «mecatrónica», que es una especia-
lidad que integra el software con la microelectrónica en los sistemas mecánicos clásicos.
Desde 1990, Microchip ha vendido millones de estos diminutos microcontroladores que
se han incrustado en multitud de productos del hogar y de la industria desplazando a los
clásicos elementos mecánicos del siglo pasado, como los relés.
Finalmente, y dentro de la gama básica, existen modelos PIC16F5X y PIC16C5X
que se presentan en cápsulas de 16 a 40 patitas y que disponen de una capacidad de me-
moria y un número de recursos importante.
Todos los modelos de la gama básica responden a un repertorio de 33 instrucciones
de 12 bits de longitud cada una.
Figura 2.11. La gama media ocupa una posición intermedia en cuanto al número de patitas y capacidad
de la memoria de programa que la sitúa entre la básica y la mejorada.
32 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Memoria
EEPROM RAM Líneas ADC Com- F. máx CCP/
Modelo programa Encapsulado
bytes bytes E/S canales parador MHz ECCP
FLASH
PIC12F629 1 K × 14 128 64 6 8P, 8SN, 8MD — 1 20 —
PIC12F635 1 K × 14 128 64 6 8P, 8SN, 8MD — 1 20 —
PIC12F675 1 K × 14 128 64 6 8P, 8SN, 8MD 4 × 10 1 20 —
bits
PIC12F683 2 K × 14 256 128 6 8P, 8SN, 8MD 4 × 10 1 20 1/0
bits
Figura 2.12. Características destacadas de los cuatro modelos de ocho patitas de la gama media de la
familia PIC12F que pronto se verá aumentada por otros nuevos.
Figura 2.13. La alta densidad de la memoria FLASH de la gama mejorada es función del número de
patitas de la cápsula.
En la tabla de la Figura 2.14 se muestran las características relevantes del PIC 18F8722
de ochenta patitas con 128 KB de FLASH. Dispone de tres temporizadores de 16 bits y dos
de 8, oscilador interno de 8 MHz o 32 KHz, dos módulos EUSART, 2 módulos I2C y se
fabrica con tecnología nanoWatt.
Entre algunas de las aplicaciones típicas de la gama mejorada se citan las siguientes.
• Robótica industrial.
• Automatización.
• Control de movimientos.
34 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
• Periféricos de computadores.
• Cargadores de baterías.
• Máquinas expendedoras.
• Control remoto.
• Desfibriladores.
• Monitores de presión arterial.
• Sistemas de diagnóstico.
• Monitores de glucosa.
• Fuentes de alimentación ininterrumpibles.
• Sistemas de seguridad y alarma.
• Acondicionadores de aire.
• Control de motores.
• Videoconsolas y juguetes.
• Equipos MP3.
• Gestión de minibares en hoteles.
24FJ64GA006 64 64 8
24FJ64GA008 80 64 8
24FJ64GA010 100 64 8
24FJ128GA006 64 128 8
24FJ128GA008 80 128 8
24FJ128GA010 100 128 8
RAM (KB)
OC PWM
12 bits ADC
CODEC
Timers
Patitas
UART
RC Osc
CAN
SPI
I2C
Modelo 500 KSPS
con PLL
#ADC, #CH
24HJ64GP206 64 64 8 8 9 8 1 ADC, 18 Ch 2 2 1 0 0 SI
24HJ64GP210 100 64 8 8 9 8 1 ADC, 32 Ch 2 2 2 0 0 SI
24HJ64GP506 64 64 8 8 9 8 1 ADC, 18 Ch 2 2 2 1 0 SI
24HJ64GP510 100 64 8 8 9 8 1 ADC, 32 Ch 2 2 2 1 0 SI
24HJ128GP206 64 128 8 8 9 8 1 ADC, 18 Ch 2 2 1 0 0 SI
24HJ128GP210 100 128 8 8 9 8 1 ADC, 32 Ch 2 2 2 0 0 SI
24HJ128GP506 64 128 8 8 9 8 1 ADC, 18 Ch 2 2 2 1 0 SI
24HJ128GP510 100 128 8 8 9 8 1 ADC, 32 Ch 2 2 2 1 0 SI
24HJ128GP306 64 128 16 8 9 8 1 ADC, 18 Ch 2 2 2 0 0 SI
24HJ128G310 100 128 16 8 9 8 1 ADC, 32 Ch 2 2 2 0 0 SI
24HJ256GP206 64 256 16 8 9 8 1 ADC, 18 Ch 2 2 2 0 0 SI
24HJ256GP210 100 256 16 8 9 8 1 ADC, 32 Ch 2 2 2 0 0 SI
24HJ256GP610 100 256 16 8 9 8 1 ADC, 32 Ch 2 2 2 2 0 SI
37
38 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 3.1. Numerosos pequeños aparatos de mucho uso son gobernados por un sencillo microcontrola-
dor incrustado. Los dos que aparecen en la figura son candidatos a contener uno.
dríamos una serie de experiencias que les ayudasen a comprender las posibilidades
de los microcontroladores. Y, por último, tendrían que formar equipos de cuatro
personas y construir el prototipo de un «pastillero inteligente» que intentase ayudar
a los enfermos de SIDA para los que es tan importante tomar las dosis correcta-
mente. En el Apéndice C, contenido en el CD, se describe paso a paso el proyecto
de un pastillero con el PIC12F508.
Figura 3.4. Modelos de la gama básica con seis patitas. Funcionan con una tensión comprendida entre
2 y 5,5 VDC y poseen Perro Guardián.
40 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 3.5. Modelos de la gama básica con ocho patitas. Funcionan con una tensión comprendida entre
2 y 5,5 VDC y tienen Perro Guardián.
Figura 3.6. Tabla que recoge las principales características de los modelos PIC16F5XX de la gama
básica.
PIC12F508
Memoria De programa tipo FLASH 512 × 12
De datos tipo RAM 25 × 8
Reloj Frecuencia máxima 4 MHz
de funcionamiento
Periféricos Temporizador TMR0 de 8 bits
Despertar de sleep por cambio SÍ
en una patita
Prestaciones Patitas E/S 5
Patita de entrada 1
Resistencias pull-up internas SÍ
Programación serie en circuito SÍ
Repertorio de instrucciones 33 de 12 bits
Tamaño de los datos 8 bits
Encapsulados PDIP, SOIC y MSOP
(ocho patitas)
Ventajas Coste Muy bajo (< 0,5 euros)
Volumen Muy bajo (< mosca)
Consumo Muy bajo (< 350 µA/2 V/4MHz)
El PIC12F508 es más barato, más pequeño y más seguro y potente que los elementos
electromecánicos a los que sustituye y, además, es «inteligente».
formato SOIC y MSOP. También ofrece versiones QTP en los que se graba en fábrica la
memoria de programa para series medias y altas, así como versiones SQTPSM en las que
graba diversos números de serie, secuenciales, aleatorios o pseudoaleatorios, en unas
pocas posiciones de la memoria y que sirven como referencia y control al usuario.
PIC12F508 512 × 12 25 × 8 6
PIC12F509 1 K × 12 41 × 8 6
PIC16F505 1 K × 12 72 × 8 12
Figura 3.12. En la gama básica, el PIC12F509 duplica la memoria de programa del PIC12F508, y el
PIC16F505, además, duplica el número de líneas de E/S de los dos anteriores.
Figura 3.13. El cauce del PIC12F508/509, al igual que todos los PIC, se divide en dos etapas. En la
segunda se ejecuta la instrucción en curso y a la vez en la primera se busca el código de
la siguiente.
EJEMPLO
Si un PIC12F508 funcionando a 4 MHz debe ejecutar un programa de mil instrucciones,
de las cuales el 30 por 100 son de salto, calcular el tiempo que se tarda en completar
el programa.
SOLUCIÓN
fOSC = 4 MHz
TOSC = 1 / fOSC = 250 ns
TCiclo instrucción = 4 × TOSC = 1 µs
TInstrucciones normales =700 × 1 µs = 700 µs
TInstrucciones salto = 300 × 2 µs = 600 µs
TTotal programa = 700 + 600 = 1.300 µs
lo guardado. La Pila es muy simple y sólo puede almacenar dos valores del PC. Con la
dirección proporcionada por el PC se accede a una posición de la FLASH de la que se
extrae su contenido de 12 bits, que es el código de la instrucción a ejecutar y se almacena
en el Registro de Instrucciones. Normalmente, cada vez que el PC genera una dirección
se incrementa automáticamente y pasa a apuntar la dirección siguiente.
La memoria de datos RAM, volátil y de lectura/escritura, sólo dispone de treinta y dos
posiciones de 8 bits que funcionan como si se tratase de un banco de registros de 8 bits,
algunos de los cuales son de propósito general (GPR) y en ellos el usuario puede depositar
los datos temporales que se manejan en el programa. Los restantes registros son especí-
ficos para el control de los recursos del procesador (SFR) y la programación de sus bits
determina el comportamiento de dichos recursos. A las posiciones de la memoria de datos
se accede a través de un bus de direcciones de 9 bits que se carga mediante el multiplexor
MPX DIR por direccionamiento directo o indirecto.
El Camino de Datos es la sección del procesador encargada de realizar las operacio-
nes lógicas y aritméticas que implican las instrucciones, y para llevarlas a cabo utiliza
una ALU de 8 bits. Uno de los operandos lo recibe la ALU desde un registro de trabajo
W, que también puede cargarse con el resultado, mientras que el otro lo recibe por el bus
de datos o directamente del código que conforma la instrucción (operando inmediato).
La ALU, al completar cada operación, genera 3 bits de señalización, llamados «bande-
ras» o flags, que avisan cuando se produce acarreo o llevada en el octavo bit del resultado
(C: Carry), acarreo o llevada en el cuarto bit del resultado (DC: Digit Carry) o cuando el
resultado es cero (Z: Zero). Estos tres señalizadores se guardan al terminar la instrucción
en el Registro de Estado SR (STATUS) junto a otros bits.
El temporizador TMR0 es un contador ascendente de 8 bits que se usa en misiones
destinadas a controlar el tiempo.
El módulo de E/S GPIO es el que soporta el interfaz externo con las seis líneas de
E/S, que se corresponden con las patitas que se denominan GP0-GP5 y que también
pertenecen a las líneas de la Puerta B (PORTB/GPIO).
Existen dos registros de 8 bits independientes, llamados TRIS y OPTION, que se
accede a ellos mediante las instrucciones TRIS y OPTION, respectivamente, que cargan
el contenido del registro W en TRIS y OPTION.
Finalmente, existe un conjunto de recursos complementarios que se describen bre-
vemente:
Las memorias
4
Figura 4.1. Estructura interna de la memoria de programa de los PIC de la gama básica. El PIC12F508 sólo
tiene implementadas físicamente 512 posiciones de 12 bits cada una.
49
50 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 4.2. Cuando se produce un reset en el PIC12F508, el PC se carga con la última dirección de la
memoria, la 01FF h que contiene la instrucción MOVLW XX, que viene grabada de fábrica y
que carga en W el valor XX, que sirve para calibrar el oscilador interno.
La posición 0000 h está reservada para el Vector de Reset y en ella debe almacenarse la
primera instrucción que haya que ejecutarse cuando se inicializa el sistema (reset). Cuan-
do se genera un reset. se inicializa el estado del procesador y el programa de aplicación.
En realidad, cuando hay un reset en el PIC12F508, el PC se carga con la última dirección
del mapa de la memoria, es decir, con la 01FF h a la que apunta y en la que está guardada
y grabada en fábrica la instrucción MOVLW XX, cuya función es cargar en el registro de
trabajo W el valor inmediato XX que acompaña a la instrucción y que ha seleccionado el
fabricante con la misión de calibrar el oscilador interno del dispositivo (Fig. 4.2).
En el reset se ejecuta la instrucción MOVLW XX, después el PC se incrementa y se
desborda, pasando a contener el valor 0000 h, que es la dirección en la que se halla la
siguiente instrucción a ejecutar y en la que se debe almacenar la instrucción MOVWF
OSCCAL, que guarda el valor XX contenido en el registro W en el registro de calibración
OSCCAL. Por tanto, si se usa el oscilador interno, la primera instrucción del programa
de aplicación deberá estar almacenada en la dirección 0001 h.
Figura 4.3. Las instrucciones CALL y RET guardan y restauran el valor del PC en la Pila,
respectivamente.
Como la Pila en la gama básica sólo tiene dos niveles de profundidad, únicamente se
pueden encadenar o anidar un máximo de dos subrutinas, quedando bajo la responsa-
bilidad del programador controlar la disponibilidad en la Pila y evitar machacar alguna
dirección previamente guardada (Fig. 4.3).
El PC siempre contiene la dirección de la siguiente instrucción que hay que ejecu-
tar, y en cuanto se accede a ella, se incrementa una unidad automáticamente, quedando
apuntado a la siguiente instrucción del programa.
Con la instrucción GOTO se produce un salto incondicional a cualquiera de las 512
posiciones de la memoria FLASH. Con esta instrucción se modifican los 9 bits de menos
peso de la dirección contenida en el PC, los cuales reciben los 9 bits de menos peso del
código máquina o binario de la instrucción GOTO (Fig. 4.4).
Figura 4.4. Los 9 bits de menos peso del código binario de la instrucción GOTO se cargan en los 9 bits
de menos peso del PC, lo que permite realizar un salto a cualquiera de las 512 direcciones
de la memoria de programa.
52 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 4.5. En las instrucciones CALL sólo se cargan los 8 bits de menos peso del PC con los 8 bits de
menos peso del código binario de dicha instrucción, el noveno bit del PC pasa a valer 0,
apuntando a una instrucción comprendida en el rango 0000 h y 00FF h, o sea, dentro de las
primeras 256 posiciones de la memoria de programa.
La memoria de datos del PIC12F508 es tipo RAM, muy rápida de acceso, pero volátil,
y se comporta como si se tratase de un banco de treinta y dos registros de 8 bits cada
uno, ocupando las direcciones comprendidas entre la 00 h y la 1F h. Los siete prime-
ros registros son específicos (SFR) porque sus bits gobiernan el comportamiento de
los recursos del procesador. Actúan como registros de control. Los restantes veinti-
cinco registros son de propósito general (GPR) y en ellos el usuario puede guardar de
forma temporal los datos que maneja el programa (Fig. 4.6).
Para direccionar en una instrucción un dato al que se quiere acceder a leer o escribir
se pueden utilizar dos modos de conseguirlo:
Figura 4.6. La memoria de datos RAM del PIC12F508 consta de siete registros específicos (SFR) que
ocupan las siete primeras posiciones y veinticinco de propósito general (GPR).
Figura 4.7. En el direccionamiento directo, la dirección de la posición a acceder en la RAM viene dada
por los 5 bits de menos peso del código de la instrucción.
54 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EJEMPLO
En este programa se comienza cargando el registro FSR con el valor 10 h a través de W.
Luego, la instrucción CLRF INDF borra el contenido de la dirección 10 h de la RAM al
usar el modo de direccionado indirecto, que se refleja con INDF en la nomenclatura de la
instrucción.
Figura 4.9. Distribución y nomenclatura de los bits del registro STATUS. Los bits que llevan W se pueden
escribir, los que llevan R se pueden leer.
— FSR:
Contiene en sus 5 bits de menos peso la dirección a acceder en la RAM cuando
se utiliza el modo de direccionado indirecto. Por ejemplo, la instrucción CLRF
INDF borra el contenido de la dirección de la RAM formada por los 5 bits de
menos peso de FSR.
— TMR0:
Contiene los 8 bits de la cuenta del temporizador TMR0 que usa en labores de
control de tiempo. Se carga un valor en TMR0 y con cada impulso de reloj se
incrementa hasta alcanzar el valor máximo para luego desbordarse.
— PCL:
Es un registro especial que contiene el valor de los 8 bits de menos peso del PC.
— STATUS:
Se le llama Registro de Estado (SR) y sus bits informan sobre el estado interno del
procesador cuando ocurre un evento o se ejecutan ciertas instrucciones. En la Figu-
ra 4.9 se muestra la nomenclatura, la distribución y el significado de sus bits.
Los bits de la Figura 4.9 si llevan –x tienen un valor desconocido o indeterminado y se leen
siempre a 0. Si llevan –1 o –0 se cargan con un 1 o con un 0 cuando hay un reset por POR
(reset por conexión de la alimentación).
— Z: Cero
1: El resultado de una instrucción aritmética o lógica ha sido cero.
0: El resultado de una instrucción aritmética o lógica no ha sido cero.
Figura 4.10. El valor de calibración se guarda en los 7 bits de más peso de OSCCAL.
LAS MEMORIAS 57
Frecuencia oscilador
CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0
interno
0 1 1 1 1 1 1 Máxima
— — — — — — —
0 0 0 0 0 0 1
0 0 0 0 0 0 0 Media
1 1 1 1 1 1 1
— — — — — — —
1 0 0 0 0 0 0 Mínima
Figura 4.11. Tabla que determina la frecuencia del oscilador interno en función del valor de calibración
guardado en OSCCAL.
El valor de los bits del registro OSCCAL establece la frecuencia del oscilador
interno de acuerdo con la tabla de la Figura 4.11.
Téngase en cuenta que cuando se borra la memoria de programa también se bo-
rra el valor de calibración almacenado en la dirección 01FF h, por lo que se debe
leer previamente y restaurarlo.
La memoria de programa FLASH del PIC12F509 y del PIC16F505 son iguales y tienen una
capacidad de 1 K palabras de 12 bits cada una, o sea, el doble que el PIC12F508. Se divide en
dos páginas (0 y 1) de 512 posiciones cada una (Fig. 4.12).
La memoria de datos del PIC12F509 se compone de dos bancos (0 y 1) de treinta
y dos posiciones de 8 bits cada uno. El PIC12F508 sólo disponía de un banco (0) de
treinta y dos registros (Fig. 4.13).
Las posiciones del banco 01, comprendidas desde la 20 h a la 2F h, están mapeadas
en el banco 00, lo que significa que cuando se utiliza la dirección 22 h del banco 01 en
realidad se accede a la 02 h del banco 00. En resumen, el PIC12F509 tiene los mismos
registros SFR que el 508 y cuarenta y un registros GPR, de los cuales veinticinco se
ubican en el banco 00 y los otros dieciséis en el banco 01 (30 h al 3F h).
Cuando hay varios bancos en la memoria de datos en su direccionamiento, además
de necesitarse los 5 bits que seleccionan una posición dentro de un banco, se necesita
otro bit que seleccione el banco accedido. Dicho bit que elige el banco (0 o 1) corres-
ponde al bit 5 del registro FSR tanto en el direccionamiento directo como en el indirecto
(Fig. 4.14).
La memoria de datos del PIC16F505 consta de cuatro bancos de treinta y dos regis-
tros cada uno. Los bancos 01, 10 y 11 están mapeados sobre el banco 00 (Fig. 4.15).
58 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 4.12. La memoria FLASH del PIC12F509 y del PIC16F505 consta de 1 K posiciones de 12 bits
cada una.
Figura 4.14. El bit 5 del registro FSR se encarga de seleccionar el banco a acceder (0 o 1) de la memoria
de datos en los dos modos de direccionado.
EJEMPLO
Un PIC12F508 funciona con su oscilador interno a 4 MHz en la ejecución de un pro-
grama con quinientas instrucciones, de las cuales el 40 por 100 son de salto. Calcular
el tiempo que tarda en ejecutar el programa.
61
62 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
SOLUCIÓN
fOSC = 4 MHz; TOSC = 1 / 4 × 106 = 250 ns
TCICLO INSTRUCCIÓN =4 × TOSC = 1 µs
TPROGRAMA = 300 × 1 µs + 200 × 2 µs = 700 µs
Figura 5.2. La instrucción de salto CALL SUBR de la figura tarda en ejecutarse dos ciclos de instrucción
al no ser válida la fase de búsqueda correspondiente al incremento automático del PC.
RECURSOS Y PERIFÉRICOS PRINCIPALES 63
Para generar los ciclos de reloj que conforman el ciclo de instrucción, los dispositivos
PIC12F508/509 disponen de cuatro tipos posibles de osciladores.
El tipo de oscilador elegido hay que programarlo en los bits FOSC <1:0> de la Palabra
de Configuración.
Figura 5.3. Conexionado del cristal de cuarzo XTAL a las patitas OSC1 y OSC2 del PIC12F508/509. La
resistencia RS sólo hay que colocarla con algunos cristales especiales.
Figura 5.5. El oscilador externo RC es barato, pero poco preciso. Si REXT = 10 K y CEXT = 20 pF, la fre-
cuencia de oscilación es de 625 KHz, aproximadamente.
Para valores de REXT inferiores a los 3 K, el oscilador puede resultar muy inestable
e incluso pararse. Para valores superiores a 1 M, el oscilador se vuelve muy sensible al
ruido y la humedad. Se recomienda un valor comprendido entre 5 K y 100 K. También
se recomienda que el valor de CEXT sea de unos 20 pF. Por la patita OSC2 se obtiene en
este oscilador la cuarta parte de la frecuencia de oscilación que se corresponde con la que
corresponde al ciclo de instrucción.
Figura 5.6. Conexionado de un oscilador externo que actúa como reloj principal.
Figura 5.7. El valor de los 3 bits del Registro de Estado mostrados en la tabla determina la causa del
último reset en el procesador.
En la tabla de la Figura 5.8 se presenta el valor que toman los bits de los registros
especiales indicados después de que se produce un reset.
Figura 5.9. En el PIC12F508/509, el registro PORTB o GPIO contiene 6 bits válidos que se relacionan
con las seis posibles líneas de E/S.
pero los dos de más peso no están implementados físicamente y siempre se leen como 0.
Las seis líneas de E/S válidas pueden denominarse PB0-PB5 o GP0-GP5 indistintamen-
te. Mediante la programación de la Palabra de Configuración, las líneas de E/S pueden
asignarse a soportar otras funciones alternativas.
El registro GPIO o PORTB, ubicado en la dirección 0 × 06 del área SFR de la me-
moria de datos, contiene la información de las líneas de E/S en sus 6 bits de menos peso
correspondientes. Cuando se lee el registro GPIO, se lee el estado lógico de las líneas de
entrada asociadas a sus bits. Una escritura en dicho registro saca el valor lógico de sus
bits por las correspondientes líneas de salida; de esta manera, se realiza la transferencia
bidireccional de las líneas de E/S.
La línea GP3 sólo puede actuar como entrada. Las líneas GP0, GP1 y GP3 pueden
configurarse para funcionar como entradas con resistencias de pull-up y también pueden
programarse para que generen un reset cuando cambie de estado alguna de ellas y el
procesador se halle metido en el modo de bajo consumo, lo cual le hace «despertar».
Asociado al registro GPIO está el registro TRIS, el cual está implementado inde-
pendientemente fuera de la memoria de datos. Sólo se puede acceder a él con la ins-
trucción TRIS, que transfiere el contenido de W a TRIS. Los bits de TRIS se utilizan
para configurar el sentido de las líneas de E/S correspondientes del registro GPIO. Un
1 en un bit de TRIS configura como «entrada» la línea de GPIO asociada. Un 0 en un
bit de TRIS configura como «salida» la línea de GPIO asociada. Recuérdese que GP3
sólo puede ser entrada y GP2/T0CKI se selecciona desde un bit del registro OPTION
cuando actúa como línea GP2 de E/S o entrada de los impulsos de reloj para el tem-
porizador TMR0.
Figura 5.10. Sólo cuando se usa el oscilador interno y la patita MCLR# se configura como línea de E/S,
el PIC12F508/509 puede disponer de un máximo de seis líneas de E/S.
68 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En la Figura 5.11 se muestra el esquema eléctrico de las líneas de E/S, con excep-
ción de la GP3, que sólo puede ser entrada. Cada línea tiene asociado un bit en un latch
del registro TRIS y otro en el registro GPIO. Cuando se carga un 1 en un latch de TRIS,
el latch de salida se desactiva y la línea queda configurada como entrada. Si, por el con-
trario, en un latch de TRIS hay cargado un 0, queda habilitado el latch de salida de datos
y la patita se configura como salida.
Figura 5.11. Esquema eléctrico correspondiente a las líneas de E/S, con excepción de GP3, que sólo
funciona como entrada.
Para las instrucciones de lectura de las líneas de entrada se usa la instrucción MOVF
GPIO, W, que deposita en los bits correspondientes de W el estado lógico de las líneas de
entrada. Para escribir sobre las líneas de salida se emplea la instrucción MOVWF GPIO,
que saca por las líneas de salida los bits de W asociados.
PRECAUCIÓN
Algunas instrucciones orientadas a bit, como BSF y BCF, realizan una lectura de un
registro, luego a un bit lo ponen a 1 o a 0 y finalmente vuelven a escribir el mismo re-
gistro.
Estas instrucciones son peligrosas cuando las líneas de los puertos se configuran
dinámicamente como entradas o salidas. Por ejemplo, si se ejecuta la instrucción BCF
GPIO,2, se intenta poner a 0 la línea GP2. Esta instrucción comienza leyendo todo el
registro GPIO, pone a 0 el bit 2 y el nuevo valor lo vuelve a escribir en GPIO. Si en el
momento de la lectura una línea cualquiera como la GP1 está configurada como entra-
RECURSOS Y PERIFÉRICOS PRINCIPALES 69
da con un valor 0, este valor se lee y luego se escribe sobre el latch de salida correspon-
diente a GP1. En el instante en que GP1 se reconfigure como salida, la patita se pondrá
a 0 como consecuencia de la instrucción BCF GPIO,2.
1.a Dispone de un registro TMR0 en la zona SFR de la memoria de datos que puede fun-
cionar como temporizador o como contador de eventos externos.
2.a Se puede leer y escribir.
3.a Posee un predivisor de frecuencia o «preescaler» de 8 bits programable por software.
4.a El incremento del valor de TMR0 se puede controlar mediante un reloj interno o exter-
no, pudiendo en este último caso seleccionar el flanco activo.
Figura 5.12. Estructura del módulo TMR0 con sus señales de control.
70 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
A) Modo temporizador
Sirve para medir o controlar tiempo. En este modo, se comienza cargando con un valor al
TMR0 y luego se va incrementando con los impulsos internos de reloj (FOSC /4) hasta que se
produce el desbordamiento. El valor que hay que cargar en TMR0 es el complemento al valor
que se quiere contar. Por ejemplo, si se quiere contar diez impulsos de reloj hay que cargar en
TMR0 el complemento a 255, que es el valor hexadecimal 0 × F5, o sea, 245 en decimal.
Cuando se trabaja con el oscilador interno a 4 MHz, la base de tiempo será FOSC /4 =
1 MHz, lo que supone que se recibe un impulso de reloj cada microsegundo. Cuando no
se utiliza el predivisor, el menor tiempo a contar será de 1 µs cuando se carga TMR0 con
1111 1111, mientras que el mayor tiempo que es posible medir será de 256 µs cuando se car-
ga con 0000 0000. Si se usa el predivisor, se puede dividir la frecuencia de los impulsos des-
de el rango 2 hasta el 256, en cuyo caso para calcular el tiempo se usa la siguiente fórmula:
Figura 5.14. Rangos de división del predivisor o «preescaler» para el TMR0 y para el WDT. Hay que
seleccionar a cuál de los dos temporizadores se dedica.
PSA
El predivisor lo comparte el módulo TMR0 con el Perro Guardián (Watch Dog Ti-
mer), que tiene un funcionamiento parecido, pero que cuando se desborda produce un
reset. Con el bit PSA se asigna el predivisor al TMR0 cuando vale 0 y al WDT cuando
vale 1.
T0SE
Selecciona el tipo de flanco activo cuando el reloj es externo. Si vale 1, el flanco
activo es el descendente.
T0CS
Selecciona la procedencia de los impulsos de reloj, que producen el incremento de
TMR0. Si vale 0, proceden del oscilador interno (FOSC / 4), y si vale 1, de un oscilador
externo que los aplica a la patita GP2/T0CKI.
GPPU#
Si este bit vale 0 cuando cambia de estado una de las líneas de entrada GP0, GP1 o
GP3 y el procesador se halla en modo de bajo consumo, se sale de él o se «despierta».
Si vale 1, no pasa nada.
GPWU#
Cuando vale 1, se coloca una resistencia de carga pull-up en las líneas GP0, GP1 y
GP3. Si vale 0, no hay resistencias de carga en dichas líneas.
72 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Cuando se utiliza un reloj externo como entrada de impulsos del módulo TMR0,
éstos deben sincronizarse con los impulsos del oscilador interno. Si se emplea el predi-
visor, los impulsos externos se dividen en él y su salida debe ser simétrica. Aunque el
predivisor esté sincronizado con el reloj interno, se produce un ligero retardo entre el
flanco activo del impulso externo y el incremento efectivo del valor del TMR0.
Figura 5.15. Esquema que muestra la compartición del divisor de frecuencia entre el TMR0 (predivisor)
y el WDT (posdivisor).
RECURSOS Y PERIFÉRICOS PRINCIPALES 73
Para cambiar la asignación del divisor de frecuenta del WDT al TMR0 se debe usar
el siguiente programa:
Recursos auxiliares
6
Figura 6.1. Los sistemas portátiles basados en microcontrolador y alimentados con baterías funcionan
normalmente en modo de bajo consumo.
75
76 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
1.a Se produce un reset por activación con nivel bajo de la patita (GP3/RB3)/MCLR#/VPP
cuando está configurada para trabajar como MCLR#.
2.a Se produce un reset por desbordamiento del WDT.
3.a Estando configuradas para producir un reset las patitas GP0/RB0, GP1/RB1, GP3/RB3
y RB4, cambia el estado lógico de alguna de ellas y hay reset.
Para conocer la causa que ha originado el despertar del procesador se dispone de tres
bits señalizadores del Registro de Estado (STATUS): TO#, que indica si se ha desborda-
do el WDT; PD#, si se ha ejecutado la instrucción SLEEP, y GWUF/RBWUF, si se ha
producido un cambio de estado en alguna de las patitas RB<4:0>.
IMPORTANTE
Antes de entrar en el modo de bajo consumo es necesario leer las patitas de entrada. Una
de las causas que hace salir del modo de bajo consumo es el cambio de estado en alguna
de las patitas de entrada RB<4:0>. Si antes de ejecutar la instrucción SLEEP no se ha leído
el estado de dichas patitas, se producirá un despertar automático, aunque ninguna cambie
el estado lógico.
Figura 6.3. Conexionado del microcontrolador para proceder a la grabación del programa en la memo-
ria FLASH en serie (ICSPTM).
Figura 6.5. Circuito BOR que genera un reset cuando VDD < VZ + 0,7.
80 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
El repertorio de instrucciones
7
Las instrucciones más usadas y numerosas son las que manipulan bytes. Frecuente-
mente, los datos de tamaño byte, que son los datos naturales, residen en posiciones de la
memoria de datos, que actúan como si se tratasen de «registros» de datos.
Cuando una instrucción utiliza un registro o posición de la memoria de datos, lo
representa en su nomenclatura con una f y en binario se determina con 5 bits, con los que
se pueden discriminar hasta los 32 de un banco (del 0 al 31). Recuérdese que en algunos
modelos de microcontroladores pueden existir varios bancos de registros en la memoria
de datos y hay que dedicar otros bits para elegir el banco.
Al destino de una instrucción, que es un registro de datos, se le representa por d y en
su codificación sólo se precisa un bit, que si vale 1, el resultado se guarda en el registro
de datos f (que actuaba como uno de los operandos), y si vale 0, se guarda en el registro
de trabajo W.
Cuando una instrucción sólo afecta a un bit de un registro de datos, se le representa
como b, y se codifica con 3 bits, que determinan la posición del seleccionado (del 0 al 7).
Los literales o constantes son valores inmediatos que van incluidos en el formato
binario de la instrucción de 12 bits y pueden ser de 8 o 9 bits de tamaño, estando repre-
sentados en el nemónico de la instrucción por k.
81
82 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En la Figura 7.1 se presenta una tabla correspondiente a los símbolos usados en los
diferentes campos de la nomenclatura de las instrucciones en lenguaje ensamblador, así
como su descripción.
Campo Descripción
f Dirección del registro de datos (0 × 00 hasta 0 × 1F).
W Registro de trabajo (acumulador).
b Dirección de un bit dentro de un registro de 8 bits.
k Campo literal, dato constante o etiqueta.
x Valor indiferente (= 0 o 1).
El compilador generará código con x = 0. Es la forma recomendada de uso
para compatibilidad con todas las herramientas software de Microchip.
d Selección de destino:
d = 0 → almacena el resultado en W.
d = 1 → almacena el resultado en el registro f.
Por defecto d = 1.
label Nombre de la etiqueta.
TOS Cima de la pila (Top-of-Stack).
PC Contador de Programa (Program Counter).
WDT Perro Guardián (Watch Dog Timer).
TO# Bit Time-out (desbordamiento WDT).
PD# Bit Power-down (modo de bajo consumo).
dest Destino, el registro W o la localización del registro especificado.
[] Opciones.
() Contenido.
→ Asignado a.
<> Bit del registro.
En el intervalo.
italics Términos definidos por el usuario (la fuente es Courier).
0 × hhh Representación del número hexadecimal (h: dígito hexadecimal).
b’10101010’ Representación del número binario 10101010.
Figura 7.1. Símbolos usados para representar los diferentes campos de la nomenclatura de las instruc-
ciones en Ensamblador.
Figura 7.2. Formato máquina o binario de las instrucciones orientadas a manejar bytes que residen en
una dirección f de la memoria de datos. El destino es W si d vale 0, y en caso contrario, es
el propio registro f.
Ejemplo
Sabiendo que el código OPCODE de la instrucción de nemónico MOVF f,
d es
001000dfffff
Averigurar el formato binario de la instrucción que mueve el conte-
nido del registro de datos ubicado en la dirección 0x08 de la memo-
ria de datos al registro W.
Solución
001000001000
Ejemplo
La instrucción que responde al nemónico BCF f, b pone a 0 el bit «b»
del registro «f» y responde al código máquina
0100bbbfffff
Averiguar el código máquina de la instrucción BCF 0x07, 4 que pone
a 0 el bit 4 del registro ubicado en la dirección 0x07 de la memoria
de datos.
Solución
010010000111
Las instrucciones que manejan valores inmediatos o literales k admiten que éstos
tengan 8 o 9 bits. En el caso de que k tenga 8 bits, el campo binario de la instrucción
OPCODE es de 4 bits, mientras que si es de 9 bits, el campo OPCODE se reduce a 3
(Fig. 7.4).
Figura 7.4. Formato máquina de las instrucciones que manejan literales de 8 bits,
Ejemplo
La instrucción que mueve a W un literal «k» responde al nemónico
MOVLW k y su formato es
1100kkkkkkkk
Averiguar el código máquina de la instrucción que carga en W el li-
teral 0xFF.
Solución
110011111111
Figura 7.5. La instrucción GOTO maneja un literal k de 9 bits que se carga en los 9 bits de menos peso
del PC y determina la dirección del salto.
EL REPERTORIO DE INSTRUCCIONES 85
Ejemplo
El código máquina al que responde la instrucción GOTO k responde al
formato
101kkkkkkkkk
Averiguar el formato binario de la instrucción GOTO 0x05A
Solución
101001011010
Finalmente, las instrucciones de control del flujo del programa bien manejan un
literal k de 8 bits o bien son implícitas y no precisan especificar mas que a ellas mismas.
Ejemplo
La instrucción CALL k sirve para llamar a una subrutina que co-
mienza en una dirección que la determina el contenido del PC cuando
se cargan los 8 bits del literal «k» en sus 8 bits de menos peso y
responde al formato
1001kkkkkkkk
Averiguar el formato de la instrucción CALL 0xF0.
Solución
100111110000
Formato Bits
Nemónico
Descripción Ciclos 12 bits afectados Notas
operandos
MSb LSb STATUS
DECF f, d Decrementa f 1 0000 11df ffff Z 2, 4
DECFSZ f, d Decrementa f y salta si cero 1o2 0010 11df ffff Ninguno 2, 4
INCF f, d Incrementa f 1 0010 10df ffff Z 2, 4
INCFSZ f, d Incrementa f y salta si cero 1o2 0011 11df ffff Ninguno 2, 4
IORWF f, d Operación lógica OR de W y f 1 0001 00df ffff Z 2, 4
MOVF f, d Mueve f a d 1 0010 00df ffff Z 2, 4
MOVFW f Mueve W a f 1 0000 001f ffff Ninguno 1, 4
NOP — No operar 1 0000 0000 0000 Ninguno
RLF f, d Rotar a izquierda a través del 1 0011 01df ffff C 2, 4
acarreo
RRF f, d Rotar a derecha a través del 1 0011 00df ffff C 2, 4
acarreo
SUBWF f, d Resta W de f 1 0000 10df ffff C, DC, Z 1, 2, 4
SWAPF f, d Intercambia f y d 1 0011 10df ffff Ninguno 2, 4
XORWF f, d Operación lógica OR exclusiva 1 0001 10df ffff Z 2, 4
de W y f
Formato Bits
Nemónico
Descripción Ciclos 12 bits afectados Notas
operandos
MSb LSb STATUS
SLEEP — Entra en modo SLEEP 1 0000 0000 0011 TO#, PD#
TRIS f Carga el registro TRIS 1 0000 0000 0fff Ninguno 3
XORLW k OR exclusiva con W y el lite- 1 1111 kkkk kkkk Z
ral k
Notas:
1. El noveno bit del Contador de Programa es puesto a ‘0’ por cualquier instrucción que modifique el valor del
PC, excepto la instrucción GOTO.
2. Cuando un registro de ENTRADA/SALIDA se modifica a sí mismo (ej.: MOVF PORTB, 1), el valor usado es que
está presente en los propios pines. Por ejemplo, si el registro de datos tiene puesto a ‘1’ un pin configurado como
entrada y es cambiado a nivel bajo por un dispositivo externo, el dato será escrito con un ‘0’.
3. La instrucción TRIS f, donde f es igual a 6, provoca que el contenido del registro W sea escrito en los registros tri-
estados de la Puerta B (PORTB). Un ‘1’ pone el pin en un estado de alta impedancia y deshabilita los buffers de salida.
4. Si esta instrucción es ejecutada en el registro TMR0 (y donde sea aplicable, d = 1), el preescaler será puesto a ‘0’.
Figura 7.6. Tabla que recoge el formato máquina de las treinta y tres instrucciones de los PIC de la
gama básica y algunas características de interés. Brincar significa que se salta la siguiente
instrucción.
Ejemplo
ADDWF 0x07, 0
Suma el contenido de W con el del registro ubicado en la dirección
0x07 de la memoria de datos y deposita el resultado en W.
88 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Ejemplo
ANDLW 0x0F
Se realiza la AND lógica bit a bit del contenido de W con el inme-
diato 0x0F, depositándose en W el resultado.
Ejemplo
ANDWF 0x09
Se efectúa la operación lógica AND entre el contenido de W y el de
la dirección de la memoria de datos 0x09, depositándose el resultado
en este último. (Por defecto, d = 1).
Ejemplo
BCF 0x03, 2
Se pone a 0 el bit 2 del registro de datos con dirección 0x03.
Ejemplo
BSF 0x02, 6
El bit 6 del registro de datos con dirección 0x02 pasa a valer 1.
Ejemplo
BTFSC 0x02, 3
Si el bit 3 del registro 0x02 vale 0, se brinca y se salta la si-
guiente instrucción.
Ejemplo
BTFSS 0x04, 5
Si el bit 5 del registro 0x04 vale 1, se brinca (PC=PC+2).
Ciclos instrucción 2
Formato binario 1001 kkkk kkkk
Descripción Primero se guarda PC+1 en la Cima de la
Pila. Luego, los 8 bits de menos peso de PC.
Los bits 6 y 5 del STATUS se cargan en los
2 bits de más peso de PC (9 y 10) y el bit
PC<8>=0.
Ejemplo
CALL 0x5B
1. El valor de PC + 1 se guarda en la Pila
2. PC <7:0> se cargan con 0x5B
3. PC <10:9> se cargan con STATUS<6:5>
4. PC <8>=0
Ejemplo
CLRF 0x09
El contenido de la posición de memoria 0x09 se pone a 0 y Z=1.
CLRW Borrar W
Sintaxis CLRW
Operación 0x00 → W y Z=1
Operandos Ninguno
Señalizadores afectados Z
Ciclos instrucción 1
Formato binario 0000 0100 000
Descripción Pone a cero el registro W y Z = 1.
92 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Ejemplo
CLRW
Pone a 0 el registro W y Z=1.
Ejemplo
CLRWDT
Pone a 0 el WDT y también el predivisor de frecuencias si lo tiene
asignado. Los señalizadores TO# y PD# pasan a valor 1.
COMF Complementa f
Sintaxis COMF f, d
Operación Complementa f y lo deposita en el destino.
Operandos 0 f 31
d [0, 1]
Señalizadores afectados Z
Ciclos instrucción 1
Formato binario 0010 01df ffff
Descripción Complementa el contenido de la dirección f
depositándolo en d.
Ejemplo
COMF 0x07, 0
Complementa el contenido de la posición 0x07 y deposita el resultado
en W. (Si d=1, el destino es f).
EL REPERTORIO DE INSTRUCCIONES 93
DECF Decrementa f
Sintaxis DECF f, d
Operación (f)—1 → (dest)
Operandos 0 f 31
d [0, 1]
Señalizadores afectados Z
Ciclos instrucción 1
Formato binario 0000 11df ffff
Descripción Decrementa en una unidad el contenido de la
dirección f.
Ejemplo
DECF 0x05
Decrementa en una unidad el contenido de la posición 0x05 de la
memoria de datos y deposita el resultado en dicha posición (por de-
fecto, d = 1). Si d = 0, el destino es W.
Ejemplo
DECFSZ 0x12, 0
Decrementa una unidad el contenido de 0x12 y lo carga en W. Si el
resultado del decremento es cero, brinca, o sea, salta la siguiente
instrucción (PC ← PC+2.
Ejemplo
GOTO 0x0A5
PC<8:0> ← 01010 0101
PC<10:9> ← STATUS<6:5>
INCF Incrementa f
Sintaxis INCF f, d
Operación (f)+1 → (dest)
Operandos 0 f 31
d [0, 1]
Señalizadores afectados Z
Ciclos instrucción 1
Formato binario 0010 10df ffff
Ejemplo
INCF 0x10, 1
Incrementa el contenido de la posción 0x10 de la memoria de datos y
deposita el resultado en dicha posición. (Si d=0, el destino es W).
Ejemplo
INCFSZ 0x09, 0
Incrementa el contenido de la dirección 0x09 de la memoria de datos
y lo deposita en W, y si el resultado es 0, brinca (PC ← PC+2).
EL REPERTORIO DE INSTRUCCIONES 95
Ejemplo
IORLW 0xFF
Se efectúa la operación lógica OR bit a bit entre el contenido de W
con el valor del literal 0xFF y se deposita el resultado en W.
Ejemplo
IORWF 0x03, 0
Se realiza la operación lógica OR bit a bit entre el contenido de
la posición 0x03 de la memoria de datos con el de W y se deposita el
resultado en W. Si d = 1, el destino es f.
MOVF Mueve f
Sintaxis MOVF f, d
Operación (f) → (dest)
Operandos 0 f 31
d [0, 1]
Señalizadores afectados Z
Ciclos instrucción 1
Formato binario 0010 00df ffff
96 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Ejemplo
MOVF 0x12, 1
Mueve el contenido de la posición 0x12 de la memoria de datos a la
misma posición (d=1). Esta instrucción puede servir para saber si el
contenido de la posición es 0, ya que entonces se activa Z. Si d = 0,
el contenido de la posición se mueve a W.
Ejemplo
MOVLW 0x00
Mueve el literal 0x00 al registro W.
MOVWF Mueve W a f
Sintaxis MOV WF f
Operación (w) → (f)
Operandos 0 f 31
Señalizadores afectados Ninguno
Ciclos instrucción 1
Formato binario 0000 001f ffff
Ejemplo
MOVWF 0x04
Mueve el contenido de W a la posición 0x04 de la memoria de datos.
Operandos Ninguno
Señalizadores afectados Ninguno
Ciclos instrucción 1
Formato binario 0000 0000 0000
Ejemplo
NOP
No realiza ninguna operación. Ocupa una posición de memoria de có-
digo y tarda un ciclo de instrucción en ejecutarse, pero no hace
nada.
Ejemplo
OPTION
El contenido del registro W se carga en el registro OPTION.
Ejemplo
RETLW 0x55
El literal 0x55 se carga en W y el PC se carga con el valor almace-
nado en la Cima de la Pila (TOS).
98 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 7.7
Operandos 0 f 31 y d [0, 1]
Señalizadores afectados C
Ciclos instrucción 1
Formato binario 0011 01df ffff
Ejemplo
RLF 0x05, 0
Los bits de la posición 0x05 de la memoria de datos rotan un bit a
la izquierda a través del acarreo C, cargándose el resultado en W.
Si d = 1, el destino es la posición de la memoria de datos.
Figura 7.8
Operandos 0 f 31 y d [0,1]
Señalizadores afectados C
Ciclos instrucción 1
Formato binario 0011 00df ffff
EL REPERTORIO DE INSTRUCCIONES 99
Ejemplo
RRF 0x06, 1
Los bits de la posición 0x06 de la memoria de datos rotan un bit
a la izquierda a través del acarreo C y el resultado se deposita a
dicha posición. Si d = 0, el destino es W.
Ejemplo
SLEEP
El señalizador TO# = 1, el PD# = 0 y el RBWUF no varían. El WDT y su
predivisor se ponen a 0. El procesador entra en modo de bajo con-
sumo, parándose el oscilador principal y dejando de ejecutar ins-
trucciones.
SUBWF Resta W de f
Sintaxis SUBWF f, d
Operación (f)-(w) → (dest)
Operandos 0 f 31 y d [0, 1]
Señalizadores afectados C, DC y Z
Ciclos instrucción 1
Formato binario 0000 10df ffff
Ejemplo
SUBWF 0x08, 0
Se resta el contenido de la dirección 0x08 de la numeración de datos
de W y el resultado se deposita en W. Si d = 1, el destino es f.
100 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Ejemplo
SWAPF 0x14, 0
Si d = 0, los 4 bits de menos peso de la dirección 0x014 se cargan en
los 4 bits de más peso de W y los 4 bits de más peso de la dirección
0x014 se cargan en el lugar de los 4 bits de menos peso de W. Si d = 1,
se intercambian los 4 bits (nibble) de menos peso con los de más peso
en la misma posición.
Ejemplo
TRIS GPIO
El registro que configura las líneas de E/S de GPIO se carga con el
contenido de W.
Ejemplo
XORLW 0, 5B
El contenido de W efectúa la operación lógica XOR bit a bit con el
valor inmediato 0x5B y el resultado se carga en W.
Ejemplo
XORWF 0x08, 0
Se realiza la operación lógica XOR de W con el contenido de la di-
rección 0x08 de la memoria de datos y el resultado se deposita en
W. Si d = 1, el destino es f.
APLICACIONES PRÁCTICAS
a
Simulando los primeros
programas con el MPLAB 1.
y el MPLAB SIM APLICACIÓN
Primera etapa
Se da por supuesto que ya se ha analizado el proyecto, se ha elegido una solución, se
han escogido los componentes que conforman el hardware y se ha seleccionado el mi-
crocontrolador adecuado. A continuación hay que «editar el programa fuente», para lo
cual puede emplearse cualquier editor que guarde ficheros de tipo ASCII, como el Word
Pad, el Microsoft Word o el block de notas incluido en Windows. Nosotros usamos, y
por eso lo recomendamos, el propio editor de la herramienta MPLAB IDE, que se inicia
con la opción File New. Dicha herramienta va a utilizarse en muchas fases del proyecto
y Microchip pone libremente a disposición de los usuarios la última versión en su sitio
de Internet. Así que la instalación en el PC del MPLAB IDE debe ser una labor previa
imprescindible.
Para escribir el programa fuente se puede usar el lenguaje Ensamblador, el C, el
BASIC y otros. La extensión que acompaña al archivo del programa indica el lenguaje
en el que se ha escrito: .ASM, .C, .BAS, etc. En este libro vamos a usar el Ensamblador,
el C y el PBASIC.
EJERCICIO
Comenzar instalando la versión del MPLAB IDE que se incluye en el CD que acompaña
a este libro.
A continuación, editar el programa en Ensamblador Ejem_0.ASM que encontrará
en la carpeta correspondiente de dicho CD: D:\16F84ASM\Ejem_0.ASM.
105
106 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P1.1. Organigrama que recoge las etapas que se cubren en el desarrollo de un proyecto con
microcontrolador.
Segunda etapa
El programa fuente escrito en un lenguaje hay que traducirlo a código máquina (binario
o hexadecimal) para que lo pueda ejecutar el microcontrolador. Cuando se emplea el len-
guaje Ensamblador, que es el más parecido al máquina, el fabricante suele proporcionar
SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM 107
Tercera etapa
Hay que depurar y poner a punto el programa ejecutable. En el proceso de traducción
del programa en lenguaje fuente a código ejecutable pueden surgir errores sintácticos
que los detecta el programa traductor y que pueden ser debidos a usar instrucciones no
existentes o mal escritas, parámetros incorrectos, etc. Cuando se detecta este tipo de
errores hay que retornar a la primera etapa y volver a editar el programa eliminando los
errores.
Cuando el programa fuente está bien escrito, los ensambladores o compiladores
que les traducen a código máquina generan una serie de archivos, de los cuales el más
importante es el que tiene la extensión .HEX, pues contiene el programa en binario/
hexadecimal que ejecutará el procesador. El resto de los archivos que se generan contie-
ne los errores encontrados (.ERR), el listado (.LIST) y otros que suelen necesitarlos las
herramientas de depuración, simulación y emulación.
Cuarta etapa
Una vez obtenido el fichero .HEX, se pasa a la verificación de su comportamiento real.
Para desarrollar esta fase tanto los fabricantes como segundas fuentes ofertan tres tipos
de herramientas que se diferencian en su potencia, rendimiento y coste.
A) Emuladores
Son equipos que sustituyen al microcontrolador en el prototipo físico y ejecutan el pro-
grama bajo prueba exactamente igual que lo haría el dispositivo definitivo, pero con la
ventaja de poder registrar eventos en el desarrollo del programa, cambiar parámetros, ver
la evolución de los valores de las posiciones de memoria, etc. Son muy precisos y caros
y Microchip comercializa los modelos IC2000 e IC4000, cuyo control se realiza desde
el entorno MPLAB (Fig. P1.2).
B) Depurador en circuito
Su coste es más asequible que el de los emuladores y consiste en una herramienta, ICD,
que comunica los recursos destinados a labores de depuración que hay dentro de muchos
microcontroladores, como los PIC, con un software de depuración externo. El ICD tiene
la capacidad de grabación del programa de aplicación sobre el microcontrolador del
prototipo (en el emulador se sustituye al microcontrolador). De esta forma, el programa
se ejecuta en tiempo real sobre el microcontrolador final bajo el control del ICD, que
108 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
permite un seguimiento del desarrollo del programa y sus efectos. Se pueden aplicar
puntos de parada, ejecución paso a paso (instrucción por instrucción), visualización y
modificación de los valores de los registros, etc. (Fig. P1.3).
El depurador en circuito tiene limitaciones y restricciones frente al emulador, ade-
más consume parte del área de programa, algunas líneas de E/S y cada vez que hay que
modificar el programa hay que regrabarlo en la memoria del microcontrolador.
C) Simulador «software»
Se trata de un programa que simula el comportamiento del microcontrolador en la ejecu-
ción de las instrucciones de un programa de aplicación. Se ejecuta sobre el PC, pero no
en tiempo real, y no puede conectar externamente periféricos reales.
Figura P1.3. Fotografía del depurador en circuito ICD-2 que se gestiona desde el entorno MPLAB.
SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM 109
Suele ser de carácter gratuito y muy didáctico. Vamos a proponer usar el MPLAB
SIM en el desarrollo de los primeros programas. Está incluido en el MPLAB.
EJERCICIO
Realizar un análisis comparativo entre las ventajas e inconvenientes de utilizar un emu-
lador, un depurador en circuito y un simulador para la fase de depuración y puesta a
punto de los programas de aplicación.
Quinta etapa
Se comprueba que el comportamiento del programa es el correcto. La comprobación
puede efectuarse con un emulador, un depurador en circuito o un simulador software. Si
se detectan fallos, hay que retornar a la primera etapa. Sólo cuando el programa cumple
todas las expectativas previstas se pasa a la siguiente etapa.
Sexta etapa
Grabación del programa ejecutable (.HEX) en la memoria del microcontrolador. Se re-
curre a un grabador con su software de apoyo. En la Figura P1.4 se muestra la fotografía
del grabador PIC Burner, muy sencillo de manejo, económico y útil para grabar la ma-
yoría de los modelos de PIC.
Figura P1.4. Fotografía del grabador PIC Burner, de Ingeniería de Microsistemas Programados, que
destaca por su economía y facilidad de manejo.
110 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Séptima etapa
Se realizan las pruebas finales sobre el prototipo que lleva incrustado el microcontrola-
dor con el programa de aplicación grabado sobre su memoria de instrucciones.
El sistema de desarrollo PIC School, que se usa en las prácticas de este libro, admite
la mayoría de las gamas de PIC, desde la básica hasta los dsPIC; dispone de un grabador
propio y es adaptable al depurador ICD-2, todo ello bajo el entorno MPLAB.
Figura P1.5. Opciones e iconos que aparecen en la pantalla principal del entorno MPLAB IDE.
Figura P1.6. La iniciación del proyecto se produce con la opción Project Wizard en la ventana desplega-
ble de Project en el entorno MPLAB IDE.
• Tipo de procesador.
• Lenguaje de programación.
• Nombre del fichero con el programa fuente.
• Ficheros que se obtienen tras el ensamblado o compilación, como los ejecutables (.HEX),
listados (.LIST), errores (.ERR), etc.
• Entorno de trabajo.
• Parámetros de configuración.
Figura P1.8. En el segundo paso se seleccionan las herramientas para ensamblar o compilar el progra-
ma fuente.
SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM 113
Figura P1.9. Se asigna nombre al proyecto (EJEMPLO_0) y se indica en la carpeta que se guardará
(F:\ASM\EJEMPLO_0).
En la pantalla principal del MPLAB IDE hay una ventana que recoge los ficheros
del proyecto creado (Fig. P1.12).
Figura P1.12. Ventana que muestra los ficheros del proyecto creado.
Figura P1.14. Al final de la operación de ensamblado, producida por la opción Project/Build All, aparece
la frase «BUILD SUCCEEDED» si todo ha ido bien.
Para realizar el ensamblado, se recurre en el MPLAB IDE, dentro del menú Project,
a la opción Build All. A continuación, se proporciona información sobre cómo se está
desarrollando la traducción, y al final, se genera una ventana con el resultado de la mis-
ma. En dicha ventana se informa del desarrollo de la operación de ensamblaje, y si todo
ha ido bien, finaliza con la frase BUILD SUCCEEDED. Si ha ocurrido algún fallo en la
traducción, la frase final es BUILD FAILED. En este caso, hay que eliminar los errores
en el programa fuente, que se indican en la ventana, y repetir la operación de ensamblaje
(Fig. P1.14).
La directiva EQU permite asignar valores a etiquetas. Así, la posición 0x09 se puede
referenciar mediante la etiqueta IMPAR haciendo uso de la siguiente directiva:
; EJEMPLO 01
LIST P=12F508 ;Tipo de procesador
INCLUDE “P12F508.INC” ;Definición registros internos
IMPAR EQU 0x09 ;Def. de par etiqueta valor
ORG 0x00 ;Inicio programa
MOVLW b’00000001’ ;Mueve 1 a la posición IMPAR
MOVWF IMPAR
MOVLW b’00000010’ ;Mueve 2 a WREG
BUCLE: ADDWF IMPAR, 1 ;IMPAR + W = IMPAR
NOP ;No hace nada
GOTO BUCLE ;Repite el bucle
END ;Fin pograma
SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM 119
Trabajo personal
Confeccione un programa que genere números pares de forma descendente, desde 0xFE
hasta 0x00, y así sucesivamente.
P1.6. PROGRAMADO EN C
En los diseños con microcontrolador es muy habitual y cómodo usar el lenguaje C ade-
más de Ensamblador. Hay ocasiones que interesa mezclar trozos de ambos lenguajes.
A un coste muy asequible y con características profesionales, Ingeniería de Micro-
sistemas Programados comercializa el compilador de C, de la firma CCS, con la que
vamos a resolver los programas de C en este libro.
a
Herramientas para la grabación,
implementación y depuración: 2.
PIC School y WinPic800 APLICACIÓN
121
122 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P2.1. En el prototipo físico, el microcontrolador ejecuta el programa que tiene grabado y se
comprueba el comportamiento de los periféricos externos.
dores, numerosos periféricos y recursos que pueden conectarse a cualquier patita del
microcontrolador seleccionado y una sección de montaje sin soldadura para añadir otros
elementos que requiera el proyecto (Fig. P2.2).
Periféricos de entrada
• Cuatro interruptores deslizantes y cuatro pulsadores para soportar las entradas digi-
tales.
124 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Periféricos de salida
• Ocho diodos led que permiten monitorizar el estado de las líneas a las que se conectan.
• Un driver de cuatro canales capaz de proporcionar salidas de alta corriente permitiendo
la conexión de motores, lámparas incandescentes, relés, etc.
• Una pantalla LCD de 2 × 16 caracteres que permite la representación de mensajes me-
diante letras, números o símbolos especiales.
Periféricos de comunicación
• Interfaz serie RS232, que permite adaptar los niveles lógicos del microcontrolador a
niveles RS232.
• Interfaz CAN, que convierte las señales del microcontrolador según las especificaciones
de este bus tan utilizado en redes sensoriales.
• Conector RJ11, que permite la conexión de dispositivos I2C, iButton, RS485, etc.
• Conector USB, que permite la conexión con cualquier dispositivo estándar existente en
el mercado.
De esta forma, gracias a esta nueva herramienta, se solventan las cuatro grandes
limitaciones existentes en el resto de entrenadores comerciales para microcontro-
ladores:
1.a Es un entrenador válido para todas las gamas de microcontroladores PIC, per-
mitiendo al usuario seleccionar siempre aquel dispositivo que más se ajuste a
las necesidades específicas de cada proyecto. Pudiendo, además, seleccionar la
frecuencia y tipo de reloj más adecuados en cada caso.
2.a Dispone de los periféricos más universales utilizados en la microelectrónica,
permitiendo que la conexión entre éstos y el microcontrolador se realice a
medida de cada experimento. Además, gracias a la board que posee, cualquier
dispositivo adicional se puede incorporar con facilidad. De esta forma, se puede
obtener el primer prototipo funcional de un proyecto en el mínimo tiempo y sin
tener que realizar ni una soldadura.
3.a Con sus tres modos de funcionamiento, el PIC School se adapta a todas las eta-
pas que conlleva el desarrollo de una aplicación microelectrónica, permitiendo
la emulación, prueba y grabación de microcontroladores PIC cambiando sólo la
posición de un conmutador. Así se evita la utilización de varios dispositivos que
realicen cada una de esas tareas.
HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN 125
U1 estabiliza la tensión a +5 Vcc con 1 A máximo. Dicha tensión, junto con GND, están
disponibles en el conector AP1 y AP2, respectivamente, para alimentar a los circuitos y
prototipos del usuario. En el conector AP3 está disponible también la tensión de entrada
sin estabilizar +Vin para aquellos circuitos que la requieran. El diodo led D3 indica la
presencia de tensión +5 Vcc.
P2.3.2. El oscilador
Se encarga de generar la frecuencia principal de trabajo del microcontrolador. Su esque-
ma se muestra en la Figura P2.5. Está formado por el dispositivo integrado X1 y la red
RC, formada por R20 y C1. Mediante el jumper JP2 se obtiene la señal de reloj CLKIN.
Cerrando los contactos 1-2, dicha señal la proporciona el oscilador X1. Cerrando 2-3, la
señal se obtiene de la red RC. El valor de estos componentes determina la frecuencia de
la misma (consultar parámetros proporcionados por Microchip).
Es la sección más importante del entrenador PIC School y donde se instala el dispositivo
PIC con el que se va a trabajar. Básicamente, consta de cuatro zócalos donde se pueden
insertar los dispositivos de 8, 18, 28 y 40 patillas, tal y como se muestra en la fotografía
de la Figura P2.6.
HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN 127
La Figura P2.10. muestra el esquema eléctrico de estas ocho entradas cuyas señales
están disponibles en el bloque de conexiones AP18. Las señales E0-E3 proceden de los
cuatro interruptores deslizantes. Cuando éstos están abiertos (hacia arriba), proporcio-
HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN 129
nan nivel lógico «1» gracias a las resistencias pull-up de RP2. Cuando cualquiera de
ellos se cierra (hacia abajo), se conecta directamente con la señal GND, proporcionando
nivel «0».
Por otra parte, los cuatro pulsadores en situación de reposo permanecen abiertos,
generando nivel lógico «1» gracias a las resistencias pull-up contenidas en RP3. Cuando
se accionan, se cierra el circuito con GND y se genera nivel «0».
P2.3.7. El teclado
Como se aprecia en la Figura P2.13, el laboratorio PIC School va provisto de un teclado
matricial de 4 × 4 teclas. Se trata del periférico de entrada por excelencia que va a per-
mitir introducir todo tipo de datos para su posterior procesamiento.
HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN 131
El control del teclado supone el tener que aprender y utilizar una serie de técnicas
y conceptos que se emplean en las más diversas aplicaciones. Manejar conceptos tales
como barrido del teclado, tecla pulsada, rebotes, interrupción con cada pulsación,
«wake up» con cada pulsación, etc., darán al usuario la posibilidad de acometer ambi-
ciosos proyectos de carácter profesional.
Un dato relevante a tener en cuenta es que a pesar de disponer de dieciséis teclas, tan
sólo son necesarias ocho líneas de E/S del microcontrolador para su control. Ello es debido
a su distribución matricial. La Figura P2.14 muestra el teclado asociado al bloque de co-
nexiones AP21. En dicha figura también se puede apreciar la relación entre fila-columna y
la tecla asociada. Así, pues, la tecla 1 está asociada con la fila 0 (F0) y la columna 0 (C0).
En el laboratorio PIC School, las ocho líneas del teclado se pueden conectar a
cualquier puerta del PIC, pero se sugiere conectarlo a las líneas de la Puerta B (como
se muestra en la Figura P2.14). Esto se debe a que la mencionada puerta tiene, en la ma-
yoría de los dispositivos PIC, un par de características muy interesantes para el control
de un teclado: resistencias pull-up internas para las líneas de entrada y posibilidad de
interrupción cuando cualquiera de esas líneas de entrada cambie de estado.
Las cuatro filas F0-F3 de la Figura P2.14 se conectan a RB4-RB7 y las cuatro co-
lumnas C0-C3 se conectan con las líneas RB0-RB3. La intersección fila-columna da
lugar a seleccionar una tecla en concreto. Es decir, si se pulsa por ejemplo la tecla 4,
supone unir eléctricamente la fila F1 con la columna C0, que es tanto como decir que las
líneas RB0 y RB5 del PIC se han unido.
La rutina software encargada de explorar el teclado tiene que determinar qué tecla se
ha pulsado. Para ello, por ejemplo, se configura las líneas RB0-RB3 (columnas) como
salidas y RB4-RB7 (filas) como entradas. Secuencialmente, se van activando cada una
de las columnas al tiempo que se lee el estado de las filas. Cuando se detecta que una
fila está activa es porque se pulsó una tecla. Basta conocer qué columna se activó en
ese momento para sacar la relación fila-columna que define a dicha tecla. Esta tarea,
conocida como barrido de teclado, ha de repetirse de forma constante y periódica. De
esta manera, y a la velocidad de trabajo del PIC, será posible detectar una pulsación en
cualquier momento.
Haciendo uso de algunas de las prestaciones que ofrecen los dispositivos PIC en la
Puerta B, es posible desarrollar rutinas más sofisticadas y eficaces. Efectivamente, pro-
gramando los registros oportunos de un PIC, podemos hacer que las entradas RB4-RB7
(filas) se conecten a las resistencias pull-up internas que hacen que esas líneas, en esta-
do de reposo, estén a nivel 1. Por otra parte, también podemos habilitar la interrupción
por cambio de estado de cualquiera de las entradas de la Puerta B. En este momento, las
salidas RB0-RB3 (columnas) se ponen a nivel 0, y esta situación de reposo se mantiene
mientras no se pulse ninguna tecla. El microcontrolador puede dedicarse a otras tareas
o quedarse en standby, reduciendo el consumo hasta que ocurra un suceso como puede
ser la pulsación de cualquier tecla. Efectivamente, puesto que RB0-RB3 (columnas)
están a 0 y RB4-RB7 (filas) están a 1 gracias a las resistencias pull-up internas, cuando
se pulse cualquier tecla se produce una interrupción por cambio de estado en cualquiera
de las líneas RB4-RB7 (filas). Esa interrupción provoca la inmediata atención del mi-
crocontrolador, que pasa a ejecutar la rutina que se encargará de averiguar qué tecla se
pulsó.
En el laboratorio PIC School, los leds son accesibles mediante el conector AP17,
tal y como se muestra en el esquema de la Figura P2.16, y se pueden conectar indivi-
dualmente a cualquiera de las líneas del microcontrolador. Estas líneas son capaces de
suministrar 25 mA, por lo que no es necesario ningún circuito adicional de amplificación
excepto las resistencias de absorción contenidas en el pack RP1.
Un nivel lógico 1 por cualquiera de esas líneas provoca el encendido del led correspon-
diente. Un nivel 0 lo apaga. Es una forma muy simple y económica de reflejar el estado binario
de las líneas de salida, donde cada led simula el estado de la carga que se desea controlar.
RTS. Estas señales proceden del microcontrolador. El conector CN5 es un conector DB9
hembra estándar que permite realizar la conexión con el periférico serie. Mediante un led
bicolor (D17/D18) se monitoriza todo tipo de transmisión y/o recepción.
Esta interfaz permite realizar todo tipo de comunicaciones serie entre el labo-
ratorio PIC School y cualquier otro equipo mediante el protocolo estándar RS-232.
La velocidad de transferencia irá en función del tipo de microcontrolador empleado
y su velocidad de trabajo.
Se recuerda que algunos dispositivos PIC incorporan en su interior una UART com-
pleta que se encarga de realizar la mayor parte de los procedimientos propios de la co-
municación según los protocolos tanto RS-232 como RS-485. En este último caso, basta
con montar el sencillo circuito de adaptación correspondiente sobre el módulo board de
montaje sin soldadura con que cuenta PIC School.
El bus CAN permite crear una red con una transferencia de datos muy robusta y
fiable entre el microcontrolador principal (host) y todo tipo de dispositivos o nodos CAN
conectados entre sí mediante dos hilos. Este protocolo es muy empleado por la industria
del automóvil, y algunos dispositivos PIC incorporan mediante hardware interno todos
los mecanismos necesarios para su implementación.
La resistencia R19 permite ajustar el contraste del LCD. Con el valor de 4K7 se
consigue un contraste medio aceptable. Su valor se puede modificar.
En el modo PC, la lectura/grabación del PIC se realiza a través de las señales del canal
serie de un PC dotado del correspondiente software de grabación. Un diodo led, el Vpp
ON, indica transferencia de datos entre el PC y el laboratorio. Entre los múltiples tipos
de software existentes, nosotros hemos elegido el WinPic800 y el IcProg, con los que
hemos obtenido excelentes resultados. Ambos programas se pueden descargar y actuali-
zar de forma gratuita en las direcciones http://perso.wanadoo.es/siscobf/winpic800.htm
y en www.ic-prog.com.
Se reitera una vez más que, aunque un software de grabación determinado grabe
múltiples dispositivos y de diferentes familias, es necesario que también haya compa-
tibilidad a nivel hardware. Esta compatibilidad viene dada fundamentalmente por la
distribución de patillas del dispositivo en cuestión, tal y como se explicó en un apartado
anterior. En el laboratorio PIC School se admiten todos los dispositivos PIC de 8, 18,
28 y 40 patillas distribuidas como se menciona en dicho apartado y que también sean
soportados por el software de grabación empleado.
P2.4.1. Instalación
WinPic800 se presenta en un único fichero ZIP. Para la instalación debe descomprimirse
sobre una carpeta (por ejemplo, WinPic800) donde se ubicarán todos los archivos y car-
petas. Basta con hacer un acceso directo al fichero ejecutable para acceder con rapidez a
las diferentes funciones del software.
La Figura P2.28 muestra la pantalla de trabajo del software de grabación WinPic800,
en versión 3.56.c, donde se encuentran las diferentes áreas de trabajo, opciones y menús.
2. Selección de dispositivo
Mediante estas dos persianas se puede seleccionar el tipo de dispositivo a grabar, así
como el modelo.
3. Barra de comandos
Mediante el empleo de estos botones se puede ejecutar de una forma rápida y fácil la
mayor parte de los comandos contenidos en los menús Archivo y Dispositivo: Abrir
fichero, Actualizar, Guardar fichero, Leer PIC, Grabar PIC, Verificar PIC, Borrar PIC,
Configurar hardware y software.
5. Botones de edición
Este conjunto de botones permite de una forma fácil y rápida realizar tareas propias de
edición del área o buffer de memoria seleccionado: Copiar, Pegar, Cortar, Llenar buffer,
Marcar, Buscar y Buscar siguiente.
HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN 143
7. Botones de verificación
Permite leer el valor ID del dispositivo, visualizar una imagen de cómo se debe insertar
el PIC en el zócalo según el tipo de grabador empleado (si la imagen está disponible),
verificar el hardware del grabador e identificar el modelo de PIC.
VDD Alimentación de +5 V.
GND Tierra o 0 V.
MCLR/Vpp Señal de reset por donde además se aplica la tensión Vpp de grabación.
PGD Señal de E/S por donde, de forma síncrona, se transfieren al PIC los distintos
comandos y datos para su lectura (DataOut) y/o grabación (DataIn).
PGC Señal de reloj para sincronizar los comandos y datos que se aplican al PIC
durante la lectura o grabación.
Estas señales las debe generar el propio software de grabación y aplicarlas al circuito
grabador que contiene el PIC a grabar. El WinPic800 puede generar esas señales a través
del canal paralelo del PC, del canal serie o mediante la interfaz apropiada a través de un
puerto USB. Todo ello se puede configurar mediante la opción Configuración/Hardware
del menú principal. Incluso es posible configurar y determinar la asociación y polarización
entre las señales anteriores de grabación y las señales que ofrecen los canales serie/paralelo
del PC, de forma que se pueda adaptar a la mayoría de grabadores disponibles.
La Figura P2.29 muestra la configuración necesaria para controlar el circuito de
grabación del laboratorio PIC’School con el software WinPic800.
144 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
1. Entorno de desarrollo integrado MPLAB IDE, que incluye el simulador software MPLAB
SIM de Microchip.
2. Equipo PIC School para grabación, montaje y depuración de prototipos de Ingeniería de
Microsistemas Programados.
2. Software de grabación WinPic800, desarrollado por Sisco Benach
(www.perso.wanadoo.es/siscobf/winpic800.htm).
147
148 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Con esta práctica se trata de leer el estado lógico que introducen tres interruptores o
pulsadores de la PIC School conectados a las líneas de E/S GP3-GP5 de un PIC12F508
y reflejar visualmente dicho estado sobre tres diodos led conectados a las líneas de E/S
GP0-GP2, respectivamente.
LAS PRIMERAS EXPERIENCIAS 149
Figura P3.1. Para soportar líneas de E/S en un PIC12F508 puede existir un máximo de seis patitas
(GP0-GP5) siempre que se use el oscilador interno y la patita 4 esté configurada como
línea de entrada GP3.
Las líneas de E/S, GP0-GP5, están asociadas a los 6 bits de menos peso del registro
GPIO, que ocupa la dirección 0x06 de la memoria RAM de datos. Los 2 bits de más peso
de GPIO no son válidos (Fig. P3.2).
Figura P3.2. Las líneas de E/S, GP0-GP5, se corresponden con los 6 bits de menos peso del registro GPIO.
Una operación de lectura sobre el registro GPIO supone leer el estado lógico actual
que soportan las líneas de entrada asociadas a él, mientras que una escritura significa
sacar por las líneas de salida el valor lógico correspondiente a los bits cargados en GPIO.
Leyendo y escribiendo GPIO, se transfiere información de forma bidireccional entre el
procesador y el mundo exterior.
Todas las líneas de E/S pueden funcionar como entrada o como salida, con excepción
de GP3, que sólo actúa como entrada. En el procesador existe un registro independiente
interno de 8 bits, llamado TRIS, que tiene la misión de configurar como entrada o salida
las líneas de E/S. Si se carga un 1 en un bit del registro TRIS, la línea de E/S asociada
se configura como entrada de alta impedancia. Si se carga un 0, la línea asociada actúa
como salida (Fig. P3.3).
150 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P3.3. Un 1 en un bit del registro TRIS configura como entrada la línea de E/S asociada, mientras
que un 0 la configura como salida.
Para manejar el registro independiente TRIS se usa la instrucción «TRIS», que carga
en el mismo el contenido del registro de trabajo W (W → TRIS).
En la Figura P3.4 se ofrece el esquema eléctrico del conexionado interno de cada
línea de E/S que tiene asociado un registro latch del registro TRIS y otro del registro
GPIO. Si se carga un 1 en un bit de TRIS, el latch queda anulado y dicha línea traba-
ja como entrada, de manera que una operación de lectura sobre GPIO devuelve al bit
correspondiente del registro W el estado actual de dicha patita. Si se carga un 0 en un
latch de TRIS, queda habilitado el latch de salida de datos y la línea de E/S funciona
como salida soportando el mismo nivel lógico que exista en el latch de salida de datos
correspondiente.
Cuando se efectúa una operación de escritura MOVWF GPIO (W → GPIO), se
«latchean» o se registran las salidas y por las líneas de salida se saca el correspondiente
Figura P3.4. Si un latch del registro TRIS tiene un 1, el latch de salida de datos (GPIO) queda inhabili-
tado y la línea de E/S queda configurada como entrada.
LAS PRIMERAS EXPERIENCIAS 151
valor binario hasta que se cargue un nuevo valor. En una operación de lectura MOVF
GPIO, W, se lee el estado lógico actual de las patitas de entrada.
Algunas instrucciones orientadas a bit (sólo afectan a un bit de un registro) realizan una
lectura seguida de una escritura. Esto sucede con BSF, que pone a 1 un bit de un registro,
o bien con BCF, que pone a 0 un bit concreto de un registro. Al ejecutar una de ellas, se
lee el registro completo, se activa a 1 o 0 el bit especificado y luego se escribe el registro
completo. Si dicho registro es GPIO, hay que tener precaución con estas instrucciones
cuando actúan sobre puertas que se están configurando dinámicamente como entradas o
como salidas. Si, por ejemplo, se ejecuta la instrucción BSF GPIO, 5, se comienza leyendo
todo el registro GPIO, luego se pone a 1 su bit 5 y, finalmente, se escribe el nuevo valor
sobre GPIO. Si en el momento de la lectura GP1 está configurada como entrada y tiene un
0, dicho valor se carga en el latch de salida de datos de GP1. En el instante que GP1 se
reconfigure como salida, la patita se pondrá automáticamente a 0 como consecuencia de
la instrucción BSF GPIO, 5, previamente ejecutada.
COMENTARIOS
Tanto en la cabecera del programa como al comienzo de las rutinas, como detrás de las
instrucciones importantes, conviene que el autor añada aclaraciones que permitan com-
prender a otro usuario la misión de cada cosa. Los comentarios siempre van precedidos
por «punto y coma» ( ; ).
;
; EJEMPLO 1
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;
;Leer el estado de tres interruptores/pulsadores del laboratorio
;conectados a GP3-GP5 y reflejar el nivel
;lógico de los mismos sobre los leds conectados a GP0-GP2
DIRECTIVAS DE ENSAMBLADOR
PALABRA DE CONFIGURACIÓN
que establece que hay protección del código, funciona el Perro Guardián, se usa MCLR
interno y el oscilador es el interno de 4 MHz. Estas etiquetas o definiciones de la confi-
guración también se hallan establecidas en el archivo P12F508.INC.
riables es el que compone el área GPR, que en el PIC12F508 llegan desde la dirección
0x07 a la 0x1F.
En todos los programas hay que definir la dirección de la memoria de programa en
donde se ubica la primera instrucción que se debe ejecutar al arrancar el sistema. A dicha
posición se la llama Vector de Reset. En el caso del PIC12F508, la dirección de la primera
posición que se ejecuta es la 0x1FF, que es la última del mapa de memoria. En dicha posi-
ción se coloca en fábrica la instrucción MOVLW XX, donde XX es el valor usado para la
calibración del oscilador interno y que se carga en el registro W. Cuando se ejecuta, el PC
se desborda y pasa a valer 0x000, que es, a efectos prácticos, la dirección de inicio del pro-
grama. La directiva org 0x00 informa al ensamblador la dirección de la instrucción inicial.
INSTRUCCIONES
Figura P3.6. Tras una rotación a la izquierda y un intercambio de nibbles, el valor de las entradas se
sitúa en el de las salidas.
;
; EJEMPLO 1
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;
;Leer el estado de 3 interruptores/pulsadores del laboratorio,
;conectados a GP3-GP5 y reflejar el nivel
;lógico de los mismos sobre los leds conectados a GP0-GP2
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
end
1.a Los periféricos correspondientes a las líneas de E/S GP0 y GP1 se conectan a las
líneas RB7 y RB6 para no tener que desconectar los mencionados periféricos durante
la fase de grabación.
2.a El conmutador de tres posiciones de la PIC School se coloca en el PC durante las fases
de edición y grabación. (¡Ojo! Si se usa un adaptador puerto serie-USB para conectar la
herramienta al PC, entonces se coloca el conmutador en la posición ICSP) (Fig. P3.8).
3.a El jumper JP4 se debe colocar en la posición MCL (1-2).
LAS PRIMERAS EXPERIENCIAS 157
Figura P3.7. Conexionado de los periféricos a las seis líneas de E/S del microcontrolador.
Figura P3.8. Cuando se usa un adaptador serie-USB para comunicar el PC a la PIC School, se coloca el
conmutador en la posición ICSP durante las fases de edición y grabación.
158 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
GRABACIÓN
Figura P3.10. Fotografía de la PIC School con el experimento propuesto montado y funcionando.
Una vez grabado el dispositivo y para comprobar el comportamiento del programa cuan-
do lo ejecuta el PIC12F508, se procede a seguir los siguientes pasos.
// EJEMPLO 1
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//
// Leer el estado de 3 interruptores/pulsadores del laboratorio,
// conectados a GP3-GP5 y reflejar el nivel
// lógico de los mismos sobre los leds conectados a GP0-GP2
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
Ejercicio 1
Con igual conexionado que el empleado en la práctica descrita en este tema, realizar
un programa que visualice sobre los leds de salida conectados a las líneas GP0, GP1
y GP2 el estado complementario o negado de los interruptores de entrada conectados
a las líneas GP3, GP4 y GP5, respectivamente. Comprobar el funcionamiento física-
mente.
LAS PRIMERAS EXPERIENCIAS 161
Ejercicio 2
De las seis líneas de E/S que dispone un PIC12F508, se destinan dos de ellas a entradas
binarias implementadas con dos interruptores de la PIC School (E0-E1) y las cuatro
restantes, a elección del usuario, se destinan a representar cuatro valores binarios sobre
cuatro leds (S0-S3). Se trata de confeccionar un programa en Ensamblador y en C y luego
montar el circuito y comprobar su funcionamiento que visualice en binario sobre los cua-
tro leds de salida el valor binario que representan las dos entradas más 5.
Ejercicio 3
Se dispone en el laboratorio PIC School con un PIC12F508 de dos líneas de entrada
conectadas a los interruptores E0 y E1 y de cuatro salidas conectadas a los leds S0-S3.
El usuario elige las patitas de entrada y salida. Confeccionar un programa y comprobar
su funcionamiento real de forma que se codifiquen las entradas con las salidas según se
muestra en la tabla de la verdad de la Figura P3.11.
Entradas Salidas
E1 E0 S3 S2 S1 S0
0 0 0 1 1 0
0 1 1 0 0 1
1 0 0 1 0 1
1 1 1 0 1 0
Figura P4.1. La línea de salida del conmutador tiene nivel o estado 1 si está conectada a +5 VCC, tiene
nivel 0 si se conecta con tierra y tiene el estado de alta impedancia, Z, cuando no está
conectada a nada, es decir, en la posición central.
163
164 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
combinaciones será C = 3n. Por ejemplo, con dos líneas binarias se pueden representar
cuatro combinaciones diferentes; pero si las líneas fuesen triestado, el número de com-
binaciones posibles se elevaría a nueve.
A los tres estados se denominan 0, 1 y Z.
En esta experiencia se analiza el estado en que se encuentra una línea de entrada (GP5)
en el PIC12F508, y según esté en el 0, en el 1 o en el Z, se activa la línea GP0, GP1 o
GP2, respectivamente, y se encenderá el led que controla cada una de ellas.
PRINCIPIOS TEÓRICOS
Para la detección de los 3 estados lógicos posibles en la línea de entrada GP5 del
PIC12F508 se monta el circuito de la Figura P4.2.
Para detectar que la línea GP5 del circuito de la Figura P4.2 soporta el estado de alta
impedancia, Z, se procede a realizar los siguientes cuatro pasos:
— Primer paso: Se configura GP5 como salida y se saca por ella un nivel 1, que
sirve para cargar al condensador de 1 nF del esquema de la Figura P4.2.
— Segundo paso: Inmediatamente después, se reconfigura GP5 como entrada y se
lee su estado actual. Se debe leer el estado 1 como consecuencia de estar cargado
el condensador.
— Tercer paso: De nuevo se configura GP5 como salida y se saca un 0 por ella
para producir la descarga del condensador.
— Cuarto paso: Se reconfigura GP5 como entrada y se lee su estado, que en este
caso debe ser el 0 al haberse descargado el condensador.
Figura P4.2. Esquema eléctrico para la detección de los tres estados que admite la línea de entrada GP5.
MANEJANDO EL TERCER ESTADO EN LAS E/S 165
Los cuatro pasos producen los resultados mencionados siempre que el conmu-
tador de la Figura P4.2 se halle conectado en la posición central y entonces GP5
soporta el estado de alta impedancia. En resumen, la comprobación de que la línea
tiene el estado Z se confirma porque cuando por ella se saca un 1, después se lee por
ella un 1, y cuando se saca un 0, luego se lee un 0. Se debe al comportamiento del
condensador.
Si al sacar un 1 por GP5 luego se lee un 0, significa que el conmutador está conectado
a tierra, o sea, GP5 soporta un nivel 0. Cuando al sacar un 0 por GP5 se lee posterior-
mente un 1, el conmutador está conectado a +5 VCC y GP5 soporta nivel 1 estando el
condensador cargado.
Conviene tener en cuenta que cuando se escribe sobre una línea GPIO configurada
como salida, el valor escrito se almacena en un registro o latch que lo mantiene estable.
Sin embargo, cuando se efectúa una lectura de una línea de entrada lo que se lee es el
nivel lógico actual de la patita correspondiente.
NUEVAS INSTRUCCIONES
El programa de esta experiencia tiene pocas instrucciones nuevas respecto a los comen-
tados anteriormente. La función del programa es configurar a GP5 como salida para
sacar un 1 o un 0 para luego reconfigurar la línea como entrada y leer su valor. Según el
valor leído en GP5, hace que GP2 = 1 cuando GP5 = Z, que GP1 = 1 cuando GP5 = 1 y
que GP0 = 1 en el caso que GP5 = 0.
La instrucción movlw b’11111000’ seguida de option realiza la carga del valor bina-
rio indicado en el registro OPTION, con lo que se consigue configurar la patita multifun-
ción GP2/T0CKI como línea de E/S GP2.
La instrucción btfss GPIO, 5 explora si GP5 soporta el nivel 1, y si es así, se salta
la siguiente instrucción del programa (brinco). Con la instrucción btfsc GPIO, 5 se
chequea si GP5 soporta el nivel 0, y si así sucede, se brinca y se salta la siguiente ins-
trucción del programa. Son dos instrucciones de salto condicional, pero el salto que se
origina cuando se cumple la condición es muy pequeño porque sólo se salta la siguiente
instrucción.
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Resistencia de 330 Ω.
• Condensador de 1 nF.
• Cables de conexión.
Figura P4.3. Organigrama para detectar los tres estados posibles en la línea GP5 del esquema de la
Figura P4.2.
;
; EJEMPLO 2
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;El programa sirve para los tres estados, incluyendo
;el de alta impedancia (Z), posible en la entrada GP5.
;Si GP5=0, se activa GP0; si GP5=1, se activa GP1, y si GP5=Z, se activa GP2
List p=12F508 ;Tipo de procesador
include “P12F508.INC” ;Def. de registros internos
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
ENSAMBLADO
CONEXIÓN DE PERIFÉRICOS
El conexionado de los periféricos que todos están disponibles en la PIC School es el que
muestra la Figura P4.4.
Figura P4.4. Conexión de las cuatro líneas del PIC12F508 usadas en la experiencia.
MANEJANDO EL TERCER ESTADO EN LAS E/S 169
Para grabar el programa Práctica2.ASM con PIC School en la memoria FLASH del
PIC12F508 se utiliza el programa WinPic800. El jumper JP4 debe estar en la posición
MCL uniendo los puntos 1-2. El conmutador principal de la PIC School debe situarse en
la posición PC si se utiliza la puerta serie para conectarla con el PC. En caso de usar el
adaptador opcional para conectar la PIC School con el PC por el puerto USB, hay que
colocar el conmutador en la posición ICSP durante la grabación/verificación.
Desde WinPic800 se abre el programa Práctica2.HEX y con el icono correspon-
diente se ordena la grabación del mismo sobre la memoria del PIC12F508 previamente
seleccionado. Después, se puede verificar si la grabación ha sido correcta comparando
el contenido de la memoria con el del programa.
Una vez grabado el programa y antes de la verificación de su comportamiento, se
coloca JP4 en la posición GP3 (2-3) y el conmutador principal se pone en RUN.
Cuando el cable libre del montaje de la Figura P4.2, que hace de sonda lógica, toca
los +5 V, se encenderá el led S1 (GP5 = 1); si toca tierra, se enciende S0 (GP5 = 0), y si
no toca nada y queda al aire, se encenderá el led S2 (GP5 = Z).
EL PROGRAMA EN C
// EJEMPLO 2
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//El programa demuestra la posibilidad de detectar el tercer estado,
//el de alta impedancia (0-1-Z), posible en cualquier entrada (p.e. GP5).
//Si GP5=0, se activa GP0; si GP5=1, se activa GP1, y si GP5=Z, se activa GP2
170 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
main()
{
output_b(0x0); //Borra las salidas
SETUP_TIMER_0(RTCC_INTERNAL); //Pin GP2/T0CKI = GP2
set_tris_b(0b11111000); //GP0-GP2 como salidas
while(1)
{
Loop: set_tris_b(0b11011000); //GP5 salida
bit_set(GPIO,5); //GP5=1
set_tris_b(0b11111000); //GP5 entrada
if (bit_test(GPIO,5)==0) //GP5 = 0???
{output_b(0b00000001); //Si, GP0=1
goto Loop;}
set_tris_b(0b11011000); //GP5 salida
bit_clear(GPIO,5); //GP5=0
set_tris_b(0b11111000); //GP5 entrada
if (bit_test(GPIO,5)==1) //GP5 = 1 ???
{output_b(0b00000010); //Si, GP1=1
goto Loop;}
ENUNCIADO
Con dos líneas binarias que sólo admiten los estados lógicos 1 y 0 se pueden formar
cuatro combinaciones diferentes (22). Si dichas líneas admiten tres estados (0, 1 y Z), el
número de combinaciones distintas se eleva a 9 (32).
En esta experiencia se utilizarán dos líneas triestado de entrada, GP4 y GP5, con las
que se podrán formar nueve combinaciones diferentes. Con objeto de poder representar
las nueve combinaciones mediante tres líneas de salida (GP0-GP2) binarias es preciso que
una de las nueve posibles combinaciones de entrada repita su representación, ya que las
tres líneas binarias de salida sólo admiten ocho (23) combinaciones posibles (Fig. P4.6).
Recuérdese que la línea GP3 sólo puede configurarse como entrada.
MANEJANDO EL TERCER ESTADO EN LAS E/S 171
Entradas Salidas
GP5 GP4 GP2 GP1 GP0
0 0 0 0 0
0 1 0 0 1
1 0 0 1 0
1 1 0 1 1
Z 0 1 0 0
Z 1 1 0 1
0 Z 1 1 0
1 Z 1 1 1
Z Z 0 0 0
Figura P4.6. Codificación de las nueve combinaciones formadas por las dos entradas triestado mediante tres
líneas binarias de salida. Es necesario que una de las nueve combinaciones de entrada repita
su representación porque las tres líneas binarias de salida sólo admiten ocho combinaciones.
PRINCIPIOS TEÓRICOS
En el esquema de la Figura P4.7 se representa cómo se materializan las dos entradas
triestado correspondientes a las líneas GP4 y GP5. Como en la práctica anterior, se usan
redes RC para la implementación de los tres estados posibles.
Cuando el cable que parte de la unión de la resistencia y el condensador esté al aire,
por la patita correspondiente se introducirá un nivel de alta impedancia Z. Usando el
método de la práctica anterior, en cualquier momento se puede averiguar el estado lógi-
co que introducen GP4 y GP5 configurándolas como salidas, sacando por ellas un nivel
lógico y reconfigurándolas como entradas y leyendo el valor que entra.
Figura P4.7. Esquema para generar los tres estados posibles por las líneas de entrada GP4 y GP5.
NUEVAS INSTRUCCIONES
En el programa fuente en Ensamblador destaca el uso de una variable temporal (Temp)
que ocupa la primera posición libre de la memoria de datos, la 0x07. Las anteriores están
asignadas a registros específicos de control (SFR). El valor de Temp se forma con el
correspondiente a GP4 más el de GP5.
172 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Dos resistencias de 330 Ω.
• Dos condensadores de 1 nF.
• Cables de conexión.
GP5 GP4 Temp (GP5) Temp (GP4) Valor Codificación GP2 GP1 GP0
0 0 +0 +0 0 0 0 0 0
0 1 +0 +1 1 1 0 0 1
1 0 +2 +0 2 2 0 1 0
1 1 +2 +1 3 3 0 1 1
Z 0 +4 +0 4 4 1 0 0
Z 1 +4 +1 5 5 1 0 1
0 Z +0 +6 6 6 1 1 0
1 Z +2 +6 8 7 1 1 1
Z Z +4 +6 10 0 0 0 0
Figura P4.8. Representación de las nueve combinaciones de las dos entradas triestado con las tres líneas
de salida binarias.
MANEJANDO EL TERCER ESTADO EN LAS E/S 173
Figura P4.9. Organigrama correspondiente para la codificación de las dos entradas triestado con las
tres salidas binarias.
; EJEMPLO 2_2
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
174 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;El programa analiza las entradas triestado GP4 y GP5, las cuales
;pueden generar 32=9 combinaciones diferentes. Cada combinación se
;visualiza sobre tres salidas digitales (GP2-GP0) codificando un valor
;BCD para cada combinación según la siguiente tabla:
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
Continuar movlw.8
subwf Temp,W
btfss STATUS,Z ;Temp = 8 ??
goto Continuar_1 ;No
decf Temp,F ;Sí, Temp = 7 (111)
goto Continuar_2
Continuar_1 movlw.10
subwf Temp,W
btfsc STATUS,Z ;Temp = 10 ??
clrf Temp ;Sí, Temp = 0
Continuar_2 movf Temp,W
movwf GPIO ;Visualiza Temp
goto Loop
end
176 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
ENSAMBLADO
El programa fuente, llamado Ejem2_2.ASM, pasa a formar parte del proyecto que se
construye en el MPLAB IDE, y al ensamblarlo en dicho entorno, se obtiene el programa
ejecutable Ejem2_2.HEX.
Se puede simular el comportamiento del programa usando el simulador MPLAB
SIM introduciendo desde el teclado los valores que se desee que introduzcan GP4 y
GP5. Sólo la implementación física del proyecto con materiales reales, la grabación del
programa ejecutable en la FLASH del PIC12F508 y su posterior ejecución permitirán el
comportamiento real y sus resultados.
CONEXIÓN DE PERIFÉRICOS
Figura P4.9. Conexionado físico de las dos entradas triestado y las tres salidas binarias.
MANEJANDO EL TERCER ESTADO EN LAS E/S 177
EL PROGRAMA EN C
// EJEMPLO 2_2
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//El programa trata de demostrar la posibilidad de detectar el tercer
//estado, el de alta impedancia (0-1-Z), posible en cualquier entrada.
//Se analizarán las entradas GP4 y GP5, lo que produce un total de 3^2=9
//combinaciones. Las salidas, GP2-GP0, visualizan, en BCD, el número
//de la combinación.
178 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
main()
{
output_b(0x0); // Borra las salidas
SETUP_TIMER_0(RTCC_INTERNAL); // Pin GP2/T0CKI = GP2
set_tris_b(0b11111000); // GP0-GP2 como salidas
while(1)
{
Loop: Temp=0; //Inicia variable temporal
Test_GP4:
set_tris_b(0b11101000); //GP4 salida
bit_set(GPIO,4); //GP4=1
set_tris_b(0b11111000); //GP4 entrada
if (bit_test(GPIO,4)==0) //GP4 = 0???
goto Test_GP5; //Sí
Test_GP5:
set_tris_b(0b11011000); //GP5 salida
bit_set(GPIO,5); //GP5=1
set_tris_b(0b11111000); //GP5 entrada
if (bit_test(GPIO,5)==0) //GP5 = 0???
goto Continuar; //Sí
Continuar:
if (Temp==8)
Temp=7; //Sí Temp=8 --> Temp=7
if (Temp==10)
Temp=0; //Sí Temp=10 --> Temp=0
output_b(Temp); //Visualiza Temp
}
}
a
Controlando el tiempo
con «software»
5.
APLICACIÓN
ENUNCIADO
Para simular una luz intermitente se utiliza un diodo led conectado a la línea de salida
GP0 de un PIC12F508 que funciona a 4 MHz con su reloj interno. El ciclo que repite
el programa continuamente consiste en encender el led durante 0,5 segundos y después
apagarlo el mismo tiempo.
PRINCIPIOS TEÓRICOS
En casi todas las aplicaciones hay que controlar períodos de tiempo y para ello existen
dos formas de conseguirlo:
181
182 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P5.1. Organigrama del bucle A que controla por software un tiempo de 768 µs.
La instrucción decfsz dura 1 µs cuando no se salta, mientras que la goto siempre dura
2 µs, y ambas se repiten 255 veces hasta que Temp_0 llega a valer 0 y el señalizador Z = 1,
lo que supone un tiempo de 255 · 3 = 765 µs. Al llegar Temp_0 a valer 0, la instrucción
decfsz rompe el bucle al brincar y dura 2 µs, que, unido al otro µs que tarda clrf, hacen
un total de 765 + 2 + 1 = 768 µs.
NUEVAS INSTRUCCIONES
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Cables de conexión.
Figura P5.2. Organigrama del bucle B, que dura aproximadamente 0,1 segundos.
Figura P5.3. Organigrama del bucle C, con el que se alcanzan los 0,5 segundos de temporización.
CONTROLANDO EL TIEMPO CON «SOFTWARE» 185
;EJEMP_3A.ASM
; EJEMPLO 3
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;En esta experiencia se genera una onda cuadrada de 1 Hz sobre
;la salida GP0, conectada a un led. Éste se mantiene encendido 0.5 s y
;apagado otros 0.5 s. Se supone que la frecuencia de trabajo es
;de 4 MHz
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
Temp_0 equ 0x07
Temp_1 equ 0x08
Temp_2 equ 0x09 ;Variables temporales
org 0x00 ;Vector de Reset
Inicio movwf OSCCAL ;Almacena valor calibración original
clrf GPIO ;Borra salidas
movlw b’11011111’
option ;Pin GP2/T0CKI = GP2
movlw b’11111110’
tris GPIO ;Configura GP0 como salida
Loop movlw b’000000001’
xorwf GPIO,F ;GP0 cambia de estado
;Bucle de temporización de 0.5 seg. en base a una frec. de trabajo
;de 4 MHz
movlw.5
movwf Temp_2 ;El bucle externo se repite 5 veces
Delay_0 movlw.130
movwf Temp_1 ;El bucle interno se repite 130 veces
Delay_1 clrf Temp_0 ;El bucle se repite 255 veces
Delay_2 decfsz Temp_0,F
goto Delay_2 ;Este bucle interno tarda en
;ejecutarse 768 uS aprox. (256 x 3uS)
decfsz Temp_1,F ;Este intermedio repite el anterior
goto Delay_1 ;130 veces, haciendo un total de
;0.100234 s
decfsz Temp_2,F
goto Delay_0 ;El externo se repite 5 veces con un
;total de 0.499 s
goto Loop
End
186 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
ENSAMBLADO
CONEXIÓN DE PERIFÉRICOS
En este proyecto sólo se utiliza un led conectado a la línea GP0, que actúa como salida
(Fig. P5.4). Como GP0 se usa en la fase de grabación y lectura de la memoria FLASH
de programa para soportar los datos que se transfieren (GP0/ICSP DAT), se recomienda
usar la línea RB7 para no tener que desconectar GP0 al led durante la fase de grabación
del programa.
Figura P5.4. Conexionado del led a la línea RB7 (GP0) de PIC School.
EL PROGRAMA EN C
// EJEMPLO 3
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Este ejemplo consiste en producir una onda cuadrada de 1 Hz sobre
//la salida GP0, conectada a un led. Éste se mantiene encendido 0.5 s y
//apagado los otros 0.5 s. Se supone que la frecuencia de trabajo es
//de 4 MHz
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
main()
{
output_b(0x0); //Borra las salidas
SETUP_TIMER_0(RTCC_INTERNAL); //Pin GP2/T0CKI = GP2
set_tris_b(0b11111110); //GP0 se configura como salida
while(1)
{
GPIO=(GPIO ^ 0x01); //Cambio de estado en GP0
delay_ms(500); //Temporiza 500 mS=0.5 s
}
}
TRABAJO PERSONAL
Confeccionar un programa que genere sobre el led conectado a la línea de salida GP0
del PIC12F508 una onda asimétrica que durante 0,5 segundos saque nivel alto y durante
1,25 segundos nivel bajo (Fig. P5.5).
188 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P5.5. Onda asimétrica que durante 0,5 segundos tiene el nivel alto y durante 1,25 segundos el
nivel bajo.
a
Controlando el tiempo
con «hardware». 6.
El temporizador TMR0 APLICACIÓN
Como en la anterior experiencia, en ésta también se trata de hacer parpadear un led co-
nectado en la línea GP0 cada 0,5 s, pero en esta ocasión el control del tiempo lo llevará a
cabo el circuito temporizador TMR0 que se halla integrado en el PIC12F508.
PRINCIPIOS TEÓRICOS
189
190 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Los impulsos seleccionados por MPX1 en la Figura P6.1 pueden aplicarse al TMR0
directamente o a través de un predivisor de frecuencia seleccionable con el bit PSA de
OPTION. Los bits PS2:0 de OPTION determinan el valor por el que se dividen los im-
pulsos de reloj en el predivisor en un rango comprendido entre 1:2 a 1:256.
Cuando se trabaja a 4 MHz, el ciclo de instrucción FOSC · 4 = 1 µs, y si se elige el
rango 1:256 en el predivisor, la mínima temporización será de 256 µs cuando el TMR0
se desborde con un impulso, mientras que la máxima será de 256 · 256 = 65.536 µs
cuando se desborde al cabo de 256 impulsos. El valor del tiempo del retardo se calcula
con la siguiente fórmula:
Si el bit T0CS = 1, los impulsos de reloj activos son los aplicados desde el exterior
por la patita GP2/T0CKI, y en esta situación, el TMR0 actúa como contador de aconte-
cimientos exteriores.
Como TMR0 es un contador ascendente, el valor que hay que cargarle en una tem-
porización será el complemento. Por eso, si se quiere que el TMR0 cuente diez impulsos
de reloj, habrá que cargarle con el complemento de 10 a 256, es decir, con 246, para que
al cabo de diez impulsos se desborde y el TMR0 vuelva a contener el valor 0.
NUEVAS INSTRUCCIONES
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Cables de conexión.
El organigrama de la Figura P6.3 cambia el estado de la línea de salida GP0 cada 0,5 s,
tiempo que se consigue repitiendo diez veces un delay del timer TMR0 de 50 ms. El TMR0
se inicializa con el complemento del valor 195 para conseguir 195 · 256 = 49,9 ms cuando
se trabaja a una frecuencia de 4 MHz.
Obsérvese en el programa fuente \12F508ASM\Ejem_4A.ASM en Ensamblador
que se proporciona a continuación, y que se puede encontrar en el CD que acompaña
Figura P6.3. Organigrama del programa que genera una onda cuadrada de 1 Hz con el TMR0.
192 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
al libro, que cuando se precisa que el TMR0 cuente 195 impulsos hay que cargarle el
complemento a 256 de dicho valor, lo cual se consigue con la instrucción movlw ~.195
seguida por la instrucción movwf TMR0. El punto previo a un valor significa que éste
está expresado en un decimal.
;
; EJEMPLO 4
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Este ejemplo consiste en producir una onda cuadrada de 1 Hz sobre
;la salida GP0, conectada a un led. Este se mantiene encendido 0.5 s y
;apagado los otros 0.5 s. Se supone que la frecuencia de trabajo es
;de 4 MHz y que se emplea el TMR0
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
movl w.10
movwf Temp_0 ;El bucle externo se repite 10 veces
Delay_0 movlw ~.195 ;W se carga con 256-195
movwf TMR0 ;El TMR0 se carga con el complemento
;de 195 en decimal.
CONTROLANDO EL TIEMPO CON «HARDWARE» 193
end
ENSAMBLADO
Hay que seguir los pasos ya conocidos de otras aplicaciones para traducir el programa
Ejem_4A.ASM al programa ejecutable Ejem_4A.HEX en el entorno MPLAB IDE.
CONEXIÓN DE PERIFÉRICOS
EL PROGRAMA EN C
// EJEMPLO 4
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Este ejemplo consiste en producir una onda cuadrada de 1 Hz sobre
//la salida GP0, conectada a un led. Este se mantiene encendido 0.5 s y
//apagado los otros 0.5 s. Se supone que la frecuencia de trabajo es
//de 4 MHz y que se emplea el TMR0
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
while(1)
{
GPIO=(GPIO ^ 0x01); //Cambio de estado en GP0
ENUNCIADO
En esta experiencia se van a aplicar los impulsos que produce el generador lógico exis-
tente en la PIC School al TMR0 y cuando se detectan diez flancos ascendentes en la línea
de entrada GP2/T0CKI se produce un cambio en el estado lógico de la línea GP0 que
está configurada como salida y tiene conectado un led.
Para poder contar a simple vista los impulsos del generador se recomienda utilizar
una frecuencia reducida de 1 Hz.
PRINCIPIOS TEÓRICOS
Ahora el TMR0 se emplea para contar impulsos externos que se aplican sobre la línea
multifunción GP2/T0CKI, que funciona en modo T0CKI, es decir, como entrada de
impulsos externos.
Los impulsos que hay que contar proceden del generador lógico de la PIC School
con frecuencias de salida de 1 Hz, 10 Hz, etc.
Cada vez que se apliquen diez impulsos en la patita T0CKI, la línea GP0 configura-
da como salida y conectada a un led cambia su estado lógico, produciendo el parpadeo.
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Cable de conexiones.
Figura P6.5. Organigrama correspondiente al programa destinado a contar diez impulsos externos
aplicados a la patita T0CKI.
;
; EJEMPLO 4_2
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Este ejemplo consiste en contar, mediante el TMR0, el número de pulsos
;que se aplican por GP2/T0CKI. Cuando se detecten 10 flancos ascendentes
;se produce un cambio de estado en GP0, haciendo parpadear el led que
;tiene conectado
CONEXIÓN DE PERIFÉRICOS
Además del diodo del parpadeo S0 conectado a GP0 (RB7), existe otro (S7) que se conecta
a la salida del generador lógico para visualizar los impulsos que genera (Fig. P6.6).
Figura P6.6. Conexión de los periféricos que están incluidos en la PIC School.
198 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
La línea RB7 se conecta al diodo led S0, que cambiará de estado cada diez impulsos
que se apliquen en la línea T0CKI desde el generador lógico de la PIC School. Los im-
pulsos del generador lógico se visualizan mediante el led S0.
Una vez editado el programa fuente, ensamblado y grabado en la FLASH del microcon-
trolador, el programa ejecutable, para verificar el correcto comportamiento del hardware
y el software, se procede a su ejecución seleccionando la frecuencia de 1 Hz en el gene-
rador lógico de la PIC School. Mediante el led S7 se aprecia que cada diez flancos as-
cendentes cambia el estado lógico de la línea de salida RB7 (GP0), en donde se obtiene
un impulso completo 0-1-0 cada veinte impulsos del generador. El programa funciona
como un divisor de frecuencia de 1:20.
Si se selecciona en el generador lógico la frecuencia de 1 KHz, se puede comprobar
con un osciloscopio que en la línea RB7 (GP0) se obtiene una frecuencia de 50 Hz.
PRINCIPIOS TEÓRICOS
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Dos diodos 1N4148.
• Un condensador de 1 nF.
• Un condensador electrolítico de 1 µF.
• Cables de conexión.
;
; EJEMPLO 4_3
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Con este programa se genera una onda cuadrada de 10 KHz sobre la
;salida GP0. Ésta se conecta a una bomba de carga o doblador de tensión
;capaz de duplicar la tensión de alimentación. Se supone que la
;frecuencia de trabajo es de 4 MHz y que se emplea el TMR0
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
movlw ~.8
movwf TMR0 ;El TMR0 se carga con 25
Delay_1 movf TMR0,W
btfss STATUS,Z ;Desborda al de 50 us
goto Delay_1
goto Loop
end
Una vez conexionados en la PIC School los componentes que configuran la bomba de
carga, editado el programa fuente, ensamblado y obtenido el programa ejecutable, se
graba en la FLASH del PIC12F508 y luego se coloca el conmutador principal de la PIC
School en la posición RUN y con la ayuda de un polímetro se mide el voltaje de salida
del doblador de tensión entre los bornes del condensador electrolítico de 1 µF, que de-
berá ser algo inferior a 10 V (Fig. P6.8). En un osciloscopio se puede visualizar la onda
cuadrada de 10 KHz que sale por la patita RB7 (GP0).
CONTROLANDO EL TIEMPO CON «HARDWARE» 201
Figura P6.8. Fotografía del montaje de la bomba de carga en la PIC School con el valor aproximado de
la tensión que se obtiene en su salida.
EL PROGRAMA EN C
// EJEMPLO 4_3
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Con este programa se genera una onda cuadrada de 10 KHz sobre la
//salida GP0. Ésta se conecta a una bomba de carga o doblador de tensión
//capaz de duplicar la tensión de alimentación. Se supone que la
//frecuencia de trabajo es de 4 MHz y que se emplea el TMR0
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
202 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
while(1)
{
GPIO=(GPIO ^ 0x01); //Cambio de estado en GP0
set_timer0(~8); //TMR0 se carga con 8 (8*4=32us)
while (get_timer0()!=0); //Esperar 32 us
}
}
a) Generador de pulsos. Por la línea GP0 configurada como salida se desea obtener una
señal periódica y asimétrica, como se muestra en la Figura P6.9. La duración del pulso
con nivel alto es de 0,25 s y la del período de 1,75 s. Para visualizar el resultado, se co-
necta el diodo led S0 a la patita GP0.
Una vez comprobado su correcto funcionamiento, se pide realizar las modificaciones
necesarias para que la anchura del pulso positivo sea de 60 µs y la del período de 200 µs.
Intente verificar las señales en GP0 con un osciloscopio.
b) Generador de onda cuadrada. Se trata de obtener por la línea GP0 una onda cua-
drada de frecuencia variable. El valor máximo de dicha frecuencia será de unos 20 KHz.
Los interruptores E2-E0 conectados a las líneas de entrada GP5, GP4 y GP3, respectiva-
CONTROLANDO EL TIEMPO CON «HARDWARE» 203
Mediante los interruptores E3-E0 conectados a las líneas GP5, GP4, GP3 y GP1, res-
pectivamente, se introduce un valor que suponga el número de pulsos a contar. Dichos
pulsos se aplican a GP2 desde el generador lógico de la PIC School. La línea de salida
GP0 se halla conectada al led S0 y su estado cambia cuando finaliza la cuenta de los
impulsos.
a
Manejando el Perro Guardián,
el modo de bajo consumo 7.
y el «reset» APLICACIÓN
El Perro Guardián o Watch Dog Timer (WDT) tiene una estructura similar al TMR0, pero
cuando se desborda produce un reset del sistema. También se produce un reset cuando se
conecta la alimentación al microcontrolador (Power Up), que recibe el nombre de POR
(Power On Reset).
En esta experiencia se consigue que el WDT se desborde cada 1,1 s. El led S1 de PIC
School se conecta a la línea GP1 (RB6) y se enciende en cuanto se conecta la alimenta-
ción. Cuando se desborda el WDT, el led S1 se apaga y cambia el estado del led S0 que
se halla conectado a la línea GP0 (RB7) (Fig. P7.1).
PRINCIPIOS TEÓRICOS
Figura P7.1. El led S1 se enciende al conectarse la alimentación al sistema (Power Up) y se apaga al
desbordarse el WDT. El led S0 cambia de estado cada vez que se desborda el WDT.
205
206 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Cuando WDT está habilitado, se produce reset cada vez que se desborda. Si se desea
evitar el desbordamiento hay que ejecutar la instrucción clrwdt, que «refresca» o inicia-
liza al WDT, aunque sigue funcionando.
¿Para qué sirve el WDT? Para sacar al procesador de situaciones de bloqueo o
bucles infinitos o esperas interminables de acontecimientos que nunca se producen. En
estas ocasiones conviene provocar un reset manual o apagar y encender el procesador
(Power On Reset), aunque cuando se producen estas situaciones anómalas es muy pro-
bable que el usuario no se halle presente o que el equipo esté situado en un lugar remoto
e inaccesible. Si funciona el WDT y la instrucción clrwdt está situada estratégicamente
en el programa de forma que se ejecuta periódicamente, se evita el desbordamiento del
WDT. Entonces, si se bloquea el programa y no se ejecutan normalmente las instruc-
ciones y tampoco la clrwdt, el WDT se desborda, provocando el reset y reiniciando el
sistema automáticamente sin intervención humana.
En la Figura P7.2 se muestra la estructura interna del Perro Guardián.
El WDT dispone de su propio oscilador interno, y si el bit PSA del registro OPTION
vale 0, la señal de salida de WDT provoca directamente el reset del sistema. Si PSA = 1,
la salida del WDT se aplica al posdivisor de frecuencia o «posescaler», que es el mismo
que actúa como predivisor del TMR0. El rango del posdivisor está comprendido desde
1:1 a 1:128 de acuerdo con los bits PS2-PS0 de OPTION.
Tanto si funciona el posdivisor del WDT como si lo hace de predivisor del TMR0, la
función es dividir por el rango seleccionado la frecuencia de trabajo. El bit PSA asigna
el divisor de frecuencia al TMR0 o al WDT.
El oscilador propio del WDT sigue funcionando cuando se detiene el sistema; por
ejemplo, cuando se entra en el modo de bajo consumo o standby.
La temporización normal, por defecto, del WDT, o sea, el tiempo en el que se des-
borda es de 18 ms, y dependiendo del rango que se seleccione para el posdivisor, se
puede alcanzar los 2,3 s cuando el rango es de 1:128.
La instrucción clrwdt reinicia o refresca el temporizador WDT y al posdivisor. La instruc-
ción sleep introduce al procesador en el modo de bajo consumo al mismo tiempo que se refres-
MANEJANDO EL PERRO GUARDIÁN, EL MODO DE BAJO CONSUMO Y EL «RESET» 207
ca el WDT y al posdivisor, pero el Perro Guardián sigue funcionando hasta que se desborde o
hasta que el procesador se despierte del modo de bajo consumo al generarse un reset.
Cada vez que se desborda el WDT, el bit TO# del registro STATUS se pone a 0. Será
este señalizador el que se use en la práctica para detectar el desbordamiento del WDT.
NUEVAS INSTRUCCIONES
Para configurar el posdivisor de WDT con el rango 1:64 y asignar a la línea multifunción
GP2/T0CKI la función de línea de E/S GP2 hay que utilizar las dos siguientes instruc-
ciones:
movlw b’11101110’
option
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Cables de conexión.
ENSAMBLADO
CONEXIÓN DE PERIFÉRICOS
Los dos leds que actúan como periféricos en esta experiencia se conectan como se indica
en el esquema de la Figura P7.4.
208 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; EJEMPLO 5
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Demostrar el funcionamiento del WDT. El programa activa GP1 y queda
;en un bucle infinito, lo que provoca el desbordamiento del WDI, momento
;en que la salida GP0 cambia de estado. Esto ocurre cada 1.1 s al
;emplear posescaler 1:64
__config _CP_OFF&_WDT_ON&_MCLRE_OFF&_IntRC_OSC
end
Figura P7.4. A las patitas RB6 y RB7 se conectan los leds S1 y S0 de la PIC School, respectivamente.
Una vez grabado el programa ejecutable en la memoria FLASH del PIC12F508 con ayu-
da del programa WinPic800, se comprueba su correcto funcionamiento si al conectar la
alimentación se enciende S1 y S0 queda apagado. Después, cada 1,1 s, cambia el estado
de S0 por el desbordamiento del WDT.
210 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En esta experiencia se visualiza sobre diversos leds el tipo de reset que se ha producido.
El procesador simplemente realiza una tarea: entrar en el modo de bajo consumo. De
dicho modo, se sale con un reset.
PRINCIPIOS TEÓRICOS
Figura P7.5. Los 3 bits señalizadores del registro STATUS informan de la causa que ha generado el
reset.
MANEJANDO EL PERRO GUARDIÁN, EL MODO DE BAJO CONSUMO Y EL «RESET» 211
NUEVAS INSTRUCCIONES
En esta práctica se van a destinar cuatro leds para visualizar la causa del reset. El led S0,
conectado a la línea GP1, se enciende cuando el reset ha sido provocado por el cambio de
estado de la patita de entrada GP0, que se halla unida al interruptor E0. El led S1, conec-
tado a la línea GP2, se enciende cuando se pasa a nivel bajo la patita MCLR#. El led S2,
conectado a GP4, se enciende cuando se desborda WDT, que al estar configurado con el
rango 1:64 para el posdivisor lo hace cada 1,1 s. Finalmente, el led S3, conectado a la línea
GP5, se enciende cuando se aplica alimentación al sistema (Power On Reset) (Fig. P7.6).
Figura P7.6. Conexionado de los cuatro leds y el interruptor destinados a la visualización de la causa del
reset.
CONEXIONADO DE PERIFÉRICOS
Los cinco periféricos usados en esta práctica, que los soporta la PIC School, se conectan
como se refleja en la Figura P7.7.
Figura P7.8. Organigrama correspondiente al programa que explora y visualiza la causa del reset.
MANEJANDO EL PERRO GUARDIÁN, EL MODO DE BAJO CONSUMO Y EL «RESET» 213
;
; EJEMPLO 5_3
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Detectar y monitorizar las distintas causas que pueden provocar el
;reinicio del sistema o RESET
__config _CP_OFF&_WDT_ON&_MCLRE_ON&_IntRC_OSC
EL PROGRAMA EN C
// EJEMPLO 5_2
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Demostrar el funcionamiento del WDT. El programa activa GP1 y queda
//en un bucle infinito, lo que provoca el desbordamiento, momento en que
//la salida GP0 cambia de estado.Esto ocurre cada 1.1 s al emplear
//posescaler 1:64. La mayor parte del tiempo transcurre en el modo
//SLEEP
#include <12F508.h>
MANEJANDO EL PERRO GUARDIÁN, EL MODO DE BAJO CONSUMO Y EL «RESET» 215
#fuses NOPROTECT,WDT,NOMCLR,INTRC
ENUNCIADO
PRINCIPIOS TEÓRICOS
La comunicación serie RS232 tiene carácter de asíncrona y el nivel lógico que corres-
ponde a cada bit que se transfiere se debe mantener estable un determinado tiempo, que
debe ser igual para el transmisor y para el receptor del mismo. En este protocolo no
existe señal de reloj que sincronice los bits que se transfieren.
219
220 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P8.2. Estructura de un carácter en la comunicación serie RS232. Comienza con el bit START, al
que siguen los 8 bits de información, después hay un bit de paridad par (P) y, por último,
el bit de STOP.
COMUNICACIÓN SERIE RS232 221
El nivel lógico correspondiente a los bits que se transfieren por las líneas de comu-
nicación debe permanecer estable durante un determinado tiempo t, común a todos ellos.
Dicho tiempo establece la velocidad de la transferencia, que se mide en baudios, que
equivalen a «bits/segundo».
EJEMPLO
Si se trabaja con la velocidad de transferencia estándar de 9.600 baudios, eso significa
que en cada segundo se transfieren 9.600 bits.
El tiempo que el nivel lógico de cada bit debe mantenerse estable durante un tiempo:
Esto significa que tanto el receptor como el transmisor han de estar de acuerdo en
mantener estable el nivel de cada bit 104 µs. Luego cada bit que se transmite debe estar
estable durante 104 µs en la línea TxD, tiempo que tiene el receptor para recogerlo y
leerlo en su patita RxD.
Todo carácter comienza con el bit START, que vale 0; luego, se transmite el ca-
rácter de información, que se supone que es el 0x26 (00100110), empezando por el
bit de menos peso LSB. Después, puede venir opcionalmente un bit de paridad, que
en esta experiencia no vamos a utilizar. Finalmente, viene el bit de STOP, que vale 1.
En ciertos protocolos puede haber más de 1 bit de STOP. Como el último bit transmi-
tido es un 1, la línea queda con ese nivel hasta que se envíe el siguiente carácter, que
por empezar por el bit de START, que vale 0, pasa a nivel bajo y se considera que
comienza otro carácter.
La rutina de transmisión RS232 simplemente implementa en software la cadencia
de bits que se transmiten por la línea TxD. Cuando va a enviar un carácter, comienza
poniendo la línea TxD a 0 durante un tiempo determinado, que en el caso de trabajar a
9.600 baudios es de 104 µs. Se trata del bit START. A continuación, se van sacando al
desplazar los bits de un registro los ocho de información. Cada uno de estos bits se debe
mantener estable 104 µs sobre la línea TxD. Por último, la línea se pone a nivel 1, gene-
rando el bit STOP, que se debe mantener en ese estado un mínimo de 104 µs.
La rutina para la línea RxD de recepción serie RS232 a 9.600 baudios comienza
detectando el momento en que la misma pasa a nivel 0, que se considera la llegada del
bit START. A partir de ese momento, se va leyendo RxD cada 104 µs y el nivel lógico
recogido se va almacenando y desplazando en un registro hasta conformar el octeto.
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Cables de conexión.
222 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En el fragmento del programa anterior se define una serie de constantes que se uti-
lizan en la configuración de la comunicación: velocidad de trabajo (CLKIN), velocidad
de comunicación (baudios), número de bits a transmitir/recibir, número de bits de STOP, etc.
Estos valores se usan posteriormente para calcular las temporizaciones necesarias y deter-
minar el modo de trabajo. También se definen a las líneas GP4 y GP5 como las de trans-
misión y recepción, respectivamente (Txd_pin y Rxd_pin).
Las rutinas de transmisión y recepción utilizan cinco variables temporales durante
su ejecución. La directiva RS232VAR equ 0x07 indica la dirección de inicio (0x07), a
partir de la cual se reserva espacio para dichas variables.
La directiva include RS232LOW.INC incluye el fichero RS232LOW.INC en el pro-
grama fuente para no reescribir en el mismo las rutinas de transmisión y de recepción,
quedando así más despejado y limpio. Estas rutinas se han confeccionado con el reperto-
rio de instrucciones de 12 bits correspondiente a los PIC de la gama básica.
Se proporciona otro fragmento interesante del programa fuente:
permite incluir las librerías con los mecanismos adecuados para configurar la transferen-
cia en serie, determinando la velocidad, el número de bits, las patitas empleadas para la
transmisión y recepción, etc. El cuerpo principal del programa está formado por la fun-
ción putc(‘A’), que transmite el carácter A, y por la función delay_ms(500) que realiza
la temporización de 0,5 s.
A continuación, se presenta el programa Ejem_6A.ASM con abundantes comen-
tarios para su correcta comprensión.
;
; EJEMPLO 6
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Este programa se encarga de transmitir el carácter ‘A’ a intervalos de
;.5 s
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
movlw .10
movwf Temp_0 ;El bucle externo se repite 10 veces
Delay_0 movlw~ .195
movwf TMR0 ;El TMR0 se carga con 195
Delay_1 movf TMR0,W
btfss STATUS,Z ;Desborda al de 50 ms
goto Delay_1
decfsz Temp_0,F
goto Delay_0 ;Se esperan 10 desbordamientos para
;conseguir 0.5”
goto Loop
end
CONEXIONADO DE PERIFÉRICOS
Una vez grabado el programa ejecutable sobre la memoria FLASH del PIC12F508, se
puede utilizar el cable serie DB9 para unir el conector RS232 de la PIC School con el
puerto serie del PC (Fig. P8.3).
Figura P8.3. Conexionado del cable DB9 entre el puerto serie del PC y el conector RS232 de la PIC
School que une la patita GP5 con RxD y al GP4 con la TxD.
PROGRAMAS FUENTE
coloque un último byte de control que informe del final de la cadena y que en este ejem-
plo es el valor 0x00.
En la versión en lenguaje C destaca lo fácil que es transmitir una o varias cadenas de
caracteres mediante la función prinft().
ENUNCIADO
En esta experiencia se trata de recibir un carácter procedente del exterior para luego
volverlo a retransmitirlo a modo de eco. Las conexiones son las mismas que en los ejer-
cicios anteriores. Para evaluar el funcionamiento, se comprobará que en la pantalla del
PC, que actúa como terminal, se visualiza la misma letra que se acaba de pulsar.
PROGRAMAS FUENTE
ENUNCIADO
Esta experiencia es un caso práctico y real de gran utilidad. Se trata de leer el estado
de las líneas de entrada GP3-GP0 y transmitirlo para su visualización en un terminal
remoto, o sea, la pantalla del PC.
PROGRAMAS FUENTE
CONEXIONADO DE PERIFÉRICOS
Además de las conexiones de las prácticas anteriores, hay que unir las patitas GP3-GP0
con los interruptores E3-E0 de la PIC School, como se muestra en la Figura P8.4.
Grabado el programa, se coloca el jumper JP4 en la posición GP3, pues a esta patita
hay que conectar el interruptor E3. Si todo va bien, en la pantalla del PC se visualizará
el estado de los interruptores.
228 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P8.4. Conexionado de las patitas GP3-GP0 con los interruptores E3-E0 cuyo estado se visualiza
en la pantalla del PC.
En esta práctica, las pulsaciones de las teclas 2, 1 y 0 del terminal, o sea, del PC, van a
conseguir que las líneas de salidas GP2-GP0 cambien su estado lógico, lo cual se visua-
lizará al estar conectadas a los leds S2-S0.
PROGRAMAS FUENTE
Figura P8.5. Esquema de conexionado de las líneas de salida con led de visualización.
COMUNICACIÓN SERIE RS232 229
CONEXIONADO DE PERIFÉRICOS
PRINCIPIOS TEÓRICOS
Para la gestión de un LCD se precisan siete líneas y el PIC12F508 sólo dispone de seis
como máximo. Hay que usar un hardware externo que simplifique el conexionado entre
el PIC y el LCD, que se materializa en un circuito integrado llamado SYM20AA que
permite la comunicación serie entre los dos dispositivos usando sólo una línea.
Otro tema muy interesante que se desarrolla en esta práctica es la implementación de
un stack o pila gestionada por software que permite anidar un buen número de subrutinas
de los programas de aplicación.
El controlador de LCD SYM20AA es el encargado de gestionar todas las tareas de la
pantalla LCD, entre las que destaca la comunicación con el microcontrolador principal a
través de una o dos líneas, lo que resulta especialmente eficaz en las aplicaciones en las
que el número de líneas de E/S es crítico. De esta forma, el microcontrolador sólo trans-
mite en serie los caracteres que desea visualizar junto a unos comandos muy sencillos
que producen diversos efectos de visualización en la pantalla LCD. Dicho controlador
no sólo se encarga de la gestión con la pantalla, sino que simplifica enormemente el
desarrollo de la aplicación final con el consiguiente ahorro de memoria.
231
232 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P9.1. Diagrama de conexionado del controlador de LCD SYM20AA junto a la tabla que describe
la función de cada patita.
Figura P9.2. Esquema de conexionado del controlador SYM20AA entre la pantalla LCD y las patitas
del PIC12F508.
los datos y los comandos. También se conectan las señales de control del flujo de la in-
formación E, R/W y RS del LCD con las líneas correspondientes del controlador.
El SYM20AA se conecta con el PIC12F508 a través de la pata GP4, que actúa como
TxD, y de la pata GP5, que hace las veces de RxD. Por GP4 el microcontrolador trans-
mite al controlador los datos y los comandos que se desean visualizar en serie. Cada vez
que el controlador finaliza la ejecución de un comando, transmite el código de «recono-
cimiento» ACK (0x06) que se recibe en el PIC12F508 por la línea GP5, que actúa como
línea de recepción RxD. El uso de la señal ACK no es imprescindible y puede evitarse si
el software de la aplicación espera el tiempo necesario para que se complete la ejecución
de cada comando. En los ejemplos que se proponen se utiliza esta técnica y así sólo se
usa una línea del microcontrolador (GP4) para comunicarse con el SYM20AA.
La Tabla P9.1 muestra los códigos de los datos y de los comandos que admite el contro-
lador de la LCD, SYM20AA, junto al tiempo máximo que tarda la ejecución de cada uno.
Tabla P9.1. Códigos correspondientes a los datos y comandos que admite el controlador SYM20AA.
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• Controlador de LCD SYM20AA.
• Cables de conexión.
PROGRAMAS FUENTE
Los ficheros Ejem_7A.ASM y Ejem_7B.C contienen los programas fuente escritos en
Ensamblador y en C, respectivamente. Los programas tienen una estructura básicamen-
te similar a los anteriores y se incluyen las rutinas de transmisión y recepción en serie
RS232LOW.INC.
Al inicio del programa principal, tras el arranque, se debe realizar una temporización
de 100 ms, porque al conectar la alimentación, la pantalla LCD desarrolla un proceso
de inicialización durante el que no se aceptan datos ni comandos. Cuando finaliza dicho
proceso, se envía al PIC12F508 un comando de reconocimiento ACK por la línea GP5
cuando se emplea. Como en la práctica no se usa GP5, habrá que realizar una tempori-
zación «a ojo» para esperar el fin del proceso de inicialización de la LCD. Esta conside-
ración también hay que tenerla en cuenta durante la ejecución de ciertos comandos, para
lo que se debe consultar la Tabla P9.1 para conocer la duración de cada uno.
Se comienza visualizando el primer carácter ASCII, que se corresponde con el de
«espacio» (0x20). Entre un carácter y el siguiente se aplica una temporización de 0,3 s
empleando una rutina de Delay similar a la aplicada en ejemplos anteriores.
Cuando se completa una línea con dieciséis caracteres, el controlador continúa auto-
máticamente en la siguiente. Al completarse la pantalla con dos líneas (2 × 16 caracteres)
236 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; EJEMPLO 7
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Control de una pantalla LCD. Visualiza el juego de caracteres ASCII
;capaz de representarse en la pantalla
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
;Programa principal
movlw ‘ ’
movwf Temp_1 ;Primer carácter de la lista (0x20)
CONEXIONADO DE PERIFÉRICOS
Las conexiones son las que se muestran en el esquema de la Figura P9.2 y no hace falta
conectar la línea GP5. En la fotografía de la Figura P9.3 se muestra el montaje realizado
sobre la placa borrad de la PIC School. Conviene asegurarse del buen contacto de los
cables, porque este montaje se seguirá usando en prácticas posteriores.
Cada salto a una subrutina consumirá una posición de la memoria de datos RAM,
lo que determina el número de anidamientos que se pueden realizar según la memoria
disponible.
Para salvar la dirección de retorno se usa el direccionamiento indirecto, que guarda
el valor actual del PCL a partir de la posición inicial de la pila.
;Esta macro implementa un stack por soft. Cada vez que se usa
;el valor actual del PC se salva mediante el reg. INDF en
;una posición RAM
El valor actual del PCL se carga en el registro W con la instrucción movf PCL, W y
luego este registro se almacena sobre la posición de la memoria de datos destinada a la
pila con la instrucción movwf INDF. A continuación, se incrementa el puntero con incf
FSR, F y, finalmente, se salta a la dirección de destino con goto Destino. Estas cuatro
instrucciones sustituyen a la clásica instrucción CALL. Como es posible que haya que
usarlas en varias ocasiones, se agrupan en torno a una macro llamada NCALL Destino y
así no habrá que teclearlas en cada ocasión.
Para recuperar la dirección de retorno se ejecuta la siguiente secuencia de instruc-
ciones:
todas las subrutinas deben estar situadas dentro de las 256 primeras posiciones de la
memoria de programa.
El fichero Ejem_7_2B.C contiene el programa en lenguaje C en el cual es el propio
compilador el que se encarga de gestionarlo de forma transparente para el usuario.
Una vez editado el programa, ensamblado y grabado en la FLASH del PIC12F508,
la ejecución del programa simplemente visualiza dos mensajes compuestos por varios
caracteres y durante cierto tiempo. También se emplean algunos comandos del controla-
dor SYM20AA para producir diferentes efectos de visualización: ubicación, parpadeo,
borrado, etc.
Figura P9.6. Juego completo de los noventa y seis caracteres que admite el controlador SYM20AA y la
LCD. El «espacio» (columna 2, fila 0) no tiene representación.
Cada carácter se confecciona a partir de una matriz de píxeles formada por cinco
columnas y ocho filas, como se muestra en la Figura P9.7. Las ocho filas se correspon-
den con los 8 bytes (B0-B7) que definen al carácter y de los que sólo se emplean los
cinco bits de menos peso. Cualquier bit de la matriz que valga 1 produce la activación o
encendido del píxel correspondiente. Un nivel 0 lo apaga o desactiva.
En la Figura P9.8 se muestra la matriz de píxeles correspondiente a la letra ñ. En ella
también se muestra el valor de los 8 bytes que acompañan al comando Set_Char. Por eso,
para definir el carácter ñ, hay que enviar al controlador la secuencia
0x8B, 0x01, 0x00, 0x1F, 0x00, 0x17, 0x19, 0x11, 0x11, 0x11
CONTROLANDO UNA PANTALLA LCD 243
Figura P9.7. Estructura de la matriz de píxeles (8x5) que representan los caracteres.
en la que el primer valor 0x8B es el código del comando Set_Char, el valor 0x01 es el
correspondiente al número del carácter entre 0 y 7 y los restantes 8 bytes son los que
definen la matriz que conforma el carácter de la letra ñ.
Una vez que se ha definido un carácter, para visualizarlo basta simplemente con
enviar su número (0-7) como si se tratara de cualquier otro código ASCII.
Los archivos titulados Ejem_7_3A.ASM y Ejem_7_3B.C contienen los programas
fuente en Ensamblador y en C y comienzan definiendo los caracteres ñ y € para des-
pués visualizarlos. Analizando dichos programas, se puede deducir que para definir un
carácter basta con enviar una secuencia de bytes similar a cuando se visualizaban men-
sajes. Una vez definidos los caracteres, se pueden visualizar igual que los restantes. Los
caracteres hay que definirlos en tiempo de ejecución y se mantienen mientras la pantalla
LCD se halle alimentada.
Al ejecutar los programas máquina, se visualizan los caracteres ñ y € sobre la pan-
talla durante cierto tiempo con efectos de intermitencia.
Figura P9.9. Esquema de conexionado de cinco interruptores a cinco líneas de entrada del microcontro-
lador. Se trata de visualizar en una pantalla LCD el estado lógico de las cinco entradas.
Además del protocolo de comunicación serie RS232 ya estudiado en una práctica an-
terior, existen otros con diversas características. Entre los más populares, cabe citar al
RS485, USB, SPI, 1-Wire, CAN, etc. Cada uno de estos protocolos dispone de un grado
de desarrollo diferente, así como de una familia de dispositivos o circuitos integrados
que trabajan con cada uno. Entre los miembros típicos de estas familias, destacan:
• Conversores ADC y DAC.
• Controladores de displays, de teclados, de pantallas LCD, etc.
• Expansores o ampliadores de líneas de E/S, relojes y calendarios en tiempo real,
termómetros, etc.
• Dispositivos de todo tipo de memorias para aumentar su capacidad.
Esta práctica tiene como finalidad manejar el bus I2C, que a veces también se suele
escribir «por comodidad» como I2C. Se trata de un bus de comunicación serie que sólo
emplea dos líneas para transferir información. Se utilizará un circuito integrado especí-
fico para trabajar con dicho bus y que dispone de ocho líneas digitales de salida sobre
las que se va depositando la información que recibe por dicho bus. De esta forma, si se
implementa sobre dos líneas del PIC12F508, el bus I2C se podría conectar a ellas el dis-
positivo PCF8574A, que dispone de ocho líneas configurables de entrada/salida sobre
las que se depositaría la información serie que llega por el bus si actúan como salidas
o bien el estado de las ocho líneas si funcionan como entrada se envía en serie al micro
(maestro) por las dos líneas de este bus (Fig. P10.1). Se puede decir que las dos líneas de
E/S del micro que se han usado para soportar el bus I2C se han convertido en ocho.
PRINCIPIOS TEÓRICOS
El protocolo de comunicación serie I2C (Inter Integrated Circuit) fue diseñado por Philips
para facilitar y simplificar la comunicación entre circuitos integrados, tan habituales
245
246 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P10.1. Sistema basado en el bus I2C. El maestro es el micro porque genera los impulsos de reloj
por la línea SCL, mientras que la línea SDA soporta la transferencia bidireccional del
esclavo seleccionado con el maestro.
Figura P10.2. Sincronización de los bits de información que circulan por la línea SDA con los impulsos
de reloj de la línea SCL que genera el maestro.
condición de stop se origina con un flanco ascendente en SDA al mismo tiempo que se
mantiene a 1 la línea SCL (Fig. P10.3).
Figura P10.3. Forma en que se producen las condiciones de inicio y de stop cuando se comienza y se
termina una transferencia de datos.
Figura P10.4. Diagrama de tiempos que muestra el envío de un byte de información y el empleo del noveno
bit para soportar el bit de reconocimiento ACK generado por el receptor como reconoci-
miento de la información recibida correctamente.
248 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P10.6. El primer byte que manda el maestro al PCF8574A contiene la dirección y la orden de
escritura/lectura en el último bit. Delante está el bit de inicio y al final se añade el bit de stop.
MANEJANDO EL BUS 12C 249
MATERIALES NECESARIOS
• PIC School.
• PIC12F508.
• PCF8574A.
• Dos resistencias de 2K2.
• Cables de conexión.
NUEVAS INSTRUCCIONES
Rutina Descripción
Inicia_Bus Configura las líneas SDA y SCL como entradas en alta impedancia, dejando
el bus libre.
Txt_Start_Bit Genera la condición de inicio S. Se produce un flanco descendente por la
línea SDA al tiempo que SCL se mantiene a nivel «1».
Txt_Stop_Bit Genera la condición de stop P. Se produce un flanco ascendente por la
línea SDA al tiempo que SCL se mantiene a nivel «1».
Txt_Byte Transmite el byte almacenado previamente en la variable DataByte y espera
a recibir el bit de reconocimiento ACK.
RcvByte Cada vez que se llama a esta rutina, se espera a recibir un byte que se alma-
cena en la variable DataByte. Por cada byte recibido, se genera y transmite
el bit de reconocimiento ACK. Caso de ser el último a recibir, se genera el
bit NACK. El bit _Ultimo_Byte del registro interno Bus_Status debe poner-
se a «0» o a «1» para indicar si es o no el último byte a recibir.
Tabla P10.1. Rutinas para gestionar el protocolo del bus I2C contenidas en el fichero I2CLOW.INC.
CONEXIONADO DE PERIFÉRICOS
En esta experiencia se emplea el PCF8574A para controlar ocho diodos led que actúan
como salidas y que visualizan diferentes intermitencias. Como se muestra en la Figu-
ra P10.8, las líneas SDA y SCL se implementan en las líneas GP0 y GP1 del PIC12F508
que disponen de resistencias de 2K2 como push-pull.
Figura P10.8. Conexionado del PCF8574A, por un lado, al PIC12F508, y por otro, a los ocho diodos
led de salida.
;
; EJEMPLO 8
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Para manejar la comunicación serie con el bus I2C, los leds de
;salida S0-S7 se conectan con las salidas P0-P7 del expansor
;I2C de E/S PCF8574A. Se realiza una alternancia en el encendido
;de los mismos
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
Código en C
// EJEMPLO 8
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Comunicaciones serie I2C. Los leds de salida S0-S7 se conectan con las
//salidas P0-P7 del expansor de E/S PCF8574A. Se realiza una
//alternancia en el encendido de los mismos
#include <12F508.h>
//Ajusta los valores de la palabra de configuración durante el
//ensamblaje:
//Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= RC interno
254 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura P10.9. Fotografía del montaje con el PCF8574A montado sobre la placa protoboard.
MANEJANDO EL BUS 12C 255
Entradas Salidas
GP3 GP2 P7 P6 P5 P4 P3 P2 P1 P0
0 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0
Figura P10.10. Tabla a la que deben responder los ocho diodos led de salida en función del valor de las
dos líneas de entrada.
Se aprovechan algunas líneas del PIC12F508 para actuar como entradas, mientras
que con otras se implementa el bus I2C para controlar ocho salidas con un PCF8574A. El
esquema de conexionado de estos elementos se muestra en la Figura P10.11.
Figura P10.11. Esquema de conexionado de la experiencia con dos entradas y ocho salidas.
Los interruptores E0 y E1 se conectan a las líneas GP2 y GP3. Las líneas SDA y
SCL son implementadas por GP0 y GP1. «Es decir, con 4 líneas del microcontrolador se
están manejando diez periféricos digitales».
Los ficheros Ejem_8_2A.ASM y Ejem_8_2B.C contienen una posible solución a
la práctica planteada en ensamblador y en C y se descomponen en tres partes:
Figura P10.13. Esquema eléctrico del conexionado de la experiencia que maneja los protocolos I2C y RS232.
MANEJANDO EL BUS 12C 257
GP0 y GP1 implementan las líneas SDA y SCL. Las líneas P0-P7 del PCF8574A
actúan como entradas y se conectan a los interruptores E0-E3 y a los pulsadores E4-E7.
La línea GP4 se usa para la transmisión RS232 y se emplea para comunicarse con el
controlador SYM20AA que gestiona la pantalla LCD. La fotografía de la Figura P10.14
muestra una zona del montaje de la experiencia sobre la PIC School y en ella se aprecia
la visualización de la pantalla LCD.
El programa fuente en Ensamblador y en C está contenido en el CD bajo los títulos
Ejem_8_4A.ASM y Ejem_8_4B.C. En ellos se incluyen los ficheros I2CLOW.INC y
RS232LOW.INC. Los programas leen las entradas y las visualizan en la pantalla LCD
sin efectuar ningún procesamiento.
Se recomienda apagar y volver a encender la PIC School al verificar esta experiencia
para que tanto la pantalla LCD como el bus I2C se inicialicen correctamente, pues tras la
grabación del PIC pueden haber quedado bloqueados.
PRINCIPIOS TEÓRICOS
259
260 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Podemos utilizar un timer o contador que nos permita conocer el número de impul-
sos o incrementos transcurridos desde que el condensador se descargó hasta que se carga
y la entrada GP5 pasa a nivel 1. Conocido el período de cada impulso, se multiplica por
el número de éstos, calculando el tiempo transcurrido.
El diagrama de la Figura P11.2 resume el funcionamiento. En el instante reset, la
línea GP5 se configura como salida a 0. El condensador se descarga y Vc pasa a 0V
transcurrido un cierto tiempo. En el instante start, GP5 se configura como entrada en alta
impedancia y el contador se pone a 0. Comienza la carga y el contador va incrementán-
dose a eventos regulares de tiempo. El instante stop representa que la tensión Vc en el
condensador ha alcanzado el valor de 1,25 V, con el que la entrada GP5 pasa de 0 a 1. Es la
tensión de umbral con la que cambia de estado una línea de entrada. Para otros dispositi-
vos, consultar las especificaciones. En este momento se detiene la cuenta. Se multiplica
el valor del contador por el tiempo que dura cada incremento y se obtiene el valor t, que
representa la constante de carga.
donde
t= Tiempo transcurrido en segundos.
R= Valor de la resistencia en ohmios.
C= Valor del condensador en faradios.
Vth = Tensión con la que se carga el condensador y con la que se produce el cambio
de estado en el pin de entrada (1,25 V en el caso del PIC12F508).
Vdd = Tensión de alimentación (+5 Vcc).
−t −t
R= C=
Vth Vth
C · ln 1 − R · ln 1 −
Vdd Vdd
Las tres ecuaciones anteriores se pueden simplificar en el caso particular que nos
ocupa. Efectivamente, si tenemos en cuenta que Vth = 1,25 V y Vdd = 5 V, la función
Vth
ln 1 −
se puede sustituir por la constante – 0,287682072, con lo que queda:
Vdd
−t −t
t = − R · C (− 0, 287682072) R= C=
C (− 0, 287682072) R (− 0, 287682072)
MATERIALES NECESARIOS
• Laboratorio PIC School.
• PIC12F508.
• Controlador de LCD SYM20AA.
• Una resistencia de 220 Ω; dos de 1 K; una de 2K2; una de 3K3; una de 4K7;
cinco de 10 K; una de 22 K; una de 47 K; una de 100K, y una de 1 M.
• Una resistencia NTC de 10 KΩ
• Una resistencia LDR.
• Un condensador de 1µF.
• Cables de conexión.
ESQUEMA DE CONEXIONADO
LCD junto con su correspondiente controlador SYM20 para visualizar las medidas rea-
lizadas de una forma rápida y cómoda.
;
; EJEMPLO 9
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Medida de la constante de tiempo RC. Este ejemplo sirve para medir
;el tiempo de carga de un condensador a través de una resistencia.
;En la pantalla LCD se visualiza en hex. el valor medido, al que habrá
;que multiplicar por 5 (debido a que cada incremento se ejecuta
;cada 5 us trabajando a 4 MHz) para obtener el tiempo total en us
;(en hex.). El programa se puede considerar como un banco de pruebas
;para medir el tiempo en función de diferentes valores de R y/o de C.
;Cada transición 1-0-1 en GP3 origina una nueva medida
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
clrf Cont_H
clrf Cont_L ;Inicio del contador
bsf Trisreg,Input
movf Trisreg,W
tris Puerto ;La línea se configura como entrada,
;comienza la cuenta...
;Programa principal
;Espera una transición 1-0-1 en GP3 para realizar una nueva medida
movlw 0x8a
movwf Txdreg
call TxD ;Comando «Set Cursor»
movlw .1
movwf Txdreg
call TxD ;Fila 1
movlw .6
movwf Txdreg
call TxD ;Columna 6
call Medir
swapf Cont_H,W
andlw 0x0f ;Nibble alto de Cont_H
call ASCII ;Convierte a ASCII
movf Temp_0,W ;Lee el carácter ASCII
movwf Txdreg
call TxD ;Lo visualiza
movf Cont_H,W
andlw 0x0f ;Nibble bajo de Cont_H
call ASCII ;Convierte a ASCII
movf Temp_0,W ;Lee el carácter ASCII
movwf Txdreg
call TxD ;Lo visualiza
swapf Cont_L,W
andlw 0x0f ;Nibble alto de Cont_L
APROXIMACIÓN A LA CONVERSIÓN A/D 267
goto Loop
end
PROGRAMA FUENTE EN C
// EJEMPLO 9
// Autor: Mikel Etxebarria
// (c) Ingeniería de Microsistemas Programados S.L.
// www.microcontroladores.com
// Bilbao 2006
//
//Medida de la constante RC. Este ejemplo sirve para medir el tiempo
//de carga de un condensador a través de una resistencia.
//En la pantalla LCD se visualiza en hex. el valor medido, al que
//habrá que multiplicar por 7 (debido a que cada incremento se
//ejecuta cada 7 us trabajando a 4 MHz) para obtener el tiempo total
//en us (en hex.). El programa se puede considerar como un banco de
//pruebas para medir el tiempo en función de diferentes valores de
//R y/o de C. Cada transición 1-0-1 en GP3 origina una nueva medida
#include <12F508.h>
#fuses NOPROTECT,NOWDT,NOMCLR,INTRC
int16 tiempo;
int Trisreg;
medir()
{
bit_clear(Trisreg,Input);
set_tris_b(Trisreg); //La línea se configura como salida
bit_set(Trisreg,Input);
set_tris_B(Trisreg); //La línea se configura como entrada
while(bit_test(Puerto,Input)==0)//Condensador cargado
++tiempo; //No, el contador se incrementa
main()
{
set_tris_b(0b11101111); //GP4 salida Txd resto entradas
Trisreg=0b11101111; //Salva valor del TRIS
delay_ms(100); //Espera 100 ms para el Power Up del LCD
while(1)
{
//Esperar una transición 1-0-1 en la entrada GP3
while(bit_test(Puerto,Pulsador)==1){}
delay_ms(20);
while(bit_test(Puerto,Pulsador)==0) {}
delay_ms(20);
//Realizar la medida
putc(0x8a); //Comando «Set_Cursor»
putc(0x01); //fila 1
putc(0x06); //columna 6
medir(); //Función para realizar la medida de tiempo
printf(«%lX\n\r»,tiempo*7);//Visualiza la medida con el ajuste (*7)
}
}
APROXIMACIÓN A LA CONVERSIÓN A/D 269
Vamos a completar la siguiente tabla con las diferentes medidas obtenidas en función
de las diferentes resistencias fijas empleadas. En la columna Teórico se anota el valor
teórico que debe calcularse para cada caso según la ecuación simplificada:
t = – R · C ( – 0,287682072)
Con los datos a la vista se pueden sacar diferentes conclusiones. En primer lugar, hay
que indicar que los valores teóricos y prácticos no son iguales, pero sí parecidos. Esto es
debido fundamentalmente a la tolerancia de los componentes. Por el mismo motivo, dos
o más lecturas realizadas con la misma resistencia no tienen por qué ser iguales.
Con la resistencia de 1 MΩ, la lectura es totalmente incorrecta. Teóricamente, el
tiempo de carga es del orden de 280.000 µs. Sin embargo, como estamos empleando un
contador de 16 bits, esta magnitud no se puede representar y se produce un desborda-
miento del mismo. Para medir de constantes de tiempo con valores de R muy grandes
bien aumentamos el tamaño del contador o bien disminuimos el valor de C.
Empleamos el mismo programa que antes que nos sirve como banco de pruebas. Monta-
remos el circuito de la Figura P11.5. La célula RC está formada por el condensador C1 y
una resistencia de 1 KΩ en serie con un potenciómetro de 10 KΩ. Se trata de uno de los
dos potenciómetros que dispone el laboratorio PIC School.
Con el eje desde un extremo al otro se obtiene una resistencia mínima de 1 KΩ y una
máxima de 11 KΩ respecto al otro extremo, que origina una constante de tiempo mínima
y otra máxima. Mediante la siguiente tabla, podemos obtener unos valores de referencia
para distintas posiciones en el recorrido del eje del potenciómetro. Recordar que para
realizar una nueva medida es necesario aplicar un pulso mediante el pulsador E4.
Obviamente, los valores obtenidos no se corresponden con los valores resistivos del
potenciómetro, pero son orientativos y representan una magnitud numérica que varía en
función de la posición en que se encuentra su eje. Esta magnitud puede ser empleada
para cualquier tipo de cálculo o proceso posterior.
La célula LDR es un dispositivo cuya resistencia varía en función de la luz visible que
incide sobre ella. Al aumentar la luz, disminuye la resistencia y, por tanto, disminuye tam-
bién la constante de tiempo de carga, y viceversa. El circuito responde al esquema de la
Figura P11.6. Se sustituye la resistencia fija y/o el potenciómetro por el dispositivo LDR.
Se sugiere emplear una fuente de luz (por ejemplo, una linterna) justo encima de la
LDR a una distancia de unos 30 cm. Entre la fuente de luz y la LDR interpondremos un
cuerpo opaco (por ejemplo, un trozo de cartón) a diferentes distancias respecto a la LDR
y tomaremos así diferentes medidas de la constante de tiempo. Completar la siguiente
tabla.
Distancia 0 cm 5 cm 10 cm 15 cm 20 cm
Valor en µs
donde
R = Resistencia total en ohmios.
Ro = Valor nominal de la NTC a temperatura ambiente de 25 °C. La empleada en
el ejemplo es de 10 KΩ.
β = Constante proporcionada por el fabricante. Para una NTC de 10 K esta cons-
tante es de 3.977 aproximadamente.
T = Temperatura en °K (0 °C = 273 °K).
To = Temperatura ambiente en °K (25 + 273 = 298 °K).
β · To
T=
R
To ln +β
Ro
Así, pues, podemos medir la constante de tiempo t en una célula RC que emplea una
NTC. A continuación, podemos deducir cuál será la R que presenta la NTC en ese mo-
mento. Conocido el valor de R y empleando la ecuación anterior, podremos calcular fi-
nalmente la temperatura a la que está sometida esa NTC. Debemos tener siempre presente
que las tolerancias de los componentes pueden provocar variaciones en los cálculos.
Móntese el circuito de la Figura P11.7. La resistencia empleada ahora en la célula RC
es una resistencia NTC. En el comercio se pueden conseguir de diferentes valores, que
siempre están relacionadas con la temperatura ambiente. Es decir, si compramos una NTC
APROXIMACIÓN A LA CONVERSIÓN A/D 273
0 mm
Distancia 10 mm 8 mm 5 mm 3 mm
(en contacto)
Valor en µs
Al igual que en los experimentos anteriores, el valor leído en el LCD indica el tiem-
po de carga expresado en microsegundos y nunca la temperatura. En cualquier caso, se
puede apreciar que cuanto más calor se aplique a la NTC, menor es su resistencia y, por
tanto, también es menor la constante de tiempo. Los valores obtenidos se pueden em-
plear como valores de referencia en posteriores aplicaciones.
La Figura P11.9 muestra el esquema práctico del montaje que vamos a realizar. Se van
a emplear cuatro de las dieciséis teclas que contiene el teclado del laboratorio PIC School.
Las teclas están organizadas en cuatro columnas (C0-C3) y cuatro filas (F0-F3). Utiliza-
remos los cuatro pulsadores de las columnas C0-C3 asociados a la fila F0. En contra de lo
que pueda parecer, el montaje es muy sencillo. La línea C0 está asociada a la tecla 1 y se
conecta entre R6 y R5. La línea C1 está asociada a la tecla 2 y simplemente se conecta entre
R5 y R4. La línea C2 corresponde con la tecla 3 y se conecta entre R4 y R3. La línea C3 está
asociada con la tecla A y se conecta entre R3 y R2. Por último, la línea F0 se corresponde
con las cuatro teclas anteriores y simplemente se conecta con R6 y +5 Vcc. La Figura P11.10
muestra una fotografía con el montaje realizado sobre el laboratorio PIC School.
Se sigue empleando el mismo programa Ejem_9A.ASM o Ejem_9B.C que hemos
utilizado hasta ahora y que simplemente realiza y visualiza una medida de la constante
de tiempo. En esta ocasión, mantenemos pulsada cualquiera de las cuatro teclas a la vez
que accionamos el pulsador E4 para iniciar la medida. Completar la siguiente tabla con
los valores de tiempo en microsegundos obtenidos según la tecla accionada.
Pulsar 1 2 3 A Ninguna
Valor
Como vemos, por cada medida se obtiene un valor numérico (no resistivo) que nos
indica qué tecla se ha accionado. Este valor se puede emplear para realizar los procesos
apropiados dentro de la aplicación final.
Naturalmente, variando el valor de las resistencias podremos detectar la pulsación o
activación de un gran número de mecanismos.
--
Tecla -- 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D
-
Valor
Se insiste en que debido a las tolerancias propias de las resistencias (mayor cuanto
mayor sea el valor de éstas) y del condensador se pueden obtener medidas distintas a pe-
APROXIMACIÓN A LA CONVERSIÓN A/D 277
sar de haber pulsado una misma tecla, pero nunca dos teclas distintas tendrán un mismo
valor. Todo es mejorable y sirvan los presentes ejercicios para adquirir ideas y utilidades
que se puedan emplear en posteriores proyectos y aplicaciones reales.
¡No está nada mal el resultado obtenido si tenemos en cuenta que sólo se emplea
un línea de entrada del PIC12F508!
a
Transmisión y recepción
por RF
12.
APLICACIÓN
PRINCIPIOS TEÓRICOS
En la transferencia de datos se pueden emplear diferentes medios por donde hacer cir-
cular la información: el aire, cable, luz láser, infrarrojos, etc. En el caso que nos ocupa,
vamos a emplear el aire a través de señales de radiofrecuencia (RF). Para ello, es nece-
sario producir una señal portadora que sea modulada con la información digital que se
desea transmitir. Básicamente, existen tres modos de modulación y que se muestran en
la Figura P12.1:
279
280 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En nuestro caso, vamos a emplear un transmisor con modulación ASK y una fre-
cuencia portadora de 433 MHz.
La transferencia de información por radiofrecuencia (RF) es del tipo asíncrona y no
se emplea ninguna señal adicional (reloj) para sincronizar los bits transferidos. Siendo
así, debemos buscar la forma de garantizar, en la medida de lo posible, que todos los bits
MATERIALES NECESARIOS
ESQUEMA DE CONEXIONADO
PROGRAMA FUENTE
;
; Ejem_10_1A
; Autor: Mikel Etxebarria
; (c) Ingeniería de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Transmisor de 4 canales. El programa transmite en formato Manchester
;una trama de tres bytes. El primer byte es un código de identificación
;(ID). El segundo codifica uno de los cuatro canales activado,
;canal_0 - canal_3 y representan las entradas GP0-GP3 respectivamente.
;El tercer byte representa el CRC o checksum de 8 bits
;******************************************************************
;CRCGEN Calcula el byte de CRC o checksum del contenido del buffer.
;La suma de todos los bytes de ese buffer, incluido el propio CRC,
;debe dar 0x00 como resultado
;******************************************************************
;Secuencia de inicio
;Pulso 1-0 en GP0 (canal 0). Se transmite la trama 0x55, Canal_0, CRC
;Pulso 1-0 en GP1 (canal 1). Se transmite la trama 0x55, Canal_1, CRC
286 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
goto Loop
;Pulso 1-0 en GP2 (canal 2). Se transmite la trama 0x55, Canal_2, CRC
;Pulso 1-0 en GP3 (canal 3). Se transmite la trama 0x55, Canal_3, CRC
end
En principio, la evaluación del ejemplo es un poco frustrante. ¡No tenemos ningún re-
ceptor que sea capaz de recoger y decodificar la información transmitida!
De momento, nos debemos conformar con ensamblar el programa, grabarlo sobre
el dispositivo y montar el circuito del esquema tal y como se muestra en la fotografía de
la Figura P12.6
Debemos creernos que cada vez que se pulse uno de los cuatro pulsadores, por RF
se transmite una trama que codifica qué canal se ha activado.
Por cierto, para hacer de antena basta emplear un trozo de cable de unos 15 cm de
longitud.
TRANSMISIÓN Y RECEPCIÓN POR RF 287
PRINCIPIOS TEÓRICOS
Para que el presente receptor sea compatible con el transmisor anterior es necesario que
se cumpla una serie de condiciones idénticas a las explicadas en el ejemplo anterior y
que son:
• Modulación ASK.
• Frecuencia de portadora de 433 MHz.
• Codificación de bits tipo Manchester.
• Idéntica velocidad en la transferencia de los bits. Éstos deben durar el mismo
intervalo t de tiempo.
• Sincronismo de carácter idéntico, 2 bits de stop: uno a 1 y otro a 0.
• Idéntico sincronismo de mensaje. La trama está compuesta de un preámbulo con
20 bits a 1 y un bit a 0, un byte ID de identificación (0x55), un byte de informa-
ción (que define el canal activado) y un último byte de CRC para el control de la
integridad del mensaje.
MATERIALES NECESARIOS
ESQUEMA DE CONEXIONADO
El montaje lo vamos a realizar sobre el laboratorio PIC School según el esquema eléctri-
co mostrado en la Figura P12.7.
Las líneas GP0, GP1, GP2 y GP4 actúan como salidas. Se conectan a los leds S4-S7
del laboratorio y simulan el canal recibido cambiando su estado lógico.
El receptor envía los datos recibidos al PIC a través de la línea GP5 para su deco-
dificación.
PROGRAMA FUENTE
buffer, comprueba el byte CRC. La comprobación es muy sencilla. Se suma dicho byte
con todos los demás debiéndose obtener 0x00 como resultado. En caso contrario, se
considera que el contenido del buffer no es válido y la trama es corrupta.
La siguiente comprobación consiste en verificar el byte ID que identifica a nuestra
aplicación. Debe ser 0x55 o de lo contrario también se considera una recepción inválida.
Por último, se analiza el byte de información, que, en nuestro caso, determina qué
canal se activó en el transmisor (entre 0 y 3). En función de dicho canal, se actúa sobre
las líneas de salida GP0, GP1, GP2 y GP4 haciéndolas cambiar de estado lógico.
La fotografía de la Figura P12.8 muestra el montaje práctico del receptor sobre el labo-
ratorio PIC School. Como de costumbre, debemos editar, ensamblar y grabar sobre el
PIC el programa de aplicación.
Lo ideal es disponer de dos laboratorios PIC School. En uno de ellos se monta el
circuito de transmisión del ejemplo anterior con el PIC debidamente grabado. En el otro,
se monta el receptor.
Probamos a accionar cualquiera de los pulsadores del transmisor que simulan los cua-
tro canales para observar que en el receptor se activa el led de salida correspondiente.
Se puede apreciar que no se necesita gran cantidad de componentes. Por un lado, tene-
mos un PIC12F508 grabado con el programa transmisor del fichero Ejem_10_1A.ASM.
Le alimentamos con +5 Vcc y le conectamos los pulsadores correspondientes a los
canales 0-3. Por otro lado, el módulo transmisor recibe la señal codificada del PIC y la
transmite vía RF.
En la fotografía de la Figura P12.9 se muestra el montaje práctico. Se ha realizado
sobre un módulo board para el montaje sin soldadura. La alimentación de todo el con-
junto es de +5 Vcc. Hemos probado con éxito la experiencia superando distancias de
10m en entornos cerrados.
TEORÍA
CAPÍTULO
El primer contacto
con el PIC16F84A
8
La filosofía que hemos seguido en este libro es enseñar «bien» modelos sencillos del PIC,
porque si lo conseguimos sabremos que va a ser inmediato manejar los restantes. Se trata
del mismo perro con el mismo collar, pero con distintas pulgas.
293
294 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 8.1. Diagrama del conexionado de las patitas del PIC16F84A con encapsulado PDIP. También se
comercializa en encapsulado SSOP de veinte patitas en el que hallan duplicadas las patitas
VDD y VSS.
caso sirve para recibir una frecuencia externa para alimentar al temporizador
interno TMR0.
— RB0-RB7. Estas ocho patitas corresponden a las ocho líneas de E/S digitales de la
Puerta B. La línea RB0 multiplexa otra función, que es la de servir como entrada
a una petición externa de una interrupción; por eso, se la denomina RB0/INT.
Los PIC16X8X que tienen un encapsulado de dieciocho patitas, dos de ellas soportan la
tensión de alimentación, otras dos reciben la señal del oscilador externo y otra se utiliza
para generar un reset. Las trece patitas restantes funcionan como líneas de E/S para con-
trolar las aplicaciones.
Figura 8.2. Los impulsos del reloj externo (OSC1) se dividen por cuatro formando las señales Q1, Q2,
Q3 y Q4, que configuran un ciclo de instrucción.
Figura 8.3. La segmentación permite solapar en el mismo ciclo la fase de una instrucción y la de búsque-
da de la siguiente, excepto en las instrucciones de salto.
EL PRIMER CONTACTO CON EL PIC16F84A 297
EJEMPLO
Un PIC16F84A que funciona a 4 MHz ejecuta un programa de mil instrucciones, de las
cuales el 25 por 100 son de salto. Calcular el tiempo que tarda en ejecutarlo.
SOLUCIÓN
TCICLO INSTRUCCIÓN = 4 · TRELOJ = 4 · 250 ns = 1.000 ns = 1 µs
TPROGRAMA = 750 · 1 + 250 · 2 = 1.250 µs
Oscilador tipo RC
Se trata de un oscilador de bajo coste formado por una simple resistencia y un conden-
sador. Proporciona una estabilidad mediocre de la frecuencia cuyo valor depende de los
valores de los dos elementos de la red R-C (Fig. 8.4).
Figura 8.4. Esquema del oscilador tipo RC formado por un condensador y una resistencia externos. Se
indican los valores que deben tener estos dos componentes para obtener algunas frecuencias
de oscilación.
298 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EJEMPLO
Un PIC16F84A funcionando con una red R-C de 10 K y 220 pF, respectivamente, está
ejecutando un programa de quinientas instrucciones, de las cuales el 20 por 100 son de
salto. ¿Cuánto tarda en ejecutar el programa?
SOLUCIÓN
Según la Figura 8.4, con una red R-C de 10 K y 220 pF se trabaja a 80 KHz, de donde:
TOSC = (1s / 80) · 103 = 12,5 µs
TCICLO INSTRUCCIÓN = 4 · TOSC = 50 µs
TPROGRAMA = 400 · 50 + 100 · 100 = 30.000 µs = 30 ms
Oscilador tipo HS
Se trata de un oscilador que alcanza una alta velocidad comprendida entre 8 y 10 MHz
y está basado en un cristal de cuarzo o un resonador cerámico. Los condensadores C1 y
C2 de la Figura 8.5 tienen un valor comprendido entre 15 y 33 pF.
Oscilador tipo XT
Oscilador tipo LP
Oscilador de bajo consumo con cristal o resonador diseñado para trabajar en un rango de
frecuencias de 35 a 200 KHz.
Figura 8.5. Según el tipo de oscilador y la frecuencia de trabajo, se emplean diferentes valores en los
condensadores C1 y C2 que acompañan al cristal de cuarzo. Para frecuencias comprendidas
entre 4 y 10 MHz, los condensadores tienen una capacidad de 15 a 33 pF. La resistencia RS
sólo es necesaria en algunas versiones tipo HS.
EL PRIMER CONTACTO CON EL PIC16F84A 299
El cristal de cuarzo o el resonador cerámico se coloca entre las patitas OSC1 y OSC2
(Fig. 8.5).
EJEMPLO
Para una aplicación en la que el coste es un factor preponderante y no le afecta la
precisión del tiempo, ¿cuál sería el oscilador más adecuado?
SOLUCIÓN
El oscilador R-C. El coste de una resistencia y un condensador es mínimo, aunque dejan
bastante que desear la precisión y la estabilidad de la frecuencia de trabajo.
Figura 8.6. Sencillo circuito que permite producir un reset al presionar un pulsador externo.
300 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Las patitas que no se hallan conectadas en la Figura 8.7 son las dedicadas a transferir
información con los periféricos que utilice la aplicación. Para hacer operativo dicho esquema
vamos a conectar algunos periféricos sencillos, que no por eso son los menos usados.
Como periférico de entrada utilizaremos un interruptor (I1) que se conecta a la línea RA1
de la Puerta A. Como periférico de salida, se colocará un diodo led (L3) en la línea RB3 de
la Puerta B. Según el interruptor se abra o se cierre, introducirá un nivel lógico alto o bajo.
Cuando está abierto, aplica a la patita RA1 un nivel lógico alto a través de la resistencia de
pull-up de 10 K. Si se cierra, al conectarse con tierra, introduce un nivel bajo (Fig. 8.8).
Figura 8.9. Fotografía de la tarjeta de prototipos para los PIC de la gama media de dieciocho patitas
diseñada por Ingeniería de Microsistemas Programados, S. L.
302 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 8.10. Esquema eléctrico de la circuitería auxiliar del PIC que viene montada en la tarjeta de
prototipos.
EL PRIMER CONTACTO CON EL PIC16F84A 303
Con la incorporación de estos recursos, los PIC son capaces de ejecutar en un ciclo
de instrucción todas las instrucciones, excepto las de salto, que tardan el doble. Una con-
dición imprescindible es la simetría y ortogonalidad en el formato de las instrucciones,
que en el caso de los PIC de la gama media tienen una longitud de 14 bits. De esta forma,
se consigue una compactación en el código del programa para un PIC16F84A 2,24 veces
superior al de un 68HC05 funcionando a la misma frecuencia.
El juego de instrucciones se reduce a treinta y cinco y sus modos de direccionado se
han simplificado al máximo.
Con la estructura segmentada, se pueden realizar simultáneamente las dos fases en
que se descompone cada instrucción. Al mismo tiempo que se está desarrollando la fase
de ejecución de una instrucción, se realiza la fase de búsqueda de la siguiente.
La arquitectura Harvard es uno de los pilares en los que se sustenta la organización de los
PIC. Gracias a ella, se puede acceder de forma simultánea e independiente a la memoria de
datos y a la memoria de instrucciones.
305
306 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 9.1. La arquitectura Harvard aísla la memoria de datos y la de instrucciones, permitiendo que la
longitud de las palabras de cada una sea la más adecuada.
Otra característica relevante de los PIC es el manejo intensivo del Banco de Regis-
tros, los cuales participan de una manera muy activa en la ejecución de las instrucciones.
Como se muestra en la Figura 9.2, la ALU efectúa sus operaciones lógico-aritméticas
con dos operandos, uno que recibe desde el registro W (Work), que hace las veces de
«Acumulador» en los microprocesadores convencionales, y otro que puede provenir
de cualquier registro o del propio código de instrucción. El resultado de la operación
puede almacenarse en cualquier registro o en W. Esta funcionalidad da un carácter com-
pletamente ortogonal a las instrucciones que pueden utilizar cualquier registro como
operando fuente y destino. La memoria de datos RAM implementa en sus posiciones los
registros específicos y los de propósito general.
La arquitectura interna del PIC16F84A se presenta en la Figura 9.3 y consta de siete
bloques fundamentales.
Figura 9.2. En el esquema se muestra los diferentes elementos que proporcionan los operandos a la ALU.
El resultado se puede cargar en cualquier registro o en W.
EN EL INTERIOR DEL PROCESADOR 307
Para analizar de forma global el funcionamiento del procesador nos vamos a centrar
en la ejecución de una instrucción. Todo comienza con la fase de búsqueda, que la inicia
el Contador de Programa, facilitando la dirección de la memoria de instrucciones donde
308 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
El PIC16F84A tiene una zona de memoria de datos tipo RAM y otra tipo EEPROM. La primera
tiene una capacidad de veintidós registros de propósito especial (SFR) y sesenta y ocho de
propósito general (GPR), todos ellos de tamaño byte. La segunda dispone de una capacidad
de 64 bytes.
Las operaciones de E/S con los periféricos las soportan las Puertas A y B. Existe un
Temporizador TMR0 para encargarse de las funciones de control de tiempos. Finalmen-
te, hay unos circuitos auxiliares que dotan al procesador de unas interesantes posibilida-
des de seguridad, reducción del consumo y reinicialización.
Figura 9.4. Al tener implementado sólo 1 K posiciones la memoria de programa del PIC16F84A, se
ignoran los 3 bits de más peso del PC. La dirección 0000 H está reservada para el vector de
reset, y la 0004 H, para el vector de interrupción.
Al igual que todos los registros específicos que controlan la actividad del proce-
sador, el Contador de Programa está implementado sobre un par de posiciones de la
memoria RAM. Cuando se escribe el Contador de Programa como resultado de una
operación de la ALU, los 8 bits de menos peso del PC residen en el registro PCL, que
ocupa, repetido, la posición 2 de los dos bancos de la memoria de datos. Los bits de
más peso, PC < 12:8>, residen en los 5 bits de menos peso del registro PCLATH, que
ocupa la posición 0A H de los dos bancos de la memoria RAM.
En las instrucciones GOTO y CALL de la gama media, los 11 bits de menos peso del
PC provienen del código de la instrucción y los otros dos de los bits PCLATH <4:3> (véase
Figura 9.5).
Con los 11 bits que se cargan en el PC desde el código de las instrucciones GOTO
y CALL se puede direccionar una página de 2 K de la memoria. Los bits restantes
PC < 12:11 > tienen la misión de apuntar una de las cuatro páginas del mapa de me-
moria, y en los modelos de PIC que alcanzan ese tamaño, dichos bits proceden de
PCLATH < 4:3 >.
La Pila es una zona aislada de las memorias de instrucciones y datos. Tiene una
estructura LIFO en la que el último valor guardado es el primero que sale. Tiene ocho ni-
veles de profundidad, cada uno con 13 bits. Funciona como un buffer circular, de manera
310 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 9.5. En la figura superior se muestra cómo se carga el PC cuando una instrucción deposita en él
el resultado que se obtiene de la ALU. Abajo, se indica la carga del PC en las instrucciones
GOTO y CALL.
que el valor que se obtiene al realizar el noveno «desempilado» (pop) es igual al que se
obtuvo en el primero.
La instrucción CALL y las interrupciones originan la carga del contenido del PC en
el nivel superior o «cima» de la Pila. El contenido del nivel superior se saca de la Pila
al ejecutar las instrucciones RETURN, RETLW y RETFIE. El contenido del registro
PCLATH no es afectado por la entrada o salida de información de la Pila.
Los PIC no disponen de instrucciones específicas (push y pop) para manejar directamente
la Pila. Tampoco se dispone de ningún señalizador que indique cuándo se produce el rebo-
samiento de los ocho niveles de la Pila.
EN EL INTERIOR DEL PROCESADOR 311
Figura 9.7. Especificaciones de los registros SFR de los bancos de la memoria de datos RAM. La abre-
viatura x significa desconocido; u: no cambia; -: no implementado, se lee como 0, y q: valor
que depende de la condición.
EN EL INTERIOR DEL PROCESADOR 313
la misma dirección de los dos bancos para simplificar su acceso (INDF, ESTADO, FSR,
PCLATH e INTCON). La posición apuntada por la dirección 7 H y la apuntada por la
87 H no son operativas. Los sesenta y ocho registros restantes de cada banco se destinan
a Registros de Propósito General y, en realidad, sólo son operativos los sesenta y ocho
del banco 0 porque los del banco 1 se mapean sobre el banco 0, es decir, cuando se apun-
ta a un registro general del banco 1, se accede al mismo del banco 0 (véase Figura 9.6).
Para seleccionar el banco a acceder hay que manipular el bit 5 (RP0) del registro
ESTADO. Si RP0 = 1, se accede al banco 1, y si RP0 = 0, se accede al banco 0. Tras un
reset, se accede automáticamente al banco 0. Para seleccionar un registro de propósito
general no hay que tener en cuenta el estado del bit RP0, porque al estar mapeado el ban-
co 1 sobre el banco 0, cualquier direccionamiento de un registro del banco 1 corresponde
al homólogo del banco 0. En el direccionamiento directo a los registros GPR se ignora
el bit de más peso, que identifica el banco, y sus direcciones están comprendidas entre el
valor 0x0c y 0x4f en hexadecimal.
Los registros SFR se clasifican en dos grupos: en uno se incluyen aquellos que con-
trolan el núcleo del microcontrolador (ESTADO, OPTION, INTCON, etc.), y en el otro,
los que determinan la operatividad de los recursos auxiliares y periféricos. La Figura 9.7
presenta la estructura de estos registros y los valores que toman después de un reset.
Figura 9.8. Los PIC de la gama media tienen organizada la memoria de datos en cuatro bancos de 128 posi-
ciones cada uno. La zona sombreada no se halla implementada en el PIC16F84A.
314 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Direccionamiento directo
Direccionamiento indirecto
Este modo de direccionado se usa cuando en una instrucción se utiliza como operando
el registro INDF, que ocupa la dirección 0 de ambos bancos. En realidad, el registro
INDF no está implementado físicamente, y cuando se le hace referencia, se accede a la
dirección de un banco especificada con los 7 bits de menos peso del registro FSR. El bit
de más peso de FSR, junto al bit IRP del registro ESTADO, se encargan de seleccionar
el banco a acceder, mientras que los 7 bits de menos peso del FSR apuntan a la posición.
Como sólo hay dos bancos en el PIC16F84A en este modo de direccionamiento, el bit
IRP = 0 siempre (véase Figura 9.10).
EJEMPLO
Usando el modo de direccionado indirecto poner a 0 las posiciones de la memoria de
datos comprendidas entre la dirección 0x0c y 0x27 del banco 0 en un PIC16F84A.
EN EL INTERIOR DEL PROCESADOR 315
SOLUCIÓN
En el modo de direccionado indirecto, actúa como puntero el contenido del registro
FSR, que en este ejercicio se irá incrementando desde 0x0c hasta el valor 0x28 H, en el
que su bit 3 pasa a valer 1.
Figura 9.10. Selección del banco y la posición en el modo de direccionamiento indirecto. Como el
PIC16F84A sólo tiene dos bancos, IRP = 0 siempre.
movlw 0x0c
; W toma el valor inicial del puntero
movwf FSR
; FSR se carga con el valor de W
; Se borra la dirección que apunta FSR
bucle incf FSR ; Se incrementa FSR una unidad
btfss FSR, 3 ; Si el bit 3 de FSR vale 1 se “brinca” la
; siguiente instrucción (“skip”)
goto bucle ; Se salta a “bucle” porque vale 0 el
; bit 3 de FSR
.....continúa el programa.....
1.a Se encargan de avisar las incidencias del resultado de la ALU (C, DC y Z).
2.a Indican el estado de reset (TO# y PD#).
3.a Seleccionan el banco a acceder en la memoria de datos (IRP, RP0 y RP1).
Figura 9.11. Estructura interna del registro ESTADO. Los bits 3 y 4 sólo se pueden leer, mientras los
demás también se pueden escribir.
Los bits TO# y PD# indican el estado del procesador en algunas condiciones y no se
pueden escribir. Por este motivo, la instrucción clrf ESTADO deja el contenido de dicho
registro con el valor 000u u1uu, siendo u el símbolo de «no cambia». Sólo se ponen a 0
los tres bits de más peso, el bit Z (cero) se pone a 1 y los restantes no alteran su valor.
A continuación, se describe la misión de los bits del registro ESTADO:
Los PIC contienen todos los recursos posibles, aunque su fabricante no les incluye en todos
los modelos, sino que los alterna para poderse ajustar óptimamente a las necesidades de
cada diseño.
— Temporizador/contador TMR0.
— Perro Guardián (Watchdog).
— Puertas de E/S.
— Memoria EEPROM de datos.
319
320 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
1.a Como contador de sucesos, que están representados por los impulsos que se
aplican a la patita RA4/T0CKI. Al llegar al valor FF H, se desborda el contador
y con el siguiente impulso pasa a 00 H, y advierte esta circunstancia activando
un señalizador y/o provocando una interrupción. Estos dos avisos no lo tenía el
PIC12F508.
2.a Como temporizador, cuando se carga en el registro que implementa al recurso
un valor inicial se incrementa con cada ciclo de instrucción (Fosc/4) hasta que se
desborda, o sea, pasa de FF a 00 H, y avisa poniendo a 1 un bit señalizador y/o
provocando una interrupción (Fig. 10.1).
«cuelgue» y para ello cada cierto tiempo comprueba si el programa se está ejecutando
normalmente. En caso contrario, si el control está detenido en un bucle infinito a la es-
pera de algún acontecimiento que no se produce, el Perro Guardián «ladra», lo que se
traduce en un reset que reinicializa todo el sistema.
A menudo, el TMR0 y el Perro Guardián precisan controlar largos intervalos de
tiempo y necesitan aumentar la duración de los impulsos de reloj que les incrementa.
Para cubrir este requisito se dispone de un circuito programable denominado Divisor de
frecuencia, que divide la frecuencia utilizada entre diversos rangos.
Para programar el comportamiento del TMR0, el Perro Guardián (WDT) y el Divi-
sor de frecuencia utilizan algunos bits del registro OPTION y de la Palabra de Configu-
ración, que se explicará más adelante. En la Figura 10.2 se proporciona un esquema sim-
plificado de la arquitectura del circuito de control de tiempos usado en los PIC16X8X.
El Divisor de frecuencia puede usarse con el TMR0 o con el WDT. Con el TMR0
actúa como predivisor, es decir, los impulsos pasan primero por el Divisor y luego se
aplican al TMR0 una vez aumentada su duración. Con el Perro Guardián actúa después,
realizando la función de posdivisor. Los impulsos, que divide por un rango el Divisor de
frecuencia, pueden provenir de la señal de reloj interna (Fosc/4) o de los que se aplican
a la patita T0CKI.
Figura 10.3. Esquema general del funcionamiento de TMR0. Cuando se desborda, se pone a 1 el seña-
lizador T0IF.
En cualquier momento se puede leer el valor que contiene TMR0 sin detener su
contaje. La instrucción adecuada al caso es movf tmr0,w.
En la Figura 10.3 se ofrece el esquema de funcionamiento del TMR0. Obsérvese
que hay un bloque que retrasa dos ciclos el contaje para sincronizar el momento del
incremento producido por la señal aplicada en T0CKI con el que producen los impulsos
internos de reloj. Cuando se escribe TMR0, se retrasan dos ciclos su reincremento y se
pone a 0 el Divisor de frecuencia.
Figura 10.4. Distribución y asignación de funciones de los bits del registro OPTION.
El bit PSA del registro OPTION asigna el Divisor de frecuencia al TMR0 (PSA=0)
o al WDT (PSA = 1).
Los 3 bits de menos peso de OPTION seleccionan el rango por el que divide el Di-
visor de frecuencia los impulsos que se le aplican en su entrada. La Figura 10.4 muestra
la distribución y función de los bits de OPTION.
324 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
El bit 6 INTEDG (Interrupt Edge) sirve para determinar el flanco activo, que pro-
vocará una interrupción externa al aplicarse a la patita RB0/INT. Un 1 es ascendente y
un 0 descendente.
El bit 7 RBPU# (RB Pull-Up) activa (si vale 0) o desactiva (cuando vale 1) las resis-
tencias pull-up, que pueden conectarse opcionalmente en las líneas de la Puerta B.
La temporización nominal con la que se halla programado el Perro Guardián es de 18 ms, pero
utilizando el Divisor de frecuencia puede aumentarse hasta alcanzar los 2,3 segundos.
Para evitar que se desborde el Perro Guardián hay que refrescarle previamente. En
realidad, este refresco consiste en ponerle a cero mediante las instrucciones clrwdt y
sleep. El programador debe analizar las instrucciones de la tarea y situar alguna de esas
dos en sitios estratégicos por los que pase el flujo de control antes de que transcurra el
tiempo asignado al WDT. De esta manera, si el programa se «cuelga», no se refresca el
Perro Guardián y se produce la reinicialización del sistema.
Figura 10.5. Cuando PSA = 1, los impulsos producidos por el Perro Guardián pasan al Divisor (posdi-
visor). Si PSA = 0, los impulsos pasan primero por el Divisor y luego se aplican al TMR0
(predivisor).
LOS RECURSOS FUNDAMENTALES 325
La instrucción clrwdt borra al WDT y reinicia su cuenta. Sin embargo, la instrucción sleep,
además de borrar WDT, detiene al sistema y lo mete en un estado de «reposo» o «de bajo consu-
mo». Si no se desactiva el Perro Guardián al entrar en el modo de reposo, al completar su contaje
provocará un reset y sacará al microcontrolador del modo de bajo consumo. Para desactivar al
Perro Guardián hay que escribir un 0 en el bit 2 (WDTE) de la Palabra de Configuración.
En el registro ESTADO existe un bit denominado TO# que pasa a valer 0 después
del desbordamiento del WDT.
EJEMPLO
Confeccionar un programa para cambiar la asignación del Divisor de frecuencia del
TMR0 al Perro Guardián.
SOLUCIÓN
Como el TMR0 ocupa la dirección 1 del banco 0 y el registro OPTION la misma direc-
ción, pero el banco 1, hay que hacer una conmutación de bancos que se controla con el
bit «rp0», que es el bit 5 del registro ESTADO.
bcf estado,rp0 ; Banco 0
clr tmr0 ; Borra TMR0 y el Divisor
bsf estado,rp0 : Banco 1
clrwdt ; Borra al Perro Guardián
movlw valor ; Carga en W el valor del WDT
movwf option ; Se asignan funciones en OPTION
bcf estado,rp0 ; Banco 0
Figura 10.6. Esquema que resalta la actuación del Divisor de frecuencia con el TMR0 y con el WDT. El
bit PSA selecciona la asignación del Divisor al TMR0 o al WDT.
326 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 10.7. La información que entra o sale por las puertas reside en las posiciones 5 y 6 del banco 0,
mientras que TRISA y TRISB, que son los registros de configuración, ocupan las direcciones
5 y 6 del banco 1.
10.4.1. La Puerta A
Las líneas RA3-RA0 admiten niveles de entrada TTL y de salida CMOS. La línea RA4/
T0CKI dispone de un circuito Schmitt Trigger que proporciona una buena inmunidad
al ruido y la salida tiene drenador abierto. RA4 multiplexa su función de E/S con la de
entrada de impulsos externos para el TMR0.
Los bits del registro TRISA configuran a las líneas de la Puerta A como entradas si están a
1 y como salidas si están a 0.
Figura 10.8. Conexión electrónica de las patitas RA3-RA0 con las líneas de control y del bus de datos
del procesador.
EJEMPLO
Configurar las dos líneas de menos peso de la Puerta A como entradas y las otras tres
como salidas.
SOLUCIÓN
bsf estado,rp0 ; Banco 1
movlw 0x03 ; Valor configuración Puerta A
movwf trisa ; RA4:RA2 salidas y RA0:RA1
; entradas
Al reinicializarse el PIC, todos los bits de los registros TRIS quedan a 1, con lo que
las líneas de las puertas quedan configuradas como entradas.
Cada línea de salida puede suministrar una corriente máxima de 25 mA, y si es en-
trada, puede absorber hasta 25 mA. Al existir una limitación en la disipación máxima
de la potencia del chip, se restringe la corriente máxima de absorción de la Puerta A a
80 mA y la de suministro a 50 mA. La Puerta B puede absorber un máximo de 150 mA
y suministrar un total de 100 mA.
Con movf puerta,w se lee una puerta y con la instrucción movwf puerta se escribe.
También existen instrucciones para modificar el valor de un bit particular correspondien-
te a una línea de una puerta con las instrucciones bsf puerta,bit (pone a 1 el bit indicado
de la puerta) y bcf puerta,bit. Existen instrucciones de salto condicionales que chequean
el valor de un bit de una puerta y brincan si vale 1 (btfss) o si vale 0 (btfsc).
10.4.2. La Puerta B
Consta de ocho líneas bidireccionales de E/S, RB7:RB0, cuya información se almacena
en el registro PUERTAB, que ocupa la dirección 6 del banco 0. El registro de configura-
ción TRISB ocupa la misma dirección en el banco 1.
La línea RB0/INT tiene dos funciones multiplexadas. Además de patita de E/S,
actúa como patita para la petición de una interrupción externa cuando se autoriza esta
función mediante la adecuada programación del registro INTCON, del que se hablará
más adelante.
A todas las líneas de esta puerta se las permite conectar una resistencia pull-up, de
elevado valor, con el positivo de la alimentación. Para este fin hay que programar en
el registro OPTION el bit RBPU# = 0, lo que provoca la conexión de una resistencia a
todas las líneas. Con el reset todas las líneas quedan configuradas como entradas y se
desactivan las resistencias pull-up.
Las cuatro líneas de más peso, RB7:RB4, pueden programarse para soportar una mi-
sión especial. Cuando las cuatro líneas actúan como entradas, se las puede programar para
generar una interrupción si alguna de ellas cambia su estado lógico. Esta posibilidad es muy
práctica en el control de teclados. En la Figura 10.9 se muestra el esquema de conexionado
entre las patitas RB7:RB4 y las líneas correspondientes del bus de datos interno.
LOS RECURSOS FUNDAMENTALES 329
Figura 10.9. Conexionado de las patitas RB7:RB4 y las líneas correspondientes al bus interno de datos
y las señales de control.
El estado de las patitas RB7:RB4 en modo entrada se compara con el valor antiguo
que tenían y que se había «latcheado» durante la última lectura de la Puerta B. El cambio de
estado en algunas de esas líneas origina una interrupción y la activación del señaliza-
dor RBIF.
La línea RB6 también se utiliza para la grabación serie de la memoria de programa
y sirve para soportar la señal de reloj. La línea RB7 constituye la entrada de los datos en
serie cuando se graba un programa en la memoria de código.
330 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 10.10. Distribución de los bits de la Palabra de Configuración del PIC16F84A que ocupa la
dirección 2007 H de la memoria de programa.
1: No protegida.
0: Protegida. El programa no se puede leer, evitando copias. Tampoco se puede
sobrescribir. Además, evita que pueda ser accedida la EEPROM de datos;
y, finalmente, si se modifica el bit CP de 0 a 1, se borra completamente la
EEPROM.
1: Desactivado.
0: Activado.
1: Activado el WDT.
0: Desactivado.
— EEDATA.
— EEADR.
— EECON1.
— EECON2.
Figura 10.11. Distribución de los bits del registro EECON1 de los PIC16X8X.
— RD: Lectura
— WR: Escritura
Un ciclo de escritura de una posición de la EEPROM de datos tiene una duración típica de
10 ms, que resulta muy larga para la velocidad del procesador. Por este motivo existen varios
bits en el registro EECON1 para supervisar la completa y correcta terminación del mismo.
EJEMPLO
Confeccionar un programa para realizar la lectura de una posición lect de la EEPROM de
datos.
SOLUCIÓN
bcf estado,rp0 ; Banco 0
movlw lect ; Dirección a leer
movwf eeadr ;
bsf estado,rp0 ; Banco 1
bsf eecon1,rd ; Lectura
bcf estado,rp0 ; Banco 0
movf eedata,w ; W se carga con valor leído en EEPROM
EJEMPLO
Escribir en la dirección escr de la EEPROM de datos el valor dato.
SOLUCIÓN
bcf estado,rp0 ; Banco 0
movlw escr ;
movwf eeadr ; Se escribe la dirección en eeadr
movlw dato ;
movwf eedata ; Se escribe el dato en eedata
bsf estado,rp0 ; Banco 1
bsf eecon1,wren ; Permiso escritura
; Inicio secuencia escritura
movlw 0x55 h ;
movwf eecon2 ; Se escribe 55 h en eecon2
movlw 0xaa h ;
movwf eecon2 ; Se escribe aa h en eecon2
bsf eecon1,wr ; Comienza la escritura
334 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
335
336 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Cuando ocurre cualquiera de los cuatro sucesos indicados, se origina una petición de
interrupción que si se acepta y se atiende comienza depositando el valor del PC actual en
la Pila, poniendo el bit GIE = 0 y cargando en el PC el valor 0004 H, que es el Vector de
Interrupción donde se desvía el flujo de control.
Cada fuente de interrupción dispone de un señalizador o flag, que es un bit que
se pone automáticamente a 1 cuando se produce. Además, cada fuente de interrupción
tiene otro bit de permiso que, según su valor, permite o prohíbe la realización de una
interrupción.
Figura 11.2. Distribución de los bits del Registro de Control de Interrupciones en el PIC16F84A.
338 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EJEMPLO
Confeccionar un programa que explore de forma continua las cuatro fuentes de in-
terrupción para averiguar cuál se ha activado.
SOLUCIÓN
Se usa la instrucción btfss registro,n, que explora el bit n de «registro», y si vale 1, se
salta una instrucción, o sea, el PC se incrementa en dos unidades. A esta operación se
la denomina brinco.
EJEMPLO
Confeccionar un programa que asegure que todas las interrupciones se hallan prohibidas.
SOLUCIÓN
Se comprueba que el bit GIE = 0. Se utiliza la instrucción que examina un bit, y si vale 0,
produce un brinco o un salto de la instrucción siguiente:
bucle bcf intcon,gie ; GIE = 0
btfsc intcon,gie ; Si GIE =0, entonces hay brinco
goto bucle
(continúa)
Figura 11.4. Circuito para generar impulsos de duración determinada. En el esquema, Tiempo =
470 · 0,05 = 23,5 ms.
EJEMPLO
Confeccionar un programa para permitir que se acepte la interrupción por activación
de la patita RB0/INT al aplicarla un flanco descendente.
SOLUCIÓN
El programa deberá encargarse de que los bits del registro INTCON tomen los siguien-
tes valores: INTE=GIE=1 y T0IE =RBIE=EEIE= 0. También deberá asegurarse de que
inicialmente, antes de producirse la interrupción, el señalizador INTF valga 0.
bsf estado,rp0 ; Selección del banco 1
bcf option,intdeg ; INTDEG =0 para flanco descendente
bcf estado,rp0 ; Selección banco 0
bsf intcon,gie ; GIE=1
bsf intcon,inte ; INTE=1
bcf intcon,rbie ; RBIE=0
bcf intcon,eeie ; EEIE=0
bcf intcon,intf ; INTF=0
Se podía haber cargado todos los bits del registro INTCON con una instrucción.
EJEMPLO
¿Cada cuánto tiempo producirá TMR0 una interrupción si se le carga continuamente
con el valor 4010 , el Divisor de frecuencia está programado en el rango 1:8 y el micro-
controlador dispone de un cristal de 1 MHz?
SOLUCIÓN
Para averiguar el tiempo de retardo se aplica la fórmula:
Temporización = 4 · Tosc · (256 – N10) · Rango del Divisor de frecuencia
Temporización = 4 · 1 µs · (256 – 40) · 8 = 6.192 ms
El PIC16F84A tiene cinco causas que provocan la reinicialización del sistema, consis-
tente en cargar al PC con el valor 000 H (Vector de Reset) y poner el estado de los bits
de los registros específicos (SFR) con un valor conocido.
En la Tabla 11.1 se presenta el estado lógico que adquieren los bits de los registros SFR
de la memoria de datos cuando se provoca un reset por una de las cinco causas posibles.
En la Figura 11.5 se muestra el esquema electrónico del PIC16F84A para la genera-
ción del reset. La patita MCLR# dispone de un filtro interno para eliminar los ruidos y
los impulsos muy pequeños.
El temporizador PWRT (Power-up-Timer) activa una salida al cabo de un cierto
tiempo tras la conexión de la alimentación, que se aplica a una entrada de la AND4,
encargada de controlar el reset del flip-flop que gobierna la generación interna del reset
del sistema. Sólo es válida la salida de PWRT si el bit de permiso del PWRT está activo
a nivel bajo (PWRT# = 0), dado que también se aplica a la OR7 de la Figura 11.5. El bit
PWRT reside en la Palabra de Configuración.
344 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Tabla 11.1. Valor que adquieren los bits de los registros SFR y el W después de producirse un reset por
una de las cinco causas posibles.
El reset del flip-flop final se produce cuando la AND4 saca nivel alto, lo que requiere
que sus tres entradas tengan dicho nivel, y eso supone:
a) Que no haya peticiones de reset y la puerta OR2 tenga su salida a nivel bajo.
b) Que si está activo PWRT, finalice su retardo de 72 ms.
c) Que también finalice la temporización del oscilador OST, que retarda 1.024 · Tosc
tras completarse el retardo de PWRT.
El temporizador PWRT proporciona un retardo fijo de 72 ms y sus impulsos de reloj los gene-
ra un oscilador R-C propio. Este tiempo garantiza la estabilización del voltaje de alimentación
VDD.
Figura 11.6. Cronograma de las principales señales que intervienen en el reset para uno de los posibles
casos en que MCLR# no cambia de estado con VDD.
346 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 11.7. Condiciones de reset reflejadas por el estado de los bits TO# y PD# del registro ESTADO.
Figura 11.8. Cuando VDD desciende por debajo del valor Vz + 0,7 V, se produce un reset por la activación
de la patita MCLR#.
INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES 347
Figura 11.9. El transistor Q1 se bloquea y activa el reset al pasar a nivel bajo la patita MCLR# cuando
el valor VDD desciende por debajo de VDD · R1/(R1 + R2) = 0,7 V.
Para entrar en el modo de reposo hay que ejecutar la instrucción SLEEP, produ-
ciéndose una situación muy especial de funcionamiento que parece como si el sistema
se hubiera «congelado», requiriendo el mínimo suministro de energía para mantener el
estado del procesador sin ninguna actividad.
En reposo, la patita T0CKI se conecta a VDD o a tierra para eliminar la entrada de im-
pulsos externos al TMR0. Por otra parte, como se detiene el oscilador principal que genera
los impulsos Tosc, también se para TMR0. Las patitas de E/S mantienen el estado anterior
al modo de reposo y las que no se hallan conectadas a periféricos y actúan como entradas
de alta impedancia se aconseja conectarlas a VDD o a tierra para evitar posibles fugas de
corriente. La patita MCLR# debe conectarse a nivel alto. Sin impulsos de reloj, el procesa-
dor se congela y deja de ejecutar instrucciones hasta que «despierte» y salga de ese estado.
Si el Perro Guardián continúa activo en el modo de reposo, al entrar en él se borra,
pero sigue funcionando. Los bits del registro de ESTADO PD# y TO# toman los valores
0 y 1, respectivamente.
348 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Cuando se despierta, el PIC desarrolla la secuencia del oscilador OST, que retarda 1.024 Tosc
para estabilizar la frecuencia de trabajo y luego se pasa a ejecutar la siguiente instrucción a
sleep (PC + 1).
Los bits TO# y PD# se emplean para conocer la causa del reset que despierta al sistema.
PD# = 0 cuando se ejecuta la instrucción SLEEP. TO# = 0 cuando se desborda el Perro
Guardián.
Figura 11.10. Típico esquema de conexionado de un PIC16X8X para la grabación del programa en serie.
INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES 349
EJEMPLO
Un PIC16F84A funcionando con un cristal de cuarzo de 10 MHz tarda 600 µs en
ejecutar un programa que tiene el 50 por 100 de las instrucciones de salto.
a) ¿De cuántas instrucciones consta el programa?
b) ¿Cuántas posiciones de la memoria de código ocupa?
351
352 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
SOLUCIÓN
Todas las instrucciones tardan en ejecutarse un ciclo de instrucción, equivalente a
cuatro ciclos de reloj, excepto las de salto, que tardan el doble.
CLK = TOSC = 1/10 · 106 s = 100 ns
Ciclo instrucción = 4 · Tosc = 400 ns
TPROGRAMA = 600 µs = X · 400 ns + 2 · X · 400 ns
X = 500
Luego hay quinientas instrucciones normales y quinientas de salto; en total, mil
instrucciones.
a) Mil instrucciones tiene el programa.
b) El programa ocupa mil posiciones de la memoria de código.
Para estudiar los diversos formatos que admiten las instrucciones del repertorio de
los PIC de la gama media, se clasifican en cinco grandes grupos atendiendo al tipo de
operación que desarrollan.
El formato de las instrucciones que corresponden a este grupo se divide en tres campos:
1. Campo del código OP, de 6 bits.
2. Campo de la dirección del operando fuente (f ), de 7 bits.
3. Campo que define el operando destino (d ), de 1 bit.
Las instrucciones de este grupo tienen como sintaxis nemónico f,d. Cuando d = 1,
el registro destino coincide con el registro fuente. Por ejemplo, si se desea incrementar
el contenido de un registro, reg1, y guardar el nuevo valor en el mismo, se usa la
instrucción inc reg1,1.
EJEMPLO
¿Qué utilidad puede tener una instrucción que mueve el contenido de un registro a él
mismo (coincide el registro fuente con el registro destino): movf reg1,1?
SOLUCIÓN
La instrucción movf f,d pone a 1 el señalizador Z cuando lo transferido es 0. Por eso,
dicha instrucción puede servir para saber si el contenido es 0 o no lo es.
EJEMPLO
Hallar el formato de la instrucción incf f,d que utiliza como operando fuente el registro
que ocupa la dirección 0x07 de la memoria de datos y como registro destino él mismo
(d = 1). Se sabe que los 6 bits del código OP valen 001010.
Figura 12.1. Formato de las instrucciones orientadas a manejar operandos que son registros de 1 byte.
El operando fuente (f) se representa con los 7 bits de la dirección que ocupa el registro en
la memoria de datos. El destino puede ser el mismo operando fuente (d = 1) o el registro
W (d = 0).
354 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
SOLUCIÓN
Campo del código OP (6 bits) : 001010
Campo del destino (1 bit) :1
Campo operando fuente (7 bits) : 0000111
El formato al que responden las instrucciones de este grupo tiene tres campos y se mues-
tra en la Figura 12.2.
1. Campo del código OP, de 4 bits.
2. Campo de la dirección del registro fuente, de 7 bits.
3. Campo de la posición del bit en el registro, de 3 bits.
EJEMPLO
Al hacer un reset, el procesador coloca el bit 5 (rp0) del registro ESTADO a 0, con lo
que comienza referenciando al banco 0 de la memoria de datos de un PIC16X8X. Para
referenciar al banco 1 hay que poner a 1 dicho bit.
a) Indicar la instrucción que permite dicha conmutación de bancos.
b) Si el código OP de la instrucción bsf es 0101 y el registro ESTADO ocupa la
dirección 0x03 del banco 0 y 1 de la memoria de datos, hallar el formato de la
instrucción del apartado anterior.
SOLUCIÓN
a) bsf ESTADO,5
b) Campo del código OP : 0101
Campo de la posición del bit : 101
Campo dirección registro : 0000011
Formato de la instrucción bsf ESTADO,5 : 0101 101 0000011
Figura 12.2. Formato de las instrucciones que realizan operaciones que manipulan 1 bit. Los 3 bits del
campo b indican la posición que ocupa el bit afectado dentro del registro fuente cuya direc-
ción la expresa el campo f.
MANEJANDO EL REPERTORIO DE INSTRUCCIONES 355
EJEMPLO
Se desea cargar en el registro W el valor inmediato 0x33.
SOLUCIÓN
a) movlw 0x33
b) Campo del Código OP : 1100xx
Campo del inmediato : 00110011
Figura 12.3. Formato de las instrucciones de salto incondicional tipo CALL y GOTO. El literal (k) es el
valor de la nueva dirección que se carga en el PC.
356 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EJEMPLO
Indicar el formato de la instrucción condicional que decrementa el registro que ocupa
la dirección 0x04 de la RAM de datos de un PIC16F84A, deposita el resultado en W y
brinca en el caso que dicho resultado valga 0. El campo del código OP correspondiente
a la instrucción decfsz es 001011.
SOLUCIÓN
Figura 12.4. Formato de las instrucciones de brinco condicional que coincide con el de las instrucciones
que manejan registros de 1 byte.
SÍMBOLO SIGNIFICADO
0xhh Es la forma que se usa en el lenguaje MPASM para referenciar los números
hexadecimales de dos dígitos (hh).
f Representa la dirección en la memoria RAM de datos del registro fuente.
Tiene un tamaño de 7 bits, con un direccionamiento de 128 posiciones com-
prendidas entre la dirección 0x00 y la 0x7f.
d Es un bit que conforma el campo del formato de una instrucción que indica
el registro destino. Si d = 0, es W, y si d = 1, es f.
k Campo que contiene un valor inmediato que puede ser un operando
(8 bits) o una dirección para el PC (11 bits).
x Valor indeterminado de 1 bit. Puede ser 1 o 0.
() Contenido.
<> Campo de 1 bit de un registro. Por ejemplo: ESTADO <5>.
∈ En el conjunto de ejemplo: d ∈ [0,1].
[] Opciones.
EJEMPLO
Utilizar los símbolos y las abreviaturas usadas en el programa Ensamblador MPASM
para expresar las características de la instrucción que realiza la operación lógica AND
entre el contenido del registro W y el de otro registro f.
SOLUCIÓN
Sintaxis andwf f,d (Si d = 0, el destino es W)
Operandos 0 f 127
d ∈ [0, 1]
Operación (W) and (f) → dest
Si d = 0, dest = W
Si d =1, dest = f
Formato 000101 d fffffff
EJEMPLO
Si el contenido del registro W es 0xf0 y el del registro ESTADO es 0x0f, ¿con qué valores
quedan cargados ambos registros tras ejecutar la instrucción andwf ESTADO,1?
358 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
SOLUCIÓN
Como el operando destino es ESTADO (d = 1), quedan:
W = 0xf0
ESTADO = 0x00
EJEMPLO
Si se supone que inicialmente valen 0 los registros W y los que ocupan las direcciones
0x01 y 0x02 de la memoria de datos, ¿qué valor contendrán después de ejecutar el
siguiente programa?
incf 0x01,0
incf 0x01,1
comf 0x02,1
iorwf 0x02,0
xorwf 0x01,1
SOLUCIÓN
(W) = 0xff
(0x01) = 0xfe
(0x02) = oxff
EJEMPLO
Existe una instrucción con la que se rota a la derecha, a través del señalizador de
acarreo C, el registro que ocupa la dirección 0x04 de la memoria de datos y deposita el
resultado en W. Se pide:
a) Nemónico.
b) Formato de la instrucción.
c) Si inicialmente C = 1 y (0x04) = 0x00, ¿qué valor se cargará en W?
MANEJANDO EL REPERTORIO DE INSTRUCCIONES 359
SOLUCIÓN
a) rrf 0x04,0.
b) 001100 0 0000100.
c) W = b’10000000’.
Tabla 12.1. Principales características de las instrucciones de los PIC16X8X que manejan como ope-
randos registros de 8 bits. Se han excluido las de salto condicional, que tienen el mismo
formato.
EJEMPLO
Si el registro ESTADO contiene el valor 0xf5 y se ejecuta la instrucción swap ESTADO,0,
¿qué valor contendrán ESTADO y W?
SOLUCIÓN
La instrucción swap intercambia los nibbles entre sí. En un registro de 8 bits, un nibble
corresponde a los 4 bits de más peso y el otro a los de menos peso.
(f < 3:0>) → (dest<7:4>)
(f < 7:4>) → (dest<3:0>)
360 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
En el formato de las instrucciones que manejan bits se representa con 3 bits la posición
que ocupa en el registro el bit b. El registro se especifica mediante su dirección de 7 bits.
Tabla 12.2. Características más importantes de las dos instrucciones que manejan un bit determinado
de un registro.
EJEMPLO
Si inicialmente el registro W = 0xff y el registro OPTION = 0x00, ¿con qué valores
quedarán cargados tras ejecutar el siguiente programa?
bsf OPTION,2
comf OPTION,0
swap OPTION,1
SOLUCIÓN
W = b’1111 1011’
OPTION = b’0100 0000’
EJEMPLO
Hallar el formato de la instrucción bsf 0x08,3.
MANEJANDO EL REPERTORIO DE INSTRUCCIONES 361
SOLUCIÓN
Formato de la instrucción bsf 0x08,3 : 0101 011 0001000
INSTRUCCIONES DE «BRINCO»
Sintaxis Operación Ciclos Formato 14 bits Señalizaciones
BTFSC f,d Explora un bit de f y brinca si vale 0 1 (2) 01 10bb bfff ffff —
BTFSS f,d Explora un bit de f y brinca si vale 1 1 (2) 01 11bb bfff ffff —
DECFSZ f,d Decrementa f, y si es 0, brinca 1 (2) 00 1011 bfff ffff —
INCFSZ f,d Decrementa f, y si es 1, brinca 1 (2) 00 1111 bffff ffff —
Tabla 12.3. Características más relevantes de las cuatro instrucciones condicionales de brinco.
EJEMPLO
Se trata de averiguar el valor del bit 4 del registro ESTADO. Si vale 1, se borra o se pone
a 0 el registro W, y si dicho bit vale 0, se pone a 1 ese bit.
SOLUCIÓN
btfss ESTADO,4 ; Si ESTADO<4> = 1, hay brinco
bsf ESTADO,4 ; Como ESTADO<4> = 0, se pone a 1
clrw ; Como ESTADO<4> = 1, se borra W
EJEMPLO
Decrementar el contenido del registro FSR hasta que valga 0 y entonces borrar W.
362 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
SOLUCIÓN
bucle decfsz FSR,1
goto bucle
clrw
EJEMPLO
Indicar el valor del registro W después de ejecutar el siguiente programa:
clrw
movwf OPTION
bsf OPTION,5
comf OPTION,1
btfsc OPTION,1
swap OPTION,0
SOLUCIÓN
Tabla 12.4. Características más importantes de las instrucciones que manejan operandos inmediatos (k).
MANEJANDO EL REPERTORIO DE INSTRUCCIONES 363
EJEMPLO
SOLUCIÓN
(W) = 0xf0
Tabla 12.5. Principales características de las instrucciones de control del flujo del programa y de las
especiales.
EJEMPLO
Si un PIC16F84A funciona con un cristal de 4 MHz y el Perro Guardián está programado
para que se desborde cada 18 ms, calcular cada cuántas instrucciones como máximo
deberá refrescarse el Perro con la instrucción clrwdt.
SOLUCIÓN
TOSC = 1/4 · 106 = 250 ns
Ciclo instrucción = 4 · TOSC = 1.000 ns = 1 µs
18 ms = 18.000 µs
Luego habrá que incluir una instrucción clrwdt cada 18.000 normales como
máximo. Las instrucciones de salto cuentan el doble.
EJEMPLO
SOLUCIÓN
— return: Retorna de una subrutina al programa principal. Carga al PC con el
contenido de la cima de la Pila.
— retlw k: Hace lo mismo que return y, además, carga en W el literal k.
— retfie: Carga al PC con el contenido de la cima de la Pila y pone GIE = 1.
MANEJANDO EL REPERTORIO DE INSTRUCCIONES 365
INSTRUCCIONES DE «BRINCO»
BTFSC f,d Explora un bit de f y brinca si vale 0 1(2) 01 10bb bfff ffff —
BTFSS f,d Explora un bit de f y brinca si vale 1 1(2) 01 11bb bfff ffff —
DECFZF f,d Decrementa f, y si es 0, brinca 1(2) 00 1011 dfff ffff —
INCFSZ f,d Incrementa f, y si es 1, brinca 1(2) 00 1111 dfff ffff —
Tabla 12.6. Principales características de las 35 instrucciones de los PIC de la gama media, agrupadas
según su función y en orden alfabético.
CAPÍTULO
Herramientas
y diseño de proyectos
13
En el despertar del siglo XXI asistimos a una impresionante carrera mundial por incorpo-
rar microcontroladores a los productos de mayor consumo para mejorar la imagen, las
prestaciones, el tamaño, el consumo y el precio.
Cada nuevo diseño nace con una idea y termina con el prototipo que la implementa.
Durante ese proceso suceden ordenadamente una serie de etapas que hay que cubrir para
llegar a un final feliz. En el desarrollo de cada fase se utiliza un conjunto de herramientas
hardware y software que, según su potencia, reducen más o menos el tiempo que se consume
en completarla. Pero aunque sean muy valiosas dichas herramientas, no hay que olvidar que, al
igual que pasa con la mayoría de las cosas en nuestro mundo, hay dos pilares fundamentales:
Con este panorama de trabajo se deben manejar excelentes herramientas que sean
capaces de mejorar la idea inicial en el mínimo tiempo. Hasta hace poco, únicamente
las grandes empresas podían soportar los grandes desembolsos económicos que
exigía la adquisición de esas herramientas. Actualmente, los fabricantes de chips se
van dando cuenta que para venderlos por cientos de millones de unidades tienen que
facilitar y popularizar su empleo y poner a disposición de los usuarios los medios
que necesitan.
Microchip se ha esforzado siempre en considerar las posibilidades de los
profesionales particulares y puede ser que ésta haya sido la razón de haber escalado
puestos en el ranking mundial de venta de microcontroladores durante la década de
los noventa y ocupar uno de los puestos de cabeza. La disponibilidad de herramientas
eficaces y económicas justifica la espectacular aceptación de los PIC. Cualquier
aficionado, estudiante, diseñador particular o pequeña empresa puede adquirir
el instrumental requerido para el desarrollo de proyectos con PIC y cientos de
367
368 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
empresas de todo el mundo compiten por mejorar, ampliar y abaratar todo tipo de
herramientas.
Para analizar las prestaciones y funciones que deben soportar las herramientas de
desarrollo, se presentan las fases típicas de un proyecto basado en un microcontrolador
y que se muestran gráficamente en el organigrama de la Figura 13.1. Se ha supuesto que
Figura 13.1. Organigrama que representa las sucesivas fases del diseño de un proyecto basado en micro-
controlador en el caso de no disponer de «emulador en circuito».
HERRAMIENTAS Y DISEÑO DE PROYECTOS 369
Figura 13.2. Tabla que muestra algunas características de cada fase de un proyecto y las herramientas
que se utilizan.
13.2.1. La cabeza
Es una herramienta que tenemos todos, pero es la más importante. Con ella se puede obtener la
clave del éxito, que es la idea, y también puede suplir carencias y dificultades que se presentan
en todos los diseños. Se usa en todas las fases y de su rendimiento depende todo el trabajo.
370 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Cuide bien su cabeza, porque con sólo una buena idea que le proporcione puede ser
suficiente.
También para los PIC la empresa Microchip dispone del programa Ensamblador
MPASM, cuyos nemónicos son similares a los utilizados por Intel.
Si trabaja con un lenguaje de alto nivel, como el C, tiene varias opciones de adquirir un
compilador que lo traduzca a código máquina. Un compilador más barato y muy eficaz es el de
la empresa CCS, que distribuye en España Ingeniería de Microsistemas Programados, S. L.
En Estados Unidos hay bastantes empresas que ofrecen compiladores e intérpretes del
lenguaje BASIC, entre las que se distinguen Parallax, microEngineering Labs y Versa Tech.
Figura 13.3. Pantalla principal del simulador SIMUPIC’84. Se trata de un excelente, didáctico y econó-
mico simulador software para los PIC16X84.
13.2.5. El grabador
El programa objeto, o sea, en código máquina ejecutable, hay que escribirlo en la me-
moria de instrucciones del microcontrolador. Para realizar esta operación se necesita un
«grabador».
Un grabador consiste en una tarjeta electrónica que soporta varios zócalos con
diferente número de patitas en los que se introducen diversos tipos de microcontroladores.
Dispone de circuitos auxiliares y de estabilización de la alimentación. La grabación se
controla mediante un programa de comunicación desde un PC que se adapta al grabador
por el puerto paralelo.
El grabador Micro’PIC Programmer es un buen exponente de este tipo de
herramientas y es capaz de grabar todos los PIC de la gama media de dieciocho,
veintiocho y cuarenta patitas (Fig. 13.4).
372 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 13.4. Fotografía del grabador Micro’PIC Programmer, diseñado por Ingeniería de Microsistemas
Programados, S. L.
Figura 13.6. Fotografía de la tarjeta de prototipos PIC18-ME sobre un pupitre de metacrilato que sopor-
ta al Micro’PIC Trainer y un transformador de alimentación.
374 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 13.7. Fotografía del hardware, software y documentación que componen el emulador en circuito
ICEPIC-Jnr-5X, de R. F. Solutions.
Figura 13.9. Fotografía de un temporizador digital para máquinas que funcionan con monedas, construi-
do con un PIC16C55 y comercializado por CEBEK.
incremento del tiempo de funcionamiento cuyo valor se selecciona con cuatro microinte-
rruptores. Hay dos periféricos de salida: uno consiste en un visualizador de tres dígitos que
puede presentar hasta un tiempo máximo de 999 minutos y el otro es un relé que se activa
cuando se presiona el pulsador de puesta en marcha y se desactiva cuando el tiempo llega
a cero. Regula el funcionamiento y la parada de la máquina. Existe una EEPROM externa
de datos para guardar el tiempo que queda útil si se desconecta la alimentación.
En la Figura 13.10 se ofrece el esquema de un reloj digital gobernado por un
PIC16C55. Las cuatro líneas de la Puerta A regulan los transistores de activación de
los displays de siete segmentos. Las líneas RB0, RB1 y RB2 se hallan conectadas a tres
pulsadores para el ajuste de horas, minutos y segundos. También RB1 y RB2, junto con
las cinco líneas de más peso de la Puerta B, excitan a los segmentos de los displays.
Para que aprecie las ventajas de usar una tarjeta de prototipos, hemos montado el
reloj digital sobre una placa de propósito general, que se muestra en la Figura 13.11.
El enorme tiempo que se malgasta en situar y conectar los componentes, los posibles
errores de montaje, el coste similar de ambas tarjetas y la mediocre presentación del
prototipo no hacen recomendable utilizar este procedimiento.
Usando la tarjeta de prototipos PIC18-ME se reducen al mínimo el tiempo y los
fallos del montaje. Las patitas de E/S del PIC están perfectamente señalizadas y accesi-
bles, haciendo inmediata la conexión de los periféricos. El coste de la tarjeta PIC18-ME
es similar a la de una de propósito general del mismo acabado. Finalmente, la presenta-
ción tiene una imagen más profesional y el riesgo de averías es nulo (Fig. 13.12).
HERRAMIENTAS Y DISEÑO DE PROYECTOS 377
Otra ventaja de las tarjetas de prototipo es que pueden usarse para muchos diseños,
ya que finalizado uno de ellos pueden desoldarse los componentes. Con este fin es reco-
mendable montar los periféricos con rapinado.
En este proyecto, el módulo principal consiste en conseguir un tiempo patrón de un segun-
do que vaya incrementando el contador de segundos. Al alcanzar el valor de sesenta, se pondrá
a cero el contador de segundos y se incrementará el de minutos. El de minutos pasará a cero al
llegar a sesenta e incrementará las horas, y éstas pasarán a cero al llegar a veinticuatro.
Figura 13.11. Montaje del reloj digital sobre una tarjeta de circuito impreso de propósito general. Tiem-
po, coste, fallos y presentación hacen que este procedimiento sea poco interesante.
378 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 13.12. Fotografía del reloj digital montado sobre una tarjeta de prototipos PIC18-ME.
Figura 13.13. Fotografía del dado electrónico comercializado en kit (DIY KIT69). El display de siete
segmentos y el pulsador de tirada se controlan con un PIC16C54.
HERRAMIENTAS Y DISEÑO DE PROYECTOS 379
Figura 13.14. Conexión del PIC a los periféricos que configuran el dado.
Figura 13.15. Organigrama general para el programa del dado electrónico. Cuando el pulsador no está
activado (RA0 = 1), se van iluminando sucesivamente los segmentos del display para dar
cierta vistosidad al juego.
380 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 13.16. Fotografía del dado electrónico montado sobre una tarjeta de prototipos PIC18-ME.
Figura 13.17. Fotografía de una tarjeta PIC18-ME sobre la que se han montado todos los periféricos
que conlleva el semáforo.
Las ocho líneas de la Puerta B se conectan a ocho diodos led integrados en una barra
que tienen la misión de visualizar el número de segundos, de 1 a 8, que está encendida
la luz bajo prueba (Fig. 13.18).
La duración establecida para el encendido de las luces roja y verde se registra en
posiciones de la memoria de datos EEPROM para no realizar una nueva reprogramación
cuando se desconecta la alimentación.
Figura 13.18. Esquema de un conexionado de un PIC16C84 con los periféricos que implementa el semáforo.
Figura 13.19. Fotografía del presentador de mensajes implementado sobre una tarjeta PIC18-ME.
HERRAMIENTAS Y DISEÑO DE PROYECTOS 383
Figura 13.21. Fotografía del sistema de control de acceso montado sobre una tarjeta PIC18-ME.
HERRAMIENTAS Y DISEÑO DE PROYECTOS 385
Figura 13.22. Esquema de conexionado del sistema de control de acceso mediante una clave secreta.
APLICACIONES PRÁCTICAS
er
Simulando el primer taller 1.
TALLER
389
390 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
— Cuarto paso: En este cuarto paso no se añade ningún fichero y se avanza sim-
plemente pulsando sobre el botón Siguiente. Al pulsar la fase Siguiente, aparece
un resumen del proyecto construido; y para acabar, basta presionar la opción
Finalizar.
Figura T1.1. Organigrama que recoge las etapas que se cubren en el desarrollo de un proyecto con
microcontrolador.
SIMULANDO EL PRIMER TALLER 391
Figura T1.2. La iniciación del proyecto se produce con la opción Project Wizard en la ventana desple-
gable de Project en el entorno MPLAB IDE.
En la pantalla principal del MPLAB IDE hay una ventana que recoge los ficheros
del proyecto creado. Mediante la opción File → New se genera un nuevo fichero para
escribir el código fuente de nuestro programa, que será el siguiente:
INICIO:
CLRW ;Borra el contenido de W
ADDLW 0x08 ;Suma a W 8
ADDLW 0x09 ;Suma a W 9
NOP ;No operar
end
Figura T1.4. En el segundo paso se seleccionan las herramientas para ensamblar o compilar el pro-
grama fuente.
Figura T1.5. Se asigna nombre al proyecto (EJEMPLO_0) y se indica en la carpeta que se guardará
(G:\16f84A\EJEMPLO_0).
SIMULANDO EL PRIMER TALLER 393
Una vez copiado el código fuente, se procede a guardarlo con el nombre Ejem_0.ASM,
y mediante la opción Project → Add Files to Project se deberá añadir este fichero al proyec-
to creado de forma que en la ventana del proyecto se observe el fichero Ejem_0.ASM tal
dentro del apartado Source Files (Fig. T1.6).
Figura T1-6. Ventana que muestra los ficheros del proyecto creado.
Para realizar el ensamblado se recurre en el MPLAB IDE, dentro del menú Project,
a la opción Build All. A continuación, se proporciona información sobre cómo se está
desarrollando la traducción y al final se genera una ventana con el resultado de la misma.
En dicha ventana se informa del desarrollo de la operación de ensamblaje, y si todo ha
ido bien, finaliza con la frase BUILD SUCCEEDED. Si ha ocurrido algún fallo en la
traducción, la frase final será BUILD FAILED. En este caso, hay que eliminar los errores
en el programa fuente, que se indican en la ventana, y repetir la operación de ensamblaje
(Fig. T1.7).
Figura T1.7. Al final de la operación de ensamblado producida por la opción Project/Build All aparece
la frase BUILD SUCCEEDED si todo ha ido bien.
La opción Run ejecuta el programa, que no se detendrá hasta que bien se acabe el
programa, el simulador llegue a un punto de ruptura o bien se utilice la opción Halt, que
detiene la ejecución del programa.
La opción Animate también ejecuta el programa, pero de forma animada. Es decir,
ejecuta más lentamente el programa y resaltando en pantalla cada instrucción que está
ejecutándose para seguir visualmente dicha ejecución.
La opción Step Into ejecuta una sola instrucción (STEP INTO); la opción Step Over
ejecuta hasta la siguiente instrucción de mismo nivel sin introducirse en subrutinas, etc.
(STEP OVER), y la opción Step Our ejecuta el programa hasta salir de la rutina en
ejecución (STEP OUR).
Por último, la opción Reset reinicia la ejecución del programa.
Para comprobar el contenido de los registros del procesador y las posiciones de la
memoria, usando la pestaña View se eligen los elementos que intervienen en el programa
y les afectan las instrucciones. Así, en Ejem_0.ASM, el elemento más interesante y
usado es el registro W. También variará su valor el PCL cuando se vayan ejecutando las
instrucciones.
Figura T1.10. La figura muestra el programa en ejecución mediante el simulador MPLAB SIM.
Y, por último, la instrucción NOP no hace nada ni altera el valor del registro W.
En la Figura T1.10 puede apreciarse cómo el simulador marca con una flecha la
próxima instrucción a ejecutar y con una B roja un punto de ruptura. Para establecer o
eliminar un punto de ruptura basta con hacer doble clic con el ratón en la posición donde
ahora se encuentra esa B correspondiente a la línea que se desea depurar.
T2.1. INTRODUCCIÓN
Tras recordar en el taller anterior el manejo del simulador MPLAB SIM con el PIC16F84A,
en el presente taller se aborda un ejemplo práctico del uso de las entradas y salidas haciendo
uso de este PIC y de la herramienta de trabajo PIC School.
La descripción de esta herramienta, sus características y modo de empleo se encuentra
analizada en la aplicación 2 del PIC12F508. Dicha descripción resulta de especial interés
para poder abordar el desarrollo de los talleres que se presentan en esta parte de la obra.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
397
398 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
del PIC16F84A, para lo cual primero se inicializan y luego se testean sus valores para
actuar según se muestra en el organigrama de la Figura T2.1.
Mientras ningún concursante accione su pulsador, el programa estará a la espera. En cuan-
to uno de los dos concursantes accione su pulsador, el programa iluminará el led correspon-
diente a ese concursante y entrará en un bucle infinito del que no saldrá nunca y así no prestará
atención a pulsaciones posteriores. Para pasar a la siguiente pregunta, el presentador accionará
el reset, que hará que el programa vuelva a comenzar desde la primera instrucción.
El código fuente correspondiente a dicho programa es el siguiente:
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable, que tiene la extensión .HEX.
Aunque el simulador MPLAB SIM no puede mostrar el comportamiento en tiempo
real de las líneas de E/S, con él se puede comprobar su respuesta en el programa introdu-
ciendo mediante la opción Debugger → Stimulus Controller → New Scenario cambios en
los valores de RA0 y RA1 y así observar los cambios en RB0 y RB1, respectivamente.
CONEXIÓN DE PERIFÉRICOS
Figura T2.2. Conexión de las cuatro líneas del PIC16F84A usadas en la experiencia.
Figura T2.4. Pantalla principal del programa WinPic800 que muestra el programa en hexadecimal.
Para grabar el programa TALLER2.ASM con PIC School en la memoria FLASH del
PIC16F84A se utiliza el programa WinPic800. El jumper JP4 debe estar en la posición
MCL uniendo los puntos 1-2. El conmutador principal de la PIC School debe situarse
en la posición PC si se utiliza la puerta serie para conectarla con el PC. En caso de usar
el adaptador opcional para conectar la PIC School con el PC por el puerto USB hay que
colocar el conmutador en la posición ICSP durante la grabación/verificación.
Desde WinPic800 se abre el programa TALLER2.HEX. En la barra de herramientas
se elige el tipo de PIC a emplear. En la pestaña Config. es muy importante configurar
el PIC seleccionando el oscilador XT y desactivar el WDT tal y como se muestra en
la Figura T2.5. Tras realizar esta operación, con el icono correspondiente se ordena la
grabación del mismo sobre la memoria del PIC16F84A, previamente seleccionado. Des-
pués se puede verificar si la grabación ha sido correcta comparando el contenido de la
memoria con el del programa.
Una vez grabado el programa y antes de la verificación de su comportamiento, se
coloca JP4 en la posición GP3 (2-3) y el conmutador principal se pone en Run.
Ahora sólo queda que cada concursante se coloque en posición, el presentador haga
la primera pregunta y ya pueden empezar a accionar los interruptores para contestar.
Recuerde que para pasar de pregunta hay que accionar el botón Reset de la placa PIC
School.
402 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EL PROGRAMA EN C
#include <16f84.h>
#byte port_a = 5
#byte port_b = 6
main()
{
port_b = 0;
set_tris_a(0b11111100); //RA0 y RA1 Salidas
set_tris_b(0b00000011); //RB0 y RB1 Entradas
while(1)
{
if(input(PIN_A0)) // Leer RA0 y preguntar su valor
{ // RA0 es 1
output_bit(PIN_B0,1); // Poner RB0 a 1
output_bit(PIN_B1,0); // Poner RB1 a 0
while(1)
{
TRABAJANDO CON ENTRADAS Y SALIDAS. CONCURSO DE TELEVISIÓN 403
}
if(input(PIN_A1)) // Leer RA0 y preguntar su valor
{ // RA0 es 1
output_bit(PIN_B0,0); // Poner RB0 a 1
output_bit(PIN_B1,1); // Poner RB1 a 0
while(1)
{
restart_wdt(); //Entrada en un bucle infinito
}
}
}
}
er
Manejo de la instrucción
SLEEP
3.
TALLER
T3.1. INTRODUCCIÓN
El modo de bajo consumo o standby de los PIC, también conocido como sleep, reduce al
orden de microamperios el consumo del mismo. Esto está especialmente indicado para
aquellas aplicaciones en las que el sistema debe alimentarse mediante baterías.
Hay gran cantidad de aplicaciones en las que el microcontrolador debe estar en espera de
algún evento externo para realizar una determinada tarea. Son estas ocasiones en las que dicho
microcontrolador debiera estar en standby, reduciendo el consumo hasta que el evento suceda.
La instrucción SLEEP pone al PIC en estado de standby. Para salir o «despertar» de
dicho estado (wake-up) debe suceder uno de estos tres sucesos: un reset del sistema, una
interrupción o bien un desbordamiento del Perro Guardián.
Este taller pretende mostrar el empleo de la instrucción SLEEP para poner al PIC en modo
standby de bajo consumo. El despertar del mismo se producirá cada vez que el Perro Guar-
dián se desborde. En ese momento se producirá un incremento del valor de la Puerta B que
actuará como contador binario y nuevamente se volverá a la situación de standby.
El preescaler se asociará al Perro Guardián y estará comprendido entre 1 y 128,
dependiendo del estado lógico de los interruptores RA0-RA2.
El valor nominal del Perro Guardián es de 18 ms. Es decir, con un preescaler de 1, el mi-
crocontrolador «despertará» cada 18 ms; con un preescaler de 128, lo hará cada 2,3 s.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
405
406 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; TALLER_3.ASM
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;El modo “sleep” y el “wake-up” (despertar) mediante el watch-dog timer
;
List p=16F84 ;Tipo de procesador
include “P16F84.INC” ;Definiciones de registros internos
conseguir que el cuarto bit esté a 1 lógico y los tres restantes tengan el valor leído en
RA0-RA2. Para ello, se utiliza la instrucción iorlw b’00001000’.
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
También se puede simular este programa mediante el MPLAB SIM visualizando
el estado de la Puerta B y accediendo mediante la opción Debugger → Stopwatch y la
colocación de un punto de ruptura en la instrucción sleep observar el tiempo que pasa
desde un sleep a otro. La Figura T3.2 muestra el tiempo pasado de la primera entrada en
modo sleep al siguiente: 18 ms.
Figura T3.2. La ventana Stopwatch muestra el tiempo y los ciclos ejecutados al pararse el programa en
el punto de ruptura.
CONEXIÓN DE PERIFÉRICOS
El conexionado de los periféricos que todos están disponibles en la PIC School es el que
muestra la Figura T3.3. Una vez colocado el PIC16F84A sobre su zócalo, tan sólo conec-
taremos RA0, RA1 y RA2 como entradas y la Puerta B se conectará sobre los leds S0-S7.
Figura T3.4. Fotografía del montaje de la experiencia en la PIC School para la demostración del modo
sleep.
EL PROGRAMA EN C
/*-------------------------------------------*\
| TALLER_3.c |
| Autor: Pedro M.a Jiménez |
| (c) Microsystems Engineering (Bilbao) |
\*-------------------------------------------*/
#include <16f84.h>
#use delay(clock=4000000,RESTART_WDT)
#include <lcd2.c>
#use fast_io(A)
#use fast_io(B)
#byte port_a = 5
#byte port_b = 6
main()
{
port_b = 0;
set_tris_a(0x1F);
set_tris_b(0x00);
setup_counters(RTCC_INTERNAL,WDT_18MS);
while(1)
{
sleep();
port_b++;
setup_counters(RTCC_INTERNAL, 8 + (port_a&0x07)); // Ver Nota.
}
}
// Nota:
// Esto es una copia de parte del fichero 16f84.h:
/*
#define RTCC_DIV_2 0
#define RTCC_DIV_4 1
#define RTCC_DIV_8 2
#define RTCC_DIV_16 3
#define RTCC_DIV_32 4
#define RTCC_DIV_64 5
#define RTCC_DIV_128 6
#define RTCC_DIV_256 7
#define WDT_18MS 8
#define WDT_36MS 9
#define WDT_72MS 10
#define WDT_144MS 11
#define WDT_288MS 12
#define WDT_576MS 13
MANEJO DE LA INSTRUCCIÓN SLEEP 411
#define WDT_1152MS 14
#define WDT_2304MS 15
*/
// Como se puede observar, para seleccionar un WDT de 18 ms es necesario
// pasarle a la función “setup_counters” el parametro WDT_18MS, es decir,
// el número 8.
T4.1. INTRODUCCIÓN
Este taller maneja el clásico contador ascendente/descendete binario. En los leds conec-
tados a la Puerta B de la PIC School se reflejará el resultado de la cuenta. Se contempla
la eliminación del «efecto rebote» que se produce en la apertura y cierre de los contactos
de los interruptores. Se elimina dicho efecto mediante una temporización software.
Sobre los ocho leds de salida conectados a la Puerta B se visualizará, en binario, el nú-
mero de pulsos aplicados por la entrada RA0. RA1 determina si la cuenta es ascendente
(a 1) o descendente (a 0).
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
413
414 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; TALLER_4.asm
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;Contador UP/DOWN binario
;
USO DE TEMPORIZADORES. CONTADOR ASCENDENTE/DESCENDENTE 415
;******************************************************************
Delay_20_ms:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x63 ;Complemento hex. de 156
movwf TMR0 ;carga el TMR0
Delay_20_ms_1 clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebasamiento del TMR0
goto Delay_20_ms_1 ;Todavía no
bcf INTCON,T0IF ;Ahora sí, reponer el flag
return
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
Para poder simular este taller será necesario crear un nuevo escenario (Debugger →
Stimulus Controller → New Scenario) y crear dos eventos para conseguir un pulso alto
y bajo de RA0, así como para cambiar el estado de RA1.
CONEXIÓN DE PERIFÉRICOS
EL PROGRAMA EN C
/*-------------------------------------------*\
| Taller_4.c |
| Autor: Pedro M.a Jiménez |
| (c) Microsystems Engineering (Bilbao) |
\*-------------------------------------------*/
418 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
#include <16f84.h>
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#byte port_a = 5
#byte port_b = 6
main()
{
port_b = 0;
set_tris_a(0x1F);
set_tris_b(0x00);
while(1)
{
do {
restart_wdt();
} while(input(PIN_A0)); // Esperar flanco ascendente
delay_ms(20);
do {
restart_wdt();
} while(!input(PIN_A0)); // Esperar flanco descendente
delay_ms(20);
if(input(PIN_A1))
port_b++;
else
port_b--;
}
}
o
Manejo del teclado 5.
TALLER
T5.1. INTRODUCCIÓN
Manejar un teclado de dieciséis teclas puede resultar más complejo de lo que aparente-
mente podría parecer. El PIC16F84A no dispone de dieciséis líneas con las que monito-
rizar cada una de las teclas. Para manejar el teclado utilizará solamente ocho patitas.
Se conectarán las ocho líneas de la Puerta B (RB0-RB7) directamente al teclado
matricial 4 × 4. El software de la aplicación configurará a las líneas RB7-RB4 como sa-
lidas para ir activando secuencialmente cada una de las filas. Al mismo tiempo, las líneas
RB3-RB0 se configuran como entradas desde las columnas del teclado y son leídas para
determinar si hay alguna tecla pulsada.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
419
420 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;******************************************************************
;Delay_var: Rutina que realiza una temporización variable
;entre 50 ms y 12.8”. Se emplea un preescaler de 256 y al TMR0 se le
;carga con 195. La velocidad de trabajo es de 4 Mhz y, por tanto, el TMR0
;se incrementa cada us. De esta forma, el TMR0 debe contar 195
eventos, que con un preescaler de 256 hace una intervalo total de
;50000 uS/50 ms (195 * 256). El valor 195 hay que expresarlo en
;hex. (c3), y como el TMR0 es ascendente, habrá que cargar su
;complemento (3C hex.).
;Dicho intervalo de 50 ms se repite tantes veces como indique la
;variable “Delay_cont”; es por ello que el delay mínimo es de 50 ms
;(“Delay_cont=1) y el máximo de 12.8” (Delay_cont=255).
Delay_var:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x3c ;Complemento hex. de 195
movwf TMR0 ;carga el TMR0
Intervalo clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0 ??
goto Intervalo ;Todavía no
decfsz Delay_cont,F ;Decrementa contador de intervalos
goto Delay_var ;Repite el intervalo de 50 ms
return
movlw b’00000111’
movwf OPTION_REG ;Preescaler de 256 para el TMR0
bcf STATUS,RP0 ;Selecciona banco 0
422 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
A la hora de cargar este programa desde el CD que acompaña a la obra, deberá crear
un proyecto que incluya el fichero TALLER_5.ASM junto con el fichero TECLADO.INC
que contiene las rutinas necesarias para el manejo del teclado.
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
La simulación de este ejercicio es prácticamente inviable, ya que las características
propias del teclado son difíciles de representar en el simulador.
CONEXIÓN DE PERIFÉRICOS
La conexión de los periféricos puede resultar curiosa, ya que se utiliza la Puerta B tanto
para leer el teclado como para mostrar el resultado por los leds. Así, pues, hay que apro-
vechar la posibilidad que presenta el conector de la Puerta B que dispone de dos posibles
conexiones por cada patita. Una conexión irá hacia el teclado y otra hacia los leds según
se puede observar en la Figura T5.2.
EL PROGRAMA EN C
/*-------------------------------------------*\
| Autor: Pedro M.a Jiménez |
| (c) Microsystems Engineering (Bilbao) |
\*-------------------------------------------*/
#include <16f84.h>
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(B)
#include <kbd2.c>
#byte port_b = 6
main()
{
char k;
while(1)
{
restart_wdt();
k=kbd_getc(); // Comprueba el teclado: si k es 0, no se pulsó
if(k) // ninguna tecla; si no es 0, contiene el código
{ // ASCII de la tecla pulsada.
T6.1. INTRODUCCIÓN
El presente taller aborda el uso de la interfaz RS-232 de la placa de entrenamiento PIC
School para comunicar, vía serie, el PIC16F84A y un PC.
Las comunicaciones vía serie con un PC proporcionan al microcontrolador de un
amplio abanico de aplicaciones, como monitorización de sensores a través de PC, alar-
mas en el PC con envío de e-mails cuando un sensor del PIC lee cierto valor, manejo
de motores conectados al PIC desde el PC, almacenamiento de grandes volúmenes de
información leída por el PIC dentro del PC…
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
• Cable de conexión serie con el PC.
• Programa de comunicaciones HyperTerminal (u otro similar).
425
426 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Aunque el organigrama de la Figura T6.1 parece muy simple, el programa que lo desarrolla
no lo es tanto. El PIC16F84A carece de un módulo RS-232, por lo que realizar una comu-
nicación serie requiere implementar en el programa dicho protocolo mediante un control
estricto de los tiempos empleados.
; TALLER 6
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
; Comunicación serie gestionada por software.
;
;Haciendo uso de las rutinas incluidas en el fichero RS232LOW.INC, se
;trata de utilizar el canal RS232 de la Trainer PLUS para comunicar vía
;serie con diferentes periféricos. En los ejemplos aquí propuestos se
;utilizará un PC para que, con el software HyperTERMINAL, actúe como un
;simple terminal de comunicaciones.
;Este programa pretende ser un simple sistema de monitorización. Se lee
;el estado de los interruptores RA0-RA4 de la uPIC Trainer y se envía,
;vía serie, a un terminal para monitorizar el estado de los mismos.
;******************************************************************
;Según el valor contenido en el registro W, se devuelve el carácter a
;visualizar
Tabla_Mensajes movwf PCL ;Desplazamiento sobre la tabla
;*****************************************************************
;Mensaje: Esta rutina envía vía serie RS232 el mensaje cuyo inicio
;está indicado en el acumulador. El fin de un mensaje se determina
;mediante el código 0x00
movwf OPTION_REG
movlw b’11101111’
movwf TRISB ;RB5 entrada y RB4 salida
movlw 0xff
movwf TRISA ;Puerta A entrada
bcf STATUS,RP0 ;Selecciona página 0 de datos
movlw Mens_0
call Mensaje ;Salida de mensaje 0
movlw Mens_1
call Mensaje ;Salida de mensaje 1
Loop clrwdt
movlw .5
movwf Contador ;Inicia contador de bits
movf PORTA,W ;Lee el estado de la puerta A
andlw b’00011111’
movwf Temporal
rlf Temporal,F
rlf Temporal,F
rlf Temporal,F ;Almacena estado de RA4-RA0
movlw .3
movwf Blancos
Txd_Blancos movlw ‘ ’
movwf Txdreg
call TxD
decfsz Blancos,F
goto Txd_Blancos
movlw .13
movwf Txdreg
call TxD ;Transmite código de CR
goto Loop
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permantes.
La simulación de este ejercicio no es posible, ya que el MPLAB SIM, aunque para
otros PIC sí dispone de simulación de la comunicación UART, como el PIC16F84A, no
dispone de dicho módulo integrado y no implementa dicha simulación.
CONEXIÓN DE PERIFÉRICOS
Figura T6.3. Fotografía del montaje de la experiencia en la PIC School para la comunicación serie.
EL PROGRAMA EN C
#include <16f84.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B4,RCV=PIN_B5,RESTART_
WDT)
#use fast_io(B)
#byte port_a = 5
main()
{
signed int i; // Variable con signo, ya que llegerá a valer <0
set_tris_a(0x1F);
set_tris_b(0x20);
while(1)
{
restart_wdt();
printf(“Puerta A:”);
for(i=4; i>=0; i--)
printf(“ RA%1u=%c”,i,bit_test(port_a,i)+‘0’);
putc(‘\n’);
putc(‘\r’);
}
}
o
Manejo del LCD 7.
TALLER
T7.1. INTRODUCCIÓN
ENUNCIADO
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
• Cable de conexión serie con el PC.
• Programa de comunicaciones HyperTerminal (u otro similar).
433
434 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; TALLER 7
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para PIC School. Comunicación serie gestionada por software.
;
List p=16F84 ;Tipo de procesador
include “P16F84.INC” ;Definiciones de registros internos
MANEJO DEL LCD 435
Loop clrwdt
bsf STATUS,RP0 ;Selecciona página 1
movlw b’11101111’
movwf TRISB ;RB5 entrada y RB4 salida
bcf STATUS,RP0
movlw .16
movwf Caracteres ;Inicia contador de caracteres
movlw 0xc0
call LCD_REG ;Selecciona segunda línea del LCD
decfsz Líneas,F ;Se han completado 2 líneas
goto Loop ;No
goto LCD_HOME ;Sí, borrar pantalla
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
CONEXIÓN DE PERIFÉRICOS
Para el montaje de este taller se utilizan practicamente todas las líneas disponibles y,
además, dos de ellas se multiplexan de forma que las patitas RB4 y RB5 deben conectar-
se a dos periféricos distintos. Dichas conexiones quedan resumidas en la Figura T7.2.
Figura T7.3. Fotografía del montaje de la experiencia en la PIC School el manejo de la pantalla LCD.
438 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EL PROGRAMA EN C
#include <16f84.h>
#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_B4, RCV=PIN_B5,
RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#include <lcd2.c>
#byte port_a=5
#byte port_b=6
main()
{
int x=1, y=1;
char c;
lcd_init();
lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK);
while(1)
{
// ATENCIÓN: Las funciones de gestión del LCD reprograman
// --------- las puertas A y B según sea necesario, por lo que
// antes de utilizar las funciones serie RS232 es
// necesario reprogramar las líneas TxD y RxD.
lcd_gotoxy(x,y);
lcd_putc(c);
x++;
if(x>16)
{
x=1; y++;
if(y>2)
y=1;
}
}
}
o
Generación de números
aleatorios
8.
TALLER
T8.1. INTRODUCCIÓN
El azar es un factor importante en muchos aspectos de la vida. Es por eso por lo que a
menudo es necesario tratar de reproducir este hecho.
Este taller trata de generar un número aleatorio para poder utilizarlo en múltiples
aplicaciones:
• Simulación del lanzamiento de un dado.
• Obtener una pregunta de una base de datos al azar.
• Seleccionar un destino al azar.
• Etc.
Una de las técnicas más sencillas que existen para generar un número aleatorio consiste
en capturar el valor del TMR0 en un momento dado. Se debe tener en cuenta que dicho tem-
porizador está constantemente evolucionando en pequeños intervalos del orden de los dos
microsegundos. Es muy difícil, por tanto, predecir qué valor tendrá en un momento dado.
ENUNCIADO
Cada vez que se aplique un pulso por RA0, se genera un número binario de 8 bits aleatorio
que será visualizado sobre los ocho leds conectados en la Puerta B durante tres segundos.
Entre las diferentes técnicas, la empleada para obtener el número consiste en capturar el
valor del TMR0 en un momento dado.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
439
440 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;Generación de números aleatorios
;
;Cada vez que se aplique un pulso por RA0, se genera un número
;binario de 8 bits aleatorio que será visualizado sobre los 8 leds
;conectados en la Puerta B durante 3 segundos.
;Entre las diferentes ténicas, la empleada para obtener el número
;consiste en capturar el valor del TMR0 en un momento dado.
;*****************************************************************
;Delay_20_ms: Esta rutina de temporización tiene por objeto eliminar
;el “efecto rebote” de los periféricos electromecánicos. Realiza un
;delay de 20 ms. Si el PIC trabaja a una frecuencia de 4 MHz, el TMR0
;evoluciona cada us. Si queremos temporizar 20000 us (20 ms) con un
;preescaler de 256, el TMR0 deberá contar 78 eventos (78 * 256). El valor
;78 equivale a 0x4e hex., y como el TMR0 es ascedente, habrá que cargar
;su complemento a 1 (0xb1 hex.).
Delay_20_ms:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0xb1 ;Complemento hex. de 78
movwf TMR0 ;Carga el TMR0
Delay_20_ms_1 clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0
goto Delay_20_ms_1 ;Todavía no
return
;******************************************************************
;Delay_var: Esta rutina de propósito general realiza una temporización
;variable entre 50 ms y 12.8”. Se emplea un preescaler de 256 y al TMR0
;se le carga con 195. La velocidad de trabajo es de 4 MHz y, por tanto, el
;TMR0 se incrementa cada us. De esta forma, el TMR0 debe contar 195
;eventos que con un preescaler de 128 hace una intervalo total de 50000
;us/50 ms (195 * 256). El valor 195 hay que expresarlo en hex. (c3), y
;como el TMR0 es ascendente, habrá que cargar su complemento (3C hex.).
;Dicho intervalo de 50 ms se repite tantas veces como indique la
;variable “Delay_cont”; es por ello que el delay mínimo es de 50 ms
;(“Delay_cont=1) y el máximo de 12.8” (Delay_cont=255).
442 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Delay_var:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x3c ;Complemento hex. de 195
movwf TMR0 ;Carga el TMR0
Intervalo clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0
goto Intervalo ;Todavía no
decfsz Delay_Cont,F ;Decrementa contador de intervalos
goto Delay_var ;Repite el intervalo de 50 ms
return
movlw d’60’
movwf Delay_cont ;Inicia variable de temporización
call Delay_var ;Temporiza 3 segundos
clrf PORTB ;Desconecta las salidas
goto Loop
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
Se puede simular este ejercicio de forma sencilla mediante el MPLAB SIM, aña-
diendo un escenario para la activación de RA0 y una monitorización de la Puerta B.
GENERACIÓN DE NÚMEROS ALEATORIOS 443
CONEXIÓN DE PERIFÉRICOS
EL PROGRAMA EN C
#include <16f84.h>
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#byte port_b = 6
main()
{
int número;
GENERACIÓN DE NÚMEROS ALEATORIOS 445
port_b = 0;
set_tris_a(0x1F);
set_tris_b(0x00);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
while(1)
{
do {
restart_wdt();
} while(!input(PIN_A0));
delay_ms(20);
número = get_rtcc();
do {
restart_wdt();
} while(input(PIN_A0));
delay_ms(20);
port_b = Número;
delay_ms(3000);
port_b = 0;
}
}
o
Manejo de la memoria
EEPROM de datos
9.
TALLER
T9.1. INTRODUCCIÓN
El uso de la memoria EEPROM de datos puede resultar un recurso muy valioso dentro
de las aplicaciones diseñadas para microcontroladores. La característica principal que
hace interesante el uso de este recurso es su no volatilidad. Así, aplicaciones que nece-
siten parametrizarse, guardar un registro de lecturas realizadas en el tiempo, llevar un
número de serie, etc., podrán hacerlo de forma sencilla gracias a esta memoria.
El presente taller utiliza esta memoria que posee el PIC16F84A para grabar mensa-
jes que más adelante se visualizarán por la pantalla LCD.
ENUNCIADO
Este taller pretende construir un generador de mensajes para el LCD. Con RA4 a 1, el
sistema funciona en el modo de programación; en este modo, el mensaje se graba en la
EEPROM de datos. Con RA4 a 0, se trabaja en el modo de reproducción; el mensaje
grabado en la EEPROM se visualiza sobre el LCD.
Cuando el interruptor RA3 está a nivel 1, en la posición actual del cursor del LCD
van apareciendo secuencialmente los distintos caracteres disponibles. Al ponerlo a 0,
se selecciona el carácter actual y se graba en la EEPROM. Al pasar nuevamente a 1, se
selecciona el siguiente carácter.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
447
448 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;El manejo de la pantalla LCD y EEPROM. Un simple generador de mensajes.
;
;Este ejemplo pretende realizar un generador de mensajes para el LCD y
;manejo de la memoria EEPROM. Con RA4 a 1, el sistema está en el modo
;de programación; en este modo, el mensaje se graba en la EEPROM de
;datos. Con RA4 a 0 entramos en el modo de reproducción; el mensaje
;grabado en la EEPROM se visualiza sobre el LCD.
;Cuando el interruptor RA3 está a nivel 1, en la posición actual del
;cursor van apareciendo secuencialmente los distintos caracteres
;disponibles. Al ponerlo a 0, se selecciona el actual y se graba en la
;EEPROM. Al pasar nuevamente a 1, se selecciona el siguiente carácter.
;
;Debe recordarse que las líneas RA0-RA2 actúan ahora como salida de
;señales de control hacia el LCD. Al estar conectadas con sendos
;interruptores en la MicroPIC Trainer, éstos deben estar a nivel lógico
;1 permanentemente.
List p=16F84 ;Tipo de procesador
include “P16F84.INC” ;Definiciones de registros internos
;******************************************************************
;Delay_20_ms: Esta rutina de temporización tiene por objeto eliminar
;el “efecto rebote” de los periféricos electromecánicos. Realiza un
delay de 20 ms. Si el PIC trabaja a una frecuencia de 4 MHz, el TMR0
;evoluciona cada us. Si queremos temporizar 20000 us (20 ms) con un
;preescaler de 128, el TMR0 deberá contar 156 eventos (156 * 128). El
;valor 156 equivale a 9c hex., y como el TMR0 es ascedente, habrá que
;cargar su complemento a 1 (63 hex.).
Delay_20_ms:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x63 ;Complemento hex. de 156
movwf TMR0 ;carga el TMR0
Delay_20_ms_1 clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0
goto Delay_20_ms_1 ;Todavía no
bcf INTCON,T0IF ;Ahora sí, reponer el flag
return
450 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;******************************************************************
;Delay_var: Esta rutina de propósito general realiza una temporización
;variable entre 50 ms y 12.8”. Se emplea un preescaler de 256 y al TMR0
;se le carga con 195. La velocidad de trabajo es de 4 Mhz y, por tanto,
;el TMR0 se incrementa cada us. De esta forma, el TMR0 debe contar 195
;eventos que con un preescaler de 256 hace una intervalo total de 50000
;us/50 ms (195 * 256). El valor 195 hay que expresarlo en hex. (c3), y
;como el TMR0 es ascendente, habrá que cargar su complemento (3C hex.).
;Dicho intervalo de 50 ms se repite tantes veces como indique la
;variable “Delay_cont”; es por ello que el delay mínimo es de 50 ms
;(Delay_cont=1) y el máximo de 12.8” (Delay_cont=255).
Delay_var:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x3c ;Complemento hex. de 195
movwf TMR0 ;Carga el TMR0
Intervalo clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0
goto Intervalo ;Todavía no
decfsz Delay_Cont,F ;Decrementa contador de intervalos
goto Delay_var ;Repite el intervalo de 50 ms
return
;******************************************************************
;EE_Write: Graba un byte en la EEPROM de datos. La dirección será la
;contenida en EEADR y el dato se le supone previamente metido en EEDATA
Reproducir
movlw b’00000001’
call LCD_REG ;Borra LCD y Home
movlw b’00001100’
call LCD_REG ;LCD = ON, cursor = OFF
clrf EEADR ;Dirección inicial EEPROM
452 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Una de las partes del programa más interesante puede estar en las rutinas de gra-
bación de la memoria EEPROM. Dichas instrucciones se encuentran tras la etiqueta
Grabar.
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
Simular este ejercicio resulta complicado debido a la ausencia de la pantalla LCD
en el simulador.
MANEJO DE LA MEMORIA EEPROM DE DATOS 453
CONEXIÓN DE PERIFÉRICOS
Figura T9.3. Fotografía del montaje de la experiencia en la PIC School para el manejo de la EEPROM.
454 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EL PROGRAMA EN C
#use delay(clock=4000000,RESTART_WDT)
#include <lcd2.c>
#use fast_io(A)
#use fast_io(B)
void Programacion()
{
char c=0x20;
int dir=0;
lcd_enviar(LCD_COMANDO, LCD_CLEAR);
lcd_enviar(LCD_COMANDO, LCD_HOME);
lcd_enviar(LCD_COMANDO, LCD_DISPLAY_ON); // Sin cursor
while(input(PIN_A4) && (dir < 16))
{
restart_wdt();
lcd_gotoxy(1,1);
lcd_putc(c);
delay_ms(500);
if(input(PIN_A3))
{
delay_ms(20);
write_eeprom(dir,c);
dir++;
lcd_gotoxy(dir,2);
lcd_putc(c);
MANEJO DE LA MEMORIA EEPROM DE DATOS 455
c = 0x20;
while(input(PIN_A3))
restart_Wdt();;
}
c++;
if(c>0x80)
c=0x20;
}
write_eeprom(dir,0);
}
void Reproducción(void)
{
char c;
int dir = 0;
int i;
lcd_enviar(LCD_COMANDO, LCD_CLEAR);
lcd_enviar(LCD_COMANDO, LCD_HOME);
lcd_enviar(LCD_COMANDO, LCD_DISPLAY_ON); // Sin cursor
c = read_eeprom(dir);
while(c != 0)
{
restart_wdt();
lcd_putc(c);
dir++;
c = read_eeprom(dir);
}
delay_ms(2000);
lcd_enviar(LCD_COMANDO, LCD_DISPLAY_OFF);
delay_ms(250);
}
}
main() {
}
o
Un ejercicio completo.
La máquina de «Su Turno»
10.
TALLER
T10.1. INTRODUCCIÓN
Este taller trata de aglutinar el estudio de la mayor parte de periféricos y dispositivos del
PIC16F84A y su combinación para definir un taller completo.
Así, se plantea realizar una aplicación real como puede ser el de la máquina de Su
Turno, en la que se utilizarán gran parte de periféricos y dispositivos como son la memo-
ria EEPROM, la pantalla LCD, entradas y salidas, temporizadores, contadores, etc.
ENUNCIADO
Se trata de crear un taller que funcione como las máquinas tipo «Su Turno», habituales
en multitud de comercios. Sobre el LCD se visualizará el número del turno actual (dos
dígitos) que se incrementa con cada pulso aplicado por RA4. En la memoria EEPROM
del PIC16F84A se almacena el último número visualizado, de forma que ante un fallo
de alimentación se reanude la cuenta en el último número.
Cuando el sistema se emplea por vez primera, se visualiza 00.
MATERIALES NECESARIOS
• PIC School.
• PIC16F84A.
• Cables de conexión.
457
458 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
;
; Autor: Mikel Etxebarria
; (c) Microsystems Engineering (Bilbao)
;
;La memoria EEPROM de datos y el LCD. La máquina “SU TURNO”, versión
;mejorada.Se trata de emular el funcionamiento de las máquinas tipo “SU
;TURNO” habituales en múltiples comercios. Sobre el LCD se visualizará el
;número del turno actual (2 dígitos). Éste se incrementa a cada pulso
;aplicado por RA4. En la memoria EEPROM del PIC16F84 se almacena el
;último número visualizado, de forma que ante un fallo de alimentación,
;por ejemplo, se reanude la cuenta en el último número.
;Si se parte de que el sistema se emplea por vez primera, se visualiza
;el 00. Debe recordarse que las líneas RA0-RA2 actúan como salida de
;señales de control hacia el LCD. Al estar conectadas con sendos
;interruptores en la MicroPic Trainer, éstos deben estar a nivel lógico
;1 permanentemente.
;******************************************************************
;EE_Write: Graba un byte en la EEPROM de datos. La dirección será la
;contenida en EEADR y el dato se le supone previamente metido en EEDATA
;******************************************************************
;EE_Read: Leer un byte de la EEPROM. Se supone al registro EEADR cargado
;con la dirección a leer. En EEDATA aparecerá el dato leído.
;******************************************************************
;Según el valor contenido en el registro W, se devuelve el carácter
;ASCII a visualizar en el LCD
;********************************************************
;La directiva dt genera tantas instrucciones retlw como bytes o
;caracteres contenga cerrados entre “ ”
;******************************************************************
;Delay_20_ms: Esta rutina de temporización tiene por objeto eliminar el
;“efecto rebote” de los periféricos electromecánicos. Realiza un delay
;de 20 ms. Si el PIC trabaja a una frecuencia de 4 MHz, el TMR0
;evoluciona cada us. Si queremos temporizar 20000 us (20 ms) con un
;preescaler de 128, el TMR0 deberá contar 156 eventos (156 * 128). El
;valor 156 equivale a 9c hex. y como el TMR0 es ascedente habrá que
;cargar su complemento a 1 (63 hex.).
Delay_20_ms:
bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw 0x63 ;Complemento hex. de 156
movwf TMR0 ;carga el TMR0
Delay_20_ms_1 clrwdt ;Refrescar el WDT
btfss INTCON,T0IF ;Rebosamiento del TMR0 ??
goto Delay_20_ms_1 ;Todavía no
bcf INTCON,T0IF ;Ahora sí, reponer el flag
return
;******************************************************************
;Mensaje: Esta rutina visualiza en el LCD el mensaje cuyo inicio está
;indicado en el acumulador. El fin de un mensaje se determina mediante
;el código 0x00
Mensaje movwf Temporal_1 ;Salva posición de la tabla
Mensaje_1 movf Temporal_1,W ;Recupera posición de la tabla
call Tabla_Mensajes ;Busca carácter de salida
movwf Temporal_2 ;Guarda el carácter
movf Temporal_2,F
btfss STATUS,Z ;Mira si es el último
goto No_es_último
return
No_es_último
call LCD_DATO ;Visualiza en el LCD
UN EJERCICIO COMPLETO. LA MÁQUINA DE «SU TURNO» 461
movlw Mens_0
call Mensaje ;Visualiza Mens_0 (Su TURNO es: )
ENSAMBLADO
Mediante la opción Project → Build All se compila el taller y se obtiene, entre otros, el
fichero del programa máquina ejecutable que tiene la extensión .HEX, que se grabará
sobre la PIC School una vez realizadas las conexiones permanentes.
Simular este ejercicio resulta complicado debido a la ausencia de la pantalla LCD
en el simulador.
CONEXIÓN DE PERIFÉRICOS
Figura T10.3. Fotografía del montaje de la experiencia en la PIC School para máquina de «Su Turno».
464 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
EL PROGRAMA EN C
#include <16f84A.h>
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#include <lcd2.c>
int turno;
void Visualizar_Turno()
{
lcd_gotoxy(8,1);
lcd_putc(‘0’+turno/10);
lcd_putc(‘0’+turno%10);
}
main() {
lcd_putc(“Turno: ”);
turno = read_eeprom(0);
if(turno<1 || turno>99)
turno = 1;
Visualizar_Turno();
while(1)
{
restart_wdt();
if(input(PIN_A4))
{
UN EJERCICIO COMPLETO. LA MÁQUINA DE «SU TURNO» 465
delay_ms(20);
turno++;
if(turno > 99)
turno = 1;
write_eeprom(0,turno);
Visualizar_Turno();
while(input(PIN_A4))
restart_wdt();
delay_ms(20);
}
}
}
TERCERA PARTE
Los módulos microcontroladores
BASIC Stamp y el lenguaje PBASIC
CAPÍTULO
469
470 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
habían ideado. Y en 1992, Parallax ofertó a nivel mundial los módulos BASIC Stamp,
que adquirieron tal éxito de ventas que pasaron a erigirse como el producto estrella de
la empresa.
La gran aportación de los módulos BASIC Stamp reside en la conjunción de un
hardware seguro, completo y listo para acoplarle los dispositivos a controlar y un soft-
ware accesible a cualquier técnico al estar basado en el lenguaje más fácil del mundo: el
BASIC. El lenguaje PBASIC es una versión sencilla del BASIC, de pocas instrucciones
y adaptadas a las características de las aplicaciones y del microcontrolador. Al mezclarse
estos dos ingredientes con una política comercial de total información y libre disposición
de manuales, tutoriales y software de manejo, una excelente asistencia técnica y una red
de distribuidores profesionales en todo el mundo, estas herramientas se convierten en
el mejor sistema para iniciarse y desarrollar profesionalmente este apasionante trabajo
del diseño de proyectos con microcontrolador que va a precisar en un futuro cercano la
colaboración de muchos proyectistas.
Por estas razones hemos decidido incorporar en esta edición un par de capítulos
que traten del equipo físico y el sistema lógico de los módulos BASIC Stamp que
aporten una idea clara de las posibilidades de los mismos. Quienes se interesen en pro-
fundizar en el tema sólo deben acudir a los magníficos manuales de prácticas que tanto
en inglés como en castellano pueden recogerse de las páginas en Internet de Parallax
(www.parallaxinc.com) y de sus distribuidores, como Ingeniería de Microsistemas
Programados, S. L., para España (www.microcontroladores.com). Esperamos poder de-
mostrar que manejar estos módulos y confeccionar y ejecutar programas en PBASIC se
puede llevar a cabo sin apenas conocimientos, y por eso, estos capítulos se han insertado
antes de explicar la arquitectura del microcontrolador y su repertorio de instrucciones
máquina, temas que acometeremos más adelante para formar al lector sólidamente y así
permitirle desarrollar proyectos completos utilizando el lenguaje Ensamblador.
char los recursos del microcontrolador. Lo llamaron PBASIC, tiene algo más de una
treintena de instrucciones y se aprende en muy poco tiempo. De esta manera resolvieron
sus problemas de diseño y pensaron que también podía servir para otros colegas, y así,
comercializaron en 1992 los módulos BASIC Stamp.
Los diminutos «sellos» microcontroladores que utilizan el lenguaje PBASIC se co-
mercializan en diversos modelos de diferente velocidad, capacidad de memoria, recursos
y precios (Fig. 14.1).
Parallax dispone de un módulo de poca potencia, que es el BS1-IC, basado en un mi-
crocontrolador PIC16C56 a 4 MHz, lo que permite la ejecución de dos mil instrucciones
PBASIC por segundo. Sólo tiene 16 bytes de RAM y ocho líneas de E/S. La capacidad
de la EEPROM donde se almacenan temporalmente los programas es de 256 bytes, que
admite hasta ochenta instrucciones PBASIC. Sólo soporta treinta y dos comandos de
dicho lenguaje y este módulo puede ser una excelente solución en el control y automati-
zación de productos y sistemas sencillos que exijan prestaciones mínimas.
El siguiente módulo, un poco más avanzado que el anterior, es el BASIC Stamp 2.
Existen dos presentaciones de este módulo. Una se llama BS2-IC, y es un módulo mon-
tado sobre una pequeña PCB con componentes de montaje superficial y la forma de un
circuito integrado DIP (su fotografía se muestra a la izquierda de la Figura 14.2). La otra
versión, OEM BS2-IC, dispone de componentes convencionales y un PCB más grande
con pines para conexión en una tarjeta protoboard, como puede apreciarse a la derecha
de la Figura 14.2. Ambos están basados en el microcontrolador PIC16C57 funcionando
Figura 14.2. El módulo más popular de Parallax en sus dos versiones: BS2-IC y OEM BS2-IC.
472 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
a 20 MHz, lo que permite la ejecución de unas cuatro mil instrucciones PBASIC por
segundo. La capacidad de la EEPROM es de 2 KB con posibilidad de almacenar progra-
mas de hasta quinientas instrucciones. El tamaño de la RAM es de 32 bytes, de los cuales
seis se dedican a E/S y veintiséis para las variables del programa. Soporta un repertorio
de treinta y seis comandos PBASIC y posee dieciséis líneas de E/S. Este módulo se ha
convertido en un estándar de la enseñanza y de la industria y a él, sobre todo en la versión
OEM BS2-IC, nos referiremos principalmente. En esta versión se usan componentes
convencionales sobre una tarjeta de circuito impreso que posibilita la comercialización
en kit y la fácil sustitución de los elementos averiados.
Finalmente, se presenta una tabla que recoge las características más importantes de
los diversos módulos microcontroladores de Parallax.
BS2-IC
Característica BS1-IC BS2e-IC BS2sx-IC BS2p-IC
OEM BS2-IC
Encapsulado PCB de 14 patas SIP 24 patas DIP 24 patas DIP 24 patas DIP 24/40 patas DIP
Temperatura trabajo 0°-70 °C 0°-70 °C 0°-70 °C 0°-70 °C 0°-70 °C
Microcontrolador PIC16C56 PIC16C57 Scenix SX28AC Scenix SX28AC Scenix SX48AC
Frecuencia 4 MHz 20 MHz 20 MHz 50 MHz 20 MHz Turbo
Velocidad ejecución 2.000 4.000 4.000 10.000 12.000
instrucciones/s instrucciones/s instrucciones/s instrucciones/s instrucciones/s
RAM 16 bytes 32 bytes 32 bytes 32 bytes 38 bytes
Scratch Pad RAM N/A N/A 64 bytes 64 bytes 128 bytes
EEPROM 256 bytes- 2 KB-500 8 × 2 KB-4.000 8 × 2 KB-4.000 8 × 2 KB-4.000
80 instrucciones instrucciones instrucciones instrucciones instrucciones
Comandos PBASIC 32 36 39 39 55
Líneas E/S 8 16 + 2 serie 16 + 2 serie 16 + 2 serie 16/32 + 2 serie
Alimentación 5-15VDC 5-15VDC 5-12VDC 5-12VDC 5-12VDC
Figura 14.6. Tabla que muestra las características más importantes de los módulos microcontroladores.
474 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 14.7. Desglose en cinco secciones principales del esquema del OEM BS2-IC.
LOS SELLOS MÁGICOS DE PARALLAX 475
Figura 14. 8. El microcontrolador gobierna todo el funcionamiento del módulo OEM BS2-IC: entrada/
salida de información serie del PC, carga y descarga de la memoria EEPROM y traduc-
ción y ejecución de las instrucciones PBASIC.
Ciñéndonos al módulo OEM BS2-IC, todas las operaciones que realiza están go-
bernadas por el microcontrolador PIC16C57. Se trata de un pequeño computador que
maneja datos de 8 bits y que actúa como el cerebro ejecutor de todas las misiones que se
encomienda al módulo. Las funciones que desarrolla el microcontrolador al ejecutar las
instrucciones de los programas son las siguientes:
1.a Entrada y salida de la información serie que proviene y se dirige al PC.
2.a Carga en la memoria EEPROM del programa PBASIC recibido desde el PC.
3.a Descarga de las instrucciones contenidas en la EEPROM sobre el PIC16C57
para su interpretación y ejecución.
4.a Introducción de información desde los periféricos externos y salida de los resultados
del procesamiento de los programas por las patitas del módulo hacia los periféricos.
La filosofía de un módulo BASIC Stamp comienza con la confección del programa en
PBASIC, mediante un editor apropiado, en el PC. Después, se transfiere dicho programa por
el puerto serie del PC al módulo de Parallax y se almacena completamente en una memoria
EEPROM independiente que dispone dicho módulo. A continuación, las instrucciones guar-
dadas en la EEPROM van dirigiéndose al microcontrolador una a una para ser interpretadas
y ejecutadas. El programa intérprete de PBASIC está grabado en la memoria de código del
PIC junto a otros que se encargan de supervisar la comunicación con el PC y la EEPROM.
se halla averiado; por eso, se ha elegido en esta descripción de carácter docente. Incluso
se puede comprar el módulo en kit y soldar sus componentes para ponerlo en marcha. El
microcontrolador se inserta sobre un zócalo soldado a la PCB y también puede reempla-
zarse rápidamente.
Las líneas de E/S para intercambio de información con el mundo exterior ocupan
veinte patitas. Las cuatro de la Puerta A (RA0-RA3) están destinadas a la recepción
y transmisión de la información serie al PC y a la escritura y lectura de la memoria
EEPROM. Las dieciséis patitas restantes, ocho de la Puerta B y ocho de la Puerta C,
quedan a disposición de los periféricos a gobernar en la aplicación. Dichas líneas están
disponibles en el módulo OEM BS2-IC por las patitas denominadas P0 a P15.
Por las patitas VDD y VSS se recibe la tensión de alimentación, que puede estar com-
prendida entre +2,5 y +5,5 VDC y que en el módulo de prácticas se usa +5 VDC, obte-
nida de la salida del regulador de tensión.
Los terminales de un resonador cerámico que oscila a 20 MHz se aplican a las pati-
tas OSC1 y OSC2 para conseguir que el microcontrolador funcione a dicha frecuencia.
Hay dos patitas que no se conectan (NC). La patita RTCC se usa para controlar los
tiempos del temporizador TMR0 mediante la frecuencia externa introducida por esta pa-
tita; como en el módulo 0EM BS2-IC no se emplea esta posibilidad, se conecta a tierra.
Finalmente, la patita MCLR# (#: señal activa con nivel bajo) sirve para producir un reset
o reinicialización del programa cuando se produce un flanco descendente.
Figura 14.11. Pueden existir 128 dispositivos conectados al bus I2C y en todo momento hay uno que
actúa como maestro.
Figura 14.12. Como en el módulo OEM BS2-IC sólo se emplea un circuito integrado como memoria
EEPROM, las tres líneas de dirección (A0-A2) se conectan a tierra.
la dirección para poder colocar varios circuitos integrados iguales en el sistema, respon-
diendo cada uno a una dirección distinta. En el caso de la memoria 24LC16B, tiene sin
definir las tres líneas de menos peso de la dirección (A0-A2), cuyo valor debe determinar
el usuario por hardware, enviando las patitas correspondientes a tierra o a VDD. En el mó-
dulo OEM BS2-IC, como sólo se utiliza un circuito integrado EEPROM, las tres líneas
de la dirección se mandan a tierra.
La patita WP (protección contra escritura) si se conecta a la tensión positiva VDD
(+5 V) no se puede escribir la EEPROM y funciona como una memoria ROM de sólo
lectura. En el módulo OEM BS2-IC se deben escribir constantemente nuevos programas
y por eso dicha patita se conecta a tierra.
implementan los niveles lógicos con +12 y –12 VDC a niveles TTL (+5 y 0 VDC), con
los que trabaja el PIC16C57.
Las patitas RA2 y RA3 del microcontrolador se encargan de manejar la información
serie que entra y sale por el circuito transistorizado desde o hacia el PC. Las instruc-
ciones PBASIC recibidas desde el PC las carga el microcontrolador en la EEPROM
enviándolas por la línea SDA del bus I2C. RA0 y RA1 soportan las dos líneas del bus
I2C en el PIC.
Las cuatro patitas de la Puerta A del PIC16C57, RA0-RA3, se destinan a soportar la
comunicación del módulo con el PC y con la memoria EEPROM.
Figura 14.14. El regulador proporciona una tensión de + 5 VDC por Vdd cuando se aplica por su patita
Vin una tensión comprendida entre + 5,5 y + 15 VDC.
da VOUT se obtiene una tensión Vdd de + 5 VDC regulada que se emplea para alimentar
los circuitos electrónicos del módulo y también se pone a disposición de los periféricos
externos por la patita 20 del módulo.
Cuando se disponga de una fuente de alimentación que proporcione los +5 VDC
precisos se puede eliminar la intervención del regulador LM2940-5.0, evitando el calor
que disipa. De esta manera no se introduce nada por Vin y se aplican los +5 VDC de la
fuente por la patita 20 del módulo (Vdd).
Figura 14.15. Distribución y denominación de las veinte patitas de conexión del módulo OEM BS2-IC.
482 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 14.16. Las dieciséis patitas P0-P15 del módulo OEM BS2-IC se corresponden con las líneas de
E/S de las Puertas B y C del PIC16C57.
se pueden aplicar entre Vdd y GND, dejando sin conectar Vin para alimentar al circuito
electrónico sin funcionar el regulador.
La patita 17 del módulo, denominada MCLR#, se usa para reinicializar el programa
cuando desde el exterior se aplica un nivel bajo.
El módulo OEM BS2-IC dispone de dieciséis patitas para E/S de información que
se denominan P0-P15 y sirven para conectar los periféricos que se desean controlar. En
realidad, el PIC16C57 que soporta el módulo tiene veinte líneas de E/S que se agrupan en
tres grupos, que reciben el nombre de Puertas A, B y C. La Puerta A consta de cuatro lí-
neas (RA0-RA3) que se utilizan para la recepción y transmisión de información serie con
el PC y para realizar la transferencia con la memoria EEPROM que almacena el progra-
ma PBASIC. Cada una de las Puertas B y C posee ocho líneas de E/S (RB0-RB7 y RC0-
RC7) que son las que quedan disponibles para el usuario en el módulo de Parallax.
Las líneas digitales de E/S del microcontrolador son configurables por software y
pueden actuar como entrada o salida. Incluso a lo largo de una aplicación pueden cam-
biar su actuación si lo permiten los periféricos a los que controla.
Figura 14.17. La máxima corriente absorbida cuando el interruptor está abierto es de 0,5 mA y se puede
llegar a un máximo de 25 mA.
Figura 14.18. La corriente máxima suministrada desde la patita del PIC16C57 es en este caso 17 mA.
Cada línea de E/S puede suministrar un máximo de 20 mA.
Este programa se entiende sólo. Se introduce por el teclado, en primer lugar, el valor
de la variable a; después, se introduce por el mismo procedimiento el valor de b, y final-
mente, se visualiza el resultado de la operación a + b. Consiste en una sucesión ordenada
de las instrucciones que debe ejecutar el computador para ir procesando los datos hasta
alcanzar el resultado deseado.
El lenguaje BASIC fue desarrollado en 1960 por J. Kemeny y T. Kurtz con la finali-
dad de simplificar la programación.
485
486 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Las grandes ventajas del lenguaje BASIC desgraciadamente están acompañadas por
algunos defectos que suelen empujar a los programadores profesionales a repudiarlo.
Como mayor defecto, se dice que es un lenguaje «no estructurado» o «no procedural»,
de lo cual la mayor culpa la tiene la instrucción GOTO, que es capaz de desviar el flujo
de la ejecución de instrucciones a cualquier parte del programa impidiendo la posibili-
dad de dividir la tarea en trozos pequeños e independientes.
Las normas puristas de la programación proponen la confección del software en
base a un pequeño «programa principal» que se compone de llamadas a rutinas y pro-
cedimientos autónomos e independientes en los que se descompone la tarea a resolver.
Para implementar esta estructura es necesario poder salir con facilidad del programa
principal a las rutinas traspasando algunos parámetros, así como también poder regre-
sar a dicho programa principal desde la rutina trayendo resultados obtenidos en esta
última. El lenguaje BASIC no soporta completamente estas estructuras en los progra-
mas.
El lenguaje Ensamblador se dice que es de bajo nivel porque sus instrucciones son
exactamente las que el procesador sabe interpretar y ejecutar. En realidad, el computador
digital sólo acepta instrucciones en código binario y el ensamblador facilita su escritura
al programador permitiendo expresarlas mediante «nemónicos», que son tres o cuatro
letras significativas que referencian, en inglés, la operación que conlleva la instrucción.
Por ejemplo, una instrucción que «mueve» un dato de un sitio (A) a otro (B), en Ensam-
blador, se escribe MOV A,B.
El problema surge en el ensamblador por la poca potencia de las instrucciones que
es capaz de ejecutar el procesador. Normalmente, las correspondientes a los microcon-
troladores de 8 bits que manejamos en este libro consisten en sumar, restar, hacer ope-
raciones lógicas AND, OR, XOR, también rotar un dato de 8 bits, moverlo de un sitio a
PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO 487
otro y muy poquito más. Si deseamos hacer una multiplicación hay que confeccionar un
programa que para conseguirlo repita las sumas las veces necesarias. Es un lenguaje de
«bajo nivel». El programa Ensamblador lo único que hace es traducir los nemónicos con
los que se escriben las instrucciones a código binario para que el procesador sea capaz
de interpretarlas y ejecutarlas.
Los lenguajes de «alto nivel» tienen instrucciones más potentes: saben multiplicar,
sacar la raíz cuadrada y realizar funciones y operaciones mucho más complicadas que las
que pueden hacer las instrucciones de la máquina. Pero como la máquina es la misma,
la realización de esas instrucciones se tiene que hacer con programas de instrucciones
elementales. Cada instrucción de alto nivel se convierte en un programita de instruccio-
nes de bajo nivel. Por eso, para que el procesador pueda ejecutar las instrucciones de un
lenguaje de alto nivel, precisa otro programa que las descomponga en las instrucciones
de bajo nivel, correspondientes. A estos programas se les llama compiladores. Los
compiladores se encargan de traducir un programa confeccionado con instrucciones de
alto nivel a otro equivalente con instrucciones de bajo nivel. Hay una variante de estos
programas, que reciben el nombre de intérpretes, que realizan dicha traducción, pero
instrucción por instrucción, o sea, traducen una instrucción de alto nivel en las corres-
pondientes de bajo nivel que ejecuta el procesador y a continuación pasan a la siguiente.
El microcontrolador de los módulos BASIC Stamp contiene en su memoria de programa
un intérprete de PBASIC.
Desarrollar programas en lenguaje Ensamblador exige un conocimiento profundo
de la arquitectura interna del procesador, lo que requiere una buena base en electrónica,
así como formación en informática. Las instrucciones de bajo nivel realizan operaciones
directamente con los elementos existentes en el interior del procesador.
El lenguaje C es de tipo profesional, muy completo y potente, pero su manejo exige
una buena formación en informática. También es muy conveniente conocer la arquitec-
tura interna del procesador y en muchas ocasiones hay que combinarlo con el lenguaje
Ensamblador.
El lenguaje BASIC tiene potentes instrucciones que se escriben igual que se deno-
minan en inglés y su manejo no requiere conocimientos de arquitectura de procesadores,
de electrónica y tampoco de informática. Es para todos. ¿Entiende este programa dise-
ñado para calcular el área de un círculo introduciendo el radio?
Símbolo Operación
+ Suma
- Resta
* Multiplicación
** Multiplicación (devuelve más 16 bits)
/ División
// División (devuelve el resto)
MIN Limita el valor más bajo
MAX Limita el valor más alto
DIGIT Retorna el dígito especificado de un número
<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits hacia la derecha
REV Inverso de los bits del número especificado
& AND
| OR
^ XOR
Figura 15.2. Tabla con los símbolos para expresar las operaciones aritméticas y lógicas del lenguaje
PBASIC.
490 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 15.3. Tabla con la distribución de las primeras posiciones de la memoria de datos del procesador. Las
tres primeras están reservadas y pueden manejarse con tamaño palabra, byte, nibble y bit.
de los pines de E/S cuando son entrada; pines de salida OUTS, registro que contiene la
información a sacar por los pines que actúan como salida, y bits de direccionamiento
de los pines DIRS. Si a un bit de este último registro se carga con un 0, el pin correspon-
diente queda configurado como entrada, mientras que si se carga con un 1, actúa como
salida. Las trece siguientes palabras (W0-W12) que pueden utilizarse en tamaño byte
(B0-B25) están disponibles para guardar variables y datos del usuario en los programas
(véase la tabla de la Figura 15.3 en la que se expresa esta distribución de la memoria).
El módulo BS2-IC tiene dieciséis pines de entrada y salida disponibles para el usua-
rio en donde se pueden colocar los periféricos a controlar. Para configurar a los dieciséis
pines como salida hay que escribir en el programa: DIRS = %1111111111111111.
INPUT
Configura como entrada al pin que se especifica. Ejemplo, INPUT 4.
OUTPUT
Configura como salida al pin que indica la instrucción.
REVERSE
Invierte la configuración del pin especificado. Si era salida, lo hace entrada, y viceversa.
LOW
Configura al pin indicado como salida con nivel bajo. Ejemplo, LOW 4.
HIGH
Configura al pin especificado como salida con nivel alto.
TOGGLE
Invierte el estado del pin que se especifica.
PULSIN
Mide el tiempo de un pulso de entrada con resolución de 2 microsegundos y con un tiempo
máximo de 0,13107 segundos.
PULSOUT
Genera un pulso de salida por el pin especificado en la instrucción con la duración que se
indica en una constante y se expresa en unidades de 2 microsegundos.
BUTTON
Elimina los rebotes que se producen por la apertura y cierre de interruptores.
COUNT
Cuenta el número de ciclos en un pin especificado por un período de milisegundos, guar-
dando dicho valor en una variable resultado.
492 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
XOUT
Genera los códigos de control necesarios para dispositivos que usan la comunicación X-10,
como los dispositivos TW523 y TW513 de Parallax.
SHIFTIN
Los bits en serie que se reciben por un pin los convierte a formato paralelo y los guarda en
una variable resultado.
SHIFTOUT
El valor de una expresión de datos la envía al exterior en serie por el pin que se especifica
en la instrucción.
Instrucciones de salto
IF...THEN
Analiza una condición, y si se cumple, bifurca el programa a la instrucción que se especifica por
una etiqueta. Si no se cumple, se pasa a la siguiente instrucción. Ejemplo, IF A=5 THEN INICIO.
BRANCH
Bifurca el flujo de control a la instrucción que se determina mediante una etiqueta. Puede
manejar varias etiquetas y un indicador que elige la deseada.
GOTO
Salta a la dirección indicada por una etiqueta.
GOSUB
Almacena la dirección de la siguiente instrucción y salta a la instrucción especificada por la
etiqueta que contiene la instrucción, que es el inicio de una subrutina.
RETURN
Retorno de subrutina. Esta instrucción se coloca al final de una subrutina y su ejecución
provoca un salto a la dirección almacenada en el GOSUB más reciente.
FOR...NEXT
Repite un bucle de instrucciones comprendidas entre FOR y NEXT cambiando cada vez el
valor de una variable hasta que alcanza el valor final.
Instrucciones numéricas
LOOKUP
Busca un dato especificado por un índice y lo guarda en una variable.
LOOKDOWN
Compara un valor con los de una lista, y si lo encuentra, almacena el índice en una variable.
RANDOM
Sirve para generar un número seudoaleatorio imprevisto.
PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO 493
I2CIN
Entrada de datos serie en comunicación I2C.
I2COUT
Salida de datos en serie en comunicación I2C.
SERIN
Sirve para recibir datos en serie en formato RS232-C. Para BS1, se permiten frecuencias
de 300, 600, 1.200 y 2.400 baudios, y para BS2, cualquiera hasta 50 K baudios.
SEROUT
Envía datos en serie en formato RS232-C a las mismas frecuencias indicadas para la
instrucción SERIN.
PWM
Por un pin se genera impulsos de anchura variable y luego pasa el pin a entrada. También
puede emplearse para generar tensiones analógicas entre 0 y 5 V mediante una resisten-
cia y un condensador.
RCTIME
Mide el tiempo de carga o descarga de un conjunto R-C. Se puede emplear para medir el
valor de potenciómetros.
PAUSE
Cuando se ejecuta, produce una pausa de tiempo que puede alcanzar los 65.536 segundos.
FREQOUT
Genera una o dos ondas senoidales de las frecuencias que se indiquen comprendidas
entre 0 y 32.767 Hz.
DTMFOUT
Sirve para generar pulsos o tonos telefónicos DTFM.
494 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
NAP
Sirve para reducir el consumo de energía haciendo descansar al sistema cortos períodos
de tiempo.
SLEEP
Pasa al modo de reposo al microcontrolador durante un período comprendido entre 1 y
65.536 segundos. El consumo se reduce a 50 microsegundos.
END
Se reduce el consumo de energía hasta que se interrumpa o se reinicie la alimentación al PC.
DATA
Almacena datos en la EEPROM antes de la descarga del programa PBASIC.
READ
Lee un byte de la EEPROM y lo deposita en una variable.
WRITE
Escribe un byte de una variable en una posición de la EEPROM.
DEBUG
Sirve para enviar desde el módulo BASIC Stamp el valor de variables y estados del mismo
a la pantalla del PC para visualizarlos y conocerlos. Se utiliza para labores de depuración.
1.a Las líneas P0 a P15 y la línea RES disponen de espadines para conexionado
horizontal que sitúa al módulo paralelo a la protoboard del entrenador en lugar
de vertical. De esta forma, se leen mejor los pines y se puede cerrar la tapa del
maletín con el circuito montado.
2.a Para diferenciar y facilitar la conexión de la alimentación, las patitas Vin, Vss y
VDD disponen espadines verticales sobre la tarjeta PCB.
Figura 15.5. La tensión estabilizada de la fuente del entrenador Universal Trainer se aplica a la salida
del regulador (VDD) evitando el funcionamiento del LM2940.
496 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 15.6. Detalle del conexionado del módulo OEM BS2-IC con el puerto serie del PC.
3.a Se proporciona un conector para los tres espadines de alimentación, que dispone
de dos cables: uno rojo, que va a VDD, y otro negro, que va a Vss. El espadín
Vin queda sin conexión. El cable rojo hay que conectarlo al terminal +5 V de la
fuente de alimentación regulada del entrenador. El cable negro se conecta a la
GND de dicha fuente del Universal Trainer. Cuando se dispone de una fuente
estabilizada de +5 VDC se evita el funcionamiento del regulador LM2940 del
módulo OEM BS2-IC y su calentamiento, ya que al disponer de tensión de +5 V
estabilizada en el entrenador se aplica directamente a VDD, como se aprecia en el
esquema de la Figura 15.5.
La adaptación del módulo OEM BS2-IC con la puerta serie del PC se realiza con un
cable con dos conectores DB9 en sus extremos que tienen cortocircuitados los termina-
les 6 y 7 para la detección automática del puerto usado (véase la Figura 15.6).
Figura 15.8. Fotografía del módulo BS2-IC/MSE insertado en la placa protoboard del laboratorio Uni-
versal Trainer y conectado a la fuente de alimentación del mismo.
498 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
Figura 15.9. Esquemas eléctricos de conexionado del zumbador y el led en el Universal Trainer.
HIGH pin: Configura como salida al pin especificado y saca un nivel alto por él.
LOW pin: Configura como salida al pin especificado y saca un nivel bajo por él.
PAUSE valor: Retardo o pausa de un tiempo en milisegundos indicado en valor.
DEBUG xxx: Visualiza en la pantalla del depurador el valor indicado en xxx.
Figura 15.10. Esquema de conexionado de las patitas del módulo OEM BS2-IcMSE con los terminales
de los periféricos y los de la fuente de alimentación.
Una vez editado el programa, conecte el PC al módulo OEM BS2-IC, que ya es-
tará conexionado con los cables a la fuente y a los periféricos, y conecte la energía al
Universal Trainer. Ejecute el programa y si todo sale bien, se enciende dos segundos el
led y luego pita durante 3 segundos el zumbador. Además, en la pantalla del depurador
aparece el mensaje ILUMINA cuando está encendido el led y el mensaje PITA cuando
el zumbador suena. Pero todos estos mensajes y el primero de LUZ Y SONIDO salen
todos seguidos de la siguiente forma:
LUZ Y SONIDOILUMINAPITAILUMINAPITAILUMINAPITAILUMINA...
Si todo le sale bien, cambie los retardos y procure modificar el programa para obte-
ner diferentes resultados. Si tiene problemas, ¡enhorabuena! Va a aprender mucho más y
debe ser capaz de alcanzar los objetivos marcados. Pero recuerde, no está solo: Ingeniería
de Microsistemas Programados, S. L., y Parallax le pueden ayudar (www.microcontrola-
dores.com).
15.6.1. Objetivos
Figura 15.12. Esquema de conexionado del interruptor en la tarjeta de control en el Universal Trainer.
PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO 503
— IN0: La patita o pin 0 del módulo queda asignada como entrada digital.
— IF <condición> THEN <etiqueta>: Si se cumple la condición, se pasa a ejecu-
tar la instrucción de la etiqueta, y si no se cumple, se ejecuta la siguiente.
— GOSUB <etiqueta>: Se salta a una subrutina que comienza en la instrucción
de la etiqueta.
— RETURN: Es una instrucción que se pone al final de una subrutina y que
devuelve el control de la ejecución a la siguiente instrucción después de
GOSUB.
— x VAR bit: No es una instrucción PBASIC, sino un comando del editor para
indicar que la variable x tiene el tamaño de 1 bit.
Figura 15.13. Conexionado de las patitas del módulo microcontrolador con los periféricos residentes en
el entrenador Universal Trainer.
Una gran parte del programa de este ejercicio lo ocupaban las instrucciones de la subru-
tina «pit», que hacía generar un pitido interminente de 400 ms de duración durante dos
segundos. Todavía esta subrutina sería mucho más larga si la intermitencia del pitido
fuese cada 250 ms. Se pide rehacer la subrutina de pitido para confeccionarla con el
mínimo número de instrucciones y con una intermitencia de 250 ms.
15.7.1. Objetivos
Implementar un contador binario de 8 bits en base a ocho diodos led conectados a las
ocho líneas de salida de menos peso que soportan los pines P0-P7 del módulo OEM
BS2-IC/MSE. Poner en marcha el contador al pulsar brevemente un pulsador y al cabo
del contaje desde 0 a 255 cada 100 ms activar el zumbador de alarma.
Aprender a manejar las variables OUTL y DIRL. Aplicar la instrucción FOR...NEXT
para repetir un bucle de instrucciones un número conocido de veces.
506 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
— LED VAR OUTL: Asigna el nombre LED a los elementos conectados a las
ocho líneas de menos peso de las líneas de salida OUTL.
— DIRL = %11111111: Configura como salidas las ocho líneas de menos peso
(P0-P7) de la puerta de E/S.
— FOR CONTA = 0 TO 255...NEXT: Realiza una serie de instrucciones que for-
man un bucle un número de veces determinado por la transición de la variable
(CONTA) desde el valor 0 hasta el 255. Cada vez que ejecuta el bucle incrementa
una unidad la variable.
— LED = CONTA: Los ocho leds conectados a las patitas P0-P7 toman el valor
binario de la variable CONTA cada vez que se realiza el bucle y visualizando el
número binario correspondiente.
Figura 15.16. Conexionado de las patitas del módulo microcontrolador con los periféricos residentes en
el entrenador Universal Trainer.
508 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
ORGANIZACIÓN
E1 contenido del CD se encuentra dividido en cuatro partes principales, cada una de las
cuales consta de varias carpetas, como se expone a continuación.
Esta carpeta contiene los ficheros fuente en lenguaje Ensamblador de las doce aplicacio-
nes prácticas desarrolladas en la primera parte del libro dedicada al PIC12F508.
12F508C
Contiene los programas fuente en lenguaje C de las doce aplicaciones para el
PIC12F508.
511
512 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES
16F84ASM
Contiene el código fuente en lenguaje Ensamblador de los diez talleres prácticos para el
PIC16F84A.
16F84AC
En esta carpeta se hallan guardados los programas fuente en lenguaje correspondientes
a los diez talleres prácticos con el PIC16F84A.
Tercera. Apéndices
A) Guía rápida del PIC12F508.
B) Guía rápida del PIC16F84A.
C) Proyecto de un pastillero, un vídeo de demostración, así como el códec necesario
para la correcta visualización del mismo.
D) La familia PIC al completo. Presentación de los modelos de microcontroladores
de la familia PIC de Microchip.
E) Contenido del CD.
F) Proyectos con el PIC16F84A y su solución, clasificados según el nivel de difi-
cultad.
Cuarta. Documentación
En esta sección se encuentra una interesante documentación técnica sobre algunos
periféricos utilizados en las experiencias de la obra. En concreto, se hace referencia al
adaptador serie a LCD modelo SYM20AA, al módulo transceptor de radiofrecuencia
TX SAW 433 y al receptor inalámbrico BC NBK.
BIBLIOGRAFÍA Y DIRECCIONES
DE INTERÉS RELACIONADAS
CON LOS PIC
LIBROS
MICROCONTROLADORES PIC. Diseño Práctico de Aplicaciones
Segunda parte: PIC16F87X, segunda edición
ANGULO, J. M.; ROMERO, S., y ANGULO, I.
Editorial McGraw-Hill
dsPIC. Diseño Práctico de Aplicaciones
ANGULO, J. M.; ETXEBARRIA, A.; ANGULO, I., y TRUEBA, I.
Editorial McGraw-Hill
LABORATORIO DE PRÁCTICAS DE MICROELECTRÓNICA, vols. I y II
ANGULO, J. M.
Editorial McGraw-Hill
REVISTAS
Revista Española de Electrónica (Ediciones REDE)
Elektor (Edita Larpress, S. A.)
Servo
Electronics
Circuit Cellar
Electronique Practique
Resistor
PC Hardware
Todo Electrónica
513
514 BIBLIOGRAFÍA
EMPRESAS
MICROCHIP TECHNOLOGY, INC.
2355 West Chandler Blv., Chandler, AZ 85224-6199, EE. UU.
Teléfono 602 786 7200
PARALLAX, INC.
599 Menlo Drive #100, Rockun, CA 95678, EE. UU.
Téfono 916/624 8333
INGENIERÍA DE MICROSISTEMAS PROGRAMADOS, S. L.
Alda Mazarredo, 47, 1.o, 48009 Bilbao (Spain)
Teléfono/Fax 94-4230651
INTERNET
MICROCHIP (http://www.microchip.com)
INGENIERÍA DE MICROSISTEMAS PROGRAMADOS, S. L.
(http://www.microcontroladores.com)
PARALLAX, INC. (http://www.parallaxinc.com y www.parallax.com)
ITU TECHNOLOGIES (http://www.itutech.com)
SAGITRON (http://www.sagitron.es)
UNIVERSIDAD DE DEUSTO (http://www.deusto.es)
ÍNDICE ANALÍTICO
515
516 ÍNDICE ANALÍTICO
Frecuencias, 279 I
FREQOUT, 493
FSK, 279 I2C, 219, 245
FSR, 52, 55, 57, 314 I2CIN, 493
Fuente de alimentación, 125 I2CLOW.INC, 249
Full Duplex, 220 I2COUT, 493
ICD-2, 108
G ICD2, 27, 139
ICE 400, 108
G:\16f84A\EJEMPLO_0, 392 ICEPIC-Jnr, 375
Gama IcProg, 140
básica, 28, 39, 81 ICSP, 139
media, 31, 305, 365 ICSPDAT, 44
mejorada, 33 ICSPTM, 77
Generador ID, 77, 143, 331
de onda cuadrada, 202 Identificación, 77
de pulsos, 202 IF…THEN, 492, 503
lógico, 129, 195 ILUMINA, 501
GIE, 337, 338 IN0, 503
Global, 338 INCF f, d. 94, 359, 365
GOSUB, 492, 503 INCFSZ f, d, 94, 361, 365
GOTO k, 93, 364, 366 Include P12F508.INC, 152
GOTO, 51, 84, 309, 486, 492 INDE, 313
GP0, 67 INDF, 54, 314
GP0/ICSPDAT, 78 Ingeniería de Microsistemas Programados,
GP0-GP5, 149 109, 119, 121, 147, 301, 373, 470, 494,
GP1, 44 514
GP1, 67 Inicio, 247
GP1/ICSPCLK, 78 Inmediato, 362
GP2/T0CKI. 67 INPUT, 491
GP3, 67 INS, 490
GP5-GP0, 57 Instrucciones, 365, 491
GPIO, 47, 57, 66, 67, 149 INTCON, 313, 328, 337
GPO, 44 INTDEG, 340
GPPU#, 71 INTE, 338, 340
GPR, 47, 52, 53, 312 INTEDG, 323
GPWUF, 55 Inter Integrated Circuit, 245
Grabación, 348 Intermitente, 181
Grabador, 371 Intérpretes, 487
Grabadores, 14 Interrupción, 336
Interrupciones, 335
H INTF, 340
INTRC, 63
Half Duplex, 220 INTRC, 77
Halt, 116 IORLW k, 95, 362, 365
Hardware, 17 IORWF f, d, 95, 359, 365
Harvard, 13, 24, 25, 305 IPCSPCLK, 44
HEX, 107 IRP, 314, 316
HIGH pin, 499
HIGH, 491 J
http://perso.wanadoo.es/siscobf/winpic800.
htm, 140 J. Kemeny, 485
HyperTerminal, 222, 425 Jumper
JP2, 126
ÍNDICE ANALÍTICO 519
Macros, 240 N
Maestro, 248
MANCHESTER.INC, 283 NAP, 494
Matriz, 242 NCALL Destino, 240
MAX-232, 135 NMOS, 327
McGraw-Hill, 494, 498, 513 Nomenclatura, 82, 356
MCLR#, 44, 76, 294, 299, 343, 346, 347 NOP, 96, 359, 365
MCLR#/Vpp, 78 NTC, 259, 272
MCLRE, 77
MCU, 34 O
Memoria, 11
de configuración, 142 OEM
de datos, 15, 52, 57, 311 BS2-IC, 471, 474, 476, 479, 496
de programa, 13, 49, 57, 308 BS2-IC/MSE, 494
Mensaje, 239 One Wire 473
Micro PIC OPCODE, 83
Programmer, 371 Operandos, 352
Trainer, 22, 303, 372, 374 OPTION, 47, 70, 97, 190, 313, 320, 322,
Microchip MPASM Toolsuite, 112, 389 340
Microchip, 6,17, 19, 371, 512, 514 Org 0x00, 115
520 ÍNDICE ANALÍTICO
Organigrama, 154, 191, 368, 390, 398, 406, 426 PIC12F509, 41, 44
OSC1, 44 PIC12F510, 41
OSC1/CLKIN, 294 PIC14000, 32
OSC2, 44 PIC16C, 32
OSC2/CLKOUT, 294 PIC16C54, 378
OSCCAL, 50, 56, 65 PIC16C56, 471
Oscilador, 126 PIC16C57, 471, 475
externo, 64 PIC16C5X, 31, 40
externo RC, 64 PIC16CR57, 476
HS, 330 PIC16F, 32
interno, 64, 65 PIC16F505, 44, 59
LP, 330 PIC16F5X, 31
RC, 330 PIC16F5XX, 40
tipo HS 298 PIC16F83, 10
tipo LP, 298 PIC16F84A, 293, 300, 307, 389, 512
tipo RC, 297 PIC16F87X, 513
tipo XT, 298 PIC16HV540, 40
XT, 330 PIC16X8X, 295
Osciloscopio, 200 PIC18-ME, 303, 384
OTP, 14 PIC24F, 35
OUTPUT, 491 PIC24H, 35
OUTS, 491 Pil, 47
Pila, 50
P PITA, 501
Píxeles, 242
PA0, 55 PLOMO, 28
Página, 55 PMOS, 327
Palabra de Configuración, 67, 76, 152, 324, POR, 80, 343
330, 331 PORTB, 58, 67
Parallax, 370, 469, 470, 473, 514 PORTC, 58
Pastillero, 38, 512 Postdivisor, 321
inteligente, 38 Potenciómetro, 271
PAUSE, 493 Power Down, 316
valor, 499 Power-up, 330
PBASIC, 105, 470, 491 Practica1.ASM, 156
PC, 50, 51, 308, 309, 480 Practica1.HEX, 156
PCF854A, 249 Practica2.ASM, 168
PCF8574A, 245, 246, 251 Practica2.HEX, 169
PCL, 55 Preámbulo, 282
PCLATH, 310, 313 Predivisión, 321
PD#, 56, 316, 345 Predivisor de frecuencia, 69
Pentium, 11 Procesador, 12
Periféricos, 408, 429 Programa 0.ASM, 113
Permiso de interrupción, 338 Programa
Perro Guardián, 47, 65, 71, 72, 152, 205, 316, ejecutable, 107
320, 321, 324, 343, 345, 405 fuente, 106
Philips, 245 Project Wizard, 111
PIC Burner, 109 Protección del código, 77
PIC School, 110, 121, 122, 157, 201, 238, Prototipos, 301
275, 289, 400, 444 Proyecto, 105, 110, 389
PIC, 21, 23, 110 PROYECTO_0.mcp, 114
PIC10F, 29 PROYECTO3.HEX, 186
PIC12F, 29, 30, 32 PROYECTO3.MCW. 186
PIC12F508, 37, 41, 46, 50, 149, 511, 512 PS0, 69, 323
ÍNDICE ANALÍTICO 521
T U
W X