Microcontroladores PIC Diseño Práctico de Aplicaciones Primera Parte PIC12F508 y PIC16F84A Lenguajes Ensamblador, C y PBASIC 4 ed Jose Angulo

July 18, 2018 | Author: Jordan Andres Segovia Solis | Category: Pic Microcontroller, Microcontroller, Microprocessor, Computer Data Storage, Computer Program
Share Embed Donate


Short Description

Descripción: Los microcontroladores están invadiendo el mundo. Están presentes en nuestra casa, en nuestro trabajo y en ...

Description

MICROCONTROLADORES «PIC» DISEÑO PRÁCTICO DE APLICACIONES 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 JOSÉ MARÍA ANGULO USATEGUI Doctor Ingeniero Industrial Catedrático de Arquitectura de Computadores en la Universidad de Deusto

IGNACIO ANGULO MARTÍNEZ Licenciado en Informática Profesor del Departamento de Arquitectura de Computadores en la Universidad de Deusto

ARITZA ETXEBARRIA RUIZ Licenciado en Informática Jefe del Departamento de Informática Colegio Vizcaya

MADRID • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA • MÉXICO NUEVA YORK • P ANAMÁ • SAN JUAN • SANTIAGO • SÃO PAULO AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARÍS SAN FRANCISCO • SIDNEY • SINGAPUR • SAN LUIS • TOKIO • TORONTO

MARCAS REGISTRADAS: El nombre y logo de Microchip, dsPIC, PIC, PICmicro, PICSTART, PICMASTER, PRO MATE y MPLAB son marcas registradas por Microchip Technology Incorporated en Estados Unidos y otros países. DsPICDEM, dsPIC.net, ICSP: In-Circuit Serial Programming (Programación Serie en Circuito), ICEPIC, MPASM, MPLIB, MPLINK, MPSIM, PICC, PICkit, PICDEM, PICDEM.net, rfLAB y rfPIC son marcas registradas por Microchip Technology Incorporated en Estados Unidos y otros países. SQTP (Serialized Quick Turn Programming) es una marca de servicio de Microchip Technology Incorporated en Estados Unidos. Determinados materiales e informaciones contenidos en esta obra han sido reproducidos con el permiso de Microchip Technology Incorporated. No se pueden reproducir ni reeditar dichos materiales sin el previo consentimiento escrito de Microchip Technology Incorporated. BASIC Stamp, Home Work Board y el logo de Parallax son marcas registradas por Parallax, Inc. Las restantes marcas, logos y productos mencionados en este libro están registrados por sus respectivos propietarios. El software contenido en el CD destinado a la edición, compilación, simulación y depuración de programas son propiedad de sus respectivos fabricantes: Microchip Technology, Inc.; Parallax, Inc., e Ingeniería de Microsistemas Programados, S.L.

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 transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito de los titulares del Copyright.

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 [email protected] 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: IMPRESO EN ESPAÑA - PRINTED IN SPAIN

CONTENIDO

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

vii

PRIMERA PARTE. La gama básica: el humilde PIC12F508 ........................

1

TEORÍA Capítulo 1. Capítulo 2. Capítulo 3. Capítulo 4. Capítulo 5. Capítulo 6. Capítulo 7.

Microcontrolador: la solución está en un chip .............................. Los PIC, una familia numerosa ..................................................... El más humilde de la gama básica: PIC12F508 ............................ Las memorias ................................................................................ Recursos y periféricos principales................................................. Recursos auxiliares........................................................................ El repertorio de instrucciones........................................................

3 21 37 49 61 75 81

APLICACIONES PRÁCTICAS 1.a aplicación. Simulando los primeros programas con el MPLAB y el MPLAB SIM ........................................................................................................... 2.a aplicación. Herramientas para la grabación, implementación y depuración: PIC School y WinPic800 .............................................................................. 3.a aplicación. Las primeras experiencias....................................................... 4.a aplicación. Manejando el tercer estado en las E/S ....................................... 5.a aplicación. Controlando el tiempo con software ...................................... 6.a aplicación. Controlando el tiempo con hardware. El temporizador TMR0.. 7.a aplicación. Manejando el Perro Guardián, el modo de bajo consumo y el reset................................................................................................. 8.a aplicación. Comunicación serie RS232 ................................................... 9.a aplicación. Controlando una pantalla LCD.............................................. 10.a aplicación. Manejando el bus I2C............................................................. 11.a aplicación. Aproximación a la conversión A/D........................................ 12.a aplicación. Transmisión y recepción por RF............................................

105 121 147 163 181 189 205 219 231 245 259 279 v

vi

CONTENIDO

SEGUNDA PARTE. La gama media: el fabuloso PIC16F84A......................... 291 TEORÍA Capítulo 8. El primer contacto con el PIC16F84A ........................................ Capítulo 9. En el interior del procesador........................................................ Capítulo 10. Los recursos fundamentales: temporizadores, puertas de E/S y EEPROM de datos ......................................................................... Capítulo 11. Interrupciones, reset y recursos auxiliares .................................. Capítulo 12. Manejando el repertorio de instrucciones.................................... Capítulo 13. Herramientas y diseño de proyectos............................................

293 305 319 335 351 367

APLICACIONES PRÁCTICAS 1.er taller. 2.o taller. 3.er taller. 4.o taller. 5.o taller. 6.o taller. 7.o taller. 8.o taller. 9.o taller. 10.o taller.

Simulando el primer taller ................................................................ Trabajando con entradas y salidas. Concurso de televisión............ Manejo de la instrucción SLEEP ..................................................... Uso de temporizadores. Contador ascendente/descendente................. Manejo del teclado ............................................................................ Comunicación RS-232...................................................................... Manejo del LCD................................................................................ Generación de números aleatorios ................................................... Manejo de la memoria EEPROM de datos...................................... Un ejercicio completo. La máquina de «Su Turno» .......................

389 397 405 413 419 425 433 439 447 457

TERCERA PARTE. Los módulos microcontroladores BASIC Stamp y el lenguaje PBASIC Capítulo 14. Los sellos mágicos de Parallax.................................................... 469 Capítulo 15. PBASIC. El lenguaje más fácil del mundo. Prácticas y programas ........................................................................................ 485 CUARTA PARTE. «Software» de desarrollo, programas fuente, apéndices y complementos incluidos en el CD Contenido del CD ............................................................................................. 511 Bibliografía y direcciones de interés relacionadas con los PIC ........................ 513 Índice analítico ....................................................................................................... 515

PRÓLOGO

Los microcontroladores están invadiendo el mundo. Están presentes en nuestra casa, en nuestro trabajo y en nuestra vida. Se pueden encontrar controlando los hornos microondas y los televisores de nuestro hogar, en los teclados y ratones de los computadores y en los automóviles. En el bolsillo llevamos unos cuantos entre los del teléfono móvil, los que tienen las modernas llaves del coche y los mandos a distancia del garaje y la alarma doméstica. Pero la invasión acaba de comenzar y el comienzo del siglo XXI será testigo de la conquista masiva de estos diminutos computadores que gobernarán la mayor parte de los aparatos que fabricamos y usamos los humanos. Las extensas áreas de aplicación de los microcontroladores, que se pueden considerar ilimitad as, exigirán un gigantesco trabajo de diseño y aplicación. Aprender a manejar y aplicar los microcontroladores sólo se consigue desarrollando prácticamente diseños reales. Sucede lo mismo que con cualquier instrumento musical, cualquier deporte y muchas otras actividades. El objetivo primordial que nos ha movido a escribir este libro es facilitar el camino al lector para que se entusiasme y utilice los microcontroladores; por eso, está plagado de programas y experiencias, así como de proyectos reales. La filosofía y el método que hemos aplicado en la elaboración de esta obra han sido los mismos que usamos con nuestros alumnos de varias especialidades de ingeniería en la Universidad de Deusto. Sospechamos que los excelentes resultados obtenidos se deben principalmente a la calidad de los estudiantes. En esta nueva edición hemos introducido un cambio sustancial en el planteamiento del aprendizaje. En el verano de 2006 nos reunimos los autores para establecer el programa de la asignatura «Diseño de Sistemas Basados en Microcontrolador» y para estructurar este libro que sirviese de texto y guía. Decidimos empezar por lo más sencillo y elegimos el procesador más simple y fácil con la intención de alcanzar tres metas: 1.ª En un par de semanas los alumnos comenzaban diseños reales. 2.ª Un procesador humilde y sin apenas recursos obliga a «espabilarse» más para resolver las tareas. 3.ª Una vez que se domina un microcontrolador por sencillo que sea, pasar a otros más potentes resulta natural y apetecible. vii

viii

PRÓLOGO

Así que tomamos la decisión de comenzar con el humildísimo PIC12F508 de la gama básica, que sólo posee ocho patitas. Si bien es verdad que tiene poco de todo, era uno de los más populares y vendidos en todo el mundo. Cosa lógica, porque la mayor parte de los productos masivos, como el mando a distancia de una alarma, no necesitan más de lo que posee el PIC12F508. Tras conocer la teoría y la práctica de dicho microcontrolador se decidió pasar al PIC16F84A, que es uno de los modelos más pobres de la gama básica, pero ya un clásico en la historia de los microcontroladores PIC. Finalmente, para acabar de demostrar que con los elementos más sencillos se alcanzan las metas más complejas, se presentan los módulos de Parallax, que facilitan el hardware y permiten confeccionar los programas con el lenguaje más fácil del mundo: el BASIC. Este libro recoge los temas teóricos y las experiencias, programas y proyectos prácticos de laboratorio que impartimos en la anteriormente mencionada asignatura desde octubre de 2006 hasta febrero de 2007. Además, como nuestros alumnos tenían que aprender a diseñar proyectos con microcontrolador, les propusimos como evaluación un proyecto en equipos de cuatro personas para construir un prototipo operativo de un «pastillero inteligente». El proyecto no tenía restricciones, pero sus especificaciones debían quedar determinadas a mitad de curso y al final el prototipo las debía cumplir y funcionar correctamente. Enlazando las diversas experiencias prácticas, aplicando los conocimientos teóricos y demostrando que un futuro ingeniero debe tener el ingenio necesario para combinar todo ello y alcanzar brillantemente el objetivo, nuestros alumnos construyeron varios pastilleros en los que dejaron la huella de su capacidad técnica e imaginativa. En un apéndice en el CD que acompaña la obra se presenta uno de dichos proyectos. El libro que tiene entre sus manos constituye la primera parte de una colección de tres libros y se destina a los microcontroladores más sencillos de la gama básica y media y a los lenguajes de programación Ensamblador, C y PBASIC. La segunda parte se dedica a los poderosos PIC16F87X de la gama media, a los PIC18FXXX de la gama mejorada y ofrece una introducción a las familias de microcontroladores de 16 bits. Por último, el tercer volumen de esta obra se refiere a los Controladores Digitales de Señales (DSC), que se materializan en las familias dsPIC30F y dsPIC33F, que reúnen lo mejor de los microcontroladores PIC de 16 bits con los recursos principales de los DSP. Para desarrollar todos los programas y proyectos de las tres partes se ha elegido el sistema de desarrollo PIC School. El contenido de esta primera parte consta de cuatro secciones: Primera: PIC12F508 Teoría: Funcionamiento, arquitectura y repertorio de instrucciones. Práctica: Colecció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: Colección de varias aplicaciones desarrolladas con la PIC School de complejidad progresiva en Ensamblador y C.

PRÓLOGO

ix

Tercera: Módulos microcontroladores BASIC Stamp Teoría y práctica sobre el funcionamiento y el desarrollo de aplicaciones con los módulos microcontroladores de Parallax resueltos con el lenguaje PBASIC. Cuarta: «Software» de desarrollo, programas fuente, apéndices y complementos contenido en el CD En el CD que acompaña a este libro se incluyen todas las herramientas software necesarias, los programas fuente de todos los ejercicios y proyectos. Además, en dicho CD se dedica el Apéndice A a una guía rápida del PIC12F508 y el Apéndice B a una guía rápida del PIC16F84A. El proyecto completo de un «pastillero» diseñado por un alumno se ofrece en el Apéndice C. Toda la gama de modelos de los microcontroladores PIC que se comercializan en la actualidad con sus principales características se recogen en el Apéndice D. El Apéndice E describe una colección de experiencias muy didácticas y útiles desarrolladas con un kit básico de componentes y el PIC16F84A. Se completa este libro con una bibliografía y un directorio de direcciones interesantes en Internet y de un índice analítico. Gran parte de la información proporcionada en este libro y su CD procede de Microchip (www.microchip.com) y agradecemos especialmente la colaboración que hemos obtenido de don Juan Gutiérrez, de la oficina central. También desde Parallax (www.parallax.com) hemos recibido toda la colaboración que hemos solicitado de don Arístides Álvarez. Finalmente, don Mikel Echevarría, de Ingeniería de Microsistemas Programados (www.microcontroladores.com), nos ha facilitado multitud de programas y experiencias soportadas por la extraordinaria herramienta PIC School.

PRIMERA PARTE La gama básica: el humilde PIC12F508 TEORÍA

Microcontrolador: la solución está en un chip

CAPÍTULO

1

1.1. ¿QUÉ ES UN MICROCONTROLADOR? Es un pequeño computador construido sobre el «chip» o dado de silicio que hay dentro de un circuito integrado. Se emplea para controlar el funcionamiento de una tarea determinada o el de un producto, y debido a su reducido tamaño, suele estar incorporado en el propio dispositivo que gobierna. Esta última característica es la que le confiere la denominación de «controlador incrustado» (embebed controller) (Fig. 1.1). Al microcontrolador se le considera como un «computador dedicado» pues en su memoria reside un único programa destinado a controlar una aplicación concreta, sus líneas de entrada/salida soportan el conexionado de los sensores y actuadores del sistema a gobernar y todos los recursos complementarios disponibles tienen como finalidad exclusiva atender los requerimientos de la tarea a la que se dedica el microcontrolador (Fig. 1.2).

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 desplazamientos correspondientes del cursor en la pantalla.

Un microcontrolador es un computador completo, aunque de capacidad limitada, que está contenido en un circuito integrado y se destina a gobernar una tarea o producto en donde suele ir incrustado.

Figura 1.3. La inclusión de un microcontrolador en un pastillero le añade prestaciones que le otorgan el calificativo de «inteligente».

MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP

5

Figura 1.4. Distribución porcentual de la producción mundial de microcontroladores en las cinco grandes áreas de aplicación.

La potencia que se puede obtener de un computador es inmensa; por eso, si son pequeños y baratos, se pueden incorporar en cualquier producto por pequeño y económico que sea, abriendo las puertas de la imaginación de los diseñadores. Empresas del prestigio de Dataquest auguran la presencia de centenares de microcontroladores en los hogares del mundo desarrollado en un futuro cercano.

1.2. LA INVASIÓN DEL MUNDO La potencia de los microcontroladores aumenta constantemente a la par que su volumen y coste, lo que está dando lugar al crecimiento exponencial de su aplicación y, en consecuencia, a su invasión en muchos de los productos típicos del mundo moderno. Fundamentalmente, existen cinco grandes campos de aplicación de los microcontroladores. 1.o 2.o 3.o 4.o

Comunicaciones. Gran consumo. Automoción. Informática.

5.o Industria.

Las comunicaciones y sus sistemas de transferencia de información utilizan profusamente los microcontroladores, siendo el teléfono móvil su componente más representativo (Fig. 1.5). En el área de productos de gran consumo, los electrodomésticos de línea blanca (lavadoras, hornos, lavavajillas, etc.) y de línea marrón (televisores, vídeos, aparatos de audio, etc.) incorporan numerosos microcontroladores (Fig. 1.6).

6

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

Figura 1.5. Las comunicaciones absorben la mayor parte de la producción mundial de microcontroladores, 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 microcontroladores para optimizar su funcionamiento y sus prestaciones.

La industria de automoción es una firme candidata a incrementar el consumo de microcontroladores para soportar las nuevas y cada vez más exigentes funcionalidades de los vehículos modernos. En 2003, Microchip vendió veinticinco millones de microcontroladores para el control del sensor del airbag. La industria informática acapara una buena parte de la producción de microcontroladores, puesto que casi todos los periféricos del computador disponen de uno o varios, como sucede con las impresoras, teclados, discos duros, escáneres, etc. En el área industrial, hay secciones como la robótica, la visión artificial, el control de motores, las fuentes de alimentación ininterrumpibles, etc., que son grandes consumidores de microcontroladores.

MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP

7

Figura 1.7. Bastantes sistemas de control, confort y seguridad del automóvil son gobernados por microcontroladores.

Más de la mitad de la producción mundial de microcontroladores es absorbida por las comunicaciones y los productos de gran consumo. El resto se reparte entre el sector de la automoción, la informática y la industria.

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 nuevas que precisan el empleo de microcontroladores, como la industria militar, la electromedicina, 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.3. EN EL INTERIOR DEL MICROCONTROLADOR Dentro del circuito integrado que materializa un microcontrolador hay un completo computador, aunque de recursos y prestaciones limitadas. Consta de tres grandes bloques. BLOQUES DEL COMPUTADOR 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 microcontrolador sólo existe comunicación con el exterior a través de las patitas o «pines» existentes 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 existentes en el encapsulado para comunicarse con los periféricos y dispositivos externos a gobernar, recibir la alimentación y la señal de reloj.

líneas de E/S. ¿Cuál de los siguientes modelos de microcontroladores es el que más se adapta a los requerimientos de la aplicación?

Modelo

Memoria instr. (palabras)

Líneas E/S

Precio (euros)

PIC12F508

512

6

1,30

PIC16F83

512

13

2,17

PIC16F84A

1.024

13

2,50

PIC16C54

4.096

33

3,17

SOLUCIÓN Para esta aplicación es suficiente el PIC16F83 y su empleo supone una importante economía de material y mano de obra.

1.4. DIFERENCIA ENTRE MICROCONTROLADOR Y MICROPROCESADOR El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (UCP) de un computador. La UCP, también llamada procesador, está formada por la Unidad de Control, que interpreta o traduce las instrucciones, y el Camino de Datos, que se encarga de ejecutar las operaciones que conllevan las instrucciones.

MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP

11

Figura 1.12. Un computador basado en un microprocesador es un sistema «abierto» que puede configurarse 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 Memoria 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 sistema que configura un microprocesador es «abierto» porque su estructura varía según la aplicación a la que se destine (Fig. 1.12). Un microcontrolador es un sistema «cerrado» porque contiene un computador completo y de prestaciones fijas y limitadas que son difíciles de modificar. Un microprocesador sólo es una parte del computador, la más importante, la UCP, y para construir un computador completo hay que conectar otros circuitos integrados que contengan la Memoria y los Módulos de E/S; por eso, se puede configurar a medida y se llama sistema «abierto».

El PC es un computador conocido por todos que está basado en un microprocesador, como el Pentium, que reside en la tarjeta principal y se conecta con los módulos de memoria, los controladores de periféricos (disco duro, impresora, etc.) y recursos auxiliares (fuente de alimentación, circuito de reloj, etc.) configurando la máquina a la medida del usuario (Fig. 1.13). Aunque hay excepciones, los microcontroladores contienen todos los elementos del computador y sus patitas se conectan directamente a los periféricos externos. Al no disponer en el exterior de los buses, es bastante complicado ampliar las características con las que se ha fabricado.

12

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

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.5. ARQUITECTURA INTERNA Las partes principales que existen en un microcontrolador son cinco. 1. 2. 3. 4. 5.

Procesador o UCP. Memoria para las instrucciones y para los datos. Líneas de E/S para la comunicación con el exterior. Periféricos, como temporizadores, conversores AD, comparadores analógicos, etc. 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: 1.o Unidad de Control, que se encarga de interpretar el tipo de instrucción que se debe realizar 2.o Camino de Datos, que realiza las operaciones con los datos que implican las instrucciones.

MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP

13

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.

La Unidad de Control recibe las instrucciones en formato binario o máquina desde la memoria que almacena el programa y genera las órdenes que necesita el Camino de Datos para efectuarlas, recibiendo datos de entrada y generando otros de salida que se almacenan en la memoria de datos (Fig. 1.14). La estructura del procesador mostrado en la Figura 1.14 corresponde a la propuesta por Von Neumann y tiene el inconveniente de guardar en la misma memoria las instrucciones y los datos. Con objeto de poder acceder simultáneamente a instrucciones y datos y, además, adaptar las características de las memorias a sus contenidos se utiliza la arquitectura Harvard, que dispone de memorias independientes para datos e instrucciones (Fig. 1.15).

1.5.2. Memoria de programa Es la memoria donde se guardan las instrucciones del programa que tiene que ejecutar el microcontrolador. La longitud de sus palabras se adapta al número de bits que tienen las instrucciones y su capacidad se adecúa al tamaño que previsiblemente tendrán los programas para los que se destina. En los microcontroladores, es interesante no tener que ampliar el tamaño de esta memoria por lo que supone en el volumen y precio del sistema.

14

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

Figura 1.15. La arquitectura Harvard, habitual en los microcontroladores, dispone de memorias independientes para datos e instrucciones.

Como el programa a ejecutar en un microcontrolador siempre es el mismo, debe estar grabado de forma permanente y no volátil. Los tipos de memoria que se adaptan a estas exigencias son los siguientes:

A) ROM El programa se graba en la memoria del microcontrolador durante su fabricación mediante 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ésticos 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 grabació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 depuración de programas, pero su coste unitario es elevado y su manipulación es complicada y precisa de grabadores y «quemadores».

C) OTP (Programable una vez) Al igual que la memoria EPROM, el usuario puede grabar el programa en este tipo de memoria, pero ya no se puede borrar. El bajo precio de los microcontroladores con OTP

MICROCONTROLADOR: LA SOLUCIÓN ESTÁ EN UN CHIP

15

y la sencillez de la grabación recomiendan este tipo para prototipos finales y series de producción cortas.

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 memoria 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 capacidades 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 circuito 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.

1.5.3. Memoria de datos Los datos que manejan los programas varían continuamente y esto exige que la memoria que los contiene debe ser de lectura y escritura, por lo que la memoria RAM estática (SRAM) es la más adecuada, aunque sea «volátil» y pierda su contenido al quitar la alimentación. Para guardar datos permanentes o no volátiles suele existir en los microcontroladores un pequeño espacio de datos con memoria EEPROM. Las memorias tipo EEPROM y FLASH pueden escribirse y borrarse eléctricamente en el mismo circuito donde están montadas. No se precisa sacar el circuito integrado del zócalo en el que residen.

1.5.4. Líneas de E/S A veces, en ciertos modelos de microcontroladores, existen algunas patitas de la cápsula que están reservadas para recibir la alimentación, la frecuencia de funcionamiento e

16

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

incluso para producir la reinicialización o reset. Las restantes se destinan a soportar la comunicación con el mundo exterior. Las líneas de E/S sacan información de los periféricos y recursos internos al exterior. También recogen información de los dispositivos exteriores y la introducen al microcontrolador para su procesamiento. Se suelen agrupar en conjuntos de ocho líneas, que se llaman «puertas» o «puertos». Son de tipo multifuncional, lo que significa que pueden realizar diversas funciones multiplexadas en el tiempo y programables.

1.5.5. Recursos y periféricos auxiliares Según las aplicaciones a las que orienta el fabricante cada modelo de microcontrolador, le incorpora diversos elementos que refuerzan y potencian su empleo. Entre los recursos más comunes en casi todos los modelos se citan: 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 bloquea. 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

1.6. HERRAMIENTAS DE DISEÑO El resultado de un proyecto basado en microcontrolador suele consistir en una pequeña tarjeta de circuito impreso que soporta al microcontrolador, que tiene grabado en su memoria de código el programa de control y una serie de componentes auxiliares. Dicha tarjeta se conecta a la fuente de alimentación y a los sensores, actuadores y dispositivos que gobierna (Fig. 1.16). Para desarrollar un proyecto se precisan de herramientas para la creación del software y para la implementación y puesta a punto del hardware. Entre las herramientas destinadas al software se precisa un programa que permita desde un PC editar los programas en un lenguaje, compilarlos para obtener el programa ejecutable, simular el programa y depurarlo. Microchip ha creado para trabajar con sus microcontroladores PIC un entorno integrado, denominado MPLAB IDE, que contiene todas las herramientas requeridas para el desarrollo del software. El MPLAB IDE puede encontrarlo en el CD que acompaña al libro y su propietario lo pone a disposición de los usuarios libremente en su sitio en Internet (www.microchip.com). Se recomienda visitar este sitio habitualmente para trabajar con la última versión disponible (Fig. 1.17).

1. Gestión del proyecto 2. Ventana de registros. 3. Ventana de inspecciones.

4. Editor de textos. 5. Ventana de resultados. 6. Memoria del programa.

7. Vista de la EEPROM. 8. Control memoria.

Figura 1.17. El entorno MPLAB IDE de Microchip contiene todas las herramientas necesarias para el desarrollo 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 Microsistemas Programados.

Los lenguajes usados normalmente para la confección de los programas para microcontroladores 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 comportamiento 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.

figuran el hardware en la PCB y comprobar el correcto funcionamiento del prototipo. Tanto los fabricantes de microcontroladores como otras empresas relacionadas ofrecen un completo abanico de grabadores, emuladores y sistemas para el desarrollo de aplicaciones.

1.7. LOS FABRICANTES Y EL MERCADO MUNDIAL Hasta el año 2002, Motorola ha ocupado el primer puesto del ranking mundial de fabricantes de microcontroladores de 8 bits, que son los más populares. A partir de dicho año, Microchip le ha reemplazado como líder mundial de dicho tipo de microcontroladores. Otros importantes fabricantes de estos dispositivos son Mitsubishi, NEC, Intel, SGS-Thomson, Hitachi, ST-Micro, Renesas, etc. (Fig. 1.21). En el año 2000 casi se vendieron cuatro billones de microcontroladores de 8 bits, alcanzando Microchip unas ventas superiores cercanas a los 500 millones de dólares. En 2006, dicha empresa alcanzó una cifra de ventas cercana a los 1.000 millones de dólares (Fig. 1.22).

20

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

Figura 1.21. «Ranking» mundial de los principales fabricantes de microcontroladores de 8 bits ordenado por el número de unidades vendidas (Dataquest).

Figura 1.22. Crecimiento de las ventas anuales de microcontroladores de Microchip.

Los PIC, una familia numerosa

CAPÍTULO

2

2.1. LA SELECCIÓN DEL MEJOR De un centenar de fabricantes de microcontroladores con varios miles de modelos diferentes resulta una misión imposible elegir al «mejor». En realidad, no existe, porque en cada aplicación son sus requerimientos específicos y las circunstancias que la rodean los que determinan el microcontrolador más conveniente para ese caso. Los microcontroladores PIC tienen «ángel», así como una gran aceptación en la comunidad de profesionales y aficionados que se dedican al diseño de aplicaciones. Ésta es la favorable sensación que comparten los autores de este libro, quienes, admitiendo su subjetividad, sólo han utilizado PIC desde que los conocieron. ¿Cuáles son las razones de la excelente imagen de los PIC? Hay detalles que nos apasionan a los que trabajamos a caballo entre la electrónica y la informática, de los cuales citamos los más importantes: • • • • • • • • •

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, alimentación, tamaño, etc. Herramientas de desarrollo abundantes, fáciles y baratas. Compatibilidad del software y hardware que facilitan la migrabilidad hacia modelos superiores. 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 .

Microchip es generosa con sus clientes y pone a su disposición gratuitamente potentes herramientas software a través de Internet. También comercializa a precios competitivos herramientas hardware que soportan la realización de proyectos y colabora con otras empresas a desarrollar equipos y programas para cimentar un mercado con una gran variedad de ayudas al diseño con microcontroladores PIC. 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.

Microchip es el líder mundial en la venta de microcontroladores de 8 bits desde 2002, y en la actualidad, potencia la línea de microcontroladores de 16 bits y la de los Controladores Digitales de Señal (DSC).

Figura 2.2. Espectacular crecimiento del número de modelos diferentes de microcontroladores PIC.

LOS PIC, UNA FAMILIA NUMEROSA

23

Figura 2.3. Clasificación de los microcontroladores PIC fabricados por Microchip.

2.2. LA GRAN FAMILIA DE LOS PIC Cada proyecto tiene sus propios requerimientos técnicos y necesidades y lo ideal es resolverlo con aquel microcontrolador que las cumpla exactamente. Si no cubre alguna de ellas, habría que añadir elementos auxiliares externos que complican, encarecen y aumentan el volumen del equipo físico. Si el microcontrolador tiene más potencia, capacidad y recursos que lo que necesita la aplicación, se están desaprovechando y se está pagando más y trabajando con un dispositivo más complejo y voluminoso que lo necesario. El objetivo de los fabricantes de microcontroladores es ofertar una amplia gama de modelos, desde los más simples hasta los más complejos, para que todos encuentren el que precisan. La variedad de PIC aumenta incesantemente, y en la actualidad, los modelos contenidos en el catálogo comercial alcanzan aproximadamente los tres centenares, incluyendo los de 8 y 16 bits. Desde 1990, Microchip ha vendido más de cuatro billones de microcontroladores PIC y más de 400.000 sistemas de desarrollo.

Microchip fabrica microcontroladores de 8 y 16 bits, existiendo diversas categorías o gamas en cada tipo (Fig. 2.3). Paralelamente al aumento del número de modelos, ha ido creciendo la potencia y el rendimiento de los microcontroladores PIC, hasta alcanzar versiones muy cercanas a los DSP (Procesadores Digitales de Señales), que permiten resolver aplicaciones de alta complejidad y que tienen un espléndido futuro (Fig. 2.4).

24

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

Figura 2.4. Aumento del rendimiento y prestaciones de los microcontroladores PIC.

2.3. PRINCIPALES CARACTERÍSTICAS Los microcontroladores PIC se distinguen por poseer cinco características específicas que les otorga una ventaja significativa sobre sus competidores. 1.a 2.a 3.a 4.a

Arquitectura RISC, tipo Harvard, basada en un banco de registros. Juego de instrucciones reducido de la misma longitud y ortogonal. Cauce de procesamiento segmentado. Herramientas de desarrollo abundantes, fáciles y económicas.

5.a Gran diversidad de modelos para facilitar la migrabilidad.

LOS PIC, UNA FAMILIA NUMEROSA

25

2.3.1. Arquitectura RISC, tipo Harvard, basada en un banco de registros La arquitectura Harvard se caracteriza por disponer de dos memorias independientes para contener los datos y las instrucciones. Esta dualidad permite el acceso simultáneo, así como que la longitud de las posiciones y la capacidad de cada memoria se acomode a los requerimientos de las instrucciones y de los datos. Por ser un procesador RISC, el número de instrucciones es reducido. Así, la gama básica sólo dispone de 33 instrucciones en su repertorio, la gama media de 35 y la gama mejorada de 79. Una propiedad muy interesante hace referencia a la longitud de las posiciones de la memoria de programa, que se ajusta al tamaño de la instrucción. De esta forma, la longitud de las posiciones de la memoria de instrucciones de la gama básica es de 12 bits, la de la gama media de 14 bits y la de la gama mejorada de 16 bits. La simplicidad de la función que realiza cada instrucción permite que la mayoría se ejecute en un solo ciclo de instrucción equivalente a cuatro ciclos de reloj. Todas estas características permiten que el tamaño de los programas sea muy compacto, la velocidad de ejecución excelente y los compiladores para el lenguaje C estén optimizados.

2.3.2. Juego de instrucciones reducido, de la misma longitud y ortogonal Los procesadores RISC tienen un juego de instrucciones reducido y de gran simplicidad que hace que su ejecución sea de un ciclo de instrucción. La ortogonalidad significa que cualquier instrucción puede manejar cualquier elemento como fuente o destino. La longitud de las instrucciones es diferente para cada gama.

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-

A) GAMA BÁSICA: instrucciones de 12 bits de longitud. B) GAMA MEDIA: instrucciones de 14 bits de longitud. C) GAMA MEJORADA: instrucciones de 16 bits de longitud.

2.3.3. Cauce de procesamiento segmentado El dividir el cauce donde se ejecutan las instrucciones en etapas supone una notable reducción del tiempo que tarda en ejecutarse cada una debido al paralelismo implícito. En cada instante se están ejecutando tantas instrucciones como etapas existan en el cauce, ya que en cada etapa hay una instrucción. En la Figura 2.6 se muestra el cauce de dos etapas correspondiente a los PIC. Mientras en la segunda etapa se realiza la fase de ejecución de la instrucción en curso, en la primera se procede a la búsqueda de la siguiente instrucción en la memoria de programa. Si las dos etapas necesitan el mismo tiempo una vez que está el cauce lleno, el tiempo que transcurre entre cada ejecución de una instrucción es de T/2.

2.3.4. Herramientas de desarrollo abundantes, fáciles y económicas Tanto Microchip como otras segundas fuentes se esfuerzan en poner a disposición de los usuarios de PIC herramientas software y hardware eficaces en la implementación de proyectos. La más destacable es el entorno integrado MPLAB IDE y el programadordepurador ICD2, ambas de Microchip (Fig. 2.7).

2.3.5. Gran diversidad de modelos para facilitar la migrabilidad Optimizar un proyecto conlleva la elección del modelo de microcontrolador que cumpla todas las especificaciones. Entre unos 300 modelos de PIC resulta fácil elegir el más adecuado para cada aplicación.

LOS PIC, UNA FAMILIA NUMEROSA

27

Figura 2.7. Fotografía del grabador-depurador ICD2 de Microchip.

La migrabilidad es la posibilidad de poder cambiar de microcontrolador cuando lo requiere la aplicación, pues existe compatibilidad del hardware y del software. La compatibilidad hardware se consigue manteniendo la distribución de las funciones de las patitas en los diferentes encapsulados y las características fundamentales de los módulos periféricos (Fig. 2.8). La compatibilidad software se produce: a) Por existir las mismas instrucciones en cada gama. b) Por ser muy parecidas las instrucciones en distintas familias. c) Por utilizar las mismas herramientas de desarrollo para todas las familias.

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

Estas propiedades de los PIC posibilitan la ampliación de la capacidad de la memoria del dispositivo, así como la inclusión de nuevos periféricos sin perder el software desarrollado y con mínimos cambios en el conexionado. Se describen otras aportaciones típicas de los PIC. 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. C) Mejora del proceso de fabricación Entre 1998 y 2003, Microchip rebajó la tecnología de fabricación de sus chips desde 0,7 hasta 0,4 µm (micras), con un voltaje de alimentación comprendido entre 2 y 5,5 VDC. Desde 2003 al 2006, la tecnología ha bajado hasta 0,22 µm y la tensión del núcleo del procesador de 2 a 3,6 VDC, manteniéndose en 5 V la tensión para los elementos de entrada/salida. D) Fabricación libre de plomo 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.

2.4. LA GAMA BÁSICA La misión de este libro, que constituye la primera parte de una obra dedicada a los microcontroladores de Microchip, es la de facilitar al lector el diseño de aplicaciones usando los microcontroladores PIC de 8 bits de la gama básica y los más sencillos de la gama media. La segunda parte se dedica a los modelos avanzados de la gama media y a los de la gama mejorada. Finalmente, el libro dsPIC. Diseño Práctico de Aplicaciones está destinado a los Controladores Digitales de Señal (DSC), que son la combinación de los microcontroladores PIC de 16 bits con los principales recursos propios de los DSP (Procesadores Digitales de Señales). Los modelos de la gama básica son los más simples y económicos, estando bastante limitada su potencia, su capacidad de memoria y el número de recursos y periféricos que disponen. Pero ¡son los que más se venden! Con ellos se fabrican multitud de productos de consumo masivo, y si lo quiere comprobar, métase la mano al bolsillo o curiosee lo que tiene alrededor. Probablemente encontrará las llaves y el mando a distancia del coche, el de la alarma de casa, el de apertura de la puerta del garaje. Abra la tapa y localice un pequeño circuito integrado con muy pocas patitas. ¿Qué es? Un microcontrolador PIC de la gama básica (Fig. 2.9).

LOS PIC, UNA FAMILIA NUMEROSA

29

Figura 2.9. El mando a distancia para el control de la alarma de casa lo controla un PIC de la gama básica.

Como se refleja en el gráfico de la Figura 2.10, la gama básica abarca modelos que se caracterizan por sus encapsulados con pocas patitas (de 6 a 40) y por su escasa capacidad de memoria de programa (hasta 2 K palabras de 12 bits). Estos pequeños microcontroladores están orientados a proveer soluciones con el menor coste y volumen posible, lo que les hace muy recomendables para gobernar todos los productos de escasa complejidad que funcionan con batería, como los mandos a distancia, los pastilleros y las alarmas portátiles. La familia PIC10F, comprende un conjunto de baratísimos microcontroladores de 8 bits presentados en una cápsula diminuta con sólo seis patitas. Resuelven numerosas aplicaciones y sólo requieren un corto período de aprendizaje. La familia PIC12F, cuyos modelos están encapsulados con ocho patitas, se utiliza universalmente para resolver las aplicaciones típicas que están limitadas por el volumen y por el peso y que hasta hace poco se resolvían con dispositivos electrónicos lógicos, ASIC, elementos electromagnéticos, etc. Su extraordinaria sencillez de manejo y sus excepcionales prestaciones, unidas al bajo precio, han popularizado el empleo de estos microcontroladores en numerosas aplicaciones de bajo coste, entre las que destacan las siguientes: • • • •

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.

Modelo

Memoria programa Flash

RAM bytes

Líneas E/S

Encapsulado

ADC canales

Comparador

Temporizadores

F. máx MHz

Oscilador interno MHz

PIC12F508

512 × 12

25

6

8P, 8SN, 8MS





1 de 8 bits WDT

4

4

PIC12F509

1 K × 12

41

6

8P, 8SN, 8MS





1 de 8 bits WDT

4

4

PIC12F510

1 K × 12

38

6

8P, 8SN, 8MS

3×8 bits

1

1 de 8 bits WDT

8

8

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

2.5. LA GAMA MEDIA Comprende un elevado número de modelos de las familias PIC12 y PIC16 que se hallan encapsulados con 8 hasta 64 patitas y que responden a un repertorio de 35 instrucciones de 14 bits de longitud cada una. Es la gama más variada y completa de PIC y se distinguen por manejar una memoria de programa FLASH muy flexible, de bajo consumo y que precisa una alimentación de 2 a 5,5 VDC. Su rendimiento alcanza los 5 MIPS y posee una gran variedad de periféricos integrados, como conversores A/D, controladores LCD, temporizadores, comparadores analógicos, comunicaciones I2C, USART, CAN, USB, SPI, etc. Los procesadores de esta gama manejan interrupciones y la Pila dispone de ocho niveles de profundidad frente a sólo dos en la gama básica. En el repertorio de instrucciones de la gama media se añaden cuatro nuevas a las de la gama básica (RETURN, RETFIE, ADDLW y SUBLW), mientras que desaparecen dos de las antiguas (OPTION y TRIS).

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

Modelo

Memoria programa FLASH

EEPROM bytes

RAM bytes

Líneas E/S

Encapsulado

ADC canales

Comparador

F. máx MHz

CCP/ ECCP

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 bits

1

20



PIC12F683

2 K × 14

256

128

6

8P, 8SN, 8MD

4 × 10 bits

1

20

1/0

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.

La variedad de modelos de la gama media es enorme: cuatro de la familia PIC12F de ocho patitas, cuarenta y uno de la PIC16F, uno de la PIC14000 y veintiséis de la PIC16C. En un futuro próximo, Microchip pondrá en el mercado tres nuevos modelos de la PIC12F, nueve de la PIC16F y cuatro de la PIC16C. En la tabla de la Figura 2.12 se muestran las características más representativas de los cuatro modelos de ocho patitas de la gama media. Todos ellos disponen de un temporizador de 16 bits y otro de 8 menos el PIC12F683, que tiene dos temporizadores de 8 bits. Dentro de la gama media existen familias especializadas, como la que dispone de un controlador LCD (PIC16F913/914/916/917/918) capaz de manejar fácilmente pantallas LCD de 60 a 168 segmentos y que también disponen de conversores AD, comparadores analógicos y comunicaciones I2C, SPI y USART.

2.6. LA GAMA MEJORADA Está formada por modelos de la familia PIC18 que utilizan una palabra de 16 bits para codificar cada instrucción y se comercializan en cápsulas de 18 a 80 patitas. Los microcontroladores PIC18 disponen de un núcleo de procesador muy mejorado que permite soportar 32 niveles en la Pila y un extenso conjunto de interrupciones internas y externas. La mayoría de las 79 instrucciones de su repertorio se ejecutan en un ciclo de instrucción (4 × TOSC) con excepción de las de salto, que tardan el doble. Se supera un rendimiento de 10 MIPS. En la Figura 2.13 se muestra la alta densidad de la memoria FLASH de código, que es proporcional al número de patitas del encapsulado. La combinación de las elevadas capacidades de memoria de código (128 KB) en combinación con el alto número de patitas permite la disponibilidad de modelos especializados orientados a: a) b) c) d) e) f)

Manejo de LCD de hasta 192 segmentos. Interfaz USB hasta 12 Mbits/s. Interfaz CAN 2.0B Active. Interfaz LIN 1.2. Capacidad para la tecnología ZigBee. Capacidad para conexión Internet (TC/IP, 10BASE-T).

33

LOS PIC, UNA FAMILIA NUMEROSA

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

FLASH bytes

EEPROM bytes

RAM bytes

Líneas E/S

Encapsulado

ADC canales

Comparador

F. máx MHz

CCP/ ECCP

PIC18F8722

128 K

1K

3.936

70

80 PT

16×10 bits

2

40

2/3

Figura 2.14. Características relevantes del modelo PIC18F8722 de la gama mejorada.

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.

2.7. LOS MICROCONTROLADORES DE 16 BITS DE MICROCHIP La estrategia de desarrollo de microcontroladores de 16 bits seguida por Microchip se basa en potenciar dos líneas diferentes: A) Microcontroladores clásicos de 16 bits (MCU) Familias PIC24F y PIC24H B) Controladores Digitales de Señal (DSC) Familias dsPIC30F y dsPIC33F

Los microcontroladores de 16 bits, tipo MCU, incrementan considerablemente la potencia de cálculo, la velocidad y las capacidades de las memorias frente a la gama mejorada de 8 bits al mismo tiempo que aumentan la cantidad y las prestaciones de los periféricos integrados. Los microcontroladores de 16 bits, tipo DSC, son superiores a los MCU en prestaciones y en rendimiento al incorporar recursos propios de los DSP que les permiten aplicarse en el área del procesamiento digital de señales que tan brillante porvenir presenta. Los dispositivos de la familia PIC24F se parecen a los PIC18F, pero les aventajan en las siguientes especificaciones: a) b) c) d) e)

Capacidad de memoria. Instrucciones más potentes. Registros de trabajo. Modos de direccionamiento. Control de la pila.

La longitud de las instrucciones de los microcontroladores de 16 bits de Microchip es de 24 bits, mientras que la de los datos es de 16 bits. El espacio de la memoria de programa puede alcanzar los 8 MB y el de datos los 64 KB. Estas características orientan las aplicaciones de los microcontroladores de 16 bits hacia las que no son capaces de soportar los de la gama mejorada. En la Figura 2.15 se muestran algunas características destacadas de algunos modelos PIC24F. Todos ellos disponen de cinco

35

LOS PIC, UNA FAMILIA NUMEROSA Modelo

Patitas

FLASH (KB)

RAM (KB)

24FJ64GA006 24FJ64GA008 24FJ64GA010

64 80 100

64 64 64

8 8 8

24FJ128GA006 24FJ128GA008 24FJ128GA010

64 80 100

128 128 128

8 8 8

Figura 2.15. Características destacables de seis modelos de la familia PIC24F.

temporizadores, cinco módulos de Captura, cinco módulos de Comparación, cinco módulos PWM, dos comparadores, dieciséis canales de un conversor AD de 10 bits a 500 ksps, dos UART, dos SPI, dos módulos I2C y un reloj calendario en tiempo real. La familia PIC24H alcanza un rendimiento de 40 MIPS y una capacidad de memoria FLASH de programa de 256 KB y de 16 KB de RAM. Además, dispone de un controlador DMA con ocho canales y oscilador interno (Fig. 2.16).

9 9 9 9 9 9 9 9 9 9 9 9 9

8 8 8 8 8 8 8 8 8 8 8 8 8

1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 18 Ch 1 ADC, 32 Ch 1 ADC, 32 Ch

2 2 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2 2

1 2 2 2 1 2 2 2 2 2 2 2 2

0 0 1 1 0 0 1 1 0 0 0 0 2

CODEC

Timers

8 8 8 8 8 8 8 8 8 8 8 8 8

CAN

DMA #CH

8 8 8 8 8 8 8 8 16 16 16 16 16

I2C

RAM (KB)

64 64 64 64 128 128 128 128 128 128 256 256 256

SPI

Flash (KB)

64 100 64 100 64 100 64 100 64 100 64 100 100

12 bits ADC 500 KSPS #ADC, #CH

UART

Patitas

24HJ64GP206 24HJ64GP210 24HJ64GP506 24HJ64GP510 24HJ128GP206 24HJ128GP210 24HJ128GP506 24HJ128GP510 24HJ128GP306 24HJ128G310 24HJ256GP206 24HJ256GP210 24HJ256GP610

OC PWM

Modelo

RC Osc con PLL

0 0 0 0 0 0 0 0 0 0 0 0 0

SI SI SI SI SI SI SI SI SI SI SI SI SI

Figura 2.16. Principales características de diversos modelos de microcontroladores de 16 bits de la familia PIC24H.

En cuanto a las familias dsPIC30F y dsPIC33F de DSC tienen bastante parecido a las PIC24F y PIC24H, respectivamente, pero además integran los recursos y las instrucciones necesarias para cubrir las funcionalidades típicas de los DSP. Los mismos autores y en la misma editorial tienen publicado el libro dsPIC. Diseño Práctico de Aplicaciones, que está dedicado exclusivamente a los DSC.

El más humilde de la gama básica: PIC12F508

CAPÍTULO

3

3.1. JUSTIFICANDO LA ELECCIÓN Para iniciar el aprendizaje y manejo de los microcontroladores PIC hemos elegido el modelo PIC12F508, el más «pobre», con ocho patitas de la gama básica. La selección está motivada por nuestro trabajo como profesores. En el verano de 2006 estábamos preparando el programa y la estrategia a seguir en una asignatura titulada «Diseño de Sistemas Basados en Microcontrolador» para alumnos de ingeniería enfocados a la electrónica industrial que aún no habían recibido ninguna enseñanza sobre microcontroladores. Intentamos ajustarnos a las nuevas directrices didácticas europeas y decidimos estructurar una asignatura eminentemente práctica. Si tenían que aprender los alumnos a diseñar, la única forma de conseguirlo era diseñando. La mayor cantidad de horas que tenía que dedicar el alumno a nuestra asignatura estaba enfocada a la realización de experiencias, prácticas, programas y un proyecto final como resultado definitivo en el que recaería la evaluación y que debería ser presentado por cada equipo de trabajo al terminar el curso ante el profesor y un grupo de estudiantes de cursos superiores. Tenemos la inmensa suerte de que nuestros alumnos son enormemente responsables y cuando se motivan se autoimponen metas muy exigentes. La asignatura tenía asignados cinco créditos ECTS que suponen un trabajo total del alumno de 125 horas e intentamos que los proyectos no fuesen demasiado complejos para no sobrepasar ese tiempo. Íbamos a comenzar demostrándoles que una gran cantidad de aparatos que nos rodean tenían incrustado un pequeño microcontrolador y les propusimos que «destriparan» todos los sospechosos que cayesen en sus manos: alarmas, mandos a distancia, herramientas eléctricas, cargadores de baterías, detectores de humo, estaciones meteorológicas, termostatos, juguetes, relojes y todo lo que les oliese a que dentro había un computador (Fig. 3.1). Teniendo en cuenta el tiempo disponible y el desconocimiento total del tema, elegimos un proyecto común para todos que inicialmente tuviese unas especificaciones muy sencillas, pero que el ingenio y el saber hacer de los diseñadores admitiese múltiples ampliaciones y opciones. Así que presentaríamos en las clases de teoría dos microcontroladores sencillos, uno de la gama básica (PIC12F508) y otro de la gama media (PIC16F84A). En las clases prácticas de laboratorio propon37

38

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

Figura 3.1. Numerosos pequeños aparatos de mucho uso son gobernados por un sencillo microcontrolador 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 correctamente. En el Apéndice C, contenido en el CD, se describe paso a paso el proyecto de un pastillero con el PIC12F508.

Figura 3.2. Fotografía de un pastillero «normal» al que la inclusión de un microcontrolador le proporcionaría el calificativo de «inteligente».

EL MÁS HUMILDE DE LA GAMA BÁSICA: PIC12F508

39

Figura 3.3. Fotografía de un pastillero «inteligente» comercial.

No había restricciones en el proyecto, pero sus especificaciones había que determinarlas a mitad de curso, y al final, el prototipo debería cubrir las mismas y funcionar correctamente. En la evaluación de los pastilleros intervendría, además del profesor, los compañeros y alumnos de cursos superiores. Se formaría un ranking con las valoraciones y las notas serían en función del mismo. Cuando algún pastillero no funcionase o no respondiese a todas las especificaciones propuestas, el grupo correspondiente tendría que ponerlo en marcha en verano. En el libro que tiene en sus manos hemos recogido todo lo que hemos ofrecido a nuestros alumnos para ayudarles a aprender a diseñar proyectos con los PIC más sencillos. Sólo una cosa más: el resultado ha sido fabuloso, y si le interesa conocer más datos, póngase en contacto con cualquiera de nosotros, porque no trabajamos en la enseñanza, sino que disfrutamos con ella y nos encanta compartir experiencias.

3.2. LOS COMPONENTES DE LA GAMA BÁSICA Actualmente, el catálogo comercial de Microchip contiene veinte modelos de la gama básica, aunque anuncia otros nuevos que sacará al mercado en breve. Modelo

Memoria FLASH

Memoria RAM (bytes)

Patitas E/S

F. máx MHz

PIC10F200 PIC10F202 PIC10F204 PIC10F206 PIC10F220 PIC10F222

256 × 12 512 × 12 256 × 12 512 × 12 256 × 12 512 × 12

16 24 16 24 16 23

4 4 4 4 4 4

4 4 4

4 8 8

Temporizador

Periféricos

1-8 bits 1-8 bits 1-8 bits 1-8 bits 1-8 bits 1-8 bits

— — 1 Comparador 1 Comparador ADC (2 × 8 bits) ADC (2 × 8 bits)

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

Modelo

Memoria FLASH

Memoria RAM (bytes)

Patitas E/S

F. máx MHz

Temporizador

Periféricos

PIC12F508 PIC12F509 PIC12F510

512 × 12 1 K × 12 1 K × 12

25 41 38

6 6 6

4 4 8

1-8 bits 1-8 bits 1-8 bits

— — ADC (3 × 8 bits) y Comparador

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.

En la tabla de la Figura 3.6 se muestran cinco modelos de la gama básica de la familia PIC16F5XX que funcionan con una tensión de 2 a 5,5 VDC y disponen de Perro Guardián y un temporizador. Modelo

Memoria FLASH

Memoria RAM (bytes)

Patitas E/S

F. máx MHz

Temporizador

Periféricos — ADC (3 × 8 bits) y Comparador — — —

PIC16F505 PIC16F506

1 K × 12 1 K × 12

72 67

12 12

14 14

20 20

PIC16F54 PIC16F57 PIC16F59

512 × 12 2 K × 12 2 K × 12

25 72 134

12 20 32

18-20 28 40-44

20 20 20

Figura 3.6. Tabla que recoge las principales características de los modelos PIC16F5XX de la gama básica.

Finalmente, en la tabla de la Figura 3.7 se presentan los modelos PIC16C5X de la gama básica. Todos ellos tienen un temporizador de 8 bits, Perro Guardián y se alimentan con una tensión comprendida entre 2 y 5,5 VDC, con excepción del modelo PIC16HV540, que funciona con un voltaje comprendido entre 3,5 y 15 VDC y tiene ocho líneas de E/S de alto voltaje (15 V), cuatro niveles de profundidad en la Pila y cinco líneas de E/S que sacan al procesador del modo de bajo consumo cuando cambian su estado lógico. Modelo

Memoria FLASH

Memoria RAM (bytes)

Patitas E/S

Patitas encapsulado

F. máx MHz

Periféricos

PIC16C55 PIC16C56A PIC16CR56A PIC16C58B PIC16CR58B PIC16HV540

OTP 512 × 12 OTP 1 K × 12 ROM 1 K × 12 OTP 2 K × 12 ROM 2 K × 12 OTP 512 × 12

24 25 25 73 73 25

20 12 12 12 12 12

28 18-20 18-20 18-20 18-20 18-20

40 40 20 20 20 20

— — — — — —

Figura 3.7. Principales características de los modelos PIC16C5X de la gama básica.

EL MÁS HUMILDE DE LA GAMA BÁSICA: PIC12F508

41

3.3. EL HUMILDE PIC12F508 Es el modelo de ocho patitas de la familia PIC12F de la gama básica que dispone de menos capacidad de memoria y recursos integrados, pero que a lo largo de su historia ha sido uno de los más empleados en numerosos productos portátiles de uso masivo. Con lo poco que tiene, es uno de los más vendidos por su flexibilidad y la imaginación de los diseñadores. Es diminuto y cuesta menos de un euro. Es muy fácil de comprender su funcionamiento y su arquitectura. Las instrucciones son muy sencillas y su programación asequible desde el comienzo. En la tabla de la Figura 3.8 se presentan las características más relevantes del PIC12F508. PIC12F508 Memoria

De programa tipo FLASH De datos tipo RAM

512 × 12 25 × 8

Reloj

Frecuencia máxima de funcionamiento

Periféricos

Temporizador Despertar de sleep por cambio en una patita

TMR0 de 8 bits SÍ

Prestaciones

Patitas E/S Patita de entrada Resistencias pull-up internas Programación serie en circuito Repertorio de instrucciones Tamaño de los datos Encapsulados

5 1 SÍ SÍ 33 de 12 bits 8 bits PDIP, SOIC y MSOP (ocho patitas)

Ventajas

Coste Volumen Consumo

4 MHz

Muy bajo (< 0,5 euros) Muy bajo (< mosca) Muy bajo (< 350 µA/2 V/4MHz)

Figura 3.8. Principales características y recursos del PIC12F508.

Las ventajas del PIC12F508 han propiciado el desbordamiento de sus aplicaciones en áreas en las que hace unos años nadie preveía el uso del microcontrolador en ellas. Así pasa con los relojes, temporizadores programables, transmisores/receptores de bajo consumo, etc. 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».

El PIC12F508 es similar al PIC12F509, sólo se diferencian en que este último posee el doble de memoria de programa FLASH (1 K × 12); así que si con el 508 tiene problemas para que quepa su programa, pase al 509. En un nivel superior está el PIC12F510, que tiene un conversor A/D de 8 bits con tres canales de entrada y un comparador analógico.

42

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

Figura 3.9. Nuestro pequeño PIC12F508 al lado de una mosca.

Otras características complementarias del PIC12F508/509 son las siguientes: • Oscilador interno de precisión de 4 MHz. • Protección ante lecturas del código del programa. • Las instrucciones se ejecutan en un ciclo de instrucción (4 × TOSC) menos las de salto, que tardan el doble. • Pila con dos niveles de profundidad. • Grabación de la memoria en serie (ICSP) y con recursos para depuración en circuito (ICD). • Perro Guardián (Watch Dog Timer: WDT) con oscilador RC integrado. • Líneas de E/S con resistencias pull-up integradas. • Temporizador de 8 bits.

3.4. DIAGRAMA DE CONEXIONES En la Figura 3.10 se muestra el diagrama de conexiones de las ocho patitas de la cápsula en formato PDIP (doble hilera) del PIC12F508, que también sirve para el PIC12F509. Además de dicho encapsulado, Microchip comercializa estos microcontroladores en

Figura 3.10. Diagrama de conexionado del PIC12F508/509.

EL MÁS HUMILDE DE LA GAMA BÁSICA: PIC12F508

43

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. Nombre GP0/ICSPDAT

GP1/ICSPCLK

GP3/MCLR#/VPP

GP4/OSC2

Función

Entrada

GPO

TTL

Descripción

CMOS

Línea de E/S bidireccional. Puede programarse con resistencia pull-up interna y salida del modo sleep por cambio de estado.

ICSPDAT ST

CMOS

Línea de datos serie en la programación de la memoria FLASH mediante ICSP.

GP1

TTL

CMOS

Línea de E/S bidireccional. Puede programarse con resistencia pull-up interna y salida del modo sleep por cambio de estado.

ICSPCLK

ST

CMOS

Línea de reloj en la programación ICSP.

GP3

TTL

Línea de E/S bidireccional. Puede programarse con resistencia pull-up interna y salida del modo sleep por cambio de estado.

MCLR#

ST

Entrada de reset. Cuando se configura como MCLR#, genera reset por nivel «0» y siempre dispone de resistencia pull-up. La tensión en esta patita no debe ser superior a VDD durante el funcionamiento normal del dispositivo, de lo contrario entra en el modo de programación.

VPP

HV

Entrada de tensión VPP en el modo de grabación (12,8 V).

GP4

TTL

OSC2

GP5/OSC1/CLKIN

Salida

CMOS

Línea de E/S bidireccional.

XTAL

Conexión de salida con el cristal o resonador en los modos de oscilador XT y LP.

CMOS

Línea de E/S bidireccional.

GP5

TTL

OSC1

XTAL

Conexión de entrada con el cristal del oscilador.

CLKIN

ST

Entrada de reloj externo de trabajo

VDD

VDD

P

Entrada del positivo de alimentación.

GND

GND

P

Entrada de la tierra de alimentación.

Figura 3.11. Descripción de las funciones de las patitas del PIC12F508/509.

44

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

Modelo

FLASH

RAM

E/S

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.

Por las patitas 1 y 8 (VDD y VSS) se aplica la tensión de alimentación. La patita 4 soporta tres funciones multiplexadas en el tiempo: línea de entrada GP3, generación de reset MCLR# y entrada de alta tensión usada en la grabación de la memoria de programa VPP. Las otras cinco líneas restantes son de E/S, pero además cada una de ellas soporta otra función multiplexada, que se describe en la tabla de la Figura 3.11. Así, las líneas GP0 y GP1 tienen multiplexadas las funciones IPCSPCLK y ICSPDAT, que corresponden a las líneas por las que circulan las señales de reloj y las de los datos en serie, respectivamente, que se utilizan en la grabación de la memoria de instrucciones. T0CKI es la patita por la que puede recibirse la señal de reloj que controla el temporizador TMR0. OSC1 y OSC2 son las líneas de entrada y salida para el cristal exterior que usa el oscilador para estabilizar la frecuencia de trabajo. CLKIN es la patita de entrada del reloj cuando se usa un oscilador externo. El PIC12F509 tiene el doble de capacidad de memoria de programa FLASH que el 508, y en vez de 25 bytes de memoria RAM de datos, dispone de 41 bytes, pero ambos tienen el mismo número y distribución de líneas de E/S; por eso, cuando se busca ampliar la cantidad de estas últimas, hay que recurrir al PIC16F505, que tiene el doble (Fig. 3.12).

3.5. ARQUITECTURA INTERNA Los microcontroladores PIC12F508/509 y el PIC16F505 disponen de un procesador con arquitectura Harvard caracterizada por tener la memoria de datos independiente de la de programa con buses propios para cada una, lo que permite el acceso simultáneo a datos e instrucciones. Las posiciones de la memoria de programa FLASH tienen una longitud de 12 bits, mientras que las de la memoria de datos sólo tienen 8 bits, adaptándose así a la longitud de las instrucciones y los datos, respectivamente. El cauce donde se realizan las instrucciones consta de dos etapas, siendo en la segunda donde se ejecuta la instrucción en curso y en la primera donde se busca el código de la instrucción siguiente simultáneamente (Fig. 3.13). La segmentación en dos etapas aumenta la velocidad de ejecución de las instrucciones debido al paralelismo «implícito», que significa que se trabaja en paralelo con dos instrucciones, consiguiéndose completar todas las instrucciones en un «ciclo de instrucción» (4 × TOSC), excepto las de salto, que tardan el doble, porque la siguiente instrucción a la actual no es la de la siguiente posición natural en la memoria.

EL MÁS HUMILDE DE LA GAMA BÁSICA: PIC12F508

45

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 La arquitectura del PIC12F508 se muestra en la Figura 3.14 y puede dividirse en siete bloques: 1.o 2.o 3.o 4.o 5.o 6.o 7.o

Memoria de programa FLASH de 512 posiciones de 12 bits. Memoria de datos RAM de 25 bytes. Camino de Datos con una ALU de 8 bits para realizar las operaciones lógico-aritméticas. Unidad de Control donde se decodifican las instrucciones. Temporizador TMR0 de 8 bits. Módulo de líneas de E/S GPIO. Recursos complementarios.

La memoria FLASH se direcciona con 12 bits procedentes del Contador de Programa (PC), que tiene asociado una Pila con dos niveles de profundidad en la que en algunas ocasiones se guarda temporalmente el contenido del PC y en otras se recupera

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

Figura 3.14. Arquitectura interna del PIC12F508.

46

EL MÁS HUMILDE DE LA GAMA BÁSICA: PIC12F508

47

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 operaciones 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 «banderas» 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 brevemente: — El Perro Guardián (WDT: Watch Dog Timer) es un temporizador encargado de vigilar la correcta ejecución de los programas. Caso de existir algún problema produce un reset. — El reset, por conexión de alimentación (POR: Power On Reset), provoca la reinicialización del sistema al conectar la alimentación. — El temporizador del reset controla los tiempos en la generación del reset. — El oscilador interno RC genera los impulsos de reloj para la sincronización del funcionamiento del procesador, que también puede provenir del exterior a través de las patitas OSC1/CLKIN y OSC2.

CAPÍTULO

Las memorias

4

4.1. LA MEMORIA DE PROGRAMA Aunque los microcontroladores PIC de la gama básica disponen de un espacio máximo para la memoria de programa de 212 = 4 K posiciones al disponer de 12 bits la dirección que genera el Contador de Programa, el modelo PIC12F508 sólo tiene implementadas físicamente en FLASH 512 posiciones de 12 bits cada una, ocupando un rango de direcciones comprendido entre la 0000 h y la 01FF h (Fig. 4.1). El PIC12F509 y el PIC16F505 tienen implementadas físicamente 1 K posiciones.

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

4.2. COMPORTAMIENTO DEL PC Cuando en un programa se llama a una subrutina con la instrucción CALL, el valor del PC se salva en la Pila para que cuando se termine la subrutina y se retorne al programa principal (RETLW) se recupere de la Pila el valor almacenado, se cargue en el PC y nuevamente continúe el flujo de control del programa en la instrucción siguiente a CALL.

LAS MEMORIAS

51

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 responsabilidad 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 ejecutar, 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.

Con la instrucción de llamada a subrutina CALL sólo se proporcionan los 8 bits de menos peso que se cargan en los correspondientes del PC, pasando a valer 0 el noveno bit del Contador de Programa, lo que implica que cualquier subrutina debe comenzar siempre en las 256 primeras posiciones de la memoria (28) del PIC12F508 (Fig. 4.5).

4.4. LA MEMORIA DE DATOS 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 primeros registros son específicos (SFR) porque sus bits gobiernan el comportamiento de los recursos del procesador. Actúan como registros de control. Los restantes veinticinco 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:

— Direccionamiento directo. La dirección a acceder en la RAM viene determinada por los 5 bits de menos peso del código binario de la instrucción (Fig. 4.7).

— Direccionamiento indirecto. La dirección a acceder en la RAM del PIC12F508 la proporcionan los 5 bits de menos peso del registro especial FSR (Fig. 4.8).

LAS MEMORIAS

53

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

Figura 4.8. En el direccionamiento indirecto en el PIC12F508, la dirección a acceder en la RAM viene determinada por los 5 bits de menos peso del registro especial FSR.

4.5. LOS REGISTROS ESPECIALES SFR Las siete primeras posiciones o registros de la memoria de datos RAM tienen a sus bits asignados a controlar el funcionamiento de diferentes elementos del microcontrolador. No se pueden usar para guardar datos del usuario. Es muy importante grabar en los bits de estos registros los valores correctos para conseguir que el comportamiento del dispositivo sea el adecuado. A continuación se pasan a describir los nombres, la misión y un ejemplo de aplicación de los siete registros especiales. — INDF: Este registro ocupa la dirección 00 h de la RAM y no se halla implementado físicamente. Se usa en la nomenclatura de las instrucciones con direccionamiento indirecto, pero los bits que se utilizan para conformar la dirección del dato a acceder son los 5 bits de menos peso del registro especial FSR, que sí se halla implementado.

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. MOVLW MOVWF CLRF

0x10 FSR INDF

; Carga o mueve el dato 10 h en W ; Mueve el contenido de W al registro FSR ; Borra el contenido de la dirección ; indirecta formada por los 5 bits de menos ; peso de FSR

LAS MEMORIAS

55

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

— GPWUF: Bit de reset por cambio de estado en una patita de entrada 1: Se ha producido un reset por cambio de estado en una patita de entrada. 0: Se ha producido un reset por conexión de la alimentación u otra causa. — PA0: Bit de selección de página en la memoria de programa. Cada página tiene 512 posiciones; por eso, en el PIC12F508 sólo dispone de la página 0. En el PIC12F509 existen dos páginas, la 0 y la 1. 1: Selecciona la página 1 de la memoria de programa (0200 h-03FF h). 0: Selecciona la página 0 de la memoria de programa (0000 h-01FF h). — TO#: Timer Out (Desbordamiento del WDT) 1: Al conectar la alimentación o al ejecutar CLRWDT o SLEEP. 0: Al desbordarse el WDT.

56

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

— PD#: Power-Down (Modo de Bajo Consumo) 1: Se pone con este valor el bit al conectar la alimentación o al ejecutar la instrucción CLRWDT. 0: El procesador entra al modo de bajo consumo al ejecutarse la instrucción SLEEP. — DC: Acarreo/llevada en el cuarto bit del resultado para las instrucciones ADDWF/SUBWF 1: Se ha producido acarreo en el cuarto bit del resultado con la instrucción ADDWF. 0: No se ha producido acarreo en el cuarto bit del resultado tras ejecutar ADDWF. «El valor que toma este bit para señalizar la llevada en el cuarto bit del resultado tras ejecutar la instrucción SUBWF es el contrario que para el acarreo». — 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. — C: Acarreo/llevada en el bit de más peso del resultado (ADDWF, SUBWF, RRF, RLF) 1: Si se ejecuta ADDWF y hay acarreo o si se ejecuta SUBWF y no hay llevada. 0: No hay acarreo al ejecutar ADDWF y si se ejecuta SUBWF indica que hay llevada. Con RRF y RLF, el valor de C se corresponde con el de menos peso o el de más peso, respectivamente, del registro que se rota. — OSCCAL: Es el registro de calibración para el oscilador interno Su misión es calibrar la frecuencia de funcionamiento del oscilador interno a 4 MHz. El valor que hay que usar en la calibración (XX) lo proporciona el fabricante en la última posición de la memoria de programa (01FF h) del PIC12F508, en la que ha grabado durante la fabricación la instrucción MOVLW 0 × XX. Al producirse un reset, el PC apunta dicha dirección y la ejecuta cargando en W el valor XX h de calibración. Luego, el PC se desborda y pasa a apuntar la primera dirección 0000 h accediendo al Vector de Reset, en donde reside la instrucción MOVWF OSCCAL, que carga en el registro OSCCAL el valor XX depositado en W. Como el valor de calibración que almacena OSCCAL se borra frecuentemente al estar en RAM volátil, cada vez que se produce un reset y se reinicializa, el programa se restaura. El valor de calibración XX se guarda en los 7 bits de más peso de OSCCAL (Fig. 4.10).

Figura 4.10. El valor de calibración se guarda en los 7 bits de más peso de OSCCAL.

LAS MEMORIAS

CAL6

CAL5

CAL4

CAL3

CAL2

CAL1

CAL0

0 — 0 0 1 — 1

1 — 0 0 1 — 0

1 — 0 0 1 — 0

1 — 0 0 1 — 0

1 — 0 0 1 — 0

1 — 0 0 1 — 0

1 — 1 0 1 — 0

57

Frecuencia oscilador interno Máxima Media 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 borra el valor de calibración almacenado en la dirección 01FF h, por lo que se debe leer previamente y restaurarlo. — GPIO: Registro de las líneas de E/S. Las líneas de E/S GP5-GP0 se corresponden con los 6 bits de menos peso del registro GPIO correspondiente al valor de las líneas de E/S. Una lectura de GPIO supone leer el estado lógico actual de las líneas de entrada asociadas, mientras que una escritura sobre GPIO supone sacar valores lógicos por las líneas de salida correspondientes.

4.5. LAS MEMORIAS DEL PIC12F509 Y DEL PIC16F505 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) corresponde 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 registros 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

Para seleccionar el banco de datos a acceder en el PIC16F505 se utilizan los bits 5 y 6 del registro FSR. Además, como este microcontrolador tiene más patitas de E/S que los PIC12F508/509, existen dos registros de E/S para intercambiar la información con el exterior, que son las Puertas B y C (PORTB y PORTC).

Figura 4.12. La memoria FLASH del PIC12F509 y del PIC16F505 consta de 1 K posiciones de 12 bits cada una.

Figra 4-13. Mapa de la memoria de datos del PIC12F509.

LAS MEMORIAS

59

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.

Figura 4.15. Estructura de la memoria de datos del PIC16F505.

Recursos y periféricos principales

CAPÍTULO

5

5.1. EL CICLO DE INSTRUCCIÓN El oscilador principal que sincroniza el procesador es fundamental porque establece la duración del ciclo de reloj en el que se efectúan las operaciones elementales y, en consecuencia, determina el tiempo que tarda en ejecutarse una instrucción. La mayoría de las instrucciones tardan un ciclo de instrucción en ser ejecutadas excepto las de salto, que tardan el doble. El ciclo de instrucción se compone de cuatro ciclos de reloj, llamados Q1, Q2, Q3 y Q4. Durante Q1, el Contador de Programa apunta la instrucción a ejecutar y se incrementa una unidad (Fase de Búsqueda de la Instrucción). A continuación, se accede a la memoria de programa FLASH, se lee el contenido de la posición y dicho valor, que es el código máquina o binario de la instrucción a ejecutar, se almacena en el Registro de Instrucción durante Q4. Al mismo tiempo que se realiza la búsqueda de la instrucción que apunta el PC, se procede a ejecutar la instrucción buscada en el ciclo de instrucción anterior. Durante Q2 se lee la memoria de datos y durante Q4 se escribe. De esta manera, en el mismo ciclo de instrucción, se efectúa la búsqueda de una instrucción y la ejecución de la anterior (Fig. 5.1). Al estar segmentado el cauce del procesador en dos etapas independientes (Búsqueda y Ejecución), durante un ciclo de instrucción se realiza la búsqueda de la instrucción en curso y la ejecución de la anterior, lo que supone que cada instrucción se ejecuta en un ciclo de instrucción. Las instrucciones de salto, como no emplean la dirección incrementada automáticamente del PC, deben repetir la fase de búsqueda y por eso tardan dos ciclos de instrucción (Fig. 5.2).

EJEMPLO Un PIC12F508 funciona con su oscilador interno a 4 MHz en la ejecución de un programa 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.1. Representación de tres ciclos de instrucción consecutivos.

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

5.2. EL OSCILADOR PRINCIPAL Para generar los ciclos de reloj que conforman el ciclo de instrucción, los dispositivos PIC12F508/509 disponen de cuatro tipos posibles de osciladores. LP : XT: EXTRC: INTRC:

Oscilador externo de bajo consumo con cristal de cuarzo o resonador. Oscilador externo de alta frecuencia con cristal o resonador. Oscilador externo RC. Oscilador interno de 4 MHz.

El tipo de oscilador elegido hay que programarlo en los bits FOSC de la Palabra de Configuración.

5.2.1. Osciladores externos con cristal de cuarzo o resonador Los cristales de cuarzo y los resonadores cerámicos tienen la propiedad de oscilar a una frecuencia determinada muy precisa que asegura el funcionamiento del oscilador principal. En el tipo LP, la frecuencia de trabajo es de 32 KHz, mientras que en el XT puede ser de 200 KHz, 1 MHz o 4 MHz. En la Figura 5.3 se muestra el conexionado del cristal XTAL a las patitas RB5/GP5/OSCIN (CLKIN) y RB4/GP4/OSC2 (CLKOUT).

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.

Tipo Oscilador

Frecuencia

C1

C2

LP

32 KHz

15 pF

15 pF

XT

200 KHz 1 MHz 4 MHz

47-68 pF 15 pF 15 pF

47-68 pF 15 pF 15 pF

Figura 5.4. Valores de los condensadores C1 y C2 correspondientes al esquema de la Figura 5.3.

64

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

5.2.2. Oscilador externo RC En lugar de usar un cristal o un resonador, se coloca una red R-C externa que supone una considerable reducción del coste, pero una estabilidad de la frecuencia muy mediocre. La frecuencia del oscilador depende de los valores de R y C. También influye en la frecuencia la temperatura del ambiente de trabajo (Fig. 5.5).

Figura 5.5. El oscilador externo RC es barato, pero poco preciso. Si REXT = 10 K y CEXT = 20 pF, la frecuencia 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.

5.2.3. Oscilador externo Es un tipo de oscilador que se caracteriza porque se emplea un oscilador externo independiente cuya salida se aplica a la patita OSC1 (Fig. 5.6).

5.2.4. Oscilador interno Es la opción más económica y sencilla, ya que no precisa de componentes externos. El tipo de oscilador INTRC proporciona una frecuencia de trabajo de 4 MHz con una

RECURSOS Y PERIFÉRICOS PRINCIPALES

65

Figura 5.6. Conexionado de un oscilador externo que actúa como reloj principal.

tensión de alimentación de + 5 VDC y una temperatura de 25 grados. Para calibrar el oscilador a la frecuencia indicada se proporciona de fábrica un «valor de calibración» (XX) que viene guardado en la última posición de la memoria de programa en forma de instrucción MOVWL XX. Con dicha instrucción, que es la primera que se ejecuta tras un reset, se carga en W el valor XX y luego en la siguiente instrucción, que será la de la dirección 000 h, se carga dicho valor con la instrucción MOVWF OSCCAL en el registro OSCCAL, que tiene funciones de ajuste del oscilador interno. Si se borra la memoria de programa también se borra el valor XX de calibración, por lo que debe ser leído y memorizado antes de proceder al borrado.

5.3. «RESET» O REINICIALIZACIÓN Cuando se produce un reset en el PIC12F508, el PC pasa a tomar el valor 1 en todos sus bits, apuntando la última posición de la última página disponible de la memoria de programa en donde se encuentra grabada en fábrica la instrucción MOVWL XX. Se ejecuta dicha instrucción y luego el PC se desborda y pasa a valer 0, apuntando la posición inicial (Vector de Reset) correspondiente a la primera instrucción del programa del usuario, que es MOVWF OSCCAL. El reset o reinicialización del procesador se produce por seis causas diferentes: 1.a Conexión de la alimentación (POR: Power On Reset). 2.a Activación por nivel bajo de la patita MCLR# estando el procesador en modo ejecución. 3.a Activación de MCLR# en modo de bajo consumo (SLEEP). 4.a Desbordamiento del Perro Guardián (WDT) en modo ejecución. 5.a Desbordamiento del Perro Guardián en modo de bajo consumo. 6.a Salida o «despertar» del modo de bajo consumo por cambio de estado en una patita de entrada.

A veces, cuando arranca el programa de aplicación del usuario, puede comportarse de forma diferente según las condiciones en las que se produjo el reset. Mediante 3 bits del Registro de Estado (STATUS) se conoce la causa que provocó el último reset en el procesador (Fig. 5.7).

66

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

GPWUF

TO#

PD#

Causa del «reset»

0 0 0 0 0 1

0 0 1 1 U 1

0 U 0 1 U 0

Desbordamiento del WDT en el modo SLEEP. Desbordamiento del WDT en ejecución. Activación del MCLR# en el modo SLEEP. Conexión de alimentación. Activación de MCLR# en el modo ejecución. Despertar del modo SLEEP por cambio de estado de una patita de entrada.

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. Registro W INDF TMR0 PC STATUS FSR4 FSR5 OSCCAL GPIO OPTION TRIS

Dirección

POR

Activación MCLR#, desbordamiento del WDT y salida de SLEEP por cambio de estado

— 00 h 01 h 02 h 03 h 04 h 04 h 05 h 06 h — —

qqqq qqqu1 xxxx xxxx xxxx xxxx 1111 1111 0001 1xxx 110x xxxx 111x xxxx 1111 111--xx xxxx 1111 1111 --11 1111

qqqq qqqu1 uuuu uuuu uuuu uuuu 1111 1111 q00q quuq2, 3 11uu uuuu 111u uuuu uuuu uuu--uu uuuu 1111 1111 --11 1111

Leyendas: u=no cambia; x=aleatorio; - = no implementado; q=depende de la condición. Notas: 1 Los bits del registro W contienen el valor de calibración al ejecutar MOVLW XX. 2 Consultar las condiciones específicas. 3 Si el reset es por cambio de estado, el bit 7=1; en los demás casos, el bit 7 = 0. 4 Sólo en el PIC12F509. 5 Sólo en el PIC12F508.

Figura 5.8. Tabla que muestra el valor de los bits de los registros especiales según el reset que se haya producido.

5.4. LAS LÍNEAS DE E/S Los microcontroladores PIC12FXXX, al estar encapsulados con ocho patitas y destinar forzosamente dos a la alimentación, sólo disponen de un máximo de seis para la conexión de periféricos externos siempre que se use oscilador interno y no se emplee la patita MCLR# para poder originar un reset manual. Las líneas de E/S se corresponden con los bits de un registro que se llama GPIO o PORTB. Dichos registros son de 8 bits,

RECURSOS Y PERIFÉRICOS PRINCIPALES

67

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 indistintamente. 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 memoria 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». La función que realiza cada patita se programa en la Palabra de Configuración.

Asociado al registro GPIO está el registro TRIS, el cual está implementado independientemente fuera de la memoria de datos. Sólo se puede acceder a él con la instrucció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 temporizador 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 excepció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 contrario, 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 registro. 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 correspondiente 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.

5.5. EL TEMPORIZADOR TMR0 El módulo temporizador TMR0 es un contador de 8 bits ascendente cuyo valor se incrementa automáticamente con cada impulso de reloj y tiene las siguientes características: 1.a Dispone de un registro TMR0 en la zona SFR de la memoria de datos que puede funcionar 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 externo, pudiendo en este último caso seleccionar el flanco activo.

En la Figura 5.12 se muestra el esquema de la estructura del módulo TMR0 junto a las señales de control, que son T0CS, T0SE, PSA, PS2, PS1 y PS0 y residen en el registro OPTION. El bit T0CS selecciona en el MPX1 la entrada del reloj interno del microcontrolador (FOSC /4) cuando vale 0, y en caso contrario, el reloj externo aplicado a la patita GP2/T0CKI. Tanto los impulsos internos como los externos pueden aplicarse al contador directamente o a través de un predivisor de frecuencia o «preescaler», que divide su número por un rango seleccionable. El registro TMR0 está ubicado en la dirección 0 × 01 de la memoria de datos y cada vez que recibe un impulso de reloj incrementa su valor automáticamente. Cuando llega al valor máximo (1111 1111), con el siguiente impulso de reloj se «desborda» y pasa a valer 0000 0000. Mediante los bits PS2, PS1 y PS0 se selecciona el rango por el que divide los impulsos de reloj el predivisor de frecuencia, que puede llegar desde 1:2 (0, 0, 0) hasta 1:256 (1, 1, 1).

Figura 5.12. Estructura del módulo TMR0 con sus señales de control.

70

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

El módulo TMR0 tiene dos modos de trabajo: 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 carga con 0000 0000. Si se usa el predivisor, se puede dividir la frecuencia de los impulsos desde el rango 2 hasta el 256, en cuyo caso para calcular el tiempo se usa la siguiente fórmula: T = (4 / FOSC) × Complemento del valor cargado en TMR0 × Rango Predivisor

B) Modo contador de eventos En este modo, se selecciona el oscilador externo, cuya salida se aplica a la patita GP2/ T0CKI. En esta situación, son los impulsos aplicados a dicha patita los que hacen incrementar el valor depositado en TMR0. Con el bit T0SE del registro OPTION se elige el tipo de flanco activo, ascendente o descendente. Para averiguar el momento en que TMR0 se desborda y su valor pasa de 1111 1111 a 0000 0000 lo que se hace es cargar el TMR0 en W (MOVF TMR0, W), luego se chequea si el bit Z (Cero) del registro STATUS vale 1, y si es así, es que se han cargado todos 0 en W. Para conocer si Z = 1 se usa la instrucción condicional BTFSS STATUS, Z, que salta la siguiente instrucción si Z = 1, mientras que si Z = 0 no se salta la siguiente instrucción. MOVF TMR0, W BTFSS STATUS, Z

; Mueve el valor de TMR0 a W ; Si Z = 1, se salta la siguiente instrucción, ; y si Z = 0, no se la salta.

5.5.1. El registro OPTION Este registro, que se halla situado fuera de la memoria de datos, tiene la mayoría de sus bits dedicados al módulo TMR0 (Fig. 5.13). Sólo puede ser accedido con la instrucción OPTION, que carga el valor de W en él.

Figura 5.13. Distribución y nomenclatura de los bits del registro OPTION.

RECURSOS Y PERIFÉRICOS PRINCIPALES

71

La misión de los bits de OPTION es la siguiente: PS2, PS1 y PS0 Con estos 3 bits se establece el rango por el que divide los impulsos de reloj el predivisor para el TMR0, desde 0-0-0 (rango 2) hasta 1-1-1 (rango 256) (Fig. 5.14). PS2-PS1-PS0

Rango TMR0

Rango WDT

000 001 010 011 100 101 110 111

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

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

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 Timer), 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 predivisor, 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.

5.6. EL PERRO GUARDIÁN (WDT: «WATCH DOG TIMER») Es un temporizador de 8 bits independiente que se alimenta de los impulsos de reloj procedentes de su propio oscilador RC; por dicha causa, sigue funcionando aunque se entre en el modo de bajo consumo y se pare el oscilador principal del procesador. Cada vez que se desborda o pasa de 1111 1111 a 0000 0000 el WDT, se genera un reset. Su misión es vigilar la correcta ejecución de las instrucciones del programa, de forma que cuando queda bloqueado o en un bucle cerrado, el Perro Guardián se desborda e inicializa desde el principio el sistema. El WDT comienza a incrementarse desde el principio del programa, y cuando todo va bien, se coloca la instrucción CLRWDT en puntos estratégicos, que pone a 0 o inicializa o «refresca» el WDT. Si se bloquea el flujo de instrucciones en algún punto del programa o por alguna anomalía no se alcanza a tiempo la instrucción CLRWDT, se produce el desbordamiento del WDT y el reset que origina. El bit TO# (Timer Out) del registro STATUS, cuando pasa a valer 0, indica que se ha producido un reset por desbordamiento del Perro Guardián. El funcionamiento de WDT es opcional, existiendo el bit WDTE en la Palabra de Configuración, que, según valga 1 o 0, permite o prohíbe su funcionamiento. El bit PSA de OPTION asigna el predivisor de frecuencia al TMR0 o al WDT (Fig. 5.15).

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

Cuando el WDT no emplea el divisor de frecuencias, por defecto tiene un período de desbordamiento de 18 ms. Para aumentar dicho tiempo, se puede configurar el rango del divisor hasta 1:128, con lo que se permite alcanzar un tiempo de desbordamiento de 2,3 s. En realidad, el divisor de frecuencia actúa con el WDT como posdivisor, puesto que divide los impulsos que salen del Perro Guardián. La instrucción CLRWDT pone a 0 el valor del WDT. También la instrucción SLEEP que pasa al procesador al modo de bajo consumo, pone a 0 al WDT, aunque éste sigue funcionando con su oscilador propio. Como el divisor de frecuencia se asigna por software al TMR0 o al WDT, es posible su modificación a lo largo del programa actuando sobre el bit PSA de OPTION. Si se produce un reset imprevisto, el bit PSA toma el valor que corresponde la asignación al TMR0 del divisor de frecuencia, y se recomienda introducir para estos casos el siguiente programa para reestablecer el divisor al WDT. CLRWDT

; Borra o pone a 0 el WDT

CLR TMR0

; Borra el TMR0 y el divisor

MOVLW ‘00xx1111’b

; PSA=PS2=PS1=PS0=1

CLRWDT

; PS2 a 000 o a 111

MOVLW ‘00xx1xxx’b

; Programa el rango deseado

OPTION

; xxx para rango divisor del WDT

Para cambiar la asignación del divisor de frecuenta del WDT al TMR0 se debe usar el siguiente programa: CLRWDT

; Borra al WDT y al divisor

MOVLW ‘xxxx0xxx’b

; Asigna el divisor al TMR0

OPTION

; con el rango xxx deseado.

CAPÍTULO

Recursos auxiliares

6

6.1. EL MODO DE BAJO CONSUMO Los modelos industriales PIC12F508/509 admiten un rango de temperatura comprendido entre – 40 °C y + 85 °C, pudiéndoles alimentar con una tensión comprendida entre 2,0 y 5,5 V. Trabajando con 2 V y 4 MHz, la corriente de funcionamiento siempre es inferior a 350 µA y el valor típico es de 170 µA. Cuando el microcontrolador entra en el modo de bajo consumo, también llamado standby y SLEEP, el consumo típico de corriente es de 0,1 µA con una tensión de 2,0 V. Es decir, en este modo de trabajo, el consumo se rebaja en más de mil veces, aspecto muy significativo cuando se emplea en sistemas portátiles alimentados con baterías (Fig. 6.1).

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

Al modo de bajo consumo se entra cuando se ejecuta la instrucción SLEEP en el programa, y si en ese instante el Perro Guardián está activado, se refresca, pero sigue funcionando a partir del valor inicial. Al entrar en modo de bajo consumo se detiene el oscilador principal del procesador y se detiene la ejecución de instrucciones, también se «congelan» las líneas de E/S. Al tener su propio oscilador, el WDT, aunque se refresca, sigue trabajando al entrar al modo de bajo consumo. En este modo, la patita (GP2/RB2)/T0CKI debe estar conectada a VDD o a VSS y la (GP3/RB3)/MCLR#/VPP debe tener nivel alto cuando actúa como MCLR#. Para «despertar» al procesador o salir del modo de bajo consumo existen tres causas: 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 desbordado 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. 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. 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.

Indiferentemente de la causa que provoque el despertar del procesador, el WDT se refresca siempre.

6.2. LA PALABRA DE CONFIGURACIÓN Los PIC12F508/509 disponen de una posición en la memoria FLASH que se denomina «Palabra de Configuración» y cuyos 5 bits de menos peso controlan funciones importantes del procesador. Los 7 bits de más peso no están implementados y se leen siempre 0 (Fig. 6.2). A la Palabra de Configuración sólo puede accederse en la fase de grabación.

Figura 6.2. Distribución de los 5 bits válidos de la Palabra de Configuración.

RECURSOS AUXILIARES

77

La misión de los bits de la Palabra de Configuración es la siguiente: — MCLRE: Control de la función de la patita GP3/MCLR# 1: La patita GP3/MCLR# funciona como MCLR#. 0: Actúa como patita de entrada digital GP3, estando internamente conectada a la tensión positiva la función MCLR# . — CP#: Protección de código 1: No hay protección del código. 0: Hay protección del código y no se puede leer la memoria de programa. Si no se programa el bit CP#, por defecto se puede leer el código. Independientemente del valor del CP#, las sesenta y cuatro primeras posiciones de la memoria de programa y la última (valor de calibración para OSCCAL) se pueden leer siempre. — WDTE: Permite el funcionamiento del WDT 1: El WDT funciona. 0: No funciona el WDT. — FOSC: Selecciona el tipo de oscilador 11: EXTRC (externo). 10: INTRC (interno). 01: Tipo XT. 00: Tipo LP. La Palabra de Configuración sólo es accesible durante el proceso de grabación de la memoria de programa y no responde a una dirección concreta del mapa.

6.3. POSICIONES DE IDENTIFICACIÓN ID Hay cuatro posiciones de la memoria de programa reservadas para labores de «identificación» del dispositivo, que se denominan ID, en las cuales el usuario puede grabar en los 4 bits de menos peso números, códigos o claves que le permitan averiguar ciertas características a lo largo del tiempo (versión, año de fabricación, versión del software, precio, etc.). Sólo se pueden grabar los 4 bits de menos peso de estas cuatro posiciones, leyéndose siempre 0 los ocho restantes. Al igual que la Palabra de Configuración, las posiciones ID no son accesibles durante la ejecución normal del programa y sólo pueden ser leídas o escritas en la fase de grabación/verificación.

6.4. PROGRAMACIÓN SERIE EN CIRCUITO (ICSPTM) En general, todos los microcontroladores PIC pueden ser grabados con el programa de aplicación una vez que el circuito integrado esté montado en la tarjeta final. Esto permite a los fabricantes disponer de las tarjetas a incluir en los productos totalmente terminadas

78

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

Figura 6.3. Conexionado del microcontrolador para proceder a la grabación del programa en la memoria FLASH en serie (ICSPTM).

a falta de grabar el programa en el microcontrolador. Así, la grabación se efectúa justo antes de ser entregado al cliente final, pudiéndose introducir el firmware más actual. La grabación de la memoria FLASH se realiza transmitiendo la información en serie usando una línea para introducir los datos (GP0/ICSPDAT) y otra que introduce los impulsos de reloj para la sincronización (GP1/ICSPCLK). Además, se precisan otras tres líneas más: una para la alimentación positiva (VDD), otra para tierra (GND) y una última para aplicar por ella el voltaje especial VPP que se necesita para la grabación y que suele ser algo inferior a 13,5 V (Fig. 6.3). Para iniciar el modo de trabajo para la Programación/Verificación basta aplicar por la patita MCLR#/VPP un voltaje superior a VDD, que suele ser de unos 13 V, mientras se mantienen a nivel bajo las patitas GP0 y GP1. A partir de ese momento, la patita GP0 actúa como entrada y salida de datos en serie y GP1 recibe los impulsos de reloj que sincronizan la transferencia entre el microcontrolador y el exterior.

6.5. «RESET» AL CONECTAR LA ALIMENTACIÓN (POR: «Power On Reset») En la mayor parte de los microcontroladores, como en el PIC12F508/509, se incluye un circuito que produce un reset cuando se conecta la alimentación al microcontrolador. Dicho circuito, llamado POR (Power On Reset), mantiene al PIC en estado de reset hasta que el voltaje de alimentación, VDD, alcance el valor suficiente para el funcionamiento correcto del sistema. El POR permite utilizar la patita GP3/MCLR#/VPP en funciones de entrada o salida desde el principio, ya que el reset se provoca automáticamente y mantiene dicho estado hasta que se alcancen las condiciones de trabajo adecuadas en cuanto al voltaje, frecuencia, temperatura, etc. En la Figura 6.4 se muestra el esquema eléctrico de control del reset. Apréciese en la Figura 6.4 que tanto POR como DTR se activan al conectar la alimentación al microcontrolador, mientras que POR activa la entrada S (SET) del flip-flop; al cabo de un cierto tiempo, controlado por DTR, se activa la entrada R (RESET) y se produce el RESET# principal del sistema.

RECURSOS AUXILIARES

79

Figura 6.4. Esquema general para la generación del reset.

6.6. TEMPORIZADOR DE «RESET» (DTR: «Device Reset Timer») El DTR es un temporizador que comienza el control del tiempo en el que se retrasa la generación del reset cuando se conecta la alimentación. Funciona como un oscilador RC interno y su valor varía dependiendo del oscilador que se emplee y el tipo de reset que se provoque. La misión del DTR es mantener reseteado al dispositivo hasta que no complete su período de temporización para permitir que tanto la tensión de alimentación suba hasta el mínimo necesario como la frecuencia de trabajo se estabilice. También se activa el DTR cuando se desborda el WDT trabajando en el modo de bajo consumo, lo que resulta muy útil en aplicaciones en las que se emplea el WDT para despertar automáticamente al procesador.

Figura 6.5. Circuito BOR que genera un reset cuando VDD < VZ + 0,7.

80

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

6.7. «RESET» POR BAJADA DE LA ALIMENTACIÓN (BOR: «Brown Out Reset») Así como se produce un reset al conectar la alimentación (POR), cuando la tensión de alimentación, VDD, baja del valor mínimo que precisa el microcontrolador para funcionar correctamente, sin llegar a 0, y después recupera su valor hasta ser aceptable, también conviene generar un reset. A esta condición de reset se la conoce como Brown Out Reset (BOR) y en la Figura 6.5 se presenta el esquema del circuito BOR que activará el reset cuando VDD baje del valor (VZ + 0,7), siendo VZ la tensión Zener del diodo.

CAPÍTULO

El repertorio de instrucciones

7

7.1. CARACTERÍSTICAS GENERALES Y TIPOS DE INSTRUCCIONES Los microcontroladores PIC de 8 bits de la gama básica soportan un repertorio de treinta y tres instrucciones de 12 bits de longitud de código máquina cada una. Son muy ortogonales, teniendo mucha flexibilidad para escoger los operandos y el destino. Hay cuatro grandes grupos de instrucciones, 1.o Instrucciones orientadas a manejar datos de tamaño byte. 2.o Instrucciones orientadas a manejar bits. 3.o Instrucciones orientadas a manejar constantes o literales (valores inmediatos). 4.o Instrucciones de control.

Las instrucciones más usadas y numerosas son las que manipulan bytes. Frecuentemente, 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 representados 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 instrucciones en Ensamblador.

Todas las instrucciones tardan en ejecutarse un ciclo de instrucción (4 × TOSC), excepto las de salto, que tardan el doble.

EL REPERTORIO DE INSTRUCCIONES

83

7.2. FORMATO DE LAS INSTRUCCIONES Los 12 bits que codifican en lenguaje máquina o binario las instrucciones de los PIC de la gama básica se dividen en varios campos que sirven para identificar los operandos, el destino, el valor inmediato o literal, el bit al que afecta o la dirección del salto. Los bits de más peso del código de la instrucción se reservan para el código OPCODE, que identifica la instrucción que se trata. Las instrucciones que manejan datos de tamaño byte suelen emplear a un registro (posición de la memoria de datos) cuya dirección f viene determinada por un campo de 5 bits. El destino de estas instrucciones puede ser el propio registro f o el registro W, según el bit d valga 1 o 0, respectivamente. Por defecto, se supone que d = 1 (Fig. 7.2).

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 contenido del registro de datos ubicado en la dirección 0x08 de la memoria de datos al registro W.

Solución 001000001000

Las instrucciones orientadas a manipular un bit concreto de un registro de datos tienen el formato de la Figura 7.3 y destinan los 3 bits del campo b a definir el bit afectado.

Figura 7.3. Formato de las instrucciones orientadas a manejar un bit b de un registro f.

84

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

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

Solución 110011111111

Las instrucciones GOTO, que producen un salto incondicional a una posición de la memoria del programa, manejan un literal de 9 bits que representan los 9 bits de menos peso de la dirección a la que saltan (Fig. 7.5).

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.

85

EL REPERTORIO DE INSTRUCCIONES

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

La instrucción de control CLRWDT refresca o inicializa el valor del Perro Guardián y tiene de código máquina fijo 000000000100. En la tabla de la Figura 7.6 se presenta el valor de los 12 bits del código binario correspondiente a las treinta y tres instrucciones de la gama básica junto a ciertas características de interés.

INSTRUCCIONES ORIENTADAS AL MANEJO DE BYTES Nemónico operandos

Descripción

Ciclos

Formato 12 bits MSb LSb

Bits afectados Notas STATUS

ADDWF

f, d

Suma W y f

1

0001 11df ffff

C, DC, Z

1, 2, 4

ANDWF

f, d

Operación lógica AND de W yF

1

0001 01df ffff

Z

2, 4

CLRF

f

Establece f a ceros

1

0000 011f ffff

Z

4

CLRW



Establece W a ceros

1

0000 0100 0000

Z

COMF

f, d

Complementa f

1

0010 01df ffff

Z

86

MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES INSTRUCCIONES ORIENTADAS AL MANEJO DE BYTES (Continuación) Nemónico operandos

Descripción

DECF

f, d

Decrementa f

DECFSZ

f, d

Decrementa f y salta si cero

INCF

f, d

Incrementa f

INCFSZ

f, d

Incrementa f y salta si cero

Bits afectados Notas STATUS

Ciclos

Formato 12 bits MSb LSb

1

0000 11df ffff

Z

2, 4

1o2

0010 11df ffff

Ninguno

2, 4

1

0010 10df ffff

Z

2, 4

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 acarreo

1

0011 01df ffff

C

2, 4

RRF

f, d

Rotar a derecha a través del acarreo

1

0011 00df ffff

C

2, 4

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 de W y f

1

0001 10df ffff

Z

2, 4

INSTRUCCIONES ORIENTADAS A MANEJO DE BITS 1

0100 bbbf ffff

Ninguno

2, 4

1

0101 bbbf ffff

Ninguno

2, 4

1o2

0110 bbbf ffff

Ninguno

0111 bbbf ffff

Ninguno

BCF

f, b

Borrar el bit b de f

BSF

f, b

Establece a 1 el bit b de f

BTFSC

f, b

Brinca si el bit b de f es cero

BTFSS

f, b

Brinca si el bit b de f es uno

1o2

INSTRUCCIONES DE CONTROL Y DE MANEJO DE LITERALES ANDLW

k

AND entre W y el literal k

1

1110 kkkk kkkk

Z

CALL

k

Llamada a subrutina

2

1001 kkkk kkkk

Ninguno

CLRWDT



Refrescar Perro Guardián

1

0000 0000 0100

TO#, PD#

GOTO

k

Salto incondicional

2

101k kkkk kkkk

Ninguno

IORLW

k

Operación lógica OR con el literal k

1

1101 kkkk kkkk

Z

MOVLW

k

Mueve el literal a W

1

1100 kkkk kkkk

Ninguno

OPTION



Carga el registro OPTION

1

0000 0000 0010

Ninguno

RETLW

k

Retorno subrutina, devuelve k en W

2

1000 kkkk kkkk

Ninguno

1

87

EL REPERTORIO DE INSTRUCCIONES INSTRUCCIONES DE CONTROL Y DE MANEJO DE LITERALES (Continuación) Nemónico operandos

Descripción

Ciclos

Formato 12 bits MSb LSb

Bits afectados Notas STATUS

SLEEP



Entra en modo SLEEP

1

0000 0000 0011

TO#, PD#

TRIS

f

Carga el registro TRIS

1

0000 0000 0fff

Ninguno

XORLW

k

OR exclusiva con W y el literal k

1

1111 kkkk kkkk

Z

3

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

7.3. DESCRIPCIÓN DE LAS INSTRUCCIONES CON EJEMPLOS Se procede a la descripción, por orden alfabético, de las treinta y tres instrucciones de la gama básica junto a las características relevantes. ADDWF

Suma W y el registro f

Sintaxis

ADDWF f, d

Operación

(W) + (f) → (dest)

Operandos

0  f  31 d  [0,1]

Señalizadores afectados

C, DC y Z

Ciclos instrucción Formato binario Descripción

1 0001 00df ffff Suma el contenido del registro W con el del registro f. Si d = 0, el resultado lo almacena en W, y si d = 1, en f. Por defecto, d = 1.

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

ANDLW

Operación AND de W y un literal k

Sintaxis

ANDLW k

Operación

(W) and K → (W)

Operandos

0  k  255

Señalizadores afectados

Z

Ciclos instrucción

1

Formato binario Descripción

1110 kkkk kkkk Con el contenido de W se realiza la operación lógica bit a bit con el literal k, depositándose el resultado en W.

Ejemplo ANDLW 0x0F Se realiza la AND lógica bit a bit del contenido de W con el inmediato 0x0F, depositándose en W el resultado.

ANDWF

Operación AND de W con el registro f

Sintaxis

ANDWF f, d

Operación

(W) and (f) → (dest)

Operandos

0  f  31 d  [0,1]

Señalizadores afectados

Z

Ciclos instrucción

1

Formato binario Descripción

0001 11df ffff El contenido de W efectúa la operación AND bit a bit con el del registro f. Si d = 0, el resultado se carga en W, y d = 1, en f.

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

BCF Sintaxis

Borrar un bit del registro f BCF f, b

Operación

0 → (f < b>)

Operandos

0  f  31 0b7

EL REPERTORIO DE INSTRUCCIONES

Señalizadores afectados

Ninguno

Ciclos instrucción Formato binario Descripción

89

1 0100 bbbf ffff El bit b del registro f se pone a 0.

Ejemplo BCF 0x03, 2 Se pone a 0 el bit 2 del registro de datos con dirección 0x03.

BSF

Poner a 1 un bit del registro f

Sintaxis

BSF f, b

Operación

1 → (f)

Operandos

0  f  31 0b7

Señalizadores afectados

Ninguno

Ciclos instrucción Formato binario Descripción

1 0101 bbbf ffff El bit b del registro f pasa a valor 1.

Ejemplo BSF 0x02, 6 El bit 6 del registro de datos con dirección 0x02 pasa a valer 1.

BTFSC Sintaxis

Explora un bit de un registro y brinca si es 0 BTFSC f, b

Operación

Si el bit b del registro f vale 0, se salta la siguiente instrucción y PC=PC+1 (brinca). Si vale 1, se pasa a la siguiente instrucción (PC=PC+1).

Operandos

0  f  31 0b7

Señalizadores afectados

Ninguno

Ciclos instrucción Formato binario

1 o 2 (si brinca) 0110 bbbf ffff

90

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

Descripción

Si el bit f=0, se salta la siguiente instrucción (brinco) y se ejecuta una NOP en su lugar, por lo que dura dos ciclos de instrucción. Si f=1, se pasa normalmente a ejecutar la siguiente instrucción. Actúa como una instrucción de salto condicional, aunque el salto es más pequeño porque sólo salta la siguiente instrucción. Es un brinco.

Ejemplo BTFSC 0x02, 3 Si el bit 3 del registro 0x02 vale 0, se brinca y se salta la siguiente instrucción.

BTFSS

Explora un bit de un registro y brinca si es 1

Sintaxis

BTFSS f, b

Operación

Si el bit b del registro f vale 1, se brinca (PC=PC+2). Si vale 0, PC=PC+1

Operandos

0  f  31 0b7

Señalizadores afectados

Ninguno

Ciclos instrucción Formato binario Descripción

1 o 2(si brinca) 0111 bbbf ffff Si el bit f=1, se salta la siguiente instrucción (brinco), ejecutándose en su lugar una NOP y tardando dos ciclos de instrucción.

Ejemplo BTFSS 0x04, 5 Si el bit 5 del registro 0x04 vale 1, se brinca (PC=PC+2).

CALL Sintaxis

Llamada a subrutina CALL k

Operación

PC+1 → TOP (Cima de la Pila) K → PC STATUS → PC 0 → PC

Operandos

0  k  255

Señalizadores afectados

Ninguno

EL REPERTORIO DE INSTRUCCIONES

Ciclos instrucción

2

Formato binario Descripción

91

1001 kkkk kkkk Primero se guarda PC+1 en la Cima Pila. Luego, los 8 bits de menos peso Los bits 6 y 5 del STATUS se cargan 2 bits de más peso de PC (9 y 10) y PC=0.

de de en el

la PC. los bit

Ejemplo CALL 0x5B 1. 2. 3. 4.

El valor de PC + 1 se guarda en la Pila PC se cargan con 0x5B PC se cargan con STATUS PC =0

CLRF

Borra el registro f

Sintaxis

CLRF f

Operación

0x00 → (f) y Z ← 1

Operandos

0  f  31

Señalizadores afectados

Z

Ciclos instrucción

1

Formato binario Descripción

0000 011f ffff El contenido del registro de datos de dirección f se pone a 0 y Z = 1.

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 Ciclos instrucción Formato binario Descripción

Z 1 0000 0100 000 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.

CLRWDT

Borrar el perro guardián (WDT)

Sintaxis

CLRWDT

Operación

0 → WDT 0 → predivisor WDT (si tiene) 1 → TO# 1 → PD#

Operandos

Ninguno

Señalizadores afectados

TO# y PD#

Ciclos instrucción

1

Formato binario Descripción

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

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 Operación

COMF f, d Complementa f y lo deposita en el destino.

Operandos

0  f  31 d  [0, 1]

Señalizadores afectados

Z

Ciclos instrucción Formato binario Descripción

1 0010 01df ffff 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

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 Descripción

93

0000 11df ffff 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 defecto, d = 1). Si d = 0, el destino es W.

DECFSZ

Decrementa f, y si vale 0, brinca

Sintaxis

DECFSZ f,d

Operación

Decrementa el registro f, y si vale 0, se salta la siguiente instrucción (brinca).

Operandos

0  f  31 d  [0, 1]

Señalizadores afectados Ciclos instrucción Formato binario

Señalizadores 1 o 2(si brinca) 0010 11df ffff

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.

GOTO

Salto incondicional

Sintaxis

GOTO k

Operación

k → PC STATUS → PC

Operandos

0  k  511

94

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

Señalizadores afectados

Ninguno

Ciclos instrucción

2

Formato binario

101k kkkk kkkk

Ejemplo GOTO 0x0A5 PC ← 01010 0101 PC ← STATUS

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

INCFSZ

Incrementa f y brinca si es cero

Sintaxis

INCFSZ f, d

Operación

(f)+1 → (dest) Y si es 0, brinca

Operandos

0  f  31 d  [0, 1]

Señalizadores afectados Ciclos instrucción Formato binario

Ninguno 1 o 2(si brinca) 0011 11df ffff

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

IORLW

Operación OR de un literal con W

Sintaxis

IORLW k

Operación

(W) OR (k) → (W)

Operandos

0  k  255

Señalizadores afectados

95

Z

Ciclos instrucción

1

Formato binario

1101 kkkk kkkk

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.

IORWF

Operación OR entre W y f

Sintaxis

IORWF f, d

Operación

(W) OR (f) → (dest)

Operandos

0  f  31 d  [0, 1]

Señalizadores afectados

Z

Ciclos instrucción Formato binario

1 0001 00df ffff

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.

MOVLW

Mueve un literal a W

Sintaxis

MOVLW K

Operación

(k) → (w)

Operandos

0  k  255

Señalizadores afectados

Ninguno

Ciclos instrucción

1

Formato binario

1100 kkkk kkkk

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.

NOP

No hace nada

Sintaxis

NOP

Operación

Ninguna

EL REPERTORIO DE INSTRUCCIONES

Operandos

Ninguno

Señalizadores afectados

Ninguno

Ciclos instrucción

97

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.

OPTION

Carga el registro OPTION

Sintaxis

OPTION

Operación

(W) → OPTION

Operandos

Ninguno

Señalizadores afectados

Ninguno

Ciclos instrucción

1

Formato binario

0000 0000 0010

Ejemplo OPTION El contenido del registro W se carga en el registro OPTION.

RETLW

Retorno de subrutina y carga de W con literal

Sintaxis

RETLW

Operación

K → (W) TOS (Cima Pila) → PC

Operandos

0  K  255

Señalizadores afectados

Ninguno

Ciclos instrucción

2

Formato binario

1000 kkkk kkkk

Ejemplo RETLW 0x55 El literal 0x55 se carga en W y el PC se carga con el valor almacenado en la Cima de la Pila (TOS).

98

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

RLF

Rotación a la izquierda a través del acarreo

Sintaxis

RLF f, d

Operación

Figura 7.7

Operandos

0  f  31 y d  [0, 1]

Señalizadores afectados

C

Ciclos instrucción Formato binario

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

RRF Sintaxis

Rotación a la derecha a través del acarreo RRF f, d

Operación

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.

SLEEP

Entrada al modo de bajo consumo

Sintaxis

SLEEP

Operación

0x00 → WDT 0 → Predivisor del WDT TO# = 1 y PD# = 0

Operandos

Ninguno

Señalizadores afectados

TO#, PD# y RBWUF

Ciclos instrucción

1

Formato binario

0000 0000 0011

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 consumo, parándose el oscilador principal y dejando de ejecutar instrucciones.

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

1 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

SWAPF

Intercambia nibles en f

Sintaxis

SWAPF f, d

Operación

F < 3:0> → (dest < 7:4>) F < 7:4> → (dest < 3:0>)

Operandos

0  f  31 y d [0, 1]

Señalizadores afectados

Ninguno

Ciclos instrucción

1

Formato binario

0011 10df ffff

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.

TRIS

Carga el registro TRIS

Sintaxis

TRIS GPIO

Operación

(w) → TRIS (F=6)

Operandos

F=5

Señalizadores afectados

Ninguno

Ciclos instrucción

1

Formato binario

0000 0000 0fff

Ejemplo TRIS GPIO El registro que configura las líneas de E/S de GPIO se carga con el contenido de W.

XORLW

Operación XOR de W con un literal

Sintaxis

XORLW K

Operación

(w) XOR K → (w)

Operandos

0  k  255

Señalizadores afectados Ciclos instrucción Formato binario

Z 1 1111 kkkk kkkk

EL REPERTORIO DE INSTRUCCIONES

101

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.

XORWF

Operación XOR de W con f

Sintaxis Operación Operandos

XORWF f, d (w) XOR K

(f) → (dest)

0  f  31 y d  [0, 1]

Señalizadores afectados

Z

Ciclos instrucción

1

Formato binario

0001 10df ffff

Ejemplo XORWF 0x08, 0 Se realiza la operación lógica XOR de W con el contenido de la dirección 0x08 de la memoria de datos y el resultado se deposita en W. Si d = 1, el destino es f.

APLICACIONES PRÁCTICAS

Simulando los primeros programas con el MPLAB y el MPLAB SIM

a

1.

APLICACIÓN

P1.1. ETAPAS EN UN PROYECTO CON MICROCONTROLADOR Las fases o etapas que hay que realizar para implementar un proyecto basado en microcontrolador se presentan de forma gráfica en el organigrama de la Figura P1.1.

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

gratuitamente el programa traductor, que tambien se llama «Ensamblador». En el caso de Microchip, el programa Ensamblador se halla incluido en el entorno de desarrollo MPLAB IDE. Cuando se utilizan los lenguajes C o BASIC, los programas que traducen el programa fuente en máquina ejecutable (.HEX) suelen tener algún coste, aunque es muy fácil encontrar en Internet versiones shareware o demos para su evaluación.

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

Figura P1.2. Fotografía del emulador ICE 4000.

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, ademá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 ejecució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 emulador, 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 recurre 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 mayorí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 microcontrolador 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.

P1.2. EL ENTORNO DE DESARROLLO MPLAB IDE La mejor herramienta que existe para trabajar con los PIC es el entorno MPLAB IDE, diseñado por Microchip, y que en el CD que acompaña a este libro se incluye la versión 7.50. Es un software que se cuida con enorme interés y que facilita enormemente el diseño de proyectos con PIC. Con el MPLAB IDE se pueden realizar todas las tareas que participan en el desarrollo de un proyecto: editar el programa fuente, ensamblarlo o compilarlo (si se dispone de compilador), simular el comportamiento del programa ejecutable y, con las herramientas precisas, también se puede emular, depurar en circuito y grabar el programa sobre la memoria del microcontrolador. Una vez que el lector haya instalado en su PC el MPLAB IDE, se sugiere crear una carpeta bajo el nombre de «Programas de Aplicaciones» y copiar en ella los programas fuente .ASM correspondientes a los ejemplos contenidos en el CD del libro. La pantalla principal del MPLAB IDE, v. 7.30, dispone de las opciones e iconos típicos en los programas habituales de Windows (Fig. P1.5). En www.microchip.com se puede recoger un excelente manual de usuario del entorno MPLAB IDE.

Figura P1.5. Opciones e iconos que aparecen en la pantalla principal del entorno MPLAB IDE.

P1.2.1. Creando un proyecto Se recomienda trabajar en el entorno MPLAB IDE mediante «proyectos», lo que facilita enormemente la tarea del programador. Un proyecto contiene diversos ficheros, unos se encargan de la inicialización del dispositivo, otros definen las áreas de memoria, otros los programas fuente, etc. El proyecto recoge una serie de datos relacionados con la aplicación:

SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM

111

Figura P1.6. La iniciación del proyecto se produce con la opción Project Wizard en la ventana desplegable 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.

Cuando se abre un proyecto, se obtiene automáticamente y de forma muy rápida el entorno de trabajo que se dejó la última vez. Para iniciar la gestión y desarrollo de un proyecto, se elige la opción Project/Project Wizard en el menú principal, tal como se presenta en la Figura P1.6. Una vez seleccionado el gestor de proyectos, éste va guiando al usuario en las diferentes fases precisas para crear un nuevo proyecto. Tras una ventana de bienvenida, se elige la pestaña «Siguiente» para ir pasando por todos los pasos. — Primer paso: Selección del microcontrolador. Aparece una lista desplegable con todos los modelos de PIC que admite la versión del MPLAB utilizada. Seleccionamos el PIC12F508 (Fig. P1.7).

112

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

Figura P1.7. Selección del microcontrolador usado en el proyecto.

— Segundo paso: Se selecciona la herramienta del MPLAB IDE que se va a usar para ensamblar o compilar el programa fuente. Se supone que el programa fuente está escrito en lenguaje Ensamblador (.ASM) y se elige en la persiana Active Toolsuite la herramienta Microchip MPASM Toolsuite, que incluye el entorno integrado. Dicha herramienta consta del ensamblador (mpasmwin.exe), del enlazador o linkador (mplink.exe) y de la biblioteca (mplib.exe). Con el botón Browse se puede seleccionar la ruta donde se encuentran esos tres ficheros, que por defecto es la mostrada en la Figura P1.8.

Figura P1.8. En el segundo paso se seleccionan las herramientas para ensamblar o compilar el programa fuente.

SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM

113

— Tercer paso: Se introduce el nombre que se asigna al proyecto y se indica en la carpeta en que se guardará (Fig. P1.9). Se recomienda crear una carpeta para guardar los ejercicios con el PIC12F508 (F:\12F508ASM). Es importante no crear una carpeta en Mis Documentos o lugares del disco donde la ruta tenga muchos caracteres, ya que el compilador dará un error si la ruta del fichero es demasiado larga, de ahí la recomendación de hacerlo en una carpeta directamente de una unidad.

Figura P1.9. Se asigna nombre al proyecto (EJEMPLO_0) y se indica en la carpeta que se guardará (F:\ASM\EJEMPLO_0).

— Cuarto paso: Se pasa a asignar al proyecto el programa fuente, que se supone que ya está editado y archivado en la carpeta F:\Programas12F508, y dentro de ella, es Programa_0.ASM el que se selecciona y con el botón Add se aplica al PROYECTO_0 (Fig. P1.10).

Figura P1.10. Se asigna al proyecto en desarrollo el programa fuente EJEMPLO_0.ASM.

114

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

Al pulsar la fase «Siguiente», aparece un resumen del proyecto construido, y para acabar, basta presionar la opción «Finalizar» (Fig. P1.11).

Figura P1.11. Resumen de las principales características del proyecto creado.

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.

P1.2.2. Análisis del programa fuente El proyecto creado (PROYECTO_0) utiliza como programa fuente en Ensamblador a Ejem_0.ASM, que ya estaba confeccionado antes del comienzo del proyecto. Lo puede obtener en el CD del libro en D:\12F508ASM\EJEM_0.ASM. Pulsando dos veces sobre Ejem_0.ASM aparece en la ventana principal de PROYECTO_0.mcp el contenido de dicho programa (Fig. P1.13).

SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM

115

Figura P1.13. Ventana en la que aparece el programa fuente en Ensamblador.

El programa bajo análisis dispone de comentarios aclaratorios en la mayoría de las instrucciones que facilitan la comprensión de su estructura y objetivos. En la primera línea, se usa la directiva de Ensamblador List, que indica el modelo de microcontrolador utilizado y que en este caso es el PIC12F508. En la segunda línea, la directiva Include permite incluir en el programa el fichero P12F508, que contiene la declaración de los nombres de los registros, sus bits y las etiquetas que se usan para el modelo de PIC empleado. Con Org 0x00, la primera instrucción del programa se coloca en la dirección hexadecimal 00, destinada al Vector de Reset. La instrucción Movlw b’00000001’ carga en el registro W el valor binario 00000001. La siguiente instrucción, Nop, no hace nada, sólo ocupa una posición de la memoria y tarda en ejecutarse un ciclo de instrucción. Con Clrw se pone a 0 el registro W. La directiva final End indica la terminación del programa fuente. En resumen, este programa comienza poniendo a 1 el contenido del registro W y luego lo pasa a 0. Es un programa muy sencillo y con sólo fines didácticos.

P1.2.3. Desarrollando el proyecto Para que el microcontrolador pueda ejecutar el programa fuente (.ASM) es necesario traducir o «ensamblar» el mismo para convertirlo en programa en código máquina (*.HEX). Tras el ensamblado, además del fichero ejecutable .HEX, hay otro con los errores (*.ERR), otro con el listado (*.LIST), etc.

116

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

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

P1.3. EL SIMULADOR MPLAB SIM El PROGRAMA_0.ASM es de carácter didáctico y no interesa grabarlo en la memoria del PIC12F508 para comprobar su comportamiento. En estas condiciones, basta con simular la ejecución del programa y analizar los resultados que produce. Para ello, se utiliza el simulador software MPSIM, que se halla integrado en el entorno MPLAB IDE. Se elige la opción Debugger → Select Tool → 3 MPLAB SIM (Fig. P1.15). Al seleccionar el MPLAB SIM, aparece en la ventana principal un recuadro con siete iconos que proporcionan mucha flexibilidad en la simulación del programa (Fig. P1.16). 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.

Figura P1.15. Selección del simulador MPLAB SIM, integrado en el MPLAB.

SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM

117

Figura P1.16. Opciones del simulador MPLAB SIM.

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

P1.3.1. Configurando el procesador Antes de proceder a la simulación del programa hay que determinar el valor de los bits de la Palabra de Configuración seleccionándolos con la opción Configure/Configuration Bits. Se selecciona el oscilador interno INTOSC, no se usa el Perro Guardián (así que el WDT se pone en off ), no se habilita el Código de Protección ante lectura de la memoria y se utiliza el Master Clear Reset interno.

P1.4. COMPORTAMIENTO DEL PROGRAMA CON EL SIMULADOR A continuación, se describe cómo observar el comportamiento del programa a través del simulador. Una vez seleccionada la herramienta MPLAB SIM a través de la opción Debugger → Select Tool → 3 MPLAB SIM, se procede a ejecutar paso a paso el programa y observar su funcionamiento. Mediante la opción Debugger → Step Into o bien mediante la tecla de función F7 equivalente, el simulador ejecuta una instrucción del programa. En este caso, el simulador ejecutará la primera instrucción del programa, es decir, MOVLW b’00000001’. Si se desea observar si el resultado de esta instrucción es el deseado, es conveniente añadir en la ventana de inspección el registro W. Esta tarea se realiza mediante la opción View-Watch y en esta ventana seleccionar WREG y pulsar el botón ADD SFR. Así, se observará cómo el valor de WREG es 0001, resultado de la MOVLW ejecutada.

118

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

Al ejecutar la siguiente instrucción mediante F7, la instrucción NOP se puede observar en la misma pantalla cómo WREG no cambia su valor debido a que esta instrucción no altera ningún dato. Por último, la instrucción CLRW borra el regitro WREG, pero no puede observarse en la pantalla de inspección, ya que al tratarse de la última instrucción del programa, éste se reinicia automáticamente y no da tiempo a observar dicho valor. Para poder observar la ejecución de esta instrucción sería necesario añadir una nueva instrucción NOP antes de la directiva END.

P1.5. OTRO PROYECTO DE ENTRENAMIENTO Se propone confeccionar otro proyecto, el EJEMPLO_01, que utilice un programa fuente un poco más complejo que el anterior, pero que al no utilizar periféricos sus resultados puedan comprobarse con el simulador MPLAB SIM. Este proyecto consiste en conseguir en una posición de la memoria (0x09) números impares de forma indefinida siguiendo la secuencia 0x01, 0x03, 0x05, …, 0xFF y que dicha secuencia vuelva a empezar desde 0x01 al alcanzar el valor máximo 0xFF. Para ello será necesario conocer tres instrucciones nuevas y una directiva. Esas tres instrucciones son las siguientes: MOVWF ADDWF

F F, d

GOTO

k

;Mueve el contenido de W a la posición F ;Suma W al contenido de la dirección F. ;Si d = 0, deja el resultado en W ;Si d = 1, deja el resultado en F ;Salto incondicional a la instrucción ;referenciada por la etiqueta k

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

EQU

0x09

La solución propuesta para el EJEMPLO_01 se detalla a continuación: ; EJEMPLO 01 LIST P=12F508 INCLUDE “P12F508.INC” IMPAR EQU 0x09 ORG 0x00 MOVLW b’00000001’ MOVWF IMPAR MOVLW b’00000010’ BUCLE: ADDWF IMPAR, 1 NOP GOTO BUCLE END

;Tipo de procesador ;Definición registros internos ;Def. de par etiqueta valor ;Inicio programa ;Mueve 1 a la posición IMPAR ;Mueve 2 a WREG ;IMPAR + W = IMPAR ;No hace nada ;Repite el bucle ;Fin pograma

SIMULANDO LOS PRIMEROS PROGRAMAS CON EL MPLAB Y EL MPLAB SIM

119

El programa comienza moviendo el valor 1 a la posición de memoria IMPAR. Para conseguir números impares, mueve 2 a WREG. El programa entra en un bucle en el que se va sumando el contenido de la posición IMPAR con el registro WREG, dejando el resultado en la posición IMPAR. La instrucción GOTO BUCLE hace que esta suma se repita de forma indefinida, generando así los números impares deseados de forma constante.

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 ademá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 Microsistemas Programados comercializa el compilador de C, de la firma CCS, con la que vamos a resolver los programas de C en este libro.

Herramientas para la grabación, implementación y depuración: PIC School y WinPic800

a

2.

APLICACIÓN

P2.1. NUESTRO BANCO DE TRABAJO En la aplicación anterior se aprendió a: 1.o Editar programas fuente en Ensamblador y en C. 2.o Ensamblar o compilar los programas fuente para convertirlos en programas ejecutables. 3.o Simular el comportamiento de los programas ejecutables mediante el simulador software MPLAB SIM.

Los grandes inconvenientes de la simulación software son dos, y el más importante consiste en que la ejecución de las instrucciones no se realiza en tiempo real. Tampoco se puede comprobar el funcionamiento de los periféricos y dispositivos externos conectados al microcontrolador. Para comprobar el funcionamiento real, se construirá un prototipo físico con los mismos elementos que el sistema definitivo, se grabará el programa de aplicación en la memoria del microcontrolador y, finalmente, se ejecutará el programa y se analizarán los resultados del mismo. En una palabra, hay que construir un prototipo sobre el que correrá el programa específico desarrollado (Fig. P2.1). Para montar con rapidez y facilidad un prototipo basado en un microcontrolador PIC y disponer de los recursos típicos que frecuentemente se utilizan en las aplicaciones, se ha seleccionado una herramienta robusta, sencilla de manejar, muy flexible y económica llamada PIC School que ha diseñado Ingeniería de Microsistemas Programados (www.microcontroladores.com). Con la PIC School se pueden diseñar sistemas con todas las gamas de microcontroladores PIC encapsulados hasta con cuarenta patitas: PIC12F, PIC16F, PIC18F, PIC24, dsPIC y otras. La herramienta PIC School está apoyada por una línea de módulos complementarios que se orientan a formar y experimentar en gamas o aspectos concretos como el módulo PIC12F508, dedicado a este modelo de microcontrolador y que será el que usemos en este libro, el módulo dsPIC, el módulo PIC16F87X, el módulo PIC18F, etc. Este equipo contiene un grabador de PIC, fuentes de alimentación, varios zócalos para los procesa121

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

Figura P2.2. Fotografía de PIC School.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

123

P2.2. EL FABULOSO PIC SCHOOL Las principales características del PIC School son las siguientes:

• Permite trabajar directamente con microcontroladores PIC de 8 bits de las gamas baja, media y alta con encapsulados de 8, 18, 28 y 40 contactos, pudiendo incluso, con ayuda de un adaptador, dar soporte a los dispositivos de 16 bits y a los potentes dsPIC. Además, dispone de un oscilador de cuarzo que permite trabajar a diferentes frecuencias, permitiendo también utilizar el oscilador RC incluido en algunos microcontroladores. • Dispone de un amplio y representativo número de periféricos con la ventaja que ninguno de éstos se encuentra conectado de forma predeterminada a las líneas de E/S del microcontrolador. Es el propio usuario quien, mediante un sencillo cableado sin soldadura, conecta y asocia los distintos periféricos a esas líneas de E/S según lo requiera la aplicación. Esto permite tener un contacto más directo con el hardware y un mayor control del mismo. Además, dispone de una amplia superficie de board en la cual se pueden conectar sin soldadura los periféricos necesarios para un proyecto que no estén incluidos en el entrenador. • Existe una serie de módulos de prácticas opcionales en los que se van tratando diferentes temas relacionados con los microcontroladores: comunicaciones, bluetooth, USB, CAN, RF, control de motores, periféricos avanzados y un largo etcétera. En esos módulos también se describen aplicaciones que permiten conocer las características de los PIC desde la sencilla familia 12FXXX hasta los potentes 18FXXXX. Cada módulo consta de una colección de prácticas y todos los componentes necesarios para implementarlas. • El PIC School tiene tres modos de operación diferentes que se seleccionan fácilmente mediante un conmutador. El modo RUN se emplea cuando el dispositivo está grabado con el programa de aplicación a ejecutar. Todas las líneas de E/S están disponibles para el control de periféricos. El modo PC se emplea durante los ciclos de grabación del dispositivo. La grabación se realiza mediante el canal serie de un PC dotado del software de grabación correspondiente (WinPic800, IcProg, etc.). Se suministra el cable de conexión con el PC. Finalmente, el modo ICSP permite conectar el laboratorio PIC School con otros grabadores externos dotados de las señales ICSP o bien con depuradores en circuito, como el ICD2 de Microchip. De esta forma, es posible la emulación/depuración/grabación del dispositivo contenido en el laboratorio

A la hora de seleccionar los periféricos incluidos en este potente entrenador, cabe destacar que se han elegido los más empleados en las siguientes categorías.

Periféricos de entrada • Dos potenciómetros capaces de simular cualquier entrada analógica. • Cuatro interruptores deslizantes y cuatro pulsadores para soportar las entradas digitales.

124

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

• Un generador lógico capaz de generar ondas simétricas cuadradas de 1 Hz, 10 Hz, 100 Hz y 1 KHz indicado especialmente para aquellas aplicaciones que necesitan controlar tiempos o para aplicaciones en las que se emplean los módulos de captura y comparación (CCP) incluidos en algunos microcontroladores. • Un teclado matricial de 4 × 4 teclas considerado el dispositivo de entrada por excelencia en aplicaciones microelectrónicas. 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 mediante 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 microcontroladores: 1.a Es un entrenador válido para todas las gamas de microcontroladores PIC, permitiendo 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 etapas 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

Figura P2.3. Fuente de alimentación.

P2.3. ARQUITECTURA DE PIC SCHOOL La arquitectura de la tarjeta de entrenamiento universal PIC School se divide en varias secciones, que se presentan de forma pormenorizada.

P2.3.1. Fuente de alimentación Encargada de obtener la tensión general de +5 Vcc con la que se alimenta el laboratorio PIC School, todos los periféricos de la misma y el procesador empleado. El esquema eléctrico de la fuente se muestra en la Figura P2.4. A través del conector CN1, se aplica una tensión de 9 a 15 VDC procedente de un alimentador estándar con el positivo al centro. El interruptor SW3 conecta el sistema. El diodo D1 evita la polarización inversa y con ello los daños que se pudieran ocasionar al equipo. El regulador

Figura P2.4. Esquema eléctrico de la fuente de alimentación.

126

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

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

Figura P2.5. Circuito oscilador principal.

El dispositivo X1 contiene en su interior un oscilador preciso controlado por cuarzo y todo ello en una cápsula metálica en formato DIP8. Este oscilador, también llamado Canned oscillator, se puede adquirir en diferentes frecuencias según las necesidades. Basta simplemente cambiar uno por otro para que la aplicación se ejecute a más o menos velocidad.

P2.3.3. Los microcontroladores 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

Figura P2.6. Zócalos de inserción de los microcontroladores.

P2.3.4. Entradas analógicas Están formadas por dos potenciómetros, tal y como se muestra en la fotografía de la Figura P2.7.

Figura P2.7. Entradas analógicas.

El esquema eléctrico de las entradas analógicas se muestra en la Figura P2.8. Las líneas de los potenciómetros son directamente accesibles desde el bloque de conexión AP16 correspondiente y se les puede conectar cualquier tipo de circuito eléctrico analógico.

128

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

Figura P2.8. Esquema eléctrico de las entradas analógicas.

P2.3.5. Entradas digitales Se muestran en la fotografía de la Figura P2.9 y consta de cuatro interruptores deslizantes y otros tantos pulsadores.

Figura P2.9. Entradas digitales del entrenador PIC School.

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

Figura P2.10. Esquema eléctrico de las entradas digitales.

P2.3.6. El generador lógico Se muestra en la Figura P2.11 y está basado en el dispositivo SYM10AA. Es capaz de generar ondas cuadradas simétricas a frecuencias de 1 Hz, 10 Hz, 100 Hz y 1 KHz. Está especialmente indicado para aplicaciones de control de tiempos y también para evaluar y ensayar con los módulos de captura y comparación (CCP) contenidos en ciertos modelos de dispositivos PIC.

130

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

Figura P2.11. Generador lógico de señales.

El esquema eléctrico de dicho generador es el que proporciona su propio fabricante y se muestra en la Figura P2.12. Puede servir como base para múltiples aplicaciones. La señal de salida se obtiene mediante el bloque de conexiones AP8. Por defecto la frecuencia de salida es siempre de 1 Hz. Mediante el pulsador SW2 se va seleccionando secuencialmente la frecuencia a 10 Hz, 100 Hz, 1 KHz y vuelta a empezar con 1 Hz. Los leds D5-D8 monitorizan la frecuencia de salida en todo momento.

Figura P2.12. Esquema del generador lógico.

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 permitir introducir todo tipo de datos para su posterior procesamiento.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

131

Figura P2.13. El teclado.

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 ambiciosos 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 conexiones 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 mayorí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.

Figura P2.14. Esquema eléctrico del teclado.

132

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

Las cuatro filas F0-F3 de la Figura P2.14 se conectan a RB4-RB7 y las cuatro columnas 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, programando 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 estado 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 microcontrolador, que pasa a ejecutar la rutina que se encargará de averiguar qué tecla se pulsó.

P2.3.8. Salidas digitales Están formadas por ocho diodos led (S0-S7) que sirven para monitorizar el nivel lógico de las líneas a las que están conectados.

Figura P2.15. Salidas digitales.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

133

Figura P2.16. Esquema eléctrico de las salidas digitales.

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

Figura P2.17. Salidas digitales de alta corriente.

134

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

P2.3.9. Salidas digitales de alta corriente El laboratorio PIC School dispone de un driver de cuatro canales formado por el dispositivo L293D y capaz de proporcionar salidas de alta corriente. En la Figura P2.18 se puede apreciar el esquema eléctrico. El dispositivo integrado L293D dispone de cuatro canales amplificadores o drivers capaces de proporcionar salidas de hasta 0,6 A a 36 V cada uno a partir de señales TTL de baja corriente. Mediante el conector AP6, se conectan las señales E1-E4 a amplificar y que proceden de sendas salidas del microcontrolador. El conector CN7 está formado por un conjunto de bornas o clemas donde se obtienen las salidas S1-S4 debidamente amplificadas y se realizan las conexiones con las cargas a controlar. Mediante el jumper JP8 se selecciona la tensión de salida para las cargas. En la posición 1-2 (por defecto) dicha tensión es de +5 Vcc. En la posición 2-3, la tensión que alimenta a las cargas se aplica externamente a través de la borna +VM. Mediante estas salidas de alta corriente, el laboratorio PIC School puede controlar cargas de consumo elevado, como pueden ser lámparas incandescentes, relés, motores DC, motores paso a paso, etc. Cabe indicar que el dispositivo L293D integra en su interior sendos diodos para la absorción de corrientes inversas provocadas por cargas inductivas.

Figura P2.18. Esquema de las salidas digitales de alta corriente.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

135

P2.3.10. Interfaz serie RS-232 Su ubicación dentro del laboratorio se muestra en la Figura P2.19. Consiste en el clásico interfaz serie que permite adaptar los niveles lógicos del microcontrolador a niveles RS-232. Según el esquema eléctrico mostrado en la Figura P2.20, la interfaz está formada por el popular adaptador de niveles MAX-232. Mediante el conector AP5, se dispone de las señales de transmisión y recepción (TxD y RxD), así como las de control de flujo CTS y

Figura P2.19. Interfaz serie RS-232.

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

Figura P2.20. Esquema eléctrico de la interfaz serie RS-232.

136

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

Se recuerda que algunos dispositivos PIC incorporan en su interior una UART completa que se encarga de realizar la mayor parte de los procedimientos propios de la comunicació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.

P2.3.11. Interfaz bus CAN Está compuesta por el dispositivo adaptador MCP2551, que convierte las señales lógicas según las especificaciones del bus CAN.

Figura P2.21. Interfaz bus CAN.

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.

Figura P2.22. Esquema del interfaz CAN.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

137

En la Figura P2.22 se muestra el esquema eléctrico de esta interfaz incorporada en el laboratorio PIC School. Por el conector AP10 se proporcionan, procedentes del microcontrolador, las señales RxCAN y TxCAN, que van a parar al circuito de adaptación MCP2551. Las señales de salida CANH y CANL se obtienen por el conector CN6 (DB9 macho) y de aquí van a parar a los diferentes nodos de la red. El circuito de adaptación es capaz de conectar con hasta 112 nodos. Mediante el jumper JP1 se habilita o no la resistencia terminal R2, según qué lugar ocupe el laboratorio en la red (por defecto habilitada).

P2.3.12. Pantalla LCD Se trata de uno de los periféricos más versátiles e interesantes que dispone el laboratorio PIC School. Se muestra en la Figura P2.23 y es capaz de visualizar dos líneas de dieciséis caracteres alfanuméricos cada una.

Figura P2.23. Pantalla LCD.

Este potente periférico de salida va a permitir representar cualquier tipo de mensaje compuesto de letras, números y símbolos, produciendo, además, diferentes efectos de visualización, como desplazamientos a izquierda y derecha, parpadeos, scrolls, etc. La transferencia de información entre la pantalla LCD y el microcontrolador se realiza en paralelo en grupos de 4 u 8 bits de datos y se conecta con las líneas de E/S mediante el conector AP20. El esquema eléctrico se muestra en la Figura P2.24. Existe, además, otro conector, el AP9, donde se conectan las señales que controlan el flujo y tipo de información que se transfiere. Con la señal RS se determina si la pantalla recibe el código ASCII del carácter a visualizar (nivel 1) o bien un código de comando (nivel 0). Mediante la señal RW, el microcontrolador informa a la pantalla LCD si se va a leer o escribir sobre la misma. Finalmente, con la señal E, se habilita o no a esa pantalla. Cuando esta señal vale 0, la pantalla queda desconectada, las líneas de datos quedan en alta impedancia. Cuando vale 1, la pantalla queda habilitada para recibir o mandar datos.

138

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

Figura P2.24. Esquema eléctrico del LCD.

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.

P2.3.13. Conectores para las interfaces RJ11 y USB Son simples conectores de propósito general y que se muestran en la fotografía de la Figura P2.25.

Figura P2.25. Conectores USB y RJ11.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

139

P2.3.14. Sección de grabación Se muestra en la fotografía de la Figura P2.26 y se encarga, mediante el software oportuno, de realizar los ciclos de lectura/grabación del dispositivo PIC contenido en el laboratorio.

Figura P2.26. Circuito grabador de la placa PIC School.

El esquema por bloques de la Figura P2.27 trata de sintetizar el funcionamiento del circuito de grabación que dispone el laboratorio PIC School. Todos los dispositivos PIC disponen de tres señales para la lectura/grabación de la memoria de programa, la memoria EEPROM para datos y la memoria de configuración. La señal PICDATA permite transferir los datos de forma serie y síncrona entre el PIC y el hardware de grabación, la señal PICCLK transporta la señal de reloj para el sincronismo de los datos y la señal PICMCLR que inicia los ciclos de lectura/grabación y aplica la tensión Vpp necesaria. Estas tres señales son, además, compartidas y empleadas como líneas de E/S de propósito general una vez que el PIC ha sido grabado. Estas tres señales se conectan con tres fuentes diferentes según el modo de operación seleccionado mediante el conmutador SW4. El modo RUN se emplea cuando el dispositivo está grabado. Las tres señales del PIC anteriormente mencionadas se consideran líneas de E/S de propósito general y están disponibles a través de los bloques de conexión correspondientes para ser utilizadas por los periféricos de la aplicación. En el modo ICSP, el laboratorio queda configurado para que el PIC actual en él insertado se pueda leer/grabar a través de las señales que se aplican mediante el conector RJ11 (ICSP: In Circuit Serial Programming). Estas señales, a su vez, las debe proporcionar un grabador externo dotado de su correspondiente software de grabación. Se puede emplear el módulo ICD2 de Microchip junto con el entorno integrado de desarrollo MPLAB, que se puede obtener de forma gratuita desde www.microchip.com. El módulo ICD2, además de grabar dispositivos, es capaz de realizar depuración en circuito en tiempo real con ciertos modelos de dispositivos PIC.

140

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

Figura P2.27. Esquema por bloques del circuito de grabación.

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 actualizar 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 compatibilidad 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. PROGRAMA DE GRABACIÓN WINPIC800 Se trata de un software de libre distribución desarrollado por Sisco Benach que se puede descargar desde el sitio http://perso.wanadoo.es/siscobf/winpic800.htm. Es conveniente hacerlo de forma periódica con objeto de obtener la última versión disponible. Se descarga un fichero ZIP que contiene el archivo ejecutable, archivos de configuración, lenguajes, etc. Se aconseja descomprimirlo todo sobre una misma carpeta (por ejemplo, WinPic800) y crear un acceso directo al ejecutable. El programa WinPic800 es un proyecto abierto sujeto a constantes ampliaciones y mejoras que se adapta a diferentes tipos de grabadores. En la opción Acerca de... del menú de Ayuda hay un enlace directo al foro Todo PIC donde gran cantidad de usuarios y entusiastas exponen sus dudas tanto de hardware como de software, comentarios, posibles mejoras, bugs, soluciones, etc. De esta forma, el programa se encuentra en permanente evolución.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

141

Figura P2.28. Pantalla de trabajo del software WinPic800.

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

1. Opciones del menú principal — Archivo: Se seleccionan las distintas opciones que permiten abrir, guardar, cerrar, etc., los archivos de trabajo que contienen el contenido HEX a grabar en el dispositivo PIC. — Edición: Se puede editar y llenar las áreas de memoria del PIC o buffers con diferentes contenidos. — Dispositivo: Se seleccionan los distintos comandos a ejecutar sobre el PIC: leer, borrar, grabar, verificar, etc. La mayor parte de estos comandos se puede ejecutar mediante los botones de la barra de comandos. — Configuración: Se selecciona el tipo de hardware grabador que el software debe controlar. También se seleccionan diferentes opciones de control.

142

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

— Idiomas: Se selecciona el lenguaje empleado por el software WinPic800. — Ayuda: Se obtiene información adicional del software.

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.

4. Selección del buffer o área de memoria Mediante estas tres pestañas, el usuario puede conmutar entre cualquiera de las tres áreas de memoria o buffers de que constan los dispositivos PIC. — Código: Representa a la memoria OTP/EEPROM/FLASH de programa. Sobre este buffer se visualiza el contenido de la memoria de programa del PIC recién leído o bien el contenido que se desea grabar sobre ese PIC y que procede de un archivo *.HEX recién abierto. El contenido se representa en código hexadecimal y ASCII y puede ser de 12, 14 o 16 bits por cada posición. El tamaño de este buffer varía en función del modelo de PIC seleccionado. — Datos: Representa a la memoria EEPROM de datos. Sobre este buffer se visualiza el contenido de la memoria EEPROM de datos del PIC recién leído o bien el contenido que se desea grabar sobre ese PIC y que procede de un archivo *.HEX recién abierto. El contenido se representa en código hexadecimal y ASCII con 8 bits. El tamaño de este buffer varía en función del modelo de PIC seleccionado y puede quedar deshabilitado si dicho modelo no dispone internamente de memoria EEPROM para datos. — Configuración: Representa a la memoria de configuración. Sobre este buffer se almacena y visualiza el contenido de la memoria de configuración del PIC recién leído o bien la configuración que se desea grabar sobre ese PIC y que procede de un archivo *.HEX recién abierto. La representación de este buffer se realiza en modo binario, de forma que se puedan activar/desactivar individualmente los distintos bits de las distintas palabras de configuración. El número de bits representados varía en función del modelo de PIC.

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

6. Áreas de memoria o buffers Ésta es la zona de la pantalla de trabajo donde se visualizan y/o modifican los contenidos del área de memoria seleccionada. En el área de programa o código la visualización se representa en formato hexadecimal y ASCII con 12, 14 o 16 bits, según el modelo de PIC seleccionado. El área de datos se representa siempre en formato de 8 bits en hexadecimal y ASCII y sólo es visible si el modelo de PIC dispone realmente de memoria EEPROM para los datos. El contenido de cualquier posición de cualquiera de estas dos áreas se puede modificar a nivel individual. Basta con hacer clic en la posición deseada y teclear el nuevo valor en hexadecimal o en ASCII. También se pueden modificar a nivel de bloque mediante las opciones de llenado de buffer, donde se pide una dirección inicial, otra final y el valor a almacenar. Por su parte, el área de configuración representa los contenidos a nivel binario, donde es posible activar o desactivar individualmente cada uno de los bits de acuerdo a la configuración deseada.

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.

P2.4.2. Configuración del «hardware» Una de las características más notables del software WinPic800 es su flexibilidad a la hora de poder controlar el hardware de casi cualquier tipo de grabador, como el laboratorio PIC’School. Ello es posible gracias a su flexible sistema de configuración. Para grabar la mayor parte de dispositivos PIC se emplean básicamente cinco señales: 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

Figura P2.29. Configuración de WinPic800 para adaptarlo al PIC’School.

A la vista de la figura, se puede deducir la configuración necesaria. En primer lugar, se empleará el canal serie COMx como interfase con el PC. La señal de salida de datos a grabar (PGD = Data) está asociada con el bit DTR del canal serie. La señal de entrada de datos leídos (PGD = DataIn) se asocia al bit CTS. La señal síncrona de reloj (PGC = Clock) queda asociada con el bit RTS. Estas tres señales son empleadas de forma invertida por el hardware de grabación de PIC’School, por lo que el software WinPic800 también las debe invertir. Para ello, están activadas las casillas correspondientes. Por último, la señal de grabación (MCLR/Vpp) queda asociada con el bit TXD del canal serie del PC. Habilitando o no las casillas apropiadas en la columna Test, se pueden activar o desactivar individualmente las señales asociadas a modo de comprobación. Los indicadores luminosos de la columna Estado nos indican el estado actual de dichas señales. Deshabilitando el Bloqueo de configuración, se puede hacer cualquier cambio sobre las señales mencionadas y ajustarlas a las necesidades del hardware según el grabador disponible. Una vez configurado el sistema, puede generarse un fichero de configuración para usos posteriores. Para ello, se dispone de tres botones: Guardar, Guardar como y Eliminar. Se pide el nombre del fichero, que suele coincidir con el nombre del grabador (PIC’School), y queda registrado en una lista de ficheros con la configuración de otros tantos grabadores.

P2.4.3. Configuración del «software» Existen unas opciones de configuración a nivel de software que el usuario puede habilitar o no según preferencias. Éstas se muestran en la Figura P2.30.

HERRAMIENTAS PARA LA GRABACIÓN, IMPLEMENTACIÓN Y DEPURACIÓN

145

Figura P2.30. Opciones de configuración software.

• Programar. Permite activar o no las opciones de «Verificar tras la programación» y «Avisar antes de borrar y programar». En el primer caso, al activarse, se fuerza a que el software verifique de forma automática el contenido del PIC recién grabado comparándolo con el contenido actual de los distintos buffers o áreas de memoria. • Dispositivo. Permite activar o no las opciones de «Usar autoselección del dispositivo» y «Detectar y autoseleccionar el dispositivo al entrar». En el primer caso, WinPic800 trata de averiguar el modelo de PIC sobre el que se va a actuar. Esta detección se basa en que los modelos de PIC más recientes integran un código de identificación. El modelo detectado pasa automáticamente a ser el seleccionado. Activando la segunda opción, se trata de detectar el PIC nada más ejecutar WinPic800. Hay que indicar que no todos los modelos de PIC integran el código de identificación. En estos casos, se indicará que se trata de un modelo desconocido y habrá que seleccionarlo manualmente. • .HEX. Permite, si se activa, actualizar los archivos *.HEX antes de la grabación por si se hubiera realizado alguna modificación de los buffers de memoria y ajustar los ficheros *.HEX si se trata de dispositivos de la familia 18FXXX.

2.2.4. Tareas más comunes Básicamente, se ejecutan mediante los distintos botones disponibles sin necesidad de navegar entre los distintos menús (Fig. P2.31).

Figura P2.31. Botones de las tareas más comunes.

146

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

1. Abrir: Accede al clásico navegador de Windows que permite seleccionar el archivo que se desea abrir. Dicho archivo debe tener la extensión *.HEX y se obtiene como consecuencia de ensamblar/compilar el programa del usuario. Su contenido se almacena en los distintos buffers de memoria de WinPic800 para la posterior grabación del PIC. Este botón también permite acceder de forma rápida a los archivos *.HEX recientemente abiertos. 2. Actualizar archivo: Este comando permite restaurar los distintos buffers de memoria de WinPic800 después de haber sufrido cualquier tipo de modificación con el contenido del archivo *.HEX actual. 3. Guardar: Guarda el contenido de los buffers de memoria de WinPic800 sobre el archivo *.HEX actualmente abierto. 4. Leer todo: Lee el contenido de las tres áreas de memoria que componen un PIC (código, datos y configuración) y lo deposita sobre los correspondientes buffers de WinPic800. 5. Programar todo: Graba sobre las tres áreas de memoria que componen un PIC el contenido de los correspondientes buffers de WinPic800. 6. Verificar todo: Compara el contenido de las tres áreas de memoria del PIC con el contenido de los tres buffers de memoria de WinPic800 comprobando si hay igualdad o, en su caso, indicando las diferencias existentes 7. Borrar todo: Borra el contenido de las tres áreas de memoria del PIC dejándolas en los valores originales de fábrica. Este comando sólo es operativo en los dispositivos con memoria EEPROM/FLASH. Los dispositivos con memoria OTP no pueden ser borrados. 8. Test hardware: Realiza una comprobación del hardware del grabador en uso (PIC’School). 9. Detectar PIC: Trata de averiguar el modelo de PIC que está instalado en el grabador y lo selecciona como modelo actual si esta opción está activada en Configuración / Software. No todos los modelos de PIC integran su propia identificación. En este caso, la detección resulta imposible.

a

Las primeras experiencias

3.

APLICACIÓN

P3.1. FASES DE DESARROLLO DE UN PROYECTO En las aplicaciones anteriores se han descrito y manejado las herramientas que se utilizarán en la implementación de los proyectos que se irán proponiendo basados en el PIC12F508. Las tres más importantes son: 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).

Con las herramientas mencionadas se puede desarrollar una colección de interesantísimas experiencias basadas en el PIC12F508 y diseñadas por Ingeniería de Microsistemas Programados en el módulo PIC12FXXX para ser montadas sobre PIC School que contiene los componentes complementarios y que recomendamos al lector disponer de dicho módulo para facilitar la realización de las experiencias. Para acostumbrar al lector a seguir lo más cómodamente posible la realización de los proyectos, se les ha dividido en las siguientes fases: Primera fase: Enunciado y objetivos Se describe con claridad la experiencia, sus características y el propósito que persigue. Segunda fase: Principios teóricos En esta sección se repasan los datos y el funcionamiento y programación de los elementos del PIC12F508 que se utilizan en la experiencia, así como de los elementos externos especiales.

147

148

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

Tercera fase: Nuevas instrucciones Se repasan la funcionalidad y las propiedades de las instrucciones que no se han utilizado en programas anteriores y que se incluyen en el programa de la experiencia en curso. Cuarta fase: Materiales necesarios Se describen los materiales complementarios que se requieren para realizar la experiencia en la PIC School y que vienen incluidos en el módulo PIC12FXXX que comercializa Ingeniería de Microsistemas Programados. Quinta fase: Organigrama y programa fuente en Ensamblador Se explica el organigrama al que responde la aplicación si es necesario y el programa fuente en Ensamblador aclarando las peculiaridades y aspectos más interesantes del mismo. Sexta fase: Ensamblado y simulación «software» Se realiza la conversión del programa fuente (.ASM) a programa ejecutable (.HEX) mediante el ensamblador integrado en el entorno MPLAB IDE. Posteriormente, se puede simular el programa de aplicación mediante el simulador MPLAB SIM y analizar el comportamiento de los registros, las posiciones de memoria e incluso las E/S a través del registro GPIO. Séptima fase: Conexionado de periféricos Se detalla el conexionado de los periféricos existentes en la PIC School a las patitas del microcontrolador, así como el montaje de recursos especiales en la tarjeta de montaje sin soldadura. Octava fase: Grabación del programa y verificación de su funcionamiento Mediante el programa WinPic800 se graba en la PIC School el programa ejecutable en la memoria del PIC12F508. Luego se procede a la ejecución del mismo para comprobar el comportamiento de todos los elementos del sistema. Novena fase: Programación en C Se propone el programa fuente escrito en lenguaje C. Como compilador, se propone el PCH de la casa CCS, que comercializa Ingeniería de Microsistemas Programados. Su facilidad de manejo, flexibilidad para PIC y economía lo hacen muy recomendable.

P3.2. PRÁCTICA 1: MANEJANDO LAS LÍNEAS DE E/S DIGITALES P3.2.1. Enunciado (primera fase) 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

P3.2.2. Principios teóricos (segunda fase) El PIC12F508 dispone de ocho patitas en el encapsulado, de las cuales dos se dedican a recibir la tensión de alimentación, quedando un máximo de seis para actuar como líneas de E/S. Como algunas líneas pueden soportar diversas funciones, para que haya seis destinadas a las E/S es necesario que se utilice el oscilador interno de 4 MHz y que la patita multifunción GP3/MCLR#/VPP esté configurada como línea de entrada (GP3) (Fig. P3.1).

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

P3.2.3. Nuevas instrucciones (tercera fase) Como éste es el primer programa que se explica en la colección de prácticas, se procede a describir todas las directivas e instrucciones que se manejan. Posteriormente, sólo se comentarán las nuevas que aparezcan en programas sucesivos. 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 comprender 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 Son textos indicativos que determinan ciertas características importantes a tener en cuenta en el programa. Por ejemplo, la directiva List p=12F508 informa al ensamblador que en la aplicación se va a utilizar un PIC12F508.

152

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

La directiva Include P12F508.INC indica al programa Ensamblador que hay que acceder al archivo P12F508.INC, proporcionado por Microchip, todos los nombres o etiquetas en inglés de los registros y bits del modelo de PIC usado. Se trata de etiquetas que se definen previamente para hacer referencia a ellas en lugar de a las direcciones que ocupan en la memoria de datos, siendo así mucho más fácil la programación. Por ejemplo, la instrucción que pone a 0 el bit 3 del registro de Estado, que ocupa la dirección 0x03 de la memoria de datos, debe escribirse BCF 0x03, 3; sin embargo, si al comienzo del programa se ha definido la etiqueta STATUS como la que hace referencia a la posición 0x03 de la memoria de datos (STATUS equ 0x03), la escritura de la instrucción quedaría más comprensible poniendo BCF STATUS, 3. En el fichero P12F508.INC se incluyen todas las etiquetas de registros y bits del microcontrolador especificado. Conviene que este fichero se encuentre en la misma carpeta en la que se guarda el programa fuente que se edita. List p=12F508 Include “P12F508.INC”

; Define el tipo de procesador usado ; Se incluye un archivo con etiquetas de ; registros y bits

PALABRA DE CONFIGURACIÓN La Palabra de Configuración tiene la misión de seleccionar diferentes posibilidades de funcionamiento del procesador, como el tipo de oscilador empleado, el uso o no del WDT y la posible protección ante lecturas del código. Todo esto se puede determinar indicándolo por software en el propio programa fuente o bien durante la grabación del mismo. Si se especifica la Palabra de Configuración en el programa fuente cada vez que se ensamble o compile, se obtiene un fichero ejecutable que contiene también la configuración. Así, el software de grabación adquiere automáticamente la configuración preestablecida. En esta práctica se emplea la directiva “ config _ CP _ OFF& _ WDT _ OFF& _ MCLRE _ OFF& _ IntRC _ OSC”

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 configuración también se hallan establecidas en el archivo P12F508.INC. VARIABLES DE USUARIO Y VECTOR DE ARRANQUE La mayoría de los programas de aplicación necesitan utilizar posiciones de memoria de datos RAM para guardar datos y variables de carácter temporal. En el programa bajo análisis, la directiva Temp equ 0x07 se encarga de definir una variable de 8 bits denominada Temp que se localiza en la dirección 0x07 de la memoria de datos RAM. El programa utilizará esta posición para almacenar temporalmente el valor leído en el registro GPIO de E/S. El número de registros disponibles en la RAM para contener va-

LAS PRIMERAS EXPERIENCIAS

153

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 posició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 programa. La directiva org 0x00 informa al ensamblador la dirección de la instrucción inicial. Temp

equ

0x07

org

0x00

; La variable temporal Temp se ubica en la ; dirección 0x07 ; Dirección del Vector de Reset

INSTRUCCIONES Se comenta la función de las instrucciones empleadas en el programa: — movwf OSCCAL: Almacena el valor que hay en W sobre el registro de calibración del oscilador interno OSCCAL. El valor existente en W es el que se cargó con la instrucción movlw XX, que el fabricante del chip ha grabado en la posición 0x1FF y que es la que se ejecuta automáticamente al arrancar el sistema. — clrf GPIO: Borra el contenido existente en los latchs del registro GPIO. Es una buena táctica para controlar inicialmente el estado de los mismos, pues al conectar la alimentación su valor inicial es aleatorio e impredecible, lo cual puede provocar accionamientos no deseados en los periféricos conectados en las líneas de salida. — movlw b’11011111’: Carga en el registro W el valor binario indicado. — option: Carga el valor de W en el registro OPTION, con lo que se configura a la línea multifunción GP2/T0CKI como línea de E/S GP2. — movlw b’11111000’: Almacena en el registro W el valor adecuado para que cuando se traspase al registro TRIS se configuren como salidas las líneas GP0, GP1 y GP2 y las restantes como entradas. — tris GPIO: Almacena el contenido de W en el registro TRIS. — movf GPIO, W: Mueve a W el estado de las seis líneas de E/S del registro GPIO, de las cuales en este caso sólo interesan las de entrada, que son GP3, GP4 y GP5. — movwf Temp: El anterior valor leído y cargado en W se almacena en la variable Temp. — rlf Temp, f: Los 8 bits almacenados en Temp rotan una posición a la izquierda, introduciendo un 0 por la derecha. — swap Temp, w: Se intercambian los 4 bits de más peso del valor contenido en Temp con los 4 bits de menos peso, depositando el resultado obtenido en W. Así, los bits 0, 1 y 2 de W contienen el estado de las patitas de entrada GP3, GP4 y GP5.

154

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

— movwf GPIO: El contenido de W se escribe en los latchs del registro GPIO. — goto Loop: Se salta a la instrucción que va precedida por la etiqueta Loop y así se consigue que el ciclo se repita indefinidamente. — end : Se trata en realidad de una directiva que informa al programa ensamblador el final del programa.

P3.2.4. Materiales necesarios (cuarta fase) Se citan los materiales que se precisan para realizar la práctica. En este ejemplo, todos los elementos necesarios están contenidos en la PIC School. • PIC School. • PIC12F508. • Cables de conexión.

P3.2.5. Organigrama y programa fuente en Ensamblador (quinta fase) En la Figura P3.5 se ofrece el organigrama que corresponde al programa fuente en Ensamblador, que se encarga de leer los tres interruptores colocados en las líneas de entrada GP3GP5 visualizando su valor sobre los tres leds conectados a las líneas de salida GP0-GP2.

Figura P3.5. Organigrama correspondiente al programa de lectura de entradas y su visualización sobre las salidas.

LAS PRIMERAS EXPERIENCIAS

155

Para que el valor de las entradas se coloque adecuadamente en el de las salidas se realiza una rotación a la izquierda del registro GPIO seguida de un intercambio entre los 4 bits de más peso con los 4 de menos peso (Fig. P3.6).

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.

Se presenta el listado del programa fuente en Ensamblador: ; ; 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 List p=12F508 include “P12F508.INC”

;Tipo de procesador ;Definiciones de registros internos

;Ajusta los valores de la palabra de configuración durante el ;ensamblaje: ;Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno ;Estas u otras configuraciones se pueden seleccionar según las ;necesidades __config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC

Inicio

Temp

equ

org

0x00

0x07

movwf OSCCAL clrf GPIO movlw b’11011111’

;Variable temporal ;Vector de Reset ;Almacena valor de calibración original ;Borra salidas

156

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

option movlw b’11111000’ tris GPIO Loop

movf GPIO,W movwf Temp rlf Temp,f swapf Temp,w movwf GPIO goto Loop

;Pin GP2/TOCKI = GP2 ;Configura GP0-GP2 como salidas ;Lee las entradas GP3-GP5 ;Desplaza a la izquierda ;Intercambia nibbles ;Visualiza en las salidas GP0-GP2

end

P3.2.6. Ensamblado/compilación (sexta fase) Como el programa fuente incluido en el proyecto (Práctica1.ASM) se ha escrito en Ensamblador, se selecciona la opción Build All para obtener el programa ejecutable (Práctica1.HEX). Se puede utilizar el simulador software MPLAB SIM para comprobar el comportamiento del programa analizando especialmente las modificaciones que suceden en el registro GPIO. Téngase en cuenta que el comportamiento obtenido no es en tiempo real. Habrá que forzar un valor en las entradas para comprobar cómo pasa a las salidas. Por ejemplo, si inicialmente cargamos en el registro GPIO el valor F0, habrá que confirmar que al acabar el programa los 3 bits de las líneas de entrada estén situados sobre el de las líneas de salida.

P3.2.7. Conexión de periféricos (séptima fase) El conexionado de los periféricos que se usan en este ejercicio se muestra en la Figura P3.7. Como las líneas multifunción GP0/ICSPDAT y GP1/ICSPCLK, además de actuar como E/S, también se emplean en la grabación serie de la memoria de programa, se recomienda conectar los periféricos correspondientes a las líneas RB7 y RB6, que sólo realizan la función de líneas de E/S similares a GP0 y GP1, respectivamente. Para conseguir una fase de grabación del programa sin contratiempos se recomienda tener en cuenta las siguientes reglas: 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

P3.2.8. Grabación del programa y verificación del funcionamiento (octava fase) GRABACIÓN Se trata de grabar en la memoria FLASH el programa ejecutable obtenido tras el ensamblado del programa fuente. Se comienza ejecutando el programa WinPic800, que se incluye en el CD. Se selecciona el microcontrolador PIC12F508 y se abre el fichero ejecutable Ejem_1A.HEX. Aparecerá la pantalla que se muestra en la Figura P3.9. En el buffer de memoria que aparece en la pantalla y se destina a contener el código a partir de la dirección inicial (Vector de Reset) 0x000, se presentan los valores hexadecimales que hay en ellos antes de la grabación. También se puede conocer la configuración del dispositivo para comprobar que coincide con la que se programó. Una vez abierto el fichero ejecutable (Archivo/Abrir / Ejem_1A.HEX), se realizan los siguientes pasos: 1.o Se pone el conmutador que selecciona el modo de trabajo de la PIC School en la posición PC (si hay adaptador serie-USB en la ICSP). 2.o Se coloca el jumper JP4 en la posición MCL (1-2). 3.o Se graba el dispositivo seleccionando el icono correspondiente de la pantalla.

Figura P3.9. Ventana similar a la que aparece al abrir el programa WinPic800.

LAS PRIMERAS EXPERIENCIAS

159

Figura P3.10. Fotografía de la PIC School con el experimento propuesto montado y funcionando.

VERIFICACIÓN DEL FUNCIONAMIENTO Una vez grabado el dispositivo y para comprobar el comportamiento del programa cuando lo ejecuta el PIC12F508, se procede a seguir los siguientes pasos. 1.o Se coloca el jumper JP4 en la posición GP3 (2-3). 2.o Se sitúa el conmutador de modo de trabajo de la PIC School en RUN. 3.o Se comprueba el correcto funcionamiento de la experiencia observando que el estado de los interruptores de entrada E0-E2 se refleja en los leds S0-S2 (Fig. P3.10).

P3.2.9. Programación en C (novena fase) En muchas ocasiones es muy frecuente desarrollar el programa fuente en lenguaje C; por eso, en cada práctica, se ofrece el programa confeccionado en este lenguaje. Para la compilación se ha seleccionado el compilador PCH de CCS, que comercializa Ingeniería de Microsistemas Programados, por su sencillez, flexibilidad y economía. A continuación, se ofrece el programa mencionado que se puede encontrar en el CD con el nombre de Ejem_1B.C:

160

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

// 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 //Ajusta los valores de la palabra de conf. durante el ensamblaje: //Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno //Estas u otras configuraciones se seleccionan según necesidades #fuses

NOPROTECT,NOWDT,NOMCLR,INTRC

#use fast_io (B)

//Acceso rápido a las E/S

int Temp; main() { output_b(0x0); SETUP_TIMER_0(RTCC_INTERNAL); set_tris_b(0b11111000); while(1) { Temp=input_b(); rotate_left (&Temp,1); swap(Temp); output_b(Temp); } }

//Variable temporal // Borra las salidas // Pin GP2/T0CKI = GP2 // GP0-GP2 configuran como salidas //Lee las entradas GP3-GP5 //Desplaza a la izquierda //Intercambia nibbles //Visualiza en las salidas GP0-GP2

Listado del programa en lenguaje C.

P3.3. TRABAJO PERSONAL 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ísicamente.

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 cuatro 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 P3.11. El programa a confeccionar debe responder a la siguiente tabla de verdad.

Manejando el tercer estado en las E/S

a

4.

APLICACIÓN

P4.1. ¿QUÉ ES EL TERCER ESTADO? El tercer estado o estado de «alta impedancia», Z, es un estado lógico diferente al 0 (GND) y al 1 (VCC) que corresponde al de una línea sin conectar a nada, es decir, «al aire». En la Figura P4.1 se muestra un conmutador de tres posiciones que representa los tres posibles estados. Una va a tierra, otra a la tensión positiva y la tercera está al aire sin conectarse a nada. La línea de salida del conmutador de la Figura P4.1 es capaz de soportar tres estados en vez de sólo dos como es habitual en algunos sistemas digitales. Con tres estados se incrementa el número de combinaciones diferentes que pueden representarse. En un sistema binario, el número de combinaciones, C, que se pueden formar con n líneas viene dado por C = 2n, mientras que si el sistema admite los tres estados, el número de

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 combinaciones posibles se elevaría a nueve. A los tres estados se denominan 0, 1 y Z.

P4.2. PRÁCTICA 2: DETECTANDO EL TERCER ESTADO ENUNCIADO 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 conmutador 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 posteriormente 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 comentados 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 binario indicado en el registro OPTION, con lo que se consigue configurar la patita multifunció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 instrucció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.

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR El organigrama al que responde el programa de la experiencia para la detección de los tres estados en GP5 se ofrece en la Figura P4.3. Cada estado se visualiza encendiendo uno de los leds conectados a las líneas de salida GP0, GP1 y GP2.

166

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

Figura P4.3. Organigrama para detectar los tres estados posibles en la línea GP5 del esquema de la Figura P4.2.

A continuación, se proporciona el listado del programa fuente en Ensamblador correspondiente al organigrama de la Figura P4.3. Para su comodidad, dicho programa también está incluido en el CD que acompaña al libro bajo el nombre 12F508ASM/Ejem_2A.ASM.

MANEJANDO EL TERCER ESTADO EN LAS E/S

167

; ; 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 ;Ajusta valores de palabra de config. durante el ensamblaje: ;Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno ;Otras configuraciones se seleccionan según las necesidades __config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC Temp

Inicio

equ

0x07

;Variable temporal

org

0x00

;Vector de Reset

movwf OSCCAL clrf GPIO movlw b’11011111’ option movlw b’11111000’ tris GPIO

movlw b’11011000’ tris GPIO bsf GPIO, 5 movlw b’11111000’ tris GPIO btfss GPIO, 5 goto GP5_es_0 movlw b’11011000’ tris GPIO bcf GPIO, 5 movlw b’11111000’ tris GPIO btfsc GPIO, 5 goto GP5_es_1 movlw b’00000100’ movwf GPIO goto Loop GP5_es_1 movlw b’00000010’ movwf GPIO goto Loop GP5_es_0 movlw b’00000001’ movwf GPIO goto Loop end

;Almacena valor de calibración original ;Borra salidas ;Pin GP2/TOCKI = GP2 ;Configura GP0-GP2 como salidas

Loop

;GP5 salida ;GP5=1 ;GP5 entrada ;GP5 = 1 ?? ;No ;Sí ;GP5 salida ;GP5=0 ;GP5 entrada ;GP5 =0 ?? ;No ;Sí, GP5=Z --> GP2=1 ;GP5=1 --> GP1=1 ;GP5=0 --> GP0=1

168

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

ENSAMBLADO El programa fuente en Ensamblador que se ha editado en el entorno MPLAB IDE con el nombre de Práctica2.ASM es el que se utiliza para la creación de un nuevo proyecto para después ensamblarlo con la opción Build All y así obtener, 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 introduciendo el usuario por el teclado el valor que desea sacarse por GP5 y leyendo el valor que van tomando las líneas de salida GP0, GP1 y GP2.

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

En la unión de la resistencia de 330 Ω y el condensador de 1 nF se puede colocar un cable con el que se puede tocar una borna con +5 V para la detección del nivel alto o bien llevarla a tierra para el nivel bajo o dejarla al aire para representar el estado de alta impedancia en el que se encenderá el led S2 conectado a GP2. Se recomienda usar las líneas RB7 y RB6 en lugar de GP0 y GP1 para tener que desconectarlas cada vez que se proceda a una grabación o verificación de un programa, ya que por GP0 y GP1 se transfieren los datos en serie y los impulsos de reloj. Dichas líneas son multifunción: GP0/ICSPDAT y GP1/ICSPCLK.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO 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 correspondiente 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 A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. En estos ejemplos se ha empleado el compilador de C de la casa CCS que comercializa Ingeniería de Microsistemas Programados. También en el CD que acompaña al libro se puede encontrar este programa bajo el título \12F508C\ Ejem_2B.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 //Ajusta valores de la palabra de configuración durante el ensamblaje: //Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno //Estas u otras configuraciones se pueden seleccionar según las //necesidades #fuses

NOPROTECT,NOWDT,NOMCLR,INTRC

#use fast_io (B) #byte GPIO=0x06 main() { output_b(0x0); SETUP_TIMER_0(RTCC_INTERNAL); set_tris_b(0b11111000); while(1) { Loop: set_tris_b(0b11011000); bit_set(GPIO,5); set_tris_b(0b11111000); if (bit_test(GPIO,5)==0) {output_b(0b00000001); goto Loop;} set_tris_b(0b11011000); bit_clear(GPIO,5); set_tris_b(0b11111000); if (bit_test(GPIO,5)==1) {output_b(0b00000010); goto Loop;} output_b(0b00000100);

//Acceso rápido a las E/S

//Borra las salidas //Pin GP2/T0CKI = GP2 //GP0-GP2 como salidas

//GP5 salida //GP5=1 //GP5 entrada //GP5 = 0??? //Si, GP0=1 //GP5 salida //GP5=0 //GP5 entrada //GP5 = 1 ??? //Si, GP1=1 //GP5=Z --> GP2=1

} }

P4.3. EJEMPLO2_2: AMPLIACIÓN DE COMBINACIONES USANDO ENTRADAS TRIESTADO 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

Entradas

171

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

En el programa se manejan frecuentemente instrucciones de suma addwf, de resta subwf y de testado de bits en los registros GPIO y STATUS, tales como btfsc GPIO, 5 y btfss STATUS, Z. La primera explora si GP5 = 0 y brinca si es así, mientras que la segunda explora si Z = 1 para brincar si es cierto.

MATERIALES NECESARIOS • • • • •

PIC School. PIC12F508. Dos resistencias de 330 Ω. Dos condensadores de 1 nF. Cables de conexión.

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR En la tabla de la Figura P4.8 se indica el valor decimal que se aplica a cada una de las nueve combinaciones de las tres líneas de entrada triestado. Obsérvese que hay dos combinaciones que responden al mismo valor para poder representarlas con tres salidas digitales (led). Se explora el valor lógico de las líneas de entrada GP4 y GP5 y según el que soporten se añade una constante a la variable Temp, la cual contiene un valor diferente para cada una de las nueve combinaciones (recuérdese que dos se repiten). Dichas combinaciones se representan por tres líneas binarias de salida. Las dos combinaciones de las entradas que repiten su representación en las salidas son GP4 = GP5 = 0 y GP4 = GP5 = Z, que ambas se corresponden con el mismo valor de las salidas GP2 = GP1 = GP0 = 0. 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

0

+2

+1

1

1

0

0

1

+0

2

2

0

1

0

1

1

+2

+1

3

3

0

1

1

Z Z

0

+4

+0

4

4

1

0

0

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.

A continuación, se presenta el programa fuente en Ensamblador con abundantes comentarios para ser interpretado cómodamente. Encontrará un fichero con este programa en el CD del libro bajo el título Ejem_2_2A.ASM. ; ; ; ; ; ;

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: ; GP5 ; --; 0 ; 0 ; 1 ; 1 ; Z ; Z ; 0 ; 1 ; Z ;

GP4 --0 1 0 1 0 1 Z Z Z

GP2 --0 0 0 0 1 1 1 1 0

GP1 --0 0 1 1 0 0 1 1 0

GP0 --0 1 0 1 0 1 0 1 0

List p=12F508 include “P12F508.INC”

BCD --0 1 2 3 4 5 6 7 0 ;Tipo de procesador ;Def. de registros internos

;Ajusta valores de la palabra de configuración durante el ensamblaje: ;Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno ;Otras configuraciones se pueden seleccionar según las necesidades __config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC Temp

equ

org

0x00

0x07

;Variable temporal ;Vector de Reset

Inicio

movwf OSCCAL ;Almacena valor de calibración original clrf GPIO ;Borra salidas movlwb’11011111’ option ;Pin GP2/T0CKI = GP2 movlw b’11011000’ tris GPIO ;Config GP0-GP2 y GP5 como salidas

Loop

clrf Temp

;Inicia la variable

;Chequea el estado de GP4 y añade a Temp la constante apropiada Test_GP4

movlw b’11101000’ tris GPIO ;GP4 salida bsf GPIO,4 ;GP4=1 movlw b’11111000’ tris GPIO ;GP4 entrada btfss GPIO,4 ;GP4 = 1 ?? goto Test_GP5 ;No movlw b’11101000’ ;Sí tris GPIO ;GP4 salida bcf GPIO,4 ;GP4=0 movlw b’11111000’

MANEJANDO EL TERCER ESTADO EN LAS E/S

GP4_es_1

tris GPIO btfsc GPIO,4 goto GP4_es_1 movlw.6 addwf Temp,F goto Test_GP5 movlw.1 addwf Temp,F

175

;GP4 entrada ;GP4 =0 ?? ;No ;Sí, GP4=Z --> Temp = Temp + 6 ;GP4=1 --> Temp = Temp + 1

;Chequea el estado de GP5 y añade a Temp la constante apropiada Test_GP5

GP5_es_1

movlw b’11011000’ tris GPIO ;GP5 salida bsf GPIO,5 ;GP5=1 movlw b’11111000’ tris GPIO ;GP5 entrada btfss GPIO,5 ;GP5 = 1 ?? goto Continuar ;No movlw b’11011000’ ;Sí tris GPIO ;GP5 salida bcf GPIO,5 ;GP5=0 movlw b’11111000’ tris GPIO ;GP5 entrada btfsc GPIO,5 ;GP5 =0 ?? goto GP5_es_1 ;No movlw.4 addwf Temp,F ;Sí, GP5=Z --> Temp = Temp + 4 goto Continuar movlw.2 addwf Temp,F ;GP5=1 --> Temp = Temp + 2

;Cuando los valores obtenidos en Temp son iguales a 8 o 10, se ajusta ;a 7 y 0, respectivamente, según el enunciado Continuar

movlw.8 subwf Temp,W btfss STATUS,Z goto Continuar_1 decf Temp,F goto Continuar_2 Continuar_1 movlw.10 subwf Temp,W btfsc STATUS,Z clrf Temp Continuar_2 movf Temp,W movwf GPIO goto Loop end

;Temp = 8 ?? ;No ;Sí, Temp = 7 (111)

;Temp = 10 ?? ;Sí, Temp = 0 ;Visualiza Temp

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 Se muestra el conexionado de los periféricos utilizados que se hallan en la PIC School en la Figura P4.9.

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

Figura P4.10. Fotografía del montaje de la experiencia sobre la PIC School.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Con el programa WinPic800 se graba el programa Práctica2_2.HEX en la memoria FLASH del PIC12F508 de acuerdo con las indicaciones explicadas en anteriores experiencias. Al ejecutar el programa, se debe comprobar que, según los valores lógicos que introducen GP4 y GP5, se deben encender los leds correspondientes según la tabla de la Figura P4.7.

EL PROGRAMA EN C A continuación, se proporciona el programa en C que resuelve esta práctica y que está incluido en el CD que acompaña al libro con el título Ejem2_2B.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

//Según la siguiente tabla codificadora: // // // // // // // // // // //

GP5 --0 0 1 1 Z Z 0 1 Z

GP4 GP2 GP1 --- --- --0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0 Z 1 1 Z 1 1 Z 0 0

GP0 --0 1 0 1 0 1 0 1 0

BCD --0 1 2 3 4 5 6 7 0

#include //Ajusta valores de la palabra de configuración durante el ensamblaje: //Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= interno //Otras configuraciones se pueden seleccionar según las necesidades #fuses

NOPROTECT,NOWDT,NOMCLR,INTRC

#use fast_io (B) #byte GPIO=0x06

//Acceso rápido a las E/S

int

//Variable temporal

Temp;

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

//Chequea el estado de GP4 y añade a Temp la constante apropiada Test_GP4: set_tris_b(0b11101000); bit_set(GPIO,4); set_tris_b(0b11111000); if (bit_test(GPIO,4)==0) goto Test_GP5;

//GP4 salida //GP4=1 //GP4 entrada //GP4 = 0??? //Sí

set_tris_b(0b11101000); bit_clear(GPIO,4); set_tris_b(0b11111000); if (bit_test(GPIO,4)==0) {Temp=Temp+6; goto Test_GP5;} Temp=Temp+1;

//GP4 salida //GP4=0 //GP4 entrada //GP4 = 0 ??? //Sí, GP4=Z --> Temp=Temp+6 //GP4=1 --> Temp=Temp+1

//Chequea el estado de GP5 y añade a Temp la constante apropiada

MANEJANDO EL TERCER ESTADO EN LAS E/S

179

Test_GP5: set_tris_b(0b11011000); bit_set(GPIO,5); set_tris_b(0b11111000); if (bit_test(GPIO,5)==0) goto Continuar;

//GP5 salida //GP5=1 //GP5 entrada //GP5 = 0??? //Sí

set_tris_b(0b11011000); bit_clear(GPIO,5); set_tris_b(0b11111000); if (bit_test(GPIO,5)==0) {Temp=Temp+4; goto continuar;} Temp=Temp+2;

//GP5 salida //GP5=0 //GP5 entrada //GP5 = 0 ??? //Sí, GP5=Z --> Temp=Temp+4 //GP5=1 --> Temp=Temp+2

//Cuando los valores obtenidos en Temp son iguales a 8 o 10, se ajusta //a 7 y 0, respectivamente, según el enunciado Continuar: if (Temp==8) Temp=7; if (Temp==10) Temp=0; output_b(Temp); } }

//Sí Temp=8 --> Temp=7 //Sí Temp=10 --> Temp=0 //Visualiza Temp

Controlando el tiempo con «software»

a

5.

APLICACIÓN

P5.1. PRÁCTICA 3: UN INTERMITENTE POR PARPADEO DE UN «LED» Esta experiencia consiste en simular una luz intermitente controlando el tiempo de encendido y apagado de la misma mediante las instrucciones del programa. 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: 1.a Por «hardware»: Se utiliza un dispositivo físico programable, llamado temporizador o timer, cuyo circuito se halla integrado en el microcontrolador. 2.a Por «software»: Conociendo la frecuencia de funcionamiento del procesador y el tiempo que tarda en ejecutar las instrucciones, se controla el tiempo repitiendo la ejecución de un conjunto de instrucciones que se suelen agrupar formando bucles que se repiten incrementando o decrementando algunas variables hasta que alcanzan el valor 0.

El PIC12F508 tarda en ejecutar la mayoría de las instrucciones un ciclo de instrucción o ciclo máquina (TC) que equivale a cuatro ciclos de reloj (T), de forma que TC = 4 · T. Recuérdese que las instrucciones de salto tardan el doble. Si en este caso se trabaja con la frecuencia interna de 4 MHz, T = 250 ns y TC = 1 µs, que es la duración de todas las instrucciones, excepto las de salto, que tardan el doble. 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.

Un ejemplo de un bucle típico para desarrollar una temporización se muestra en la Figura P5.1. Se trata del bucle A, que consume un tiempo de 768 µs en ejecutarse. Emplea una variable temporal Temp_0 que se inicia con el valor 0 con la instrucción clrf Temp_0, que tiene un consumo de 1 µs, y luego se decrementa una unidad con la instrucción decfsz Temp_0 hasta que Temp_0 vuelve a valer 0.

BucleA

clrf decfsz goto

Temp_0 Temp_0, f BucleA

; Temp_0 = 0 ; Temp_0 = Temp_0 – 1 ; Se salta a la instrucción con la etiqueta ; BucleA

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 En la construcción de bucles de temporización se suele emplear la instrucción condicional decfsz, que decrementa el contenido de una variable hasta que vale 0, momento en el que «brinca» la instrucción siguiente, es decir, salta una sola instrucción. Sólo cuando la variable toma el valor 0 y entonces Z = 1, se produce el brinco, y únicamente en esa ocasión dicha instrucción tarda en ejecutarse 2 µs, en los demás casos dura la mitad.

CONTROLANDO EL TIEMPO CON «SOFTWARE»

183

MATERIALES NECESARIOS Se precisan los siguientes materiales: • PIC School. • PIC12F508. • Cables de conexión. ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR En el organigrama del BucleA mostrado en la Figura P5.1 se conseguía un delay o temporización de 768 µs, tiempo insuficiente para nuestro propósito de parpadear 0,5 s el led. Al BucleA se le incluye en otro bucle, llamado BucleB, que utiliza la variable temporal Temp_1, que se comienza cargando con el valor decimal 130. Entonces, las instrucciones decfsz Temp_1 y goto consumen 3 µs y se ejecutan 129 veces, lo que supone un tiempo de 387 µs, a los que hay que añadir otros 3 µs cuando rompe el bucle decfsz, lo que totaliza 390 µs. Como el BucleA está incrustado en el BucleB, se repite 130 veces, lo que significa 130 · 768 = 99840 µs, que sumados a los 390 µs anteriores alcanzan los 100.231 µs. A continuación, se ofrece el programa del BucleB, en el que los valores expresados en decimal se representan con un punto previo. BucleB Delay_1 Delay_2

movlw movwf clrf decfsz goto decfsz goto end

.130 Temp_1 Temp_0 Temp_0, f Delay_2 Temp_1, f Delay_1, f

; W = 130 (decimal) ; Temp_1 = 130 ; Temp_0 = 0 ; Bucle de 256 • 3 = 768 µs ; Repite BucleA 130 veces

El BucleB tarda en ejecutarse 0,100231 s, y como el tiempo a controlar en el parpadeo es de 0,5 s, hay que repetirlo cinco veces, para lo cual se emplea otro bucle con una variable temporal Temp_2 que se carga con 5 (Fig. P5.2). Si Temp_2 = 5, las instrucciones decfsz Temp_2 y goto consumen 3 µs y se repiten cuatro veces, con lo que se obtiene un delay de 12 µs, a los que se añaden otros 2 para cargar 5 en Temp_2 y otro más que dan un total de 15 µs. Como los bucles A y B se repiten cinco veces, la temporización final que se obtiene es de 501.171 µs, que aproximadamente son los 0,5 segundos que precisábamos para el parpadeo del led (Fig. P5.3). A continuación, se presenta el programa fuente \12F508ASM\Ejemp_3A.ASM en Ensamblador con comentarios aclaratorios. Este programa lo podrá encontrar en el CD que acompaña al libro.

184

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

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 List p=12F508 include “P12F508.INC”

;Tipo de procesador ;Definiciones de registros internos

;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. Estas u otras configuraciones se pueden ;seleccionar según las necesidades __config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC Temp_0 Temp_1 Temp_2

Inicio

Loop

equ equ equ

0x07 0x08 0x09

;Variables temporales

org

0x00

;Vector de Reset

movwf OSCCAL clrf GPIO movlw b’11011111’ option movlw b’11111110’ tris GPIO movlw b’000000001’ xorwf GPIO,F

;Almacena valor calibración original ;Borra salidas ;Pin GP2/T0CKI = GP2 ;Configura GP0 como salida ;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 Delay_0 movlw.130 movwf Temp_1 Delay_1 clrf Temp_0 Delay_2 decfsz Temp_0,F goto Delay_2 decfsz Temp_1,F goto Delay_1 decfsz Temp_2,F goto Delay_0 goto Loop End

;El bucle externo se repite 5 veces ;El bucle interno se repite 130 veces ;El bucle se repite 255 veces ;Este bucle interno tarda en ;ejecutarse 768 uS aprox. (256 x 3uS) ;Este intermedio repite el anterior ;130 veces, haciendo un total de ;0.100234 s ;El externo se repite 5 veces con un ;total de 0.499 s

186

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

ENSAMBLADO Usando el MPLAB IDE, se procede al ensamblado del programa fuente PROYECTO3.MCW para obtener el programa ejecutable PROYECTO3.HEX. 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.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Mediante el programa WinPic800 se graba el programa Ejem_3A.HEX en el PIC12F508, y pasando el conmutador a la posición RUN y colocando el jumper JP4 en la posición GP3 (2-3), se ejecuta el programa y se verifica el correcto comportamiento del hardware y software al parpadear cada 0,5 segundos el led. EL PROGRAMA EN C A continuación, se ofrece el programa de este ejercicio en lenguaje C. Mediante la función Delay_ms( ), resulta muy cómodo, fácil y rápido diseñar cualquier temporización mediante el lenguaje C.

CONTROLANDO EL TIEMPO CON «SOFTWARE»

187

// 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 //Ajusta los valores de la palabra de configuración durante //ensamblaje: //Protección de código =OFF, WDT=OFF, MCLR=Interno y OSC= RC interno //Estas u otras configuraciones se pueden seleccionar según necesidades #fuses

NOPROTECT,NOWDT,NOMCLR,INTRC

#use fast_io (B) #use delay(clock=4000000)

//Acceso rápido a las E/S //Activa las temporizaciones en base //al clock de trabajo

#byte GPIO=0x06 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); delay_ms(500); }

//Cambio de estado en GP0 //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.

Controlando el tiempo con «hardware». El temporizador TMR0

a

6.

APLICACIÓN

P6.1. PRÁCTICA 4: GENERACIÓN DE UNA ONDA CUADRADA ENUNCIADO Como en la anterior experiencia, en ésta también se trata de hacer parpadear un led conectado 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 En la aplicación anterior se controló el tiempo mediante la ejecución de un determinado número de instrucciones. El inconveniente de este procedimiento es que el microcontrolador no puede realizar ninguna tarea mientras ejecuta el software destinado a la temporización. La temporización hardware consiste en usar un contador digital independiente o timer de tipo ascendente o descendente que evoluciona automáticamente a una frecuencia conocida hasta que se desborda, momento en el que finaliza el control del tiempo. Dicho contador puede ser leído o escrito y el microcontrolador puede atender otras tareas y ejecutar instrucciones en paralelo con la evolución del timer, aunque de cuando en cuando debe comprobar el valor del contador. El PIC12F508 dispone de un contador ascendente interno de 8 bits llamado TMR0 que puede actuar como un temporizador o como un contador de eventos externos (impulsos procedentes del exterior) (Fig. P6.1). El TMR0 es un registro SFR que ocupa la posición 1 del área de datos. Cuando se lee TMR0, se obtiene el valor que tiene en ese momento. Cuando se escribe, se carga TMR0 con un valor que se va incrementando automáticamente al ritmo de los impulsos de reloj hasta que se desborda. La fuente de los impulsos de reloj que incrementan TMR0 procede del oscilador principal (FOSC/4) o del exterior introducidos por la patita GP2/T0CKI, según el bit T0CS del registro OPTION valga 1 o 0, respectivamente. El bit T0SE de OPTION (Fig. P6.2) selecciona el flanco ascendente o descendente con el que evoluciona el contador. 189

190

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

Figura P6.1. Esquema interno del temporizador TMR0 del PIC12F508.

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 impulsos 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: T = (4/FOSC) · (256 – Valor cargado en TMR0) · Rango predivisor

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 acontecimientos exteriores. Como TMR0 es un contador ascendente, el valor que hay que cargarle en una temporizació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 Mediante la instrucción movlw b’11010111’ seguida de option se carga en el registro OPTION el valor necesario para configurar al predivisor con el rango 256 asignado al TMR0, el empleo del oscilador interno del microcontrolador y la selección de la línea multifunción GP2/T0CKI como línea de E/S (Fig. P6.2).

Figura P6.2. Distribución de los bits de control en el registro OPTION.

CONTROLANDO EL TIEMPO CON «HARDWARE»

191

MATERIALES NECESARIOS • PIC School. • PIC12F508. • Cables de conexión. ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR 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 List p=12F508 ;Tipo de procesador Incluye «P12F508.INC» ;Definiciones de registros internos ;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 ;Estas u otras configuraciones se pueden seleccionar según las ;necesidades __config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC Temp_0

Inicio

Loop

equ

0x07

;Variable temporal

org

0x00

;Vector de Reset

movwf OSCCAL clrf GPIO movlw b’11010111’ option ;actúa como GP2 movlw b’11111110’ tris GPIO movlw b’000000001’ xorwf GPIO,F

;Almacena valor de calibración original ;Borra salidas ;Preescaler 1:256 asignado al TMR0 y ;oscilador interno. Pin GP2/T0CKI ;Configura GP0 como salida ;GP0 cambia de estado

;Bucle de temporización de 0.5 s. A una frecuencia de trabajo de ;4 MHz, con un preescaler de 256, el TMR0 se carga con 195 ;(su complemento) por lo que desborda y pasa a 0 al de 50 ms ;(195*256*1=49920 us).

Delay_0

movl movwf movlw movwf

w.10 Temp_0 ~.195 TMR0

;El bucle externo se repite 10 veces ;W se carga con 256-195 ;El TMR0 se carga con el complemento ;de 195 en decimal.

CONTROLANDO EL TIEMPO CON «HARDWARE»

Delay_1

movf btfss goto decfsz goto

TMR0,W STATUS,Z Delay_1 Temp_0,F Delay_0

goto

Loop

193

;TMR0 se mueve a W y Z=1 si es 0. ;Desborda al de 50 ms ;Se esperan 10 desbordamientos para ;conseguir 0.5 s

end

Cuando se ejecuta la instrucción movf TMR0, W (su equivalente en C es while (get_timer0( )! = 0)), se consigue leer el valor actual del TMR0, y si es 0, se activa el señalizador Z del registro STATUS. 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 Sólo se precisa un led, como se muestra en la Figura P6.4.

Figura P6.4. Conexionado de un led a la patita RB7 (GP0) de la PIC School.

194

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

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez grabado el programa ejecutable en la memoria FLASH del microcontrolador, se procede a su ejecución para comprobar su correcto funcionamiento, que se visualiza en el parpadeo del led cada 0,5 s. En este ejemplo no se aprecia bien la importancia del TMR0 porque el microcontrolador está constantemente dedicado a comprobar si se ha desbordado. Pero se podía haber dedicado a realizar otras tareas en los 50 ms existentes entre el final de una temporización y la siguiente. Para que el microcontrolador no tenga que estar permanentemente pendiente de detectar cuándo se desborda el TMR0, existen modelos de PIC que producen una «interrupción» en ese instante, lo que permite al procesador dedicarse a otras cosas, mientras que el timer cuenta el tiempo que le han encomendado. Por su enorme sencillez, el PIC12F508 no genera ningún tipo de interrupción. EL PROGRAMA EN C Se propone a continuación el programa fuente Ejem_4B.C en lenguaje 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 //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 //Estas u otras configuraciones se pueden seleccionar según las //necesidades #fuses NOPROTECT,NOWDT,NOMCLR,INTRC #use fast_io (B) #byte GPIO=0x06 int Temp_0; main() { output_b(0x0);

//Acceso rápido a las E/S

//Borra las salidas

//Pin GP2/T0CKI = GP2; TMR0 interno con preescaler de 1:256 SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256);

CONTROLANDO EL TIEMPO CON «HARDWARE»

set_tris_b(0b11111110);

195

//GP0 se configura como salida

while(1) { GPIO=(GPIO ^ 0x01);

//Cambio de estado en GP0

for (Temp_0=1;Temp_0, 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 (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 memoria, 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 niveles 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 rebosamiento de los ocho niveles de la Pila.

EN EL INTERIOR DEL PROCESADOR

Figura 9.6. Organización interna de la memoria de datos RAM en el PIC16F84A.

311

312

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

9.3. MEMORIA DE DATOS RAM La memoria de datos del PIC16F84A dispone de dos zonas diferentes: — Área de RAM estática o SRAM, donde reside el Banco de Registros Específicos (SFR) y el Banco de Registros de Propósito General (GPR). El primer banco tiene veinticuatro posiciones de tamaño byte, aunque dos de ellas no son operativas, y el segundo, sesenta y ocho. — Área EEPROM de 64 bytes, donde opcionalmente se pueden almacenar datos que no se pierden al desconectar la alimentación. La zona de memoria RAM se halla dividida en dos bancos (banco 0 y banco 1) de 128 bytes cada uno. En el PIC16F84A sólo se hallan implementadas físicamente las ochenta primeras posiciones de cada banco, de las cuales las doce primeras están reservadas a los Registros de Propósito Específico (SFR), que son los encargados del control del procesador y sus recursos. Algunos de dichos registros se hallan repetidos en

Figura 9.7. Especificaciones de los registros SFR de los bancos de la memoria de datos RAM. La abreviatura 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 apunta 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 banco 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 controlan 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.

9.3.1. Direccionamiento de la memoria de datos En los PIC de la gama media, la memoria de datos está organizada para alojar un máximo de cuatro bancos de 128 bytes cada uno. El PIC16F84A sólo tiene implementados los 80 primeros bytes de los bancos 0 y 1. En los PIC de esta familia se destinan dos bits del registro ESTADO (RP0 y RP1) para determinar el banco y otros siete para elegir una de las 128 posiciones del banco seleccionado (Fig. 9.8).

Figura 9.8. Los PIC de la gama media tienen organizada la memoria de datos en cuatro bancos de 128 posiciones cada uno. La zona sombreada no se halla implementada en el PIC16F84A.

314

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

Direccionamiento directo El operando que utiliza la instrucción en curso se referencia mediante su dirección, que viene incluida en el código OP de la misma, concretamente en los 7 bits de menos peso. El banco a acceder lo determinan los bits RP0 y RP1 del registro ESTADO. En el caso del PIC16F84A, sólo se usa el bit RP0 al tener implementado únicamente dos bancos (véase Figura 9.9).

Figura 9.9. Direccionamiento directo en el PIC16F84A.

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 movwf

0x0c FSR

; W toma el valor inicial del puntero ; 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.....

9.4. EL REGISTRO DE ESTADO El registro de Estado es el más usado y es el momento de describirle en su totalidad. Ocupa la dirección 3 tanto del banco 0 como del banco 1 de la memoria de datos RAM. Sus bits tienen tres misiones distintas: 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).

En la Figura 9.11 se muestra el diagrama de distribución de los bits del registro ESTADO.

316

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

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: — C: Acarreo/llevada en el bit de más peso 1: Cuando este señalizador vale 1, indica que se ha producido acarreo en el bit de más peso del resultado al ejecutar las instrucciones addwf y addlw. 0: No se ha producido acarreo. C también actúa como señalizador de «llevada» en el caso de la instrucción de resta, como subwf y sublw. En este caso, la correspondencia es inversa (si vale 1, no hay llevada, y si vale 0, sí). — DC: Acarreo/llevada en el cuarto bit Igual significado que C, pero refiriéndose al cuarto bit. De interés en operaciones en BCD. — Z: Cero 1: El resultado de una instrucción lógico-aritmética ha sido 0. 0: El resultado de una instrucción lógico-aritmética no ha sido 0. — PD#: «Power Down» 1: Se pone automáticamente a 1 después de la conexión de la alimentación al microcontrolador o al ejecutar la instrucción clrwdt. 0: Se pone automáticamente a 0 mediante la ejecución de la instrucción sleep. — TO#: «Time Out» 1: Se pone a 1 después de la conexión de la alimentación o al ejecutarse las instrucciones clrwdt y sleep. 0: Se pone a 0 cuando se produce el desbordamiento del Perro Guardián (Watchdog). — RP1-RP0: Selección de banco en direccionamiento directo Como el PIC16F84A sólo tiene dos bancos, únicamente emplea el bit RP0, de forma que cuando vale 1 se accede al banco 1 y cuando vale 0 se accede al banco 0 después de un reset RP0 = 0.

EN EL INTERIOR DEL PROCESADOR

317

— IRP: Selección del banco en direccionamiento indirecto Este bit, junto con el de más peso del registro FSR, sirven para determinar el banco de la memoria de datos seleccionado en el modo de direccionamiento indirecto. En el PIC16F84A, al disponer de dos bancos, no se usa este bit y debe programarse como 0. Los bits IRP y RP1 no están implementados y siempre valen 0.

Los recursos fundamentales: temporizadores, puertas de E/S y EEPROM de datos

CAPÍTULO

10

10.1. EL PAPEL DE LOS TEMPORIZADORES Los PIC disponen de un procesador rápido y potente. En él se incluye la memoria de programa, la de datos, la ALU, la Unidad de Control y algunos registros especiales. Si dentro de un microcontrolador únicamente existiese un procesador, sólo se podrían ejecutar instrucciones lógico-aritméticas y de transferencia. Pero un microcontrolador es mucho más que un procesador, es un «computador integral» en el que, además del procesador, hay puertas de E/S para conectarse con periféricos, canales de comunicación, temporizadores para controlar tiempos, sistema de interrupciones capaz de detectar anomalías o sucesos especiales, sistemas de seguridad, modo de funcionamiento con bajo consumo y un largo etcétera de recursos que configuran la potencia integral de un computador. 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.

El PIC16F84A contiene pocos recursos en comparación a otros familiares, pero posee los suficientes para resolver gran parte de las aplicaciones típicas de los microcontroladores. Sobre todo disponen de una memoria de programa FLASH (PIC16F8X) que le posibilita regrabar el programa las veces necesarias hasta su total puesta a punto. En este capítulo se describen los recursos más importantes del PIC16F84A, que son: — 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

10.2. TEMPORIZADOR/CONTADOR TMR0 Una de las labores más habituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo, recibiendo el nombre de temporizador (timer) el elemento encargado de realizar esta función. También suele ser frecuente contar los impulsos que se producen en el exterior del sistema, denominándose contador el elemento destinado a este fin. Si las labores del temporizador o contador las asignamos al programa principal, robarían mucho tiempo al procesador en detrimento de actividades más importantes. Por este motivo se diseñan recursos específicamente orientados a estas misiones. Los PIC16X8X poseen un temporizador/contador de 8 bits, llamado TMR0, que actúa de dos maneras diferentes: 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). Para que el TMR0 funcione como contador de impulsos aplicados a la patita T0CKI, hay que poner a 1 el bit T0CS, que es el que ocupa la posición 5 del registro OPTION. En esta situación, el registro TMR0, que es el ubicado en la dirección 1 del banco 0 de la memoria de datos, se incrementa con cada flanco activo aplicado en la patita T0CKI. El tipo de flanco activo se elige programando el bit T0SE, que es el que ocupa la posición 4 del registro OPTION. Si T0SE = 1, el flanco activo es el descendente, y si T0SE = 0, es el ascendente. Cuando se desea que TMR0 funcione como temporizador, el bit T0CS = 0. En realidad, los PIC16X8X y los de la gama baja disponen de dos temporizadores, el TMR0 y el Perro Guardián (Watchdog). El primero actúa como principal y sobre él recae el control de tiempos y el contaje de impulsos. El otro vigila que el programa no se

Figura 10.1. Esquema simplificado de un temporizador/contador. Como temporizador, se carga con un valor inicial que se va incrementando hasta el desbordamiento. Como contador, va incrementando su valor con cada impulso que se le aplica. Al alcanzar el máximo valor binario, se «desborda» y pasa a cero, circunstancia que indica un señalizador.

LOS RECURSOS FUNDAMENTALES

321

«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 espera 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 Divisor de frecuencia utilizan algunos bits del registro OPTION y de la Palabra de Configuración, que se explicará más adelante. En la Figura 10.2 se proporciona un esquema simplificado 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.2. Esquema simplificado de la sección dedicada al control de tiempos en la arquitectura de los PIC16X8X.

322

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

Figura 10.3. Esquema general del funcionamiento de TMR0. Cuando se desborda, se pone a 1 el señalizador T0IF.

El TMR0 se comporta como un registro de propósito especial (SFR) ubicado en la dirección 1 del banco 0 de la memoria de datos. En igual dirección, pero en el banco 1, se halla el registro OPTION. TMR0 puede ser leído y escrito en cualquier momento al estar conectado al bus de datos. Funciona como un contador ascendente de 8 bits. Cuando funciona como temporizador, conviene cargarle con el valor de los impulsos que se quiere temporizar, pero expresados en complemento a 2. De esta manera, al llegar el número de impulsos deseado, se desborda, y al pasar por 00 H, se activa el señalizador T0IF y/o se produce una interrupción. Para calcular los tiempos a controlar con TMR0 se utiliza la siguiente fórmula práctica: Temporización = 4 · Tosc · (256 – Valor cargado en TMR0) · (Rango del divisor)

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.

10.2.1. El registro OPTION La misión principal de este registro es gobernar el TMR0 y el Divisor de frecuencia. Ocupa la posición 81 H de la memoria de datos, que equivale a la dirección 1 del banco 1. El bit T0CS (Timer 0 Clock Edge Select) selecciona en el multiplexor MPX1 la procedencia de los impulsos de reloj, que pueden ser los del oscilador interno (Fosc/4) o los que se aplican desde el exterior por la patita T0CKI. El bit T0SE (Timer 0 Clock Source Select) elige el tipo de flanco activo en los impulsos externos. Si T0SE = 1, el flanco activo es el descendente, y si T0SE = 0, el ascendente.

LOS RECURSOS FUNDAMENTALES

323

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 Divisor 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 provocará 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 resistencias pull-up, que pueden conectarse opcionalmente en las líneas de la Puerta B.

10.3. EL PERRO GUARDIÁN (WDT) Se trata de un contador interno de 8 bits que origina un reset cuando se desborda. Su control de tiempos es independiente del TMR0 y está basado en una simple red R-C. Su actuación es opcional y puede bloquearse para que no funcione programando el bit WDTE de la Palabra de Configuración. 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 (posdivisor). 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 consumo». 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 direcció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 clr bsf clrwdt movlw movwf bcf

estado,rp0 tmr0 estado,rp0 valor option estado,rp0

; Banco 0 ; Borra TMR0 y el Divisor : Banco 1 ; Borra al Perro Guardián ; Carga en W el valor del WDT ; Se asignan funciones en OPTION ; Banco 0

En la Figura 10.6 se aprecia el comportamiento del Divisor de frecuencia como «predivisor» para el TMR0 y como «posdivisor» para el WDT.

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

10.4. LAS PUERTAS DE E/S El PIC16F84A sólo dispone de dos puertas de E/S. La Puerta A posee cinco líneas, RA0-RA4, y una de ellas soporta dos funciones multiplexadas. Se trata de la RA4/T0CKI, que puede actuar como línea de E/S o como patita por la que se reciben los impulsos que debe contar TMR0. La Puerta B tiene ocho líneas, RB0-RB7, y también tiene una con funciones multiplexadas, la RB0/INT, que, además de línea típica de E/S, también sirve como patita por la que se reciben los impulsos externos que provocan una interrupción. Cada línea de E/S puede configurarse independientemente como entrada o como salida, según se ponga a 1 o a 0, respectivamente, el bit asociado del registro de configuración de cada puerta (TRISA y TRISB). Se llaman PUERTAA y PUERTAB los registros que guardan la información que entra o sale por la puerta y ocupan las direcciones 5 y 6 del banco 0 de la memoria de datos. Los registros de configuración TRISA y TRISB ocupan las mismas direcciones, pero en el banco 1 (Fig. 10.7).

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.

En el circuito de la Figura 10.8 se muestra la adaptación de las patitas RA3-RA0 a las señales internas del procesador. Cuando se lee una línea de la puerta A (instrucción movfw puertaa), se recoge el nivel lógico que tiene en ese momento. Las líneas, cuando actúan como salidas, están «latcheadas», lo que significa que sus patitas sacan el nivel lógico que se haya cargado por última vez en el registro PUERTAA. La escritura de una puerta implica la operación «lectura/modificación/

LOS RECURSOS FUNDAMENTALES

327

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.

escritura». Primero se lee la puerta, luego se modifica el valor y finalmente se escribe en el latch de salida. De la Figura 10.8 se desprende que cuando se saca un nivel lógico por una línea de la Puerta A, primero se deposita en la línea correspondiente del bus de datos y se activa la señal WRITE, lo que origina el almacenamiento de dicho nivel en la báscula de datos. En esta situación, la báscula de configuración debería contener un 0 para que actuase como salida. Con estos valores, la puerta OR tendría un 0 en su salida y la AND también. Estos valores producen la conducción del transistor PMOS superior y el bloqueo del NMOS. Así, la patita de E/S queda conectada a la VDD y tiene nivel alto. Como la línea de salida está «latcheada», conserva su valor hasta que no se reescriba en la báscula D. Si una línea actúa como entrada, el nivel lógico depositado en ella desde el exterior pasa a la línea correspondiente del bus interno de datos cuando se activa la señal READ y se hace conductor el dispositivo triestado que les une. Al programarse como entrada, los dos transistores MOS de salida quedan bloqueados y la línea en alta impedancia. Téngase en cuenta que cuando se lee una línea de entrada se obtiene el estado actual que tiene su patita correspondiente y no el valor que haya almacenado en la báscula de datos. La información presente en una línea de entrada se muestrea al iniciarse el ciclo de instrucción y debe mantenerse estable durante su desarrollo.

328

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

EJEMPLO Configurar las dos líneas de menos peso de la Puerta A como entradas y las otras tres como salidas.

SOLUCIÓN bsf movlw movwf

estado,rp0 0x03 trisa

; Banco 1 ; Valor configuración Puerta A ; 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 entrada, 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 correspondiente 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 configuració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 misió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ñalizador 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

10.5. LA PALABRA DE CONFIGURACIÓN Se trata de una posición reservada de la memoria de programa situada en la dirección 2007 H y accesible únicamente durante el proceso de grabación. Al escribirse el programa de la aplicación, es necesario grabar el contenido de esta posición de acuerdo con las características del sistema.

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.

En la Figura 10.10 se muestra la distribución y asignación de los 14 bits de la Palabra de Configuración del PIC16F84A, que tienen las siguientes funciones: — CP: Bits de protección de la memoria de código 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. — PWRTE: Activación del temporizador power-up El temporizador power-up retrasa 72 ms la puesta en marcha o reset que se produce al conectar la alimentación al PIC para garantizar la estabilidad de la tensión aplicada. 1: Desactivado. 0: Activado. — WDTE: Activación del Perro Guardián 1: Activado el WDT. 0: Desactivado. — FOSC1-FOSC0: Selección del oscilador utilizado 1-1: Oscilador RC. 1-0: Oscilador HS. 0-1: Oscilador XT. 0-0: Oscilador LP.

LOS RECURSOS FUNDAMENTALES

331

10.5.1. Palabras de Identificación (ID) Son cuatro posiciones reservadas de la memoria de programa ubicadas en las direcciones 2000 H-2003 H que no son accesibles en el funcionamiento normal del microcontrolador y sólo pueden ser leídas y escritas durante el proceso de grabación. Sólo se utilizan los 4 bits de menos de cada palabra de identificación (ID), en donde se almacena un valor que puede consistir en un número de serie, códigos de identificación, numeraciones secuenciales o aleatorias, etc.

10.6. LA MEMORIA EEPROM DE DATOS El PIC16F84A tiene 64 bytes de memoria EEPROM de datos, donde se pueden almacenar datos y variables que interesa que no se pierdan cuando se desconecta la alimentación al sistema. Soporta diez millones de ciclos de escritura/borrado y es capaz de guardar la información sin alterarla más de cuarenta años. La memoria EEPROM no está mapeada en la zona de memoria de datos donde se ubican los registros SFR y GPR. Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador hay que utilizar cuatro registros del banco SFR: — EEDATA. — EEADR. — EECON1. — EECON2.

En el registro EEADR, ubicado en la dirección 9 del banco 0, se carga la dirección a acceder de la EEPROM de datos. Las sesenta y cuatro posiciones de un byte ocupan las direcciones de un mapa que comienza en 00 H y termina en 3F H; por eso, los 2 bits de más peso del registro EEADR siempre valen 0. En el registro EEDATA, ubicado en la dirección 8 del banco 0, se depositan los datos que se leen o se escriben.

Figura 10.11. Distribución de los bits del registro EECON1 de los PIC16X8X.

El registro EECON1, que ocupa la dirección 88 H de la memoria de datos o la dirección 8 H del banco 1, tiene misiones de control en las operaciones de la EEPROM y la distribución de sus bits se presenta en la Figura 10.11, mientras que la misión de cada uno se explica a continuación:

332

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

— RD: Lectura 1: Se pone a 1 cuando se va a realizar un ciclo de lectura de la EEPROM. Luego pasa a 0 automáticamente. — WR: Escritura 1: Se pone a 1 cuando se inicia un ciclo de escritura de la EEPROM. Cuando se completa el ciclo, pasa a 0 automáticamente. — WREN: Permiso de escritura 1: Permite la escritura de la EEPROM. 0: Prohíbe la escritura. — WRERR: Señalizador de error en escritura 1: Se pone a 1 cuando una operación de escritura ha terminado prematuramente. 0: La operación de escritura se ha completado correctamente. — EEIF: Señalizador de final de operación de escritura 1: Cuando este señalizador se pone a 1, indica que la operación de escritura se ha completado con éxito. Se pone a 0 por programa. 0: La operación de escritura no se ha completado. 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.

El registro EECON2, en realidad, no está implementado físicamente. Al leerlo, todos sus bits son 0. Sólo se emplea como un dispositivo de seguridad durante el proceso de escritura de la EEPROM para evitar las interferencias en el largo intervalo de tiempo que precisa su desarrollo.

10.6.1. Proceso de lectura Se inicia un ciclo de lectura colocando la dirección a acceder en el registro EEADR y poniendo el bit RD = 1 en el registro EECON1. El dato leído estará disponible en el registro EEDATA en el siguiente ciclo y permanecerá en él hasta que se realice una nueva lectura o escritura en la EEPROM.

LOS RECURSOS FUNDAMENTALES

333

EJEMPLO Confeccionar un programa para realizar la lectura de una posición lect de la EEPROM de datos.

SOLUCIÓN bcf movlw movwf bsf bsf bcf movf

estado,rp0 lect eeadr estado,rp0 eecon1,rd estado,rp0 eedata,w

; Banco 0 ; Dirección a leer ; ; Banco 1 ; Lectura ; Banco 0 ; W se carga con valor leído en EEPROM

10.6.2. Proceso de escritura Para escribir una posición de la EEPROM de datos, el usuario debe seguir una determinada secuencia de instrucciones en las que participa el registro EECON2. Este registro, que en realidad no se halla implementado físicamente, sólo asume funciones de seguridad en el proceso, cargándose en él dos valores concretos: 55 H y aa H. La duración típica de un ciclo de escritura es de 10 ms, que es notablemente larga en comparación con la velocidad del PIC. El ciclo de escritura comienza cargando en EEADR la dirección de la posición a escribir y en el registro EEDATA el valor a grabar.

EJEMPLO Escribir en la dirección escr de la EEPROM de datos el valor dato.

SOLUCIÓN bcf movlw movwf movlw movwf bsf bsf

estado,rp0 escr eeadr dato eedata estado,rp0 eecon1,wren

movlw movwf movlw movwf bsf

0x55 h eecon2 0xaa h eecon2 eecon1,wr

; Banco 0 ; ; Se escribe la dirección en eeadr ; ; Se escribe el dato en eedata ; Banco 1 ; Permiso escritura ; Inicio secuencia escritura ; ; Se escribe 55 h en eecon2 ; ; Se escribe aa h en eecon2 ; Comienza la escritura

334

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

Al acabar el proceso de escritura, el bit WR pasa a valer 0 automáticamente, mientras que el señalizador EEIF se pone a 1. Este último bit hay que ponerlo a 0 posteriormente mediante software. Una buena precaución es verificar si la escritura de la EEPROM ha sido correcta, para lo cual se suele restar el dato escrito con el que existe en el registro EEDATA. Si no se ha producido error, el señalizador Z pasa a valer 1. Dada la importancia de conocer el fin de la escritura de una posición de la EEPROM, no sólo se informa activando el señalizador EEIF, sino que además, si se desea, se puede provocar una interrupción.

Interrupciones, reset y recursos auxiliares

CAPÍTULO

11

11.1. IMPORTANCIA DE LAS INTERRUPCIONES Las llamadas a subrutinas mediante la instrucción CALL son desviaciones del flujo de control del programa originadas por instrucciones, por lo que se consideran síncronas. Se producen cada vez que se ejecuta dicha instrucción. Las interrupciones son desviaciones del flujo de control del programa originadas asíncronamente por diversos sucesos que no se hallan bajo la supervisión de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generación de un flanco o nivel activo en una patita del microcontrolador, o bien internos, como el desbordamiento de un contador. El comportamiento del microcontrolador ante la interrupción es similar al de la instrucción CALL de llamada a subrutina. En ambos casos se detiene la ejecución del programa en curso, se salva la dirección actual del PC en la Pila y se carga el PC con una dirección, que en el caso de CALL viene acompañando a la propia instrucción, y en el caso de una interrupción, es una dirección «reservada» de la memoria de código, llamada Vector de Interrupción. En el PIC16F84A, el Vector de Interrupción se halla situado en la dirección 0004 H, en donde comienza la Rutina de Servicio a la Interrupción (RSI). En general, en dicho Vector se suele colocar una instrucción de salto incondicional (GOTO) que traslada el flujo de control a la zona de la memoria de código destinada a contener la rutina de atención a la interrupción.

La RSI suele comenzar guardando en la memoria de datos algunos registros específicos del procesador. Concretamente, aquellos que la RSI va a emplear y va a alterar su contenido. Antes del retorno al programa principal, se recuperan los valores guardados y se restaura completamente el estado del procesador. Algunos procesadores salvan estos registros en la Pila, pero los PIC no disponen de instrucciones para meter (push) y sacar (pop) información de la Pila, utilizando para este fin registros de propósito general de la memoria de datos. El PIC16F84A puede ser interrumpido por cuatro causas diferentes, pero todas desvían el flujo de control a la dirección 0004 H, por lo que otra de las operaciones iniciales 335

336

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

Figura 11.1. Organigrama de las operaciones principales de una interrupción en el PIC16F84A. El señalizador de la fuente de interrupción hay que borrarlo antes del retorno para que no se repita la misma interrupción.

INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES

337

de la RSI es averiguar cuál de las posibles causas ha sido la responsable de la interrupción en curso. Para ello, se exploran los señalizadores de las fuentes de interrupción. Otro detalle importante en la RSI de los PIC16X8X es que estos microcontroladores poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohíbe todas las interrupciones. Pues bien, al comenzar la RSI dicho bit GIE, se pone automáticamente a 0 con objeto de no atender nuevas interrupciones hasta que se termine la que ha comenzado. En el retorno final de la interrupción, GIE pasa a valer automáticamente 1 para volver a tener en cuenta las interrupciones. Dicho retorno de interrupción se realiza mediante la instrucción RETFIE. Antes del retorno conviene borrar el señalizador de la causa de interrupción que se ha atendido, porque si bien los señalizadores se ponen a 1 automáticamente en cuanto se produce la causa que indican, la puesta a 0 se hace por programa. En la Figura 11.1 se muestra un organigrama de las fases más importantes que se desarrollan durante el proceso de ejecución de una interrupción.

11.2. CAUSAS DE INTERRUPCIÓN El PIC16F84A tiene cuatro causas o fuentes posibles de interrupción: 1.a 2.a 3.a 4.a

Activación de la patita RB0/INT. Desbordamiento del temporizador TMR0. Cambio de estado en una de las cuatro patitas de más peso (RB7:RB4) de la Puerta B. Finalización de la escritura en la EEPROM de datos.

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.

11.2.1. El Registro de Control de Interrupciones INTCON La mayor parte de los señalizadores y bits de permiso de las fuentes de interrupción en el PIC16F84A está implementada sobre los bits del registro INTCON, que ocupa la dirección 0B H del banco 0, hallándose duplicado en el banco 1 (véase Figura 11.2).

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

— GIE: Permiso global de interrupciones 1: Permite la ejecución de todas las interrupciones cuyos bits de permiso individuales también las permitan. 0: Prohíbe todas las interrupciones. — EEIE: Permiso de interrupción por fin de la escritura en la EEPROM 1: Permite que se origine una interrupción cuando termina la escritura de la EEPROM de datos. 0: Prohíbe que se produzca esta interrupción. — T0IE: Permiso de interrupción por sobrepasamiento del TMR0 1: Permite una interrupción al desbordarse el TMR0. 0: Prohíbe esta interrupción. — INTE: Permiso de interrupción por activación de la patita RB0/INT 1: Permite la interrupción al activarse RB0/INT. 0: Prohíbe esta interrupción. — RBIE: Permiso de interrupción por cambio de estado en RB7:RB4 1: Permite esta interrupción. 0: Prohíbe esta interrupción. — T0IF: Señalizador de sobrepasamiento del TMR0 1: Se pone a 1 cuando ha ocurrido el sobrepasamiento. 0: Indica que el TMR0 no se ha desbordado. — INTF: Señalizador de activación de la patita RB0/INT 1: Se pone a 1 al activarse RB0/INT al recibir un flanco activo desde el exterior. 0: Indica que RB0/INT no ha recibido un flanco activo. — RBIF: Señalizador de cambio de estado en las patitas RB7:RB4 1: Pasa a 1 cuando cambia el estado de alguna de estas cuatro líneas. 0: No ha cambiado el estado de RB7:RB4. Cuando GIE = 0, no se acepta ninguna de las interrupciones. Si GIE = 1, sólo se aceptan aquellas fuentes de interrupción cuyo bit de permiso se lo consienta.

Siempre que se produzca una interrupción por cualquier causa, GIE = 0 y el PC se carga con el valor 0004 H, que es el Vector de Interrupción. Para conocer qué causa ha provocado la interrupción se exploran los señalizadores, tres de los cuales se ubican en el registro INTCON y el cuarto, EEIF, que se pone a 1 cuando finaliza la escritura de la EEPROM, se halla en el bit 4 del registro EECON1. Los señalizadores deben ponerse a 0 por programa antes del retorno de la interrupción y son operativos aunque la interrupción esté prohibida por su bit de permiso corres-

INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES

339

Figura 11.3. Lógica de control para la generación de una interrupción en el PIC16F84A.

pondiente. En la Figura 11.3 se ofrece el esquema de la lógica de control que origina la interrupción.

EJEMPLO Confeccionar un programa que explore de forma continua las cuatro fuentes de interrupció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.

* inicio del servicio de interrupción por activación de RB0/INT int

btfss intcon, intf goto puertab

; Explora el bit intf de ; intcon y si vale 1 hay brinco ; Salta a puertab

* inicio del servicio de interrupción por cambio en RB7 : RB4 puertab btfss intcon, rbif goto tmr0

; Explora el bit «rbif» de ; intcon y si vale 1 se produce brinco

340

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

* inicio del servicio de interrupción por desbordamiento de TMR0 tmr0

btfss intcon, t0if

; Explora el bit toif y si ; vale 1 brinco

goto eeprom * inicia el servicio de interrupción por fin de la escritura en la EEPROM eeprom

btfss eecon1, eeif goto int

; ; ; ;

Explora el bit eeif del registro eecon1 y si vale 1 hay brinco Vuelve al principio

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 btfsc intcon,gie goto bucle

; GIE = 0 ; Si GIE =0, entonces hay brinco

(continúa)

11.2.2. Interrupción externa INT Esta fuente de interrupción es sumamente importante para atender acontecimientos externos en tiempo real. Cuando ocurre alguno de ellos, se activa la patita RB0/INT y se hace una petición de interrupción. Entonces, de forma automática, el bit INTF = 1, y si el bit de permiso INTE = 1, se autoriza el desarrollo de la interrupción. Mediante el bit 6, llamado INTDEG, del registro OPTION, se puede seleccionar cuál será el flanco activo en RB0/INT. Si se desea que sea el ascendente, se escribe un 1 en dicho bit, y si se desea que sea el descendente, se escribe un 0. El procesador explora el señalizador INTF al final del primer ciclo de reloj de cada ciclo de instrucción. Recuérdese que cada ciclo de instrucción constaba de cuatro ciclos de reloj: Q1, Q2, Q3 y Q4. Al terminar Q1, se exploran los señalizadores, produciéndose un período de latencia de tres o cuatro ciclos de instrucción desde el momento que hay un señalizador activado hasta que se inicializa la interrupción. En la Figura 11.4 se muestra un esquema práctico para generar una interrupción por activación en la patita RB0/INT. Los dos inversores del 74LS04 realimentados constituyen un filtro antirrebotes para pulsador, y la red R-C y el último inversor controlan la duración del impulso.

INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES

341

Figura 11.4. Circuito para generar impulsos de duración determinada. En el esquema, Tiempo = 470 · 0,05 = 23,5 ms.

Si INTE = 1 y se aplica un flanco activo en RB0/INT, el señalizador INTF se pone a 1 automáticamente y se solicita una interrupción, que es aceptada cuando GIE = 1. Antes de regresar al programa principal hay que borrar INTF, puesto que en caso contrario, al ejecutar la instrucción de retorno RETFIE, se volvería a desarrollar el mismo proceso de interrupción.

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 siguientes 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 bcf bcf bsf bsf bcf bcf bcf

estado,rp0 option,intdeg estado,rp0 intcon,gie intcon,inte intcon,rbie intcon,eeie intcon,intf

; Selección del banco 1 ; INTDEG =0 para flanco descendente ; Selección banco 0 ; GIE=1 ; INTE=1 ; RBIE=0 ; EEIE=0 ; INTF=0

Se podía haber cargado todos los bits del registro INTCON con una instrucción.

11.2.3. Interrupción por desbordamiento del TMR0 Cuando TMR0 se desborda y pasa del valor FF H al 00 H, el señalizador T0IF se pone automáticamente a 1. Si, además, el bit de permiso de la interrupción del TMR0, T0IE=1, y el bit de Permiso Global de Interrupciones GIE=1, se produce una interrupción.

342

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

Si no se recarga el TMR0 cuando se desborda, sigue contando desde 00 H a FF H. En cualquier momento se puede leer y escribir este registro, pero cada vez que se escribe se pierden dos ciclos de reloj para la sincronización. Cuando se carga inicialmente TMR0 con el valor N10, cuenta 256 – N impulsos, siendo el tiempo que tarda en hacerlo el que expresa la siguiente fórmula: Temporización = 4 · Tosc · (256 – N10) · Rango del Divisor de frecuencia

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

11.2.4. Interrupción por cambio de estado en las líneas RB7:RB4 de la Puerta B Esta interrupción está diseñada específicamente para detectar la pulsación de una tecla correspondiente a un teclado matricial que se explora con cuatro líneas de E/S. Para esta función se destinan las líneas RB7:RB4 de la Puerta B, que cada vez que cambia el estado lógico de una de ellas se fuerza al señalizador RBIF a ponerse a 1, y si los bits de permiso RBIE = GIE = 1, se autoriza la interrupción.

11.2.5. Interrupción por finalización de la escritura en la EEPROM de datos El tiempo típico que tarda en desarrollarse una operación de escritura en la EEPROM de datos del PIC16F84A es de 10 ms, que es considerable comparado con la velocidad a la que el procesador ejecuta instrucciones. Para asegurarse de que se ha completado la escritura y puede continuarse con el flujo de control del programa, es aconsejable manejar la interrupción que se origina al finalizar la escritura, que pone automáticamente el señalizador EEIF a 1 y se autoriza siempre que los bits de permiso EEIE = GIE = 1. Cuando se describió el proceso de escritura de la EEPROM de datos se indicó que se usaba un registro no real para asegurar la misma. Se trataba del EECON2, en el que se grababan dos valores, el 55 H y el AA H. Durante la escritura de este registro debe pro-

INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES

343

hibirse la aceptación de interrupciones para salvaguardar la operación de escritura; por eso, en ese módulo se pone GIE=0, tal como se indica en el siguiente trozo de programa orientado a escribir la memoria EEPROM. Se supone que la dirección a acceder ya se ha cargado en el registro EEADR y el dato a escribir en EEDATA: bsf bcf bsf bsf movlw movwf movlw movwf bsf bsf

estado,rp0 intcon,gie intcon,eeie eecon1,wren 0x55 eecon2 0xaa eecon2 eecon1,wr intcon,gie

; Selecciona el banco 1 ; GIE=0. Prohíbe interrupciones ; Permite la interrupción de la EEPROM ; Permiso de escritura de la EEPROM ; Se escribe en eecon2 el dato 55 h ; Se escribe aa h en eecon2 ; Comienza el proceso de escritura ; Permiso de interrupciones. GIE = 1

En el PIC16F84A se puede leer y escribir la EEPROM de datos aunque se haya protegido el código. En los PIC16CR8X, que disponen de memoria ROM para el código, existen dos bits para el código de protección: uno dedicado a la ROM de código y el otro a la EEPROM de datos.

11.3. REINICIALIZACIÓN O «RESET» El PIC16F84A tiene cinco causas que provocan la reinicialización del sistema, consistente 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. 1.a Conexión de la alimentación, POR («Power on Reset»). 2.a Activación de la patita MCLR# («Master Clear Reset») en funcionamiento normal. 3.a Activación de la patita MCLR# en estado de reposo. 4.a Desbordamiento del Perro Guardián en funcionamiento normal. 5.a Desbordamiento del Perro Guardián en estado de reposo.

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

REGISTRO DIRECCIÓN

CONEXIÓN DE LA ALIMENTACIÓN

DESBORDAMIENTO PERRO GUARDIÁN MODO NORMAL

DESBORDAMIENTO PERRO GUARDIÁN MODO REPOSO

uuuu uuuu

uuuu uuuu

-----

-----

uuuu uuuu

uuuu uuuu

MCLR# MODO NORMAL

MCLR# MODO REPOSO

W

-----

INDIR

00 h

RTCC

01 h

PC

02 h

0000 h

PC + 1

STATUS

03 h

0001

1xxx

0000 1uuu

uuu0 0uuu

000u

uuuu

0001 0uuu

FSR

04 h

xxxx

xxxx

uuuu uuuu

uuuu uuuu

uuuu

uuuu

uuuu uuuu

PORT A

05 h

xxxx

xxxx

uuuu uuuu

uuuu uuuu

uuuu

uuuu

uuuu uuuu

PORT B

06 h

xxxx

xxxx

uuuu uuuu

uuuu uuuu

uuuu

uuuu

uuuu uuuu

TRIS A

85 h

---1

1111

---1 1111

---u uuuu

---1

1111

---1 1111

TRIS B

86 h

1111

1111

1111 1111

uuuu uuuu

1111

1111

1111 1111

OPTION

81 h

1111

1111

1111 1111

uuuu uuuu

1111

1111

1111 1111

EEDATA

08 h

xxxx

xxxx

uuuu uuuu

uuuu uuuu

uuuu

uuuu

uuuu uuuu

EEADR

09 h

xxxx

xxxx

uuuu uuuu

uuuu uuuu

uuuu

uuuu

uuuu uuuu

EECON 1

88 h

---0

?000

---0 0000

---u uuuu

---0

EECON 2

89 h

-----

-----

PCLATH

0A h

---0

0000

---0 0000

---u uuuu

---0

0000

---0 0000

INTCON

0B h

0000

000x

0000 000u

uuuu uuuu

0000

000u

0000 0000

u = No cambia

xxxx

xxxx

----xxxx

xxxx

0000 h

-----

x = Indeterminado

---- = No implementado

uuuu

uuuu

----uuuu

uuuu

0000 h

?000

-----

uuuu uuuu ----uuuu uuuu 0000 h

---0 ?000 -----

? = Depende de otras condiciones

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:

Figura 11.5. Esquema electrónico para la generación interna del reset.

INTERRUPCIONES, «RESET» Y RECURSOS AUXILIARES

345

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 genera un oscilador R-C propio. Este tiempo garantiza la estabilización del voltaje de alimentación VDD.

El temporizador OST (Oscillator Start-up Timer) proporciona un retardo de 1.024 · Tosc (período de los impulsos aplicados en la patita OSC1/CLKIN). Sirve para asegurar que el cristal de cuarzo o resonador cerámico empleado en los osciladores tipo XT, LP o HS esté estable y en marcha. OST comienza a funcionar cuando termina el retardo de PWRT debido a la conexión de la salida de la OR7 con la AND5. La activación de la entrada set del flip-flop se consigue cuando se activa la patita MCLR#, cuando se desborda el Perro Guardián o cuando se detecta un flanco ascendente en la patita VDD (POR). En la Figura 11.6 se ofrece un cronograma de las principales señales que participan en la generación del reset y en el que se aprecia la secuencia de los retardos TPWRT y TOST. En el registro ESTADO hay dos bits que indican las condiciones en las que se ha originado el reset. Se trata de TO# (Timer Out) y PD# (Power Down) (Fig. 11.7).

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.

11.3.1. «Reset» por fallo en la alimentación («Brown Out») Se produce un fallo en la alimentación cuando el voltaje de alimentación VDD desciende por debajo del valor mínimo sin llegar a cero y luego se recupera. En esta situación es preciso provocar un reset. Para generar un reset en un PIC16F84A cuando existe un fallo en la alimentación, hay que colocar un circuito externo de protección, como los dos que se muestran en las Figuras 11.8 y 11.9. La patita MCLR# puede conectarse directamente con VDD, pero debe colocarse una resistencia de valor superior a 100 W cuando se conecta con tierra para evitar los problemas que pueda originar la corriente que circula.

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.

11.4. EL MODO DE REPOSO O DE BAJO CONSUMO Este modo de funcionamiento de los PIC está caracterizado por el reducido consumo de energía que requiere y está muy recomendado en aquellas aplicaciones en las que hay largos períodos de espera hasta que se produzca algún suceso asíncrono, como la pulsación de una tecla. En dichos períodos, el procesador está inactivo. El consumo típico del PIC es menor de 2 mA a 5 V y 4 MHz, aproximadamente, reduciéndose a menos de 10 µA en el modo reposo, lo que permite alimentarle con una pequeña pila durante casi dos años.

Para entrar en el modo de reposo hay que ejecutar la instrucción SLEEP, producié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 impulsos 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 procesador 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

Para salir del estado de reposo (despertar) existen tres alternativas: 1.a Activación externa de MCLR# para provocar un reset. 2.a Desbordamiento del Perro Guardián si quedó operativo en el modo de reposo. 3.a Generación de una interrupción. En este caso, como TMR0 está parado, sólo pueden producirse los otros tres tipos de interrupción. 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.

11.5. PROGRAMACIÓN EN SERIE DE LOS PIC16X8X Los PIC que estamos estudiando permiten que se grabe en su memoria de código el programa sobre el mismo circuito de la aplicación. Esto permite a los fabricantes de productos finales construir la tarjeta electrónica con el microcontrolador sin grabar y realizar la escritura del programa justo cuando se realiza la venta. Así, se puede aportar el firmware más reciente que se disponga. La programación en serie de los PIC16X8X requiere cinco líneas, dos de las cuales se destinan a soportar los impulsos de reloj de la transmisión (RB6) y los bits de información (RB7), mientras que las otras tres soportan VDD, tierra y la tensión especial de programación Vpp, que oscila entre 12 y 14 V (Fig. 11.10).

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

El microcontrolador pasa al modo de programación/verificación colocando a nivel bajo las líneas RB6 y RB7 y aplicando la tensión de programación Vpp a la patita MCLR#/Vpp. A partir de ese momento, por RB6 se transmiten los impulsos de reloj y por RB7 se transfieren los bits de datos en serie.

Manejando el repertorio de instrucciones

CAPÍTULO

12

12.1. REPERTORIO RISC Todos los modelos de microcontroladores PIC responden a la arquitectura RISC, que significa «computador de juego de instrucciones reducido». No sólo implica que el número de instrucciones máquina que es capaz de interpretar y ejecutar el procesador es pequeño, como sucede en el PIC16F84A, que consta de treinta y cinco, sino también que posee las siguientes características: — Las instrucciones son simples y rápidas. La falta de complejidad en la operación que realizan las instrucciones de los procesadores RISC permite que sean ejecutadas mayoritariamente en un solo ciclo de instrucción. Los PIC tardan en ejecutar todas las instrucciones un ciclo, excepto las de salto, que tardan el doble. — Las instrucciones son ortogonales. Apenas tienen restricciones en el uso de operandos. Cualquier instrucción puede usar cualquier operando. — La longitud de las instrucciones y los datos es constante. Todas las instrucciones tienen la misma longitud, 14 bits en los PIC16X8X, y todos los datos también, un byte. La arquitectura Harvard del procesador aísla la memoria de instrucciones de la de datos, pudiendo tener sus palabras diferente tamaño.

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.

12.2. TIPOS DE FORMATO Las instrucciones de los PIC de la gama media, entre los que se encuentran los modelos PIC16X8X, tienen 14 bits de longitud. Dicho formato se divide en diferentes campos de bits, cada uno de los cuales referencia a operandos o elementos que maneja la instrucción en la operación que realiza en el procesador. Se describen dichos campos: a) Campo del código OP. Los bits de este campo sirven para definir la operación que realiza la instrucción. b) Campo de los operandos fuente (f) y destino (d). Estos campos de bits definen los registros que actúan como operandos en la instrucción. Suelen referenciar la dirección que ocupan en la memoria de datos. c) Campo de operando inmediato o literal (k). Es un campo de bits que contiene el valor de un operando inmediato. d) Campo de referencia a un bit (b). Suele ser un campo de 3 bits que indica la posición de un bit concreto dentro de un re-gistro de 8 bits. e) Campo de la dirección del salto. En las instrucciones de salto CALL y GOTO hay un campo de bits que contiene la dirección de la siguiente instrucción que hay que ejecutar. Dicho campo de bits se carga en el PC en las instrucciones de salto incondicional. 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. 1.o 2.o 3.o 4.o 5.o

Operaciones orientadas a manejar registros de tamaño byte. Operaciones orientadas a manejar bits. Operaciones que manejan valores inmediatos. Operaciones incondicionales de control del flujo del programa. Operaciones de salto condicional.

MANEJANDO EL REPERTORIO DE INSTRUCCIONES

353

12.2.1. Operaciones orientadas a manejar registros de tamaño «byte» 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) Campo del destino (1 bit) Campo operando fuente (7 bits)

: 001010 :1 : 0000111

Formato de la instrucción incf 0x07,1

: 001010 1 0000111

12.2.2. Operaciones orientadas a manejar bits El formato al que responden las instrucciones de este grupo tiene tres campos y se muestra 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 Campo de la posición del bit Campo dirección registro

: 0101 : 101 : 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 dirección la expresa el campo f.

MANEJANDO EL REPERTORIO DE INSTRUCCIONES

355

12.2.3. Operaciones que manejan un valor inmediato o literal El formato correspondiente a este grupo de instrucciones sólo tiene dos campos: 1. Campo del código OP, con 6 bits. 2. Campo del valor inmediato (k), con 8 bits.

EJEMPLO Se desea cargar en el registro W el valor inmediato 0x33. a) ¿Qué instrucción se puede emplear? b) Formato de la instrucción, sabiendo que el código OP de la instrucción movlw es 1100xx (x: indiferente).

SOLUCIÓN a) movlw 0x33 b) Campo del Código OP Campo del inmediato

: 1100xx : 00110011

Formato de la instrucción movlw 0x33

: 1100xx 00110011

12.2.4. Operaciones incondicionales de control de flujo del programa Este tipo de instrucciones afectan al contenido del Contador de Programa (PC) y sirven para romper la secuencia ordenada de las instrucciones del programa. Las instrucciones de este grupo tienen un formato con sólo dos campos: — Campo del código OP, de 3 bits. — Campo de la dirección del salto que se carga en el PC, de 11 bits.

12.2.5. Operaciones de salto condicional Los PIC disponen de unas pocas instrucciones «muy efectivas» que cuando se cumple una condición dan un brinco (skip). Llamamos brinco a un saltito muy pequeño, concretamente sólo se salta una instrucción, la que hay detrás de la condicional. La condición es el estado de un bit de un registro o la puesta a 0 de un registro tras un decremento o un incremento.

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

La instrucción decfsz f,d responde al grupo de instrucciones que manejan registros de 1 byte. En este caso, si d = 1, el destino es el propio registro fuente y lo que hace la instrucción es decrementar el contenido de f y dejar el resultado en f. Pero, además, si el nuevo valor de f es 0, se produce un brinco. Si no es 0, el flujo de control continúa con la siguiente instrucción: El formato de las instrucciones de «brinco» es el mismo que el de las operaciones que manipulan registros de 1 byte, y se muestra en la Figura 12.4.

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 La instrucción que hay que utilizar es decfsz 0x04,0. Formato de la instrucción decfsz 0x04,0 : 001011 0 0000100

Figura 12.4. Formato de las instrucciones de brinco condicional que coincide con el de las instrucciones que manejan registros de 1 byte.

12.3. PRECISIONES SOBRE NOMENCLATURA Y SÍMBOLOS Hemos tomado la decisión de utilizar la nomenclatura y los símbolos que emplea Microchip para su lenguaje Ensamblador MPASM. Recordamos los más específicos:

MANEJANDO EL REPERTORIO DE INSTRUCCIONES

357

SÍMBOLO

SIGNIFICADO

0xhh

x ()

Es la forma que se usa en el lenguaje MPASM para referenciar los números hexadecimales de dos dígitos (hh). 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 comprendidas entre la dirección 0x00 y la 0x7f. 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. Campo que contiene un valor inmediato que puede ser un operando (8 bits) o una dirección para el PC (11 bits). Valor indeterminado de 1 bit. Puede ser 1 o 0. Contenido. Campo de 1 bit de un registro. Por ejemplo: ESTADO .

∈ []

En el conjunto de ejemplo: d ∈ [0,1]. Opciones.

f

d k

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 Operandos Operación Formato

andwf f,d 0  f  127 d ∈ [0, 1] (W) and (f) → dest Si d = 0, dest = W Si d =1, dest = f 000101 d fffffff

(Si d = 0, el destino es W)

Palabras que ocupa en la memoria de código :1 Ciclos de instrucción para la ejecución :1

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

12.4. INSTRUCCIONES QUE MANEJAN REGISTROS Responden a la sintaxis nemónico f,d, siendo f y d los dos operandos fuente y destino que se hallan implementados por registros de 8 bits de la memoria de datos. El registro f viene referenciado por la dirección de 7 bits que ocupa, mientras que el destino sólo por uno, que si vale 0 es el W y si vale 1 es el fuente. En la Tabla 12.1 se muestran las instrucciones de este grupo con sus características más interesantes.

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 incf comf iorwf xorwf

0x01,0 0x01,1 0x02,1 0x02,0 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’.

INSTRUCCIONES QUE MANEJAN REGISTROS Sintaxis ADDWF

Operación

Ciclos

Formato 14 bits

Señalizaciones

f,d

Suma W y f

1

00 0101 dfff ffff

C, DC, Z

ANDWF

f,d

AND W con f

1

00 0111 dfff ffff

Z

CLRF

f

Borra f (pone todos los bits a 0)

1

00 0001 1fff ffff

Z

CLRW



Borra W

1

00 0001 0xxx xxxx

Z

COMF

f,d

Complementa f (invierte)

1

00 1001 dfff ffff

Z

DECF

f,d

Decrementa f

1

00 0011 dfff ffff

Z

INCF

f,d

Incrementa f

1

00 1010 dfff ffff

Z

IORWF

f,d

Or entre W y f

1

00 0100 dfff ffff

Z

MOVF

f,d

Mueve f

1

00 1000 dfff ffff

Z

MOVWF

f

Incrementa W y f

1

00 0000 1fff ffff



NOP



No opera

1

00 0000 0xx0 0000



RLF

f,d

Rota f a la izqda. a través del acarreo

1

00 1101 dfff ffff

C

RRF

f,d

Rota f a la dcha. a través del acarreo

1

00 1100 dfff ffff

C

SUBWF

f,d

Resta W a f

1

00 0010 dfff ffff

C, DC, Z

SWAPF

f,d

Intercambia nibbles

1

00 1110 dfff ffff



XORWF

f,d

XOR de W con f

1

00 0110 dfff ffff

Z

Tabla 12.1. Principales características de las instrucciones de los PIC16X8X que manejan como operandos 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) (f < 7:4>) → (dest)

360

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

Como el registro es el W, quedarán cargados: ESTADO W

: 0xf5 :0x5f

12.5. INSTRUCCIONES QUE MANEJAN BITS Sólo hay dos instrucciones en este grupo, pero son muy flexibles. Una de ellas pone a 1 (bsf) cualquier bit de un registro, mientras que la otra lo pone a 0 (bcf) (véase Tabla 12.2). 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.

INSTRUCCIONES QUE MANEJAN BITS Sintaxis

Operación

Ciclos

Formato 14 bits

Señalizaciones

BCF

f,b

Borra bit de f

1

00 00bb bfff ffff



BSF

f,b

Pone a 1 el bit f

1

01 01bb bfff ffff



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

OPTION,2 OPTION,0 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

12.6. INSTRUCCIONES DE BRINCO («SKIP») Sólo hay cuatro instrucciones de salto condicional en los PIC de la gama media. Dos de ellas testan un bit de un registro y según valga 1 o 0, brincan o no. Recuérdese que un brinco es un «saltito» pequeño, sólo se salta la instrucción siguiente a la condicional. Las otras dos instrucciones incrementan o decrementan un registro y la posibilidad del brinco se efectúa si con esa operación el valor del registro ha llegado a 0. Cuando estas instrucciones no brincan porque no se cumple la condición, tardan un ciclo de instrucción en ejecutarse. En caso de que brinquen, tardan el doble (véase Tabla 12.3). 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



ffff

DECFSZ

f,d

Decrementa f, y si es 0, brinca

1 (2)

00

1011

bfff

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

ESTADO,4 ESTADO,4

; Si ESTADO = 1, hay brinco ; Como ESTADO = 0, se pone a 1 ; Como ESTADO = 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 goto clrw

FSR,1 bucle

12.7. INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS Se trata de media docena de instrucciones que realizan una operación con un valor inmediato de 8 bits que se proporciona dentro del formato de la instrucción, el cual sólo tiene dos campos: el del código OP (6 bits) y el del operando inmediato (8 bits) (Tabla 12.4).

EJEMPLO Indicar el valor del registro W después de ejecutar el siguiente programa: clrw movwf bsf comf btfsc swap

OPTION OPTION,5 OPTION,1 OPTION,1 OPTION,0

SOLUCIÓN (W) = b’1111 1101’

INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS Sintaxis

Operación

Ciclos

Formato 14 bits

Señalizaciones

ADDLW

k

Suma inmediata con W

1

11 111x kkkk kkkk

C, DC, Z

ANDLW

k

AND inmediato con W

1

11 1001 kkkk kkkk

Z

IORLW

k

OR inmediato con W

1

11 1000 kkkk kkkk

Z

MOVLW

k

Mueve a W un valor inmediato

1

11 00xx kkkk kkkk



SUBLW

k

Resta inmediata con W

1

11 110x kkkk kkkk

C, DC, Z

XORLW

k

OR exclusiva con W

1

11 1010 kkkk kkkk

Z

Tabla 12.4. Características más importantes de las instrucciones que manejan operandos inmediatos (k).

MANEJANDO EL REPERTORIO DE INSTRUCCIONES

363

EJEMPLO Averiguar el contenido de W después de ejecutar el siguiente programa: clrw addlw andlw iorlw xorlw

SOLUCIÓN

0x55 0xff 0x0f 0xaf

(W) = 0xf0

12.8. INSTRUCCIONES DE CONTROL Y ESPECIALES En este grupo se incluyen las instrucciones que rompen la secuencia normal del programa porque alteran el contenido del PC y también las instrucciones especiales. La instrucción de salto incondicional goto carga en el PC la dirección de la nueva instrucción. La instrucción call de llamada a subrutina, antes de cargar el PC con la dirección de la instrucción a saltar, salva la dirección de partida guardando en la cima de la Pila el valor actual del PC. De esta manera, al retornar de la subrutina, se saca de la Pila la dirección de regreso en el programa principal. Para realizar un retorno de una subrutina se pueden emplear dos instrucciones. La más habitual es return, que se limita a extraer de la cima de la Pila el valor que carga en el PC. Otra más compleja es retlw k, que, además de hacer lo mismo que return, carga en W el valor inmediato k que contiene. Es decir, devuelve un parámetro desde la subrutina. Para el final de las interrupciones hay otra instrucción cuyo nemónico es retfie. La operatividad de esta instrucción consiste en cargar en el PC el contenido de la cima de la Pila y poner el bit GIE = 1, pues al comenzar la interrupción este bit se pone automáticamente a 0 para evitar que cuando se atiende una interrupción se produzca otra. GIE es el bit de permiso de todas las interrupciones. En cuanto a las instrucciones especiales, se han incluido dos en este grupo: clrwdt y sleep. La primera pone a 0 el contenido del Perro Guardián, es decir, lo refresca o lo reinicializa. El Perro Guardián si se desborda (pasa de 0xff a 0x00) provoca un reset. La instrucción clrwdt hay que colocarla estratégicamente en ciertos puntos del programa para evitar la reinicialización. La instrucción sleep introduce al procesador en un modo de funcionamiento que se llama de reposo o de bajo consumo. Detiene el oscilador y el procesador queda congelado, no ejecutando instrucciones y manteniendo el mismo valor las Puertas de E/S. También pone los bits PD# = 0 y TO# = 1 y borra al Perro Guardián y al Divisor de frecuencia (Tabla 12.5).

364

MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES INSTRUCCIONES DE CONTROL Y ESPECIALES

Sintaxis CALL

Operación k

Ciclos

Formato 14 bits

Señalizaciones

Llamada a subrutina

2

10

0kkk kkkk kkkk

TO#, PD#

Borra o refresca el Perro Guardián

1

00

0000 0110 0100



Salto incondicional

2

10

1kkk kkkk kkkk



Retorno de interrupción (GIE = 1)

2

00

0000 0000 (00)



Retorno de subrutina y carga W = k

2

11

01xx kkkk kkkk



RETURN

Retorno de subrutina

2

00

0000 0000 1000



SLEEP

Pasa al modo de reposo

1

00

0000 0110 0011

TOP#, PD#

CLRWDT GOTO

k

RETFIE RETLW

k

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 Explicar las diferencias entre las tres instrucciones de «retorno».

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

En la Tabla 12.6 se presentan las principales características de las 35 instrucciones de los PIC de la gama media, agrupadas por funciones, tal como se han descrito.

INSTRUCCIONES QUE MANEJAN REGISTROS Sintaxis

Operación

Ciclos

Formato 14 bits

Señalizaciones

ADDWF

f,d Suma W y f

1

100

0111

dfff

ffff

C, DC, Z

ANDWF

f,d AND W con f

1

00

0101

dffff

ffff

Z

CLRF

f

Borra f (Pone todos los bits a 0)

1

00

0001

1fff

ffff

Z

CLRW



Borra W

1

00

0001

0xxx

xxxx

Z

COMF

f,d Complementa f (Invierte)

1

00

1001

dfff

ffff

Z

DECF

f,d Decrementa f

1

00

0011

dfff

ffff

Z

INCF

f,d Incrementa f

1

00

1010

dfff

ffff

Z

IORWF

f,d OR entre W y f

1

00

0100

dfff

ffff

Z

MOVF

f,d Mueve f

1

00

1000

dfff

ffff

Z

MOVWF

f

Mueve W y f

1

00

0000

1fff

ffff



NOP



No opera

1

00

0000

0xx0

0000



RLF

f,d Rota f a la izqda. a través del acarreo

1

00

1101

dfff

ffff

C

RRF

f,d

1

00

1100

dfff

ffff

C

Rota f a la dcha. a través del acarreo

SUBWF

f,d Resta W a f

1

00

0010

dfff

ffff

C, DC, Z

SWAPF

f,d Intercambia nibbles

1

00

1110

dfff

ffff



XORWF

f,d XOR de W con f

1

00

0110

dfff

ffff

Z

INSTRUCCIONES QUE MANEJAN BITS BCF

f,b Borra bit de f

1

01

00bb

bfff

ffff



BSF

f,b Pone a 1 el bit f

1

01

01bb

bffff

ffff



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



INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS ADDLW

k

Suma inmediata con W

1

11

111x

kkkk

kkkk

ANDLW

k

AND inmediato con W

1

11

1001

kkkk

kkkk

Z

IORLW

k

OR inmediato con W

1

11

1000

kkkk

kkkk

Z

MOVLW

k

Mueve a W un valor inmediato

1

11

00xx

kkkk

kkkk



SUBLW

k

Resta W de un inmediato

1

11

110x

kkkk

kkkk

C, DC, Z

XORLW

K

OR exclusiva con W

1

11

1010

kkkk

kkkk

Z

C, DC, Z

366

MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES INSTRUCCIONES DE CONTROL Y ESPECIALES

Sintaxis CALL

Operación k

CLRWDT GOTO

k

RETFIE RETLW

k

Llamada a subrutina

Ciclos 2

Formato 14 bits 10

0kkk

kkkk

kkkk

Señalizaciones TO#, PD#

Borra o refresca el Perro Guardián

1

00

0000

0110

0100



Salto incondicional

2

10

1kkk

kkkk

kkkk



Retorno de Interrupción (GIE = 1)

2

00

0000

0000

(00)



Retorno subrutina y carga W = k

2

11

01xx

kkkk

kkkk



RETURN

Retorno de subrutina

2

00

0000

0000

01000



SLEEP

Pasa al modo de reposo

1

00

0000

0110

0011

TOP#, PD#

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.

Herramientas y diseño de proyectos

CAPÍTULO

13

13.1. FASES DE DISEÑO En el despertar del siglo XXI asistimos a una impresionante carrera mundial por incorporar 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: — La idea. Sólo la imaginación del diseñador pone límites a un proyecto. — El tiempo. La voracidad del mercado es tan agobiante que cuando nos piden hoy un proyecto nos exigen que lo hayamos entregado ayer.

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 microcontrolador en el caso de no disponer de «emulador en circuito».

HERRAMIENTAS Y DISEÑO DE PROYECTOS Función

Trabajo a realizar

369

Herramienta necesaria

LA IDEA

PENSAR

LA CABEZA

2.a

EDICIÓN PROGRAMA FUENTE

EDITAR EL PROGRAMA

EDITOR

3.a

ENSAMBLAR O COMPILAR

Traducir el programa en lenguaje ENSAMBLADOR O fuente a código binario ejecutable COMPILADOR

4.a

SIMULACIÓN DEL SOFTWARE

Simular comportamiento del programa

SIMULADOR SOFTWARE

5.a

DEPURACIÓN

Corregir los defectos del programa

TODAS LAS ANTERIORES

6.

GRABACIÓN DEL MICROCONTROLADOR

Grabar el programa depurado en la memoria de instrucciones del microcontrolador

GRABADOR

7.a

SIMULAR EL HARDWARE Y EL SOFTWARE EN TIEMPO REAL

Conectar al microcontrolador gra- SISTEMA DE DESARROLLO bado los periféricos fundamentales y analizar su comportamiento

8.a

DEPURACIÓN

Corregir errores en el programa y el hardware

9.a

MONTAJE DEL PROTOTIPO

Construir un prototipo completo PLACA DE PROTOTIPOS con el microcontrolador grabado y todos sus periféricos

10.a

DEPURACIÓN

Corregir errores hardware y soft- TODAS LAS ANTERIORES ware en el prototipo

11.a

PRODUCTO FINAL

MONTAJE DEFINITIVO

1.

a

a

Figura 13.2.

LAS ANTERIORES

EL SOLDADOR

Tabla que muestra algunas características de cada fase de un proyecto y las herramientas que se utilizan.

no se dispone de una herramienta muy potente y cara llamada «emulador en circuito» y que se comenta más adelante. Tanto el organigrama de la Figura 13.1 como la tabla de la Figura 13.2 se han hecho pensando en aficionados y profesionales particulares que no dispongan de la herramienta de trabajo por excelencia, el «emulador en circuito», cuyo coste suele ser superior a los mil dólares. No obstante, con las herramientas que se proponen se pueden alcanzar las mismas metas de manera más artesanal y con igual precisión y eficacia. La Figura 13.2 contiene una tabla que describe las características fundamentales de cada fase de un diseño con microcontrolador cuando no se dispone de un «emulador en circuito».

13.2. HERRAMIENTAS ACCESIBLES Se describen modelos comerciales de las herramientas hardware y software empleadas en los diseños «humildes» que pueden adquirir muchas personas a nivel particular.

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.

13.2.2. Editor de textos Concebida la estructura básica de la aplicación, se puede atacar el desarrollo del software y del hardware. Con un equipo de especialistas, estas dos partes se atacarían en paralelo; pero si el equipo es usted, como pasa a menudo, no se preocupe. No tendrá que compartir éxitos y fracasos. Le recomendamos que si está solo comience confeccionando el software. Tendrá que escribir el programa de control de la tarea, para lo cual precisará de un editor de textos que trabaje con caracteres ASCII. Le recomendamos usar el entorno MPLAB de Microchip, que contiene todas las herramientas software y lo puede recoger libremente en Internet o en el CD de este libro.

13.2.3. Ensamblador o compilador En el editor tiene que ir tecleando el programa usando las instrucciones del lenguaje que elija. Así creará el programa fuente. Dicho programa hay que traducirlo a código binario o código máquina para cargarlo en la memoria de instrucciones del microcontrolador y así poder ejecutarlo el procesador. A este programa ejecutable por el microcontrolador se le llama programa objeto. En los diversos ejercicios que vamos presentando en todos los capítulos del libro hemos tratado de resolverlos con lenguaje Ensamblador y con C para comparar los resultados. También hay lenguajes muy fáciles, como el BASIC, que podría utilizar si no es un experto en informática. El lenguaje que le recomendamos es el Ensamblador; con él obtendrá el mínimo código y así necesitará menos capacidad de memoria y menos tiempo para su ejecución. Pero usted es libre. Microchip ha creado un lenguaje y el correspondiente programa traductor MPASM, que es el que hemos utilizado en este libro y que está integrado en el entorno MPLAB.

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.

13.2.4. Simulador «software» Es un programa que reproduce por software el comportamiento del microcontrolador en la ejecución de un programa, presentando en la pantalla del PC el estado de todos los registros y recursos. No funciona en tiempo real al estar implementada la simulación con software. Tampoco puede adaptarse con periféricos externos.

HERRAMIENTAS Y DISEÑO DE PROYECTOS

371

Figura 13.3. Pantalla principal del simulador SIMUPIC’84. Se trata de un excelente, didáctico y económico simulador software para los PIC16X84.

Su empleo no exige ningún hardware y es muy práctico en la primera fase de depuración del programa. Elimina muchos errores que agilizan el desarrollo posterior. Los simuladores software no están recomendados en aplicaciones en las que el tiempo sea un parámetro estricto y determinante, así como en aquellos que tengan mucha dependencia con el mundo exterior. Microchip tiene el simulador MPSIM para los PIC y en el CD de este libro está incluido dentro del entorno MPLAB. En la Figura 13.3 se muestra una pantalla del simulador SIMUPIC’84, en la que puede apreciarse que el menú principal dispone de todas las fases para la confección del software.

13.2.5. El grabador El programa objeto, o sea, en código máquina ejecutable, hay que escribirlo en la memoria 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.

13.2.6. Sistema de desarrollo Es una herramienta completa muy práctica y económica que sustituye de alguna forma la carencia del emulador en circuito. Consiste en una tarjeta de circuito impreso controlada por el puerto paralelo de un PC y que aloja un grabador de microcontroladores, circuito estabilizador de tensiones de alimentación y gran parte de los periféricos más usados en

Figura 13.5. Fotografía del sistema de desarrollo Micro’PIC Trainer.

HERRAMIENTAS Y DISEÑO DE PROYECTOS

373

las aplicaciones con microcontroladores. Su idea de aplicación es grabar inicialmente el programa en la memoria del microcontrolador y después conectarle los periféricos disponibles para ejecutar el programa en tiempo real y con total exactitud. Los errores hardware y software pueden resolverse sobre la misma tarjeta y volver a ejecutar el programa hasta su correcto funcionamiento. Con un precio muy atractivo, el Micro’PIC Trainer contiene todo lo necesario para desarrollar un proyecto con un PIC de la gama media de dieciocho o veintiocho patitas. Posee un grabador de PIC que, en caso de ser tipo PIC14X84, también es borrador, un circuito de estabilización de las tensiones utilizadas y un conjunto de periféricos (interruptores, pulsadores, potenciómetros, leds, display de siete segmentos y pantalla LCD) con los que se puede editar, depurar, ensamblar, grabar, comprobar el funcionamiento real, borrar y repetir el proceso hasta tener a punto el proyecto (véase Figura 13.5). En este libro se utiliza preferentemente el sistema de desarrollo PIC School, que es el más potente y flexible del mercado.

13.2.7. Tarjeta de prototipos Consiste en una placa de circuito impreso donde viene montado el zócalo del microcontrolador, la circuitería auxiliar y la estabilización de la alimentación. Además, dispone de una zona agujereada para soportar y conectar los periféricos específicos de la aplicación. Insertando el microcontrolador con el programa grabado en su zócalo queda completado el prototipo definitivo.

Figura 13.6. Fotografía de la tarjeta de prototipos PIC18-ME sobre un pupitre de metacrilato que soporta al Micro’PIC Trainer y un transformador de alimentación.

374

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

Confeccionado y depurado el programa, grabado el microcontrolador y comprobado el comportamiento real de gran parte del software mediante los periféricos del sistema de desarrollo, se pasa al montaje del prototipo. Una parte de la circuitería del prototipo siempre es igual, porque es la que corresponde a la alimentación y la auxiliar que acompaña al microcontrolador (cristal y reset). Lo que cambian son los periféricos a controlar y que se conectan con las patitas de E/S. Para ellos se destina el área agujereada. En la Figura 13.6 se muestra una fotografía de la tarjeta de prototipos PIC18-ME, de Ingeniería de Microsistemas Programados, S. L., que es la que hemos usado en la implementación de los ejercicios presentados en el Apéndice F de este libro. Está montada sobre un pupitre de metacrilato que también contiene el Micro’PIC Trainer y un transformador de alimentación, configurando una utilísima herramienta de laboratorio.

13.3. EMULADOR EN CIRCUITO Es una herramienta cara, pero muy potente, que permite realizar un seguimiento completo y rápido de todas las fases de un proyecto. Con ella se reproduce el comportamiento del microcontrolador, pero ahora al emplearse hardware y software se consigue una similitud total de las funciones. Se trabaja en tiempo real y se pueden conectar los periféricos externos a controlar para analizar los resultados de forma idéntica a la que se produciría si fuese el microcontrolador emulado el que estuviese ejecutando el programa de la aplicación. El emulador en circuito es un equipo electrónico controlado mediante un programa desde un PC y del que sale una sonda que reemplaza al microcontrolador en la tarjeta de prototipos. Las ayudas que ofrece al diseñador son excelentes al integrar todos los programas que se precisan, permitiendo una depuración potente del hardware y del software asociados al proyecto.

En la Figura 13.7 se muestra la fotografía del emulador en tiempo real ICEPICJnr-5X, de la empresa R. F. Solutions, que es capaz de emular a los PIC12C5XX y PIC16C5X hasta una frecuencia de 20 MHz. La Figura 13.8 presenta una pantalla de trabajo de dicho emulador en la que se recoge una amplia y valiosa información para la depuración del proyecto.

13.4. INTRODUCCIÓN AL DISEÑO DE PROYECTOS: PUESTA EN HORA Presentamos algunos proyectos que hemos considerado suficientes para abrir la mente y estimular la voluntad para que cualquier persona se decida a construir el primero. Para poner de relieve algunas características de los diseños, comenzamos poniendo en hora un reloj digital. Aplicaciones derivadas del control del tiempo hay muchísimas y en la Figura 13.9 se muestra la fotografía de un interesante kit comercial de la empresa CEBEK que es un temporizador digital para monederos de máquinas que funcionan por tiempo. Cada moneda que se introduce añade cierto tiempo de funcionamiento de la máquina. Seguro que conoce y ha manejado muchos de estos «sacacuartos». Las entradas del monedero de la Figura 13.9 son dos pulsadores. Uno simula las monedas que se introducen y el otro es la puesta en marcha. Cada nueva moneda supone un

HERRAMIENTAS Y DISEÑO DE PROYECTOS

375

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.8. Pantalla de trabajo del emulador ICEPIC-Jnr.

376

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

Figura 13.9. Fotografía de un temporizador digital para máquinas que funcionan con monedas, construido con un PIC16C55 y comercializado por CEBEK.

incremento del tiempo de funcionamiento cuyo valor se selecciona con cuatro microinterruptores. 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 accesibles, 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 presentació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

Figura 13.10. Esquema electrónico de un reloj digital basado en un PIC16C54.

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 recomendable montar los periféricos con rapinado. En este proyecto, el módulo principal consiste en conseguir un tiempo patrón de un segundo 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. Tiempo, 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.

13.5. UN DADO ELECTRÓNICO Se describe la construcción de un dado electrónico que simula las seis caras de los reales y que también puede «tirarse» para sacar un número aleatorio del 0 al 6. Para la interpretación electrónica usaremos un display de siete segmentos sobre el que se visualizará el número de cada tirada y también un pulsador que indique el momento de la tirada. En la Figura 13.13 se muestra la fotografía de un kit comercial basado en el PIC16C54 que implementa esta aplicación sobre una cajita de baquelita que contiene la pila de 9 V que precisa su alimentación.

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.

La Puerta B del PIC, que en la fase de diseño y en la comprobación en el Micro’PIC Trainer puede ser un PIC16X84, se configura como salida y sus líneas se aplican a los segmentos del display, como se refleja en la Figura 13.14. La línea de menos peso de la Puerta A recibe el nivel lógico del pulsador de tirada. En la Figura 13.15 se presenta el organigrama resumido para el programa del 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.

En la Figura 13.16 se ofrece una fotografía de la implementación especial del dato sobre una tarjeta de prototipos PIC18-ME. Lo más llamativo es la sustitución del display de siete segmentos por un presentador que simula al display a base de numerosos leds. El programa lo encontrará en el CD. En los juegos de azar hay jugadores de ventaja que hacen trampas. Una podría consistir en modificar el programa para que cada cierto número de veces salga un número dado o incluso para generar una secuencia de números preestablecida. Usted no debe emplear sus conocimientos para lucrarse de forma poco honesta. Hay infinidad de juegos que están esperando su aportación para que se jueguen más, sean más atractivos y hagan disfrutar más a la gente. Las quinielas, la lotería primitiva, la bonoloto, las damas, la oca, el mus y el ajedrez le necesitan. Ayúdelos; además de entretenerse, puede entretener a los demás y de paso ganar algún premio por su trabajo.

13.6. SEMÁFORO REGULABLE Este sencillo proyecto nos va a permitir manejar tiempo y usar la memoria de datos EEPROM. Se trata de un semáforo corriente con tres luces (roja, verde y ámbar) que están simuladas por tres diodos led de dichos colores. La luz ámbar se enciende durante un segundo en la transición de las otras dos (véase Figura 13.17). Mediante tres pulsadores, conectados a las tres líneas de menos peso de la Puerta A, se regula el tiempo que estarán encendidas las luces roja y verde.

HERRAMIENTAS Y DISEÑO DE PROYECTOS

381

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.

— Interruptor RA0: Cuando introduce un nivel lógico alto, el sistema funciona en modo AJUSTE y se pueden modificar los tiempos de las luces. Si introduce un nivel bajo, funciona en modo NORMAL. — Interruptor RA1: Con nivel alto regula el tiempo de la luz roja y con nivel bajo el de la verde. — Interruptor RA2: Con nivel alto incrementa el tiempo de la luz seleccionada y con nivel bajo se decrementa. 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.

13.7. PRESENTADOR DE MENSAJES Es un buen ejercicio para experimentar el manejo de pantallas LCD, que en este proyecto se usan para visualizar diversos mensajes previamente grabados. Concretamente, se pueden visualizar hasta ocho mensajes diferentes de acuerdo con el código binario que introduzcan tres interruptores, conectados a las tres líneas de menos peso de la Puerta A. La Figura 13.19 muestra el aspecto de esta aplicación montada sobre una tarjeta de prototipos PIC18-ME y la Figura 13.20 el esquema de conexionado. El programa de esta aplicación, debidamente comentado, se halla en el CD, donde también podrá encontrar el programa HOLA, que contiene las principales rutinas básicas que se necesitan para manejar la pantalla LCD.

382

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

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

Figura 13.20. Esquema de conexionado del presentador de mensajes.

383

384

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

13.8. CLAVE DE ACCESO Como último proyecto se describe una aplicación que emplea a los dos periféricos más clásicos en el control de los microcontroladores: teclado y pantalla LCD. Para controlar el acceso a un recinto se debe pulsar sobre el teclado la tecla A seguida de otras cuatro con diferentes dígitos, que constituyen la clave. Si la clave es correcta, se activa durante un segundo un relé, conectado a la línea RA4, que abre la puerta. Se dan tres oportunidades para introducir la clave correcta. Además, se utiliza un zumbador piezoeléctrico que genera un sonido beep tras la pulsación de cada tecla. Con la tecla C se puede cambiar la clave y la pantalla LCD genera una serie de mensajes durante la operación. La clave queda registrada en la memoria EEPROM de datos de forma permanente. La Figura 13.21 muestra la disposición de los periféricos sobre la tarjeta PIC18-ME y la Figura 13.22 ofrece el esquema de conexionado de los mismos con el PIC. El programa de la clave se ha incluido en el CD.

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

T1.1. CREACIÓN DEL PRIMER PROYECTO PARA EL PIC16F84A Las fases o etapas que hay que realizar para implementar un proyecto basado en microcontrolador ya se analizaron al estudiar el 12F508 y se encuentran resumidas en la Figura T1.1. Para el trabajo con el PIC16F84A también se utilizarán las mismas herramientas que las utilizadas con el PIC12F508, que son las siguientes: a) b) c) d)

MPLAB IDE, para el desarrollo y compilación de los programas. MPLAB SIM, para la simulación de los programas en el ordenador. WinPic800, para la grabación del programa en el microcontrolador. PIC School, para implementar físicamente los proyectos de programación.

A continuación, se describen los pasos necesarios para crear un primer proyecto para el PIC16F84A y su simulación en el entorno de desarrollo MPLAB IDE y MPLAB SIM. Para iniciar la gestión y desarrollo de este proyecto se elige la opción Project → Project Wizard en el menú principal, tal como se presenta en la Figura T1.2. Una vez seleccionado el gestor de proyectos, éste va guiando al usuario en las diferentes fases precisas para crear un nuevo proyecto. Tras una ventana de bienvenida, se elige la pestaña Siguiente para ir recorriendo por todos los pasos: — Primer paso: Selección del microcontrolador. Aparece una lista desplegable con todos los modelos de PIC que admite la versión del MPLAB utilizada. Seleccionamos el PIC16F84A (Fig. T1.3). — Segundo paso: Se selecciona la herramienta del MPLAB IDE que se va a usar para ensamblar o compilar el programa fuente. Se supone que el programa fuente está escrito en lenguaje Ensamblador (.ASM) y se elige en la persiana Active Toolsuite la herramienta Microchip MPASM Toolsuite, que incluye el entorno integrado. Dicha herramienta consta del ensamblador (mpasmwin.exe) y el enlazador o linkador (mplink.exe). Con el botón Browse se puede seleccionar la ruta donde se encuentran esos tres ficheros, que por defecto es la mostrada en la Figura T1.4. — Tercer paso: Se introduce el nombre que se asigna al proyecto y se indica en la carpeta en que se guardará (Fig. T1.5). Se recomienda crear una carpeta para guardar los ejercicios con el PIC16F84A (G:\16F84A). 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 simplemente 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 desplegable de Project en el entorno MPLAB IDE.

Figura T1.3. Selección del microcontrolador usado en el proyecto.

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: LIST INCLUDE ORG GOTO ORG

P=16F84A “P16F84a.inc” 0x00 INICIO 0x05

;Selección del PIC ;Definición de registros ;Vector de reset ;Inicio del programa

392

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

INICIO: CLRW ADDLW 0x08 ADDLW 0x09 NOP

;Borra el contenido de W ;Suma a W 8 ;Suma a W 9 ;No operar

end

Figura T1.4. En el segundo paso se seleccionan las herramientas para ensamblar o compilar el programa 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 proyecto 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.

T1.1.1. Análisis del programa fuente En la primera línea se usa la directiva de Ensamblador List, que indica el modelo de microcontrolador utilizado y que en este caso es el PIC16F84A. En la segunda línea, la directiva include permite incluir en el programa el fichero P16F84A, que contiene la declaración de los nombres de los registros, sus bits y las etiquetas que se usan para el modelo de PIC empleado. Con org 0x00, la primera instrucción del programa se coloca en la dirección hexadecimal 00, destinada al Vector de Reset. En dicha posición, escribiremos goto INICIO para que el programa, siempre que se inicie o resetee, salte a dicha etiqueta, que se suele colocar en la posición 5 gracias a la instrucción org 0x05. La instrucción clrw carga en el registro W el valor 0. Las dos siguientes instrucciones, addlw 0x08 y addlw 0x09, suman los valores indicados al contenido del registro W. Por último, la instrucción NOP no hace nada, sólo ocupa una posición de la memoria y tarda en ejecutarse un ciclo de instrucción. La directiva final end indica la terminación del programa fuente. En resumen, este programa comienza poniendo a 0 el contenido del registro W y luego le añade 8 y 9. Es un programa muy sencillo y con sólo fines didácticos.

T1.1.2. Desarrollando el proyecto Para que el microcontrolador pueda ejecutar el programa fuente (.ASM) es necesario traducir o «ensamblar» el mismo para convertirlo en programa en código máquina (*.HEX). Tras el ensamblado, además del fichero ejecutable .hex, hay otro con los errores (*.ERR), otro con el listado (*.LIST), etc.

394

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

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.

T1.2. EL SIMULADOR MPLAB SIM El taller Ejem_0.ASM es de carácter didáctico y no interesa grabarlo en la memoria del PIC para comprobar su comportamiento. En estas condiciones, basta con simular la ejecución del programa y analizar los resultados que produce. Para ello, se utiliza el simulador software MPSIM que se halla integrado en el entorno MPLAB IDE. Se elige la opción Debugger → Select Tool → 3 MPLAB SIM (Fig. T1.8).

Figura T1.8. Selección del simulador MPLAB SIM integrado en el MPLAB.

Al seleccionar el MPLAB SIM, aparece en la ventana principal un recuadro con siete iconos que proporcionan mucha flexibilidad en la simulación del programa (Fig. T1.9).

SIMULANDO EL PRIMER TALLER

395

Figura T1.9. Opciones del simulador MPLAB SIM.

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.

T1.3. COMPORTAMIENTO DEL PROGRAMA CON EL SIMULADOR A continuación, se describe cómo observar el comportamiento del programa a través del simulador. Una vez seleccionada la herramienta MPLAB SIM a través de la opción Debugger → Select Tool → 3 MPLAB SIM, se procede a ejecutar paso a paso el programa y observar su funcionamiento. Mediante la opción Debugger → Step Into o bien, mediante la tecla de función F7 equivalente, el simulador ejecuta una instrucción del programa. Así, la primera instrucción ejecutada es GOTO INICIO, ya que el resto de líneas de código fuente son directivas para el compilador, pero no instrucciones del PIC. Esta instrucción realiza un salto incondicional hasta la etiqueta INICIO, donde comienza el programa. Tras esta etiqueta, la primera instrucción es CLRW, que hace que el registro W tome el valor 0. Si se observa, el valor del registro W en la ventana Watch del menú View Watch se puede añadir este registro para monitorizar sus valores. Con la primera suma ADDLW 0x08, el valor que toma W es 8, fruto de la suma de 8 + 0. Con la siguiente suma ADDLW 0x09, el valor que toma W es 11, que en hexadecimal es 17, fruto de sumar 9 al contenido de W, que es 8.

396

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

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.

Figura T1.11. La ventana Watch muestra el valor de WREG.

Trabajando con entradas y salidas. Concurso de televisión

o

2.

TALLER

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.

T2.2. TALLER 2: TRABAJANDO CON ENTRADAS Y SALIDAS. CONCURSO DE TELEVISIÓN ENUNCIADO Este taller desarrolla una plataforma para su uso en concursos de preguntas y respuestas donde el primer concursante que sepa la respuesta a una pregunta deberá accionar un pulsador y entonces se ilumina el led correspondiente a dicho concursante haciendo caso omiso al resto de pulsaciones de los distintos participantes. MATERIALES NECESARIOS • PIC School. • PIC16F84A. • Cables de conexión. ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR El taller utiliza dos interruptores de la PIC School para que los concursantes los accionen cuando deseen responder a una pregunta y dos leds que indicarán cuando se enciendan qué concursante contesta en primer lugar. Los periféricos se conectan a las Puertas A y B 397

398

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

Figura T2.1. Organigrama del Taller 2.

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 cuanto uno de los dos concursantes accione su pulsador, el programa iluminará el led correspondiente 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: LIST include org goto ORG INICIO: BSF MOVLW MOVWF MOVLW MOVWF BCF CLRW MOVLW BUCLE: MOVFW MOVWF

P=16F84A “P16F84A.inc” 0 INICIO 5

;Tipo de PIC ;Fichero de def. de registros ;Vector de Reset ;Salto a inicio ;del programa

STATUS,5 b’11111100’ TRISA b’00000011’ TRISB STATUS,5

;Cambio al banco 1 ;RA0 y RA1 Salida ;RB0 y RB1 Entrada

PORTA

;Cambio al banco 0 ;Borrado de W ;Borrado de Puerta A

PORTB PORTA

;Contenido de PORTB a W ;Contenido de W a PORTA

TRABAJANDO CON ENTRADAS Y SALIDAS. CONCURSO DE TELEVISIÓN

BTFSC GOTO BTFSS GOTO ENCIENDE1: BSF CLRWDT GOTO ENCIENDE0: BSF CLRWDT GOTO END

PORTB,0 ENCIENDE0 PORTB,1 BUCLE PORTA,1 ENCIENDE1 PORTA,0 ENCIENDE0

399

;Si RB0 es 1 ;Enciende el led RA0 ;Si RB1 es 0 ;Vuelve a leer PORTB ;En caso contrario ;Enciende RB1 ;Refresca el perro guardián ;Entra en bucle infinito ;Enciende RB0 ; ;Refresca el perro guardián ;Bucle infinito

Nótese cuál es el procedimiento para configurar la Puerta A y Puerta B como salidas y entradas, respectivamente. Para ello, se debe acceder al registro TRISA y TRISB situados en el banco 1 de memoria, por lo que la primera instrucción es la que permite llevar a cabo dicha operación: BSF STATUS,5. A continuación, y a través del registro W, se mueve el valor binario 11111100 a TRISA, haciendo que todas las patitas sean de entrada menos RA1 y RA0, que, al estar configuradas con un 0, se configuran como salidas. De igual forma, se configuran RB1 y RB0 como entradas moviendo el valor 00000011 al registro TRISB. A continuación, se testean los bits RB0 y RB1 para comprobar si alguno de ellos tiene el valor 1. Para ello, la instrucción BTFSS y BTFSC testean el valor de un bit concreto de PORTB, y si es 1 o 0, respectivamente, salta la siguiente instrucción, que en este caso siempre son instrucciones de salto para que el programa derive la acción a un bucle infinito en el que se encenderá el led correspondiente y no se saldrá de él hasta que se pulse reset o bien se siga esperando a que algún concursante pulse su interruptor. 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 introduciendo 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 El conexionado de los periféricos que están disponibles en la PIC School es el que muestra la Figura T2.2. Una vez colocado el PIC16F84A sobre su zócalo, tan sólo conectaremos RA0 y RA1 como salidas y RB0 y RB1 como entradas en los interruptores de la placa PIC School.

400

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

Figura T2.2. Conexión de las cuatro líneas del PIC16F84A usadas en la experiencia.

Figura T2.3. Fotografía del montaje de la experiencia en la PIC School.

TRABAJANDO CON ENTRADAS Y SALIDAS. CONCURSO DE TELEVISIÓN

401

Figura T2.4. Pantalla principal del programa WinPic800 que muestra el programa en hexadecimal.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO 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. 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. 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

Figura T2.5. Configuración del PIC previa grabación.

EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. En estos ejemplos se ha empleado el compilador de C de la casa CCS, que comercializa Ingeniería de Microsistemas Programados, S. L. También en el CD que acompaña al libro se puede encontrar este programa bajo el título TALLER_2.C. #include #byte port_a = 5 #byte port_b = 6 main() { port_b = 0; set_tris_a(0b11111100); set_tris_b(0b00000011); while(1) { if(input(PIN_A0)) { output_bit(PIN_B0,1); output_bit(PIN_B1,0); while(1) {

//RA0 y RA1 Salidas //RB0 y RB1 Entradas // // // //

Leer RA0 y preguntar su valor RA0 es 1 Poner RB0 a 1 Poner RB1 a 0

TRABAJANDO CON ENTRADAS Y SALIDAS. CONCURSO DE TELEVISIÓN

restart_wdt(); } } if(input(PIN_A1)) { output_bit(PIN_B0,0); output_bit(PIN_B1,1); while(1) { restart_wdt(); } } } }

//Entrada en un bucle infinito

// // // //

Leer RA0 y preguntar su valor RA0 es 1 Poner RB0 a 1 Poner RB1 a 0

//Entrada en un bucle infinito

403

Manejo de la instrucción SLEEP

er

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.

T2.2. TALLER 3: MANEJO DE LA INSTRUCCIÓN SLEEP ENUNCIADO 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 Guardiá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 microcontrolador «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

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR La ejecución del taller, resumida en la Figura T3.1, es muy simple. El microcontrolador entra en modo sleep, y cada vez que sale por desbordamiento del Perro Guardián, lee el estado de los interruptores conectados a RA0-RA2, y en función del valor de éstos, cambia el preescaler de dicho Perro Guardián. Además, cada vez que se «despierta» se incrementa un contador cuyo valor se muestra por los ocho leds conectados a la Puerta B.

Figura T3.1. Organigrama del Taller 3.

MANEJO DE LA INSTRUCCIÓN SLEEP

407

El código fuente correspondiente a dicho programa es el siguiente: ; ; 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 org goto org Inicio clrf bsf clrf movlw movwf movlw movwf bcf Loop

0x00 Inicio 0x05

;Vector de Reset

PORTB STATUS,RP0 TRISB b’00011111’ TRISA b’00001000’ OPTION_REG STATUS,RP0

;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida

sleep incf movf andlw iorlw bsf movwf bcf goto end

;Salva vector de interrupción

;RA0-RA4 entradas ;Preescaler de 1 para el WDT ;Selecciona banco 0 ;Modo standby

PORTB,F PORTA,W b’00000111’ b’00001000’ STATUS,RP0 OPTION_REG STATUS,RP0 Loop

;PUERTAB = PUERTAB + 1 ;Lee estado de interruptores RA0-RA2 ;Selecciona el banco 1 ;Ajusta valor del preescaler ;Selecciona el banco 1 ;Volver al modo standby ;Fin del programa fuente

El aspecto más reseñable de este programa es la utilización de la instrucción sleep. Nótese que una vez ejecutada dicha instrucción, el PIC entra en modo reposo y no ejecuta ninguna otra instrucción hasta que sale de dicho modo y sólo entonces ejecutará aquellas instrucciones que se encuentran tras sleep. Otro aspecto interesante a analizar en el desarrollo del programa es la forma en la que se filtra de la puerta A los valores de los 3 bits de menos peso correspondientes a RA0-RA2. Para obtener solamente el valor de estos 3 bits se realiza la operación lógica AND con el valor binario b’00000111’ mediante la instrucción andlw b’00000111’ que hace que los 5 bits de más peso valgan siempre 0. Tras esta operación, como se quiere modificar los 3 bits del registro STATUS con dicho valor, se realiza un operación lógica OR con el valor binario b’00001000’ para

408

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

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 conectaremos RA0, RA1 y RA2 como entradas y la Puerta B se conectará sobre los leds S0-S7.

Figura T3.3. Conexión de líneas del PIC16F84A usadas en la experiencia.

MANEJO DE LA INSTRUCCIÓN SLEEP

409

Figura T3.4. Fotografía del montaje de la experiencia en la PIC School para la demostración del modo sleep.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER3.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. Desde WinPic800 se abre el programa TALLER3.HEX y con el icono correspondiente se ordena la grabación del mismo sobre la memoria del PIC16F84A, 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. Si la posición de los interruptores E0-E2 correspondientes a RA0-RA2 transmiten el valor 0, se observará cómo los leds S0-S7 parpadean muy rápidamente. Cambiando los valores de estos tres interruptores, la velocidad de parpadeo de los leds variará alcanzando su valor mínimo cuando éstos introducen el valor binario 111. EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. En estos ejemplos se ha empleado el compilador de C de la casa CCS, que comercializa Ingeniería de Microsistemas Programados, S. L. También en el CD que acompaña al libro se puede encontrar este programa bajo el título TALLER_3.C.

410

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

/*-------------------------------------------*\ | TALLER_3.c | | Autor: Pedro M.a Jiménez | | (c) Microsystems Engineering (Bilbao) | \*-------------------------------------------*/ // El modo “sleep” y el “wake-up” (despertar) mediante el WDT #include #use delay(clock=4000000,RESTART_WDT) #include #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)); } } // Nota: // Esto es una /* #define #define #define #define #define #define #define #define #define #define #define #define #define #define

copia de parte del fichero 16f84.h: RTCC_DIV_2 RTCC_DIV_4 RTCC_DIV_8 RTCC_DIV_16 RTCC_DIV_32 RTCC_DIV_64 RTCC_DIV_128 RTCC_DIV_256 WDT_18MS WDT_36MS WDT_72MS WDT_144MS WDT_288MS WDT_576MS

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

// Ver Nota.

MANEJO DE LA INSTRUCCIÓN SLEEP

#define WDT_1152MS #define WDT_2304MS

411

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

Nótese que al usar la función setup_counters en el lenguaje C para establecer el preescaler del WDT, los valores son distintos a los usados en Ensamblador. En C, para obtener los rangos del preescaler deseados, hay que introducir valores de 8 a 15 en vez de 0 a 7, como hacíamos en Ensamblador. Es por esto por lo que en la llamada a dicha función se le añade al valor leído por la Puerta B la constante 8.

Uso de temporizadores. Contador ascendente/descendente

o

4.

TALLER

T4.1. INTRODUCCIÓN Este taller maneja el clásico contador ascendente/descendete binario. En los leds conectados 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.

T4.2. TALLER 4: CONTADOR ASCENDENTE/DESCENDENTE. ELIMINANDO EL EFECTO REBOTE ENUNCIADO 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. ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR El programa comienza creando una subrutina para conseguir un retraso de 20 ms que será de vital importancia para eliminar el denominado efecto rebote. Tras crear esta rutina, el programa comienza esperando un pulso alto seguido de uno bajo con un intervalo mínimo de 20 ms. Tras lo cual, si el estado de RA1 = 0, disminuirá un contador, y si es el contrario, aumentará dicho contador, que se visualiza mediante los leds conectados a la Puerta B. La Figura T4.1 resume esta aplicación. 413

414

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

Figura T4.1. Organigrama del Taller 4.

El código fuente correspondiente a dicho programa es el siguiente: ; ; TALLER_4.asm ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ;Contador UP/DOWN binario ;

USO DE TEMPORIZADORES. CONTADOR ASCENDENTE/DESCENDENTE

415

;Sobre los 8 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 List p=16F84 include “P16F84.INC”

;Tipo de procesador ;Definiciones de registros internos

org goto

0x00 Inicio

;Vector de Reset

org

0x05

;Salva el vector de interrupción

;****************************************************************** ;Delay_20_ms: Rutina de temporización cuyo objeto es eliminar el ;“efecto rebote” de los periféricos electromecánicos. Realiza un delay ;de 20 ms. Si el PIC trabaja a una frecuencia de 4MHz, 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 movlw movwf Delay_20_ms_1 btfss goto bcf return Inicio clrf bsf clrf movlw movwf movlw movwf bcf Loop clrwdt btfss goto call Loop_2 clrwdt btfsc goto call btfss goto

INTCON,T0IF 0x63 TMR0 clrwdt INTCON,T0IF Delay_20_ms_1 INTCON,T0IF

;Desconecta el flag de rebosamiento ;Complemento hex. de 156 ;carga el TMR0 ;Refrescar el WDT ;Rebasamiento del TMR0 ;Todavía no ;Ahora sí, reponer el flag

PORTB STATUS,RP0 TRISB b’00011111’ TRISA b’00000110’ OPTION_REG STATUS,RP0

;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida ;Puerta A se configura como entrada

PORTA,0 Loop Delay_20_ms

;Preescaler de 128 para el TMR0 ;Selecciona banco 0 ;Refrescar el WDT ;Subida de la señal RA0 ? ;No ;Elimina rebotes

PORTA,0 Loop_2 Delay_20_ms

;Refrescar el WDT ;Bajada de RA0 (pulso) ;No ;Ha habido pulso, eliminar rebotes

PORTA,1 Down

;RA1 = 1 ;No, cuenta descendente

416

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

Up

incf goto

PORTB,F Loop

;Cuenta ascendente

Down

decf goto

PORTB,F Loop

;Cuenta descendente

end

;Fin del programa fuente

Cabe destacar el uso de la subrutina Delay_20_ms a la que se accede mediante la llamada call Delay_20_ms y de la que se retorna mediante la instrucción 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 conexionado de los periféricos disponibles en la PIC School es el que muestra la Figura T4.2. Una vez colocado el PIC16F84A sobre su zócalo, se conectan RA0 y RA1 como entradas y la puerta B sobre los leds S0-S7. Es conveniente situar RA0 en un pulsador (E7) y no en un interruptor como RA1 (E0) para conseguir el pulso más fácilmente.

Figura T4.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

USO DE TEMPORIZADORES. CONTADOR ASCENDENTE/DESCENDENTE

417

Figura T4.3. Fotografía del montaje de la experiencia en la PIC School.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER4.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. Al comenzar a pulsar E7, conectado a RA0, se comenzará a visualizar por los leds el número de pulsaciones producidas. Al cambiar el estado del interruptor E1 conectado a RA1 conseguiremos que ese conteo sea incremental o decremental. EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación: /*-------------------------------------------*\ | Taller_4.c | | Autor: Pedro M.a Jiménez | | (c) Microsystems Engineering (Bilbao) | \*-------------------------------------------*/

418

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

// Contador UP/DOWN binario // Sobre los 8 leds de salida conectados B se visualizará, en binario, // el número de pulsos aplicados por RA0. RA1 determina si la cuenta es // ascendente (a “1”) o descendente. #include #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)); delay_ms(20); do { restart_wdt(); } while(!input(PIN_A0)); delay_ms(20); if(input(PIN_A1)) port_b++; else port_b--; } }

// Esperar flanco ascendente

// Esperar flanco descendente

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 aparentemente podría parecer. El PIC16F84A no dispone de dieciséis líneas con las que monitorizar 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 salidas 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.

T5.2. TALLER 5: MANEJO DEL TECLADO ENUNCIADO Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se trata de leer el teclado y visualizar sobe los leds de la Puerta B el código binario de la tecla pulsada. La visualización se mantiene estable durante dos segundos hasta una nueva pulsación. Se trata de un ejemplo en el que la Puerta B se reconfigura dinámicamente. Inicialmente, está configurada como salida para presentación del resultado. Posteriormente, la rutina de exploración del teclado reconfigura RB0-RB3 como entradas y RB4-RB7 como salidas. MATERIALES NECESARIOS • PIC School. • PIC16F84A. • Cables de conexión.

419

420

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

Figura T5.1. Organigrama del Taller 5.

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR El organigrama de la Figura T5.1 resume el funcionamiento del programa. El código fuente en Ensamblador correspondiente a dicho programa es el siguiente: ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ; ;Introducción al manejo del teclado. ; ;Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se

MANEJO DEL TECLADO

421

;trata de leer el teclado y visualizar sobre los leds de la Puerta ;B el código binario de la tecla pulsada. La visualización se ;mantiene estable durante dos segundos hasta una nueva pulsación. ;Se trata de un ejemplo en el que la Puerta B se reconfigura ;dinámicamente. Inicialmente es configurada como salida para ;presentación del resultado. Posteriormente, la rutina de ;exploración del teclado reconfigura RB0-RB3 como entradas y RB4-RB7 ;como salidas. List p=16F84 ;Tipo de procesador include “P16F84.INC” ;Definiciones de registros internos Key_var

equ

0x0c

Delay_Cont

equ

0x12

org goto org

0x00 Inicio 0x05

;Inicio de las variables de manejo ;del teclado ;Variable para la temporización ;Vector de Reset ;Salva vector de interrupción

include “TECLADO.INC” ;Incluye rutinas de manejo del ;teclado ;****************************************************************** ;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 movlw 0x3c movwf TMR0 Intervalo clrwdt btfss INTCON,T0IF goto Intervalo decfsz Delay_cont,F goto Delay_var return

;Desconecta el flag de rebosamiento ;Complemento hex. de 195 ;carga el TMR0 ;Refrescar el WDT ;Rebosamiento del TMR0 ?? ;Todavía no ;Decrementa contador de intervalos ;Repite el intervalo de 50 ms

Inicio clrf bsf clrf

PORTB STATUS,RP0 TRISB

;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida

b’00000111’ OPTION_REG STATUS,RP0

;Preescaler de 256 para el TMR0 ;Selecciona banco 0

movlw movwf bcf

422 Loop

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

clrwdt call movlw subwf btfsc goto movf movwf movlw movwf call clrf goto end

Key_Scan 0x80 Tecla,W STATUS,Z Loop Tecla,W PORTB .40 Delay_cont Delay_var PORTB Loop

;Refresco del WDT ;Explora el teclado ;Hay alguna pulsada ;No ;Lee el código de la tecla pulsada ;Lo visualiza sobre leds Puerta B ;Temporiza 2 segundos ;Desactiva visualización ;Fin del programa fuente

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

Figura T5.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

MANEJO DEL TECLADO

423

Figura T5.3. Fotografía del montaje de la experiencia en la PIC School.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER_5.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. Desde WinPic800 se abre el programa TALLER5.HEX y con el icono correspondiente se ordena la grabación del mismo sobre la memoria del PIC16F84A, 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. Al iniciar el programa, observaremos cómo los leds RB0-RB7 están encendidos. Cada vez que pulsemos una tecla, durante dos segundos dejará de iluminarse en RB7RB4 el led correspondiente a la fila de la tecla pulsada y en RB3-RB0 el led correspondiente a la columna de la tecla pulsada. Así, al pulsar la tecla 6 dejará de iluminarse RB2 (columna 3) y RB5 (fila 2). EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación.

424

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

/*-------------------------------------------*\ | | Autor: Pedro M.a Jiménez | (c) Microsystems Engineering (Bilbao) | \*-------------------------------------------*/ // // // // //

Introducción al manejo del teclado. Haciendo uso de las rutinas incluidas en el fichero KBD2.C, se trata de leer el teclado y visualizar sobre los leds de la Puerta B el código binario de la tecla pulsada. La visualización se mantiene estable durante dos segundos hasta una nueva pulsación.

// // // //

Se trata de un ejemplo en el que la Puerta B se reconfigura dinámicamente. Inicialmente, es configurada como salida para presentación del resultado. Posteriormente, la rutina de exploración del teclado reconfigura RB0-RB3 como entradas y RB4-RB7 como salidas.

#include #use delay(clock=4000000,RESTART_WDT) #use fast_io(B) #include #byte port_b = 6 main() { char k; while(1) { restart_wdt(); k=kbd_getc(); if(k) {

// Comprueba el teclado: si k es 0, no se pulsó // ninguna tecla; si no es 0, contiene el código // ASCII de la tecla pulsada.

set_tris_b(0x00); // ATENCIÓN: Necesario puesto que la función port_b = k; // kbd_getc() reprograma la Puerta B. delay_ms(2000); } } }

o

Comunicación RS-232

6.

TALLER

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, alarmas 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…

T6.2. TALLER 6: COMUNICACIÓN RS-232 ENUNCIADO Haciendo uso de las rutinas incluidas en el fichero RS232LOW.INC, se trata de utilizar el canal RS-232 de la PIC School para comunicar vía serie con diferentes periféricos. En los ejemplos aquí propuestos se utilizará un PC para que con el software HyperTerminal de Windows actúe como un simple terminal de comunicaciones. El usuario deberá preparar los cables de comunicación entre la PIC School y el PC. Una de las aplicaciones prácticas para el PIC12F508 tenía el mismo propósito. El taller pretende ser un simple sistema de monitorización. Se lee el estado de los interruptores E4-E0 de la PIC School conectados a RA4-RA0 del PIC16F84A y se envía, vía serie, a un terminal para monitorizar el estado de los mismos. 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

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR 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 comunicación serie requiere implementar en el programa dicho protocolo mediante un control estricto de los tiempos empleados.

Figura T6.1. Organigrama del Taller 6.

El programa hace uso de las rutinas almacenadas en el fichero RS232LOW.INC y el código fuente del programa principal es el siguiente: ; 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. List p=16F84 include “P16F84.INC”

;Tipo de procesador ;Definiciones de registros internos

COMUNICACIÓN RS-232

CLKIN BAUDIOS T_MODO R_MODO T_Nbit R_Nbit Sbit

equ equ equ equ equ equ equ

.4000000 .9600 1 1 8 8 2

;Frecuencia de trabajo ;Velocidad de comunicación ;Transmite primero bit LSB ;Recibir primero bit LSB ;Transmite caracteres de 8 bits ;Recibe caracteres de 8 bits ;Transmite 2 bits de stop

Rs232_var Contador Temporal Blancos Temporal_1 Temporal_2

equ equ equ equ equ equ

0x0c 0x11 0x12 0x13 0x14 0x15

;Inicio variables rutinas RS232 ;Variable contador de bits ;Variable temporal de datos ;Número de blancos a transmitir ;Variable temporal ;Variable temporal

org goto org

0x00 Inicio 0x05

427

;Vector de reset ;Salvar el vector de interrupción

include “RS232LOW.INC” ;Incluir rutinas de comunicación Mens_0

equ $ dt

Mens_1 dt

;Mens_0 apunta al primer carácter ;del mensaje 0 “RA4 RA3 RA2 RA1 RA0”,0x0d,0x0a,0x00 equ $ ;Mens_1 apunta al primer carácter ;del mensaje 1 “--- --- --- --- ---”,0x0d,0x0a,0x0a,0x00

;****************************************************************** ;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 Mensaje Mensaje_1

No_es_último

movwf movf call movwf movf btfss goto return movwf call incf goto

Temporal_1 Temporal_1,W Tabla_Mensajes Temporal_2 Temporal_2,F STATUS,Z No_es_último Txdreg TxD Temporal_1,F Mensaje_1

Inicio: bsf STATUS,RP0 movlw b’10001111’ Pull_Up Off

;Salva posición de la tabla ;Recupera posición de la tabla ;Busca carácter de salida ;Guarda el carácter ;Mira si es el último

;Transmite el carácter ;Siguiente carácter

;Selecciona página 1 de datos ;Preescaler de 128 para el WDT.

428

Loop

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

movwf movlw movwf movlw movwf bcf

OPTION_REG b’11101111’ TRISB 0xff TRISA STATUS,RP0

movlw call movlw call

Mens_0 Mensaje Mens_1 Mensaje

clrwdt movlw movwf movf andlw movwf rlf rlf rlf

.5 Contador PORTA,W b’00011111’ Temporal Temporal,F Temporal,F Temporal,F

Siguiente_bit rlf Temporal,F btfsc STATUS,C goto Es_1 Es_0 movlw ‘0’ goto Enviar Es_1 movlw ‘1’ Enviar movwf Txdreg call TxD movlw movwf Txd_Blancos movwf call decfsz goto

;Puerta A entrada ;Selecciona página 0 de datos ;Salida de mensaje 0 ;Salida de mensaje 1

;Inicia contador de bits ;Lee el estado de la puerta A

;Almacena estado de RA4-RA0 ;Desplaza el bit MSB a carry ;Es “0” ;No, es “1” ;Código ASCII del “0”

;Transmite el código del bit

.3 Blancos movlw ‘ ’ Txdreg TxD Blancos,F Txd_Blancos

decfsz goto

Contador,F Siguiente_bit

movlw movwf call goto

.13 Txdreg TxD Loop

end

;RB5 entrada y RB4 salida

;Transmitido los 5 bits ;Todavía no

;Transmite código de CR ;Fin del programa fuente

A la hora de cargar este programa desde el CD que acompaña a la obra, deberá crear un proyecto que incluya tanto el fichero TALLER_6.ASM como el fichero RS232LOW.INC que contiene las rutinas necesarias para el manejo del teclado.

COMUNICACIÓN RS-232

429

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 La conexión de los periféricos es bastante sencilla. Las líneas RA0-RA4 se conectan a E0-E4 y RB4 se conecta con TxD del interfaz serie y RB5 con RxD del mismo interfaz. Puede observarse un esquema de dichas conexiones en la Figura T6.2.

Figura T6.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER6.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. 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.

430

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

Figura T6.3. Fotografía del montaje de la experiencia en la PIC School para la comunicación serie.

Al mismo tiempo, se deberá configurar el programa HyperTerminal de Windows, que se encuentra en Inicio → Todos los programas → Accesorios → Comunicaciones → HyperTerminal, para conseguir una comunicación serie a 9.600 baudios, 2 bits de stop, sin control de flujo ni bits de paridad. Al ejecutar el programa, aparecerá en pantalla el estado de los bits RA0-RA4, según la Figura T6.3.

Figura T6.4. Recepción del estado de la puerta A en el PC a través del HyperTerminal.

COMUNICACIÓN RS-232

431

EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. Gracias a las rutinas ya creadas dentro del compilador, el código es mucho más sencillo que la misma solución en Ensamblador. #include #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; i--) printf(“ RA%1u=%c”,i,bit_test(port_a,i)+‘0’); putc(‘\n’); putc(‘\r’); } }

o

7.

Manejo del LCD

TALLER

T7.1. INTRODUCCIÓN A continuación, se presenta el desarrollo de una aplicación para el manejo del LCD de la tarjeta de entrenamiento PIC School. Para tratar de facilitar el manejo de este dispositivo, se ha incluido un fichero llamado LCDXXX.INC que contiene varias rutinas con código de inicialización, envío de datos, etc.

T7.2. TALLER 7: VISUALIZANDO MENSAJES POR EL LCD ENUNCIADO Mediante la comunicación serie estudiada en el taller anterior, se pretende recoger las teclas pulsadas a través del PC, enviarlas a la PIC School, devolverlas a modo de eco al PC y, por último, mostrarlas en el LCD. Una aplicación similar se resolvió en la sección dedicada al PIC12F508. MATERIALES NECESARIOS • • • • •

PIC School. PIC16F84A. Cables de conexión. Cable de conexión serie con el PC. Programa de comunicaciones HyperTerminal (u otro similar).

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR La Figura T7.1 resume el ciclo de ejecución del programa propuesto. 433

434

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

Figura T7.1. Organigrama del Taller 7.

El programa hace uso de las rutinas almacenadas en el fichero RS232LOW.INC y LCDXXX.INC. El código fuente del programa principal es el siguiente: ; ; 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

CLKIN BAUDIOS T_MODO R_MODO T_Nbit R_Nbit Sbit Lcd_var Rs232_var Líneas Caracteres

equ equ equ equ equ equ equ equ equ equ equ

org goto org

.4000000 .9600 1 1 8 8 2 0x0c 0x0e 0x13 0x14 0x00 Inicio 0x05

435

;Frecuencia de trabajo ;Velocidad de comunicación ;Transmite primero bit LSB ;Recibir primero bit LSB ;Transmite caracteres de 8 bits ;Recibe caracteres de 8 bits ;Transmite 2 bits de stop ;Inicio variables para rutinas LCD ;Inicio variables para rutinas RS232 ;Contador de líneas ;Contador de caracteres ;Vector de reset ;Salvar el vector de interrupción

include “RS232LOW.INC” ;Incluir rutinas de comunicación include “LCD_CXX.INC” ;Incluir rutinas LCD Inicio: bsf movlw

STATUS,RP0 b’10001111’

movwf movlw movwf bcf

OPTION_REG b’11101111’ TRISB STATUS,RP0

call call movlw call

UP_LCD LCD_INI b’00001111’ LCD_REG

LCD_HOME movlw call movlw movwf movlw movwf

b’00000001’ LCD_REG .16 Caracteres .2 Líneas

Loop

;Selecciona página 1 de datos ;Preescaler de 128 para el WDT. ;Pull_Up Off ;RB5 entrada y RB4 salida ;Selecciona página 0 de datos ;Inicia E/S para el módulo LCD ;Inicialización del módulo LCD ;LCD on, Cursor On y Blink On ;Borra LCD y Home ;Inicia contador de caracteres ;Inicia contador de líneas

clrwdt bsf movlw movwf bcf

STATUS,RP0 b’11101111’ TRISB STATUS,RP0

;Selecciona página 1

bsf bsf

Txd_pin Rxd_pin

;Línea de transmisión a “1” ;Línea de recepción a “1”

call movf movwf call call movlw

RxD Rxdreg,W Txdreg TxD UP_LCD .13

;Espera a recibir un carácter ;Lee el carácter recibido

;RB5 entrada y RB4 salida

;Retransmite carácter recibido (ECO) ;Reconfigura E/S para el LCD

436

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

subwf btfsc goto movf call

Rxdreg,W STATUS,Z LCD_HOME Rxdreg,W LCD_DATO

decfsz Caracteres,F goto Loop movlw movwf movlw call decfsz goto goto

.16 Caracteres 0xc0 LCD_REG Líneas,F Loop LCD_HOME

end

;Mira si carácter recibido es CR ;No ;Sí, borra LCD ;Visualiza carácter en el LCD ;Decrementa contador de caracteres

;Inicia contador de caracteres ;Selecciona segunda línea del LCD ;Se han completado 2 líneas ;No ;Sí, borrar pantalla ;Fin del programa fuente

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_7.ASM junto con los ficheros RS232LOW.INC y LCDXXX.INC que contienen las rutinas necesarias para el manejo del LCD y de la interfaz serie. 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 conectarse a dos periféricos distintos. Dichas conexiones quedan resumidas en la Figura T7.2. GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER_7.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. Al mismo tiempo, se deberá configurar el programa HyperTerminal de Windows, que se encuentra en Inicio → Todos los programas → Accesorios → Comunicaciones → HyperTerminal, para conseguir una comunicación serie a 9.600 baudios, 2 bits de stop, sin control de flujo ni bits de paridad.

MANEJO DEL LCD

437

Figura T7.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

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

Al ejecutar el programa, aparecerán en la pantalla LCD de la PIC School aquellas teclas que se pulsen en el PC. EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. Gracias a las rutinas ya creadas, el código es mucho más sencillo que la misma solución en Ensamblador. #include #use delay(clock=4000000) #use RS232(BAUD=9600, BITS=8, RESTART_WDT)

PARITY=N,

XMIT=PIN_B4,

RCV=PIN_B5,

#use fast_io(A) #use fast_io(B) #include #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.

port_b = 0b00010000; // TxD a “1”. Inactiva. set_tris_b(0b00100000); // PIN_B4 = Salida(TxD), PIN_B5 = Entrada(RxD) c = getc(); putc(c); lcd_gotoxy(x,y); lcd_putc(c); x++; if(x>16) { x=1; y++; if(y>2) y=1; } } }

Generación de números aleatorios

o

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

T8.2. TALLER 8: GENERANDO NÚMEROS AL AZAR 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

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR La Figura T8.1 resume el funcionamiento del programa propuesto. Principalmente, se configuran las puertas como entrada y salida y se activa el TMR0. A continuación, se espera un pulso en la patita RA0 y cuando se produce se muestra el valor del TMR0 por la Puerta B.

Figura T8.1. Organigrama del Taller 8.

GENERACIÓN DE NÚMEROS ALEATORIOS

441

El código fuente del programa principal es el siguiente: ; ; 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. List p=16F84 ;Tipo de procesador include “P16F84.INC” ;Definiciones de registros internos Número equ Delay_Cont equ org goto org

0x0c 0x0d

;Número aleatorio ;Contador de intervalos

0x00 Inicio 0x05

;Vector de Reset ;Salva vector de interrupción

;***************************************************************** ;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 movlw movwf Delay_20_ms_1 btfss goto return

INTCON,T0IF ;Desconecta el flag de rebosamiento 0xb1 ;Complemento hex. de 78 TMR0 ;Carga el TMR0 clrwdt ;Refrescar el WDT INTCON,T0IF ;Rebosamiento del TMR0 Delay_20_ms_1 ;Todavía no

;****************************************************************** ;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 movlw movwf Intervalo clrwdt btfss goto decfsz goto return

INTCON,T0IF 0x3c TMR0

Inicio

clrf bsf clrf movlw movwf movlw movwf bcf

PORTB STATUS,RP0 TRISB b’00011111’ TRISA b’00000111’ OPTION_REG STATUS,RP0

clrwdt btfss goto movf movwf call

PORTA,0 Loop TMR0,W Número Delay_20_ms

Loop

RA0_1

;Desconecta el flag de rebosamiento ;Complemento hex. de 195 ;Carga el TMR0 ;Refrescar el WDT INTCON,T0IF ;Rebosamiento del TMR0 Intervalo ;Todavía no Delay_Cont,F ;Decrementa contador de intervalos Delay_var ;Repite el intervalo de 50 ms

clrwdt btfsc PORTA,0 goto RA0_1 movf Numero,W movwf

PORTB

movlw movwf call clrf goto

d’60’ Delay_cont Delay_var PORTB Loop

end

;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida ;Puerta A se configura como entrada ;Preescaler de 256 para el TMR0 ;Selecciona banco 0 ;Refrescar el WDT ;Activado RA0 ;Todavía no ;Ahora sí. ;Captura valor TMR0 (N.o aleatorio) ;Elimina rebotes ;Refresca el WDT ;Desactivado RA0 ;Todavía no ;Se ha producido un impulso en RA0, ;se lee ;el valor capturado del TMR0 ;(N .o aleatorio) y se saca por los leds ;de la Puerta B ;Inicia variable de temporización ;Temporiza 3 segundos ;Desconecta las salidas ;Fin del programa fuente

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ñadiendo 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 La conexión de los periféricos necesarios es muy sencilla y se presenta en la Figura T8.2. Es recomendable utilizar el pulsador E7 en vez de los interruptores E0-E3

Figura T8.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER8.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. Una vez puesto en marcha el taller, tan sólo será necesario accionar el pulsador E7. EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación.

444

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

Figura T8.3. Fotografía del montaje de la experiencia en la PIC School.

// 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écnicas, la empleada para obtener el número // consiste en capturar el valor del TMR0 en un momento dado. #include #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

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

445

Manejo de la memoria EEPROM de datos

o

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 necesiten 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 mensajes que más adelante se visualizarán por la pantalla LCD.

T9.2. TALLER 9: GRABACIÓN DE MENSAJES EN LA MEMORIA EEPROM 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

ORGANIGRAMA Y PROGRAMA FUENTE EN ENSAMBLADOR

Figura T9.1. Organigrama del Taller 9.

MANEJO DE LA MEMORIA EEPROM DE DATOS

449

El código fuente del programa principal es el siguiente: ; ; 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 include “P16F84.INC” Lcd_var equ

0x0c

Delay_cont Temporal_1 Temporal_2 Cur_pos

equ equ equ equ

org goto org

0x0e 0x0f 0x10 0x11

0x00 Inicio 0x05

;Tipo de procesador ;Definiciones de registros internos ;Variables (2) de las rutinas de ;manejo del LCD ;Variable para la temporización ;Variable temporal ;Variable temporal ;Posición del cursor ;Vector de Reset ;Salva vector de interrupción

include «LCD_Cxx.inc” ;Incluye rutinas de manejo del LCD ;****************************************************************** ;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 movlw movwf Delay_20_ms_1 btfss goto bcf return

INTCON,T0IF 0x63 TMR0 clrwdt INTCON,T0IF Delay_20_ms_1 INTCON,T0IF

;Desconecta el flag de rebosamiento ;Complemento hex. de 156 ;carga el TMR0 ;Refrescar el WDT ;Rebosamiento del TMR0 ;Todavía no ;Ahora sí, reponer el flag

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 movlw movwf Intervalo clrwdt btfss goto decfsz goto return

INTCON,T0IF 0x3c TMR0 INTCON,T0IF Intervalo Delay_Cont,F Delay_var

;Desconecta el flag de rebosamiento ;Complemento hex. de 195 ;Carga el TMR0 ;Refrescar el WDT ;Rebosamiento del TMR0 ;Todavía no ;Decrementa contador de intervalos ;Repite el intervalo de 50 ms

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

Wait

bsf bsf movlw movwf movlw movwf bsf bcf btfss goto bcf bcf return

STATUS,RP0 EECON1,WREN b’01010101’ EECON2 b’10101010’ EECON2 EECON1,WR EECON1,WREN EECON1,EEIF Wait EECON1,EEIF STATUS,RP0

;Selecciona banco 1 ;Permiso de escritura

;Secuencia establecida por Microchip ;Orden de escritura ;Desconecta permiso de escritura ;Testear flag de fin de escritura ;Reponer flag de fin de escritura ;Selección banco 0

;****************************************************************** ;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. EE_Read

bsf STATUS,RP0 ;Selección de banco 1 bsf EECON1,RD ;Orden de lectura bcf STATUS,RP0 ;Selección de banco 0 return ;****************************************************************** ; Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b’00011000’

MANEJO DE LA MEMORIA EEPROM DE DATOS

Loop

movwf movlw movwf

TRISA b’00000111’ OPTION_REG

;RA0-RA2 salidas, RA3-RA4 entradas

bcf movlw movwf call movlw call movlw call

STATUS,RP0 0x80 Cur_Pos LCD_INI b’00000001’ LCD_REG b’00001110’ LCD_REG

;Selecciona banco 0

clrf

EEADR

;Envía instrucción: LCD ON, Cursor ;ON y blink OFF ;Dirección inicial de la EEPROM

btfss goto

PORTA,4 Reproducir

;Modo programación ;No, modo de reproducción

Programar movlw movwf Programar_1 btfss goto movf call movf call movlw movwf call incf btfss goto goto

0x20 Temporal_1 PORTA,3 Grabar Cur_Pos,W LCD_REG Temporal_1,W LCD_DATO .10 Delay_cont Delay_var Temporal_1,F Temporal_1,7 Programar_1 Programar

Grabar

Delay_20_ms Temporal_1,W EEDATA EE_Write EEADR,F EEDATA EE_Write Cur_pos,F

Grabar_1

call decf movwf call incf clrf call incf clrwdt btfss goto call goto

PORTA,3 Grabar_1 Delay_20_ms Loop

;Preescaler de 256 para el TMR0

;Posición inicial del cursor ;Secuencia de inicio del LCD ;Borra LCD y Home

;Primer carácter ASCII ;Grabar el byte en EEPROM ;Sí ;Coloca el cursor ;Visualiza el carácter ;Temporiza 0.5 segundos ;Siguiente carácter ASCII ;Es el último carácter ASCII ;No ;Sí, empezar desde el primero ;Elimina rebotes ;Dato a grabar en la EEPROM ;Graba el carácter ;Siguiente dirección EEPROM ;Graba 0x00 ;Siguiente posición del cursor ;Refrescar el WDT ;Esperar a que RA3 vuelva a 1 ;Eliminar rebotes ;Siguiente carácter del mensaje

Reproducir movlw call movlw call clrf

b’00000001’ LCD_REG b’00001100’ LCD_REG EEADR

;Borra LCD y Home ;LCD = ON, cursor = OFF ;Dirección inicial EEPROM

451

452

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

Reproducir_0 call movf btfsc goto movf call incf goto

clrwdt EE_Read EEDATA,F STATUS,Z Reproducir_1 EEDATA,W LCD_DATO EEADR,F Reproducir_0

Reproducir_1 movwf call

movlw .40 Delay_cont Delay_var

;Refresco del WDT ;Lee carácter de la EEPROM ;Es el último del mensaje (0x00) ;Sí ;Visualiza el carácter ;Siguiente carácter

;Mantiene el mensaje 2 segundos

;********************** SECUENCIA DE PARPADEO ********************* Blink movlw .6 movwf Temporal_2 ;Inicia contador de parpadeos Blink_1 movlw b’00001100’ call LCD_REG ;LCD en ON movlw .5 movwf Delay_cont call Delay_var ;Temporiza 0.25 segundos movlw b’00001000’ call LCD_REG ;LCD en OFF movlw .5 movwf Delay_cont call Delay_var ;Temporiza 0.25 segundos decfsz Temporal_2,F goto Blink_1 ;Repite el parpadeo movlw .20 movwf Delay_cont call Delay_var ;Temporiza 1 segundo goto Loop end

;Fin del programa fuente

Una de las partes del programa más interesante puede estar en las rutinas de grabació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 La conexión de los periféricos necesarios es similar a otros talleres donde se ha usado el LCD. La única salvedad es que en esta ocasión también se hace uso de los interruptores E0 y E1 conectados a RA3 y RA4 para la selección y grabación de los caracteres. Estas conexiones quedan resumidas en la Figura T9.2.

Figura T9.2. Conexión de líneas del PIC16F84A usadas en la experiencia.

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

GRABACIÓN DEL PROGRAMA Y VERIFICACIÓN DEL FUNCIONAMIENTO Una vez generado el fichero TALLER9.HEX mediante la compilación en el entorno MPLAB IDE (Project → Build All), a continuación se accede al programa WinPic800 para la grabación del mismo en la placa PIC School. En primer lugar, se deberá grabar el mensaje que después se mostrará en pantalla. Para ello, se colocará el interruptor E1 conectado a RA4 a nivel lógico 1 y también RA3 a nivel lógico 1. En pantalla irán apareciendo los distintos caracteres ASCII disponibles. Cuando se quiera seleccionar uno de ellos, se pasará RA3 a nivel lógico 0. Volviendo a ponerlo en nivel lógico 1, el programa permitirá capturar el siguiente carácter. Es importante iniciar la ejecución del programa con RA3 y RA4 a nivel lógico 1 para poder observar adecuadamente el funcionamiento del programa. Una vez seleccionados todos los caracteres deseados, pasando RA4 a 0 se mostrarán todos los caracteres anteriores por el LCD. EL PROGRAMA EN C A continuación, se proporciona el programa en C a partir del cual se obtiene el programa ejecutable tras su compilación. // El manejo de la pantalla LCD y EEPROM. #include #use delay(clock=4000000,RESTART_WDT) #include #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); 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);

// Sin cursor

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); for(i=0; i 99) turno = 1; write_eeprom(0,turno); Visualizar_Turno(); while(input(PIN_A4)) restart_wdt(); delay_ms(20); } } }

465

TERCERA PARTE Los módulos microcontroladores BASIC Stamp y el lenguaje PBASIC

CAPÍTULO

Los sellos mágicos de Parallax

14

14.1. ACERCANDO LA TECNOLOGÍA No suele ser habitual coincidir los planteamientos de dos generaciones ni la opinión de los profesionales que se dedican a aplicar la tecnología y los que se encargan de enseñarla. Sin embargo, en este tema los autores coinciden plenamente: «Los módulos BASIC Stamp de Parallax constituyen el camino más sencillo y asequible para diseñar sistemas basados en microcontroladores». En el mundo de la enseñanza es frecuente encontrar a jóvenes que estudian carreras de ingeniería que no están convencidos de su vocación. La labor del ingeniero es una de las más apasionantes a las que el ser humano puede dedicarse. Es el encargado de diseñar e implementar los proyectos que le proponen. Es un gran creador de realidades que sirven para mejorar la calidad de vida de todos. La vocación por la ingeniería debe fraguarse en los jóvenes de quince a dieciocho años, y para conseguirlo, sólo hay que demostrarles prácticamente en qué consiste nuestra profesión. Los módulos de Parallax no precisan tener grandes conocimientos de informática ni de electrónica, basta un poco de interés para generar en la juventud una inclinación y admiración por la ingeniería. Dotar a un laboratorio universitario de formación profesional o IES de un equipo para aprender a programar y diseñar con estos dispositivos exige muy poco presupuesto. En el campo profesional, existen dos colectivos a los que estas herramientas les interesa de sobremanera: el de los neófitos y el de los experimentados. Para los primeros, entre los que se encuentran los aficionados que no han tenido oportunidad de conocer la informática y la microelectrónica en profundidad, ésta es la única oportunidad para adentrarse en este mundo del diseño programado sin necesidad de realizar un esfuerzo intelectual ni económico. Para los técnicos experimentados, la filosofía del trabajo con los módulos BASIC Stamp les proporciona la solución más eficaz para desarrollar sus proyectos con la máxima rapidez y seguridad. La necesidad de optimizar los tiempos de desarrollo de los proyectos que realizaban basados en microcontroladores impulsó a dos ingenieros americanos, en la década de los ochenta del siglo pasado, a construirse un módulo hardware que simplificase el desarrollo electrónico y un lenguaje de programación que se adaptara a sus diseños y fuese asequible para cualquier técnico con escasos conocimientos en electrónica e informática. Mejoraron la productividad hasta tal punto que tuvieron la idea de comercializar las herramientas que 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 software 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 profundizar 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 demostrar 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.

14.2. EL NACIMIENTO Y DESARROLLO DE UNA EMPRESA El diseño ideal basado en microcontroladores exige un hardware semiacabado y un lenguaje de programación sencillo y potente. La guinda al pastel la pondría la posibilidad de poder grabar un programa, probarlo y volverlo a regrabar con las modificaciones oportunas para poder comprobar su efectividad inmediatamente. Si estas tareas sólo precisan un PC y se pueden realizar muchos miles de veces con el mismo módulo, dispondríamos de una codiciada herramienta de trabajo. Todas esas características las echaba de menos un joven estudiante llamado Chip Gracey cuando en 1980 se formaba al mismo tiempo que enredaba con el lenguaje BASIC sobre microcomputadores Apple II. Después, su afición le empujó a analizar y modificar el código fuente de electrodomésticos y videojuegos para inventar nuevas aplicaciones. Al acabar sus estudios en 1986, se asoció con su amigo Lance Walley para abrir desde su casa la empresa Parallax, cuyos primeros catálogos estaban formados por programadores para el microcontrolador 8051 y digitalizadores de sonido para Apple II. Luego se fue agrandando la gama de productos construidos con microcontroladores, especialmente del modelo PIC. Como su labor de ingeniería les exigía optimizar los tiempos de desarrollo de los proyectos, idearon un hardware que contenía el núcleo del sistema controlador (microcontrolador, reloj, reset, alimentación, memoria para programa y adaptación al PC). Dicho hardware se controlaba con un revolucionario lenguaje de programación derivado del BASIC, pero con instrucciones específicas para aprove-

LOS SELLOS MÁGICOS DE PARALLAX

471

Figura 14.1. El módulo BS1-IC es el primero de la serie y el más sencillo.

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 comercializan 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 microcontrolador 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 automatizació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 montado 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 programas 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.

14.2.1. El módulo BS2e-IC Este módulo utiliza un microcontrolador Scenix SX28AC a 20 MHz del fabricante UBICOM y proporciona mayor capacidad de memoria RAM para guardar variables y de memoria EEPROM para almacenar programas de hasta cuatro mil instrucciones. Además del repertorio de comandos PBASIC que ejecutaba el módulo BS2-IC, éste soporta tres más: GET, PUNT y RUN. En la Figura 14.3 se muestra una fotografía de este módulo.

Figura 14.3. Fotografía del módulo BS2e-IC.

14.2.2. El módulo BS2sx-IC Con el mismo microcontrolador que el módulo anterior, pero funcionando a una frecuencia de 50 MHz, este modelo puede ejecutar diez mil instrucciones PBASIC por segundo. Acepta los mismos comandos que el módulo BS2e-IC.

Figura 14.4. Fotografía del módulo BS2sx-IC.

LOS SELLOS MÁGICOS DE PARALLAX

473

14.2.3. Módulos BS2p24-IC y BS2p40-IC El BS2p24-IC utiliza el microcontrolador Scenix SX48AC a 20 MHz Turbo y está encapsulado con veinticuatro patitas en formato DIP. Hay otro modelo de cuarenta patitas que sólo se diferencia en que posee treinta y dos líneas de E/S en lugar de las dieciséis que posee el de veinticuatro patitas. Tienen una elevadísima velocidad de ejecución de instrucciones y soportan un repertorio de cincuenta y cinco comandos PBASIC, destacando algunos específicos para la adaptación en paralelo de pantallas LCD, de adaptación de dispositivos I2C y de componentes de Dallas Semiconductor conectados por la interfaz One Wire.

Figura 14.5. Fotografía del módulo BS2p24-IC.

Finalmente, se presenta una tabla que recoge las características más importantes de los diversos módulos microcontroladores de Parallax. Característica

BS1-IC

BS2-IC OEM BS2-IC

BS2e-IC

BS2sx-IC

BS2p-IC

Encapsulado

PCB de 14 patas SIP

24 patas DIP

24 patas DIP

24 patas DIP

24/40 patas DIP

0°-70 °C

0°-70 °C

0°-70 °C

Temperatura trabajo Microcontrolador Frecuencia Velocidad ejecución RAM Scratch Pad RAM EEPROM

0°-70 °C

0°-70 °C

PIC16C56

PIC16C57

4 MHz

20 MHz

2.000 instrucciones/s

Scenix SX28AC Scenix SX28AC Scenix SX48AC 20 MHz

50 MHz

20 MHz Turbo

4.000 4.000 10.000 12.000 instrucciones/s instrucciones/s instrucciones/s instrucciones/s

16 bytes

32 bytes

32 bytes

32 bytes

38 bytes

N/A

N/A

64 bytes

64 bytes

128 bytes

256 bytes80 instrucciones

2 KB-500 instrucciones

8 × 2 KB-4.000 instrucciones

8 × 2 KB-4.000 instrucciones

8 × 2 KB-4.000 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

5-15VDC

5-15VDC

5-12VDC

5-12VDC

5-12VDC

Alimentación

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

14.3. EL MICROCONTROLADOR ES EL CEREBRO DEL SISTEMA La estructura física de los módulos BASIC Stamp puede descomponerse en cinco grandes bloques: 1. 2. 3. 4. 5.

Sección del microcontrolador. Sección de la memoria EEPROM. Sección de la E/S de la información serie del PC. Sección del regulador de tensión. Sección de las líneas de E/S de información para el mundo exterior.

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 traducción y ejecución de las instrucciones PBASIC.

Ciñéndonos al módulo OEM BS2-IC, todas las operaciones que realiza están gobernadas 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 guardadas 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.

14.3.1. Características generales del PIC16C57 Se trata de un microcontrolador de 8 bits, es decir, maneja datos de 1 byte de longitud. Pone a disposición del usuario una memoria RAM para guardar datos de 72 bytes de capacidad. Para contener el programa de trabajo posee una memoria no volátil de 2K posiciones de 12 bits cada una, ya que cada instrucción máquina que reconoce el procesador tiene 12 bits de longitud. Esto significa que el máximo tamaño del programa de instrucciones máquina (no PBASIC) es de 2.048. En el módulo OEM BS2-IC, el programa que tiene grabado el PIC, además de contener el intérprete de PBASIC, se

476

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

Figura 14.9. Recursos fundamentales que caracterizan al PIC16C57.

encarga de recibir y transmitir la información serie con el PC, la escritura y lectura de la EEPROM donde se guarda el programa PBASIC y el control de las patitas de entrada y salida. Apréciese que en la memoria de programa del PIC no reside el programa PBASIC editado en la pantalla del PC para la aplicación a desarrollar. Dicho programa se graba en la EEPROM 24LC16B, desde donde el PIC va recibiendo una a una esas instrucciones y las va traduciendo a instrucciones máquina y ejecutándolas. Microchip dispone de una versión del PIC16C57 cuya memoria de programa es de tipo EPROM que puede grabarla el usuario con un grabador y borrarla para volverla a reescribir. El borrado hay que hacerlo sometiendo el circuito integrado a rayos ultravioleta, por lo que dispone de una ventana en su parte frontal. Hay una versión OTP, barata, que la puede escribir el usuario una vez nada más. El módulo OEM BS2-IC soporta el modelo PIC16CR57, cuya memoria es de tipo ROM, de sólo lectura. Se escribe en fábrica y sólo se puede leer, si se permite. Además de las memorias, el PIC16C57 posee un temporizador de 8 bits para controlar el tiempo denominado TMR0. Para medir el tiempo, el TMR0 puede usar los impulsos de reloj del microcontrolador o bien los que se introducen desde el exterior por la patita RTCC. Como en el módulo de prácticas OEM BS2-IC no se usa el TMR0 con impulsos externos, la patita RTCC se envía a tierra. Finalmente, el PIC16C57 maneja veinte líneas de E/S implementadas físicamente mediante veinte patitas por las que se envía y se recibe información a y desde el exterior a lo largo del procesamiento de las instrucciones del programa. Las líneas de E/S se distribuyen en grupos que se llaman Puertas A, B y C. La Puerta A sólo tiene cuatro líneas que se implementan físicamente por las patitas RA0-RA3, la Puerta B tiene ocho con las patitas RB0-RB7 y la Puerta C otras ocho con RC0-RC7.

14.3.2. Diagrama de conexionado Aunque el PIC16C57 se comercializa con varios encapsulados, en el OEM BS2-IC se emplea el DIP de veintiocho patitas en doble hilera. Este módulo utiliza componentes convencionales y cualquier avería la puede resolver el propio usuario sustituyendo el que

LOS SELLOS MÁGICOS DE PARALLAX

477

Figura 14.10. Diagrama de conexionado del PIC16C57 con encapsulado DIP.

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 reemplazarse 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 comprendida entre +2,5 y +5,5 VDC y que en el módulo de prácticas se usa +5 VDC, obtenida de la salida del regulador de tensión. Los terminales de un resonador cerámico que oscila a 20 MHz se aplican a las patitas 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 patita; 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.

14.4. LA MEMORIA EEPROM. PRESENTACIÓN DEL BUS I2C En todos los módulos BASIC Stamp existe una memoria EEPROM independiente en la que se vuelca el programa PBASIC confeccionado en el PC. Después, desde la EEPROM se van pasando una a una las instrucciones al PIC para que allí se interpreten y se ejecuten. Esta memoria EEPROM se comunica con el PIC en formato serie y según el protocolo de comunicación del bus I2C.

478

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

Figura 14.11. Pueden existir 128 dispositivos conectados al bus I2C y en todo momento hay uno que actúa como maestro.

El bus I2C (correctamente debe escribirse I2C) lo desarrolló Philips Corporation para resolver sus propias necesidades en la interconexión de circuitos integrados. I2C significa «interconexión de circuitos integrados». Su gran éxito radica en su sencillez, ya que sólo emplea dos líneas para comunicarse con los dispositivos que intervienen en este protocolo y que pueden llegar a 128 en un mismo sistema. La línea bidireccional SDA transfiere los bits de información serie y la SCL los impulsos de reloj para sincronizar la información entre quien la manda y la recibe. En cada momento hay un dispositivo que funciona como maestro y que determina las características de la transferencia y genera los impulsos de reloj por SCL. Cada uno de los 128 posibles esclavos responde a una dirección formada por 7 bits (A0-A6) y el maestro, al iniciar una transferencia, es lo primero que envía en su comunicación. Después de especificar el maestro la dirección del esclavo con el que se quiere comunicar, envía la orden de lectura o escritura y luego otras complementarias. Existen muchos circuitos integrados con diversas funciones para el bus I2C y los fabricantes determinan por hardware la dirección a la que responden y sus características técnicas. Sin embargo, es habitual que la dirección a la que responde un circuito integrado I2C no esté totalmente definida. Se suelen dejar sin especificar las líneas de menos peso de

LOS SELLOS MÁGICOS DE PARALLAX

479

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

14.4.1. Lectura y escritura de la memoria EEPROM La EEPROM 24LC16B se carga con el programa «tokenizado» PBASIC generado en el PC por el editor STAMP BASIC y que llega al conector DB9 del módulo Parallax desde el puerto serie. La grabación en la EEPROM se producirá mediante la introducción en serie de la correspondiente información a través de la patita SDA. Una vez cargado el programa PBASIC en la EEPROM, operación controlada por el PIC, las instrucciones salen una a una hacia el microcontrolador para que las interprete y las ejecute. Tanto la entrada y grabación del programa PBASIC en la EEPROM como la posterior lectura de las instrucciones las controla el microcontrolador que actúa como maestro en el bus I2C, por lo que también es él quien genera los impulsos de reloj por la línea SCL para sincronizar la transferencia. La información procedente del PC se introduce al módulo de Parallax por el conector DB9 y atraviesa un circuito de adaptación de niveles con tres transistores (Q1, Q2 y Q3) para finalmente cargarse en la EEPROM a través del PIC16C57. El circuito transistorizado actúa de forma bidireccional porque existen instrucciones PBASIC, como DEBUG, que envían información del módulo al PC. La misión de dicho circuito transistorizado es transformar los niveles con los que trabaja el puerto serie del PC (RS-232-C), que

480

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

Figura 14.13. El microcontrolador controla la recepción y transmisión de la información con el PC y la memoria EEPROM.

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

14.5. SECCIÓN DE LA ENTRADA/SALIDA SERIE DEL PC En el PC se edita el programa PBASIC y por su puerto serie se envía al módulo de Parallax. También desde dicho módulo hay ocasiones en las que se envía información al PC, como sucede con la instrucción DEBUG. La entrada y salida de esta información serie con el PC se acondiciona mediante un circuito transistorizado que recoge y entrega el microcontrolador por sus patitas RA2 y RA3. Las instrucciones PBASIC que llegan desde el PC las recoge el PIC por su patita RA2 y luego las envía por RA0 a la EEPROM, donde queda almacenado.

14.6. SECCIÓN DEL REGULADOR DE TENSIÓN Está compuesta por el circuito integrado LM2940-5.0, que es un regulador de tensión a + 5 VDC. También existe un condensador electrolítico auxiliar. Por la patita Vin del regulador se recibe una tensión que puede oscilar entre +5,5 y +15 VDC. Por la patita de sali-

LOS SELLOS MÁGICOS DE PARALLAX

481

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

14.7. SECCIÓN DE LAS LÍNEAS DE E/S PARA INFORMACIÓN CON EL MUNDO EXTERIOR El módulo OEM BS2-IC dispone de veinte patitas por las que se aplica la alimentación eléctrica, la señal de reset y las líneas de E/S de las Puertas B y C del microcontrolador y por las que se recibe y se saca la información que se maneja en el procesamiento de las instrucciones del programa. Las patitas Vdd, GND y Vin corresponden a las descritas del regulador de tensión LM2940-5.0. Cuando por la patita Vin se aplica una tensión comprendida entre +5,5 y +15 VDC, el citado regulador alimenta al circuito electrónico del módulo con +5 VDC regulados y presenta dicha tensión en la patita Vdd (20) del módulo para su posible utilización por circuitos o periféricos externos. Cuando se dispone de +5 VDC regulados,

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 programa PBASIC. Cada una de las Puertas B y C posee ocho líneas de E/S (RB0-RB7 y RC0RC7) 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 cambiar su actuación si lo permiten los periféricos a los que controla.

14.7.1. La importancia del consumo Cada línea de E/S del microcontrolador puede absorber una corriente máxima de 25 mA y puede suministrar hasta 20 mA. Además, el conjunto de líneas de una puerta tiene una corriente máxima admisible tanto si entra como si sale. Las puertas B y C pueden absorber un máximo de 150 mA entre todas las líneas de cada puerta y pueden suministrar un máximo de 100 mA. Esta limitación obliga a controlar la máxima corriente que disipa cada puerta. Según la conexión de los periféricos, la corriente puede ser de entrada o de salida. Así, si en el interruptor de la figura se conecta el terminal libre a tierra, cuando está abierto por la patita del microcontrolador se absorbe una corriente que dependerá del valor de la resistencia.

LOS SELLOS MÁGICOS DE PARALLAX

483

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.

Cuando por una patita del microcontrolador se gobierna el encendido y apagado de un led, la resistencia de absorción determina la corriente que circula y la luminosidad del mismo.

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.

Si se eleva el valor de la resistencia colocada en serie con el diodo led, la corriente que lo atraviesa baja. Así, si la resistencia fuese de 270 ohmios, la corriente quedaría reducida a 11 mA y descendería la luminosidad del led. Cuando se colocan varios periféricos en las patitas del módulo hay que comprobar las limitaciones existentes por línea y por puerta para evitar averías y fallos de funcionamiento. Así, por ejemplo, si interesa colocar ocho leds en las líneas de una puerta, como el valor máximo de la corriente suministrada es de 100 mA, el consumo de cada led debería ser inferior a 13 mA.

PBASIC, el lenguaje más fácil del mundo. Prácticas y programas

CAPÍTULO

15

15.1. BASIC: EL LENGUAJE MÁS FÁCIL DEL MUNDO Aprender a manejar el lenguaje BASIC para computadoras es una labor muy sencilla, tan simple como escribir (en inglés). En BASIC, las instrucciones coinciden con el nombre en inglés de la operación que se debe llevar a cabo. Por ejemplo, escribir o visualizar un valor en la pantalla utiliza la instrucción PRINT; para introducir por el teclado un valor se emplea la instrucción INPUT, y si se desea realizar una suma, basta con poner el signo + de la misma. Un lenguaje para una computadora es un conjunto de instrucciones y comandos que la máquina es capaz de interpretar y ejecutar. Fíjese en un programa en BASIC. 10 20 30 40

INPUT a INPUT b PRINT a+b END

‘se introduce por teclado a ‘se introduce por teclado b ‘se visualiza el valor a+b ‘fin del programa

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 finalmente, 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 finalidad de simplificar la programación.

15.1.1. Ventajas e inconvenientes Se trata de un lenguaje muy sencillo que está orientado a las personas y por eso sus instrucciones recuerdan las palabras inglesas con las que se describe la operación que realizan. Dado su parecido con el álgebra elemental, es muy útil para resolver problemas técnicos de ingeniería, aunque también es muy cómodo en las aplicaciones que manejan mucha información literal, típico en los negocios. 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 posibilidad 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 procedimientos 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 regresar a dicho programa principal desde la rutina trayendo resultados obtenidos en esta última. El lenguaje BASIC no soporta completamente estas estructuras en los programas.

15.1.2. Los lenguajes usados para microcontroladores «Un microcontrolador es un computador metido dentro de un circuito integrado.» Son computadores muy pequeños y baratos, por lo que se utilizan para controlar muchos productos comunes en los que se halla incrustado dentro de los mismos, como sucede con el teléfono móvil, el teclado y el ratón del computador, etc. Además, al ser tan pequeños, tienen una potencia limitada y sólo sirven para realizar una tarea. En el siglo XXI, la realización de proyectos para aplicar los microcontroladores en el gobierno y automatización de multitud de productos y procesos se presenta como una ingente labor que va a requerir la colaboración de multitud de profesionales y va a ofrecer una oportunidad inigualable para quienes estén preparados adecuadamente. Los proyectos con microcontroladores exigen un trabajo con hardware consistente en adaptar las patitas del microcontrolador a los periféricos externos que hay que controlar. Además, también requieren la confección de un programa con las instrucciones precisas para que su ejecución origine el procesamiento de la información para obtener los resultados apetecidos. Para construir los programas de los microcontroladores se usan tres lenguajes: 1. Lenguaje Ensamblador, de bajo nivel 2. Lenguaje C, de alto nivel 3. Lenguaje BASIC, de alto nivel 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 Ensamblador, 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 microcontroladores de 8 bits que manejamos en este libro consisten en sumar, restar, hacer operaciones 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 instrucciones 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 correspondientes 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 arquitectura 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 denominan 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? 10 20 30 40

INPUT R LET S=3.14*R*R PRINT S,R END

‘se introduce el radio ‘se calcula el área ‘se escribe S y R ‘fin del programa

Como se ha estudiado en el capítulo anterior, el modo de funcionamiento de los módulos BASIC Stamp está basado en depositar el programa confeccionado en PBASIC y editado en el PC en una memoria EEPROM que puede leerse y borrarse para volver a escribirse un millón de veces. Después, en el interior del módulo y de forma automática, se va pasando el programa ordenadamente, instrucción a instrucción, a un microcontrolador PIC en cuya memoria está grabado un programa intérprete que traduce cada instrucción PBASIC en las instrucciones máquina correspondientes y procede a su ejecución. Los dos elementos principales del módulo BASIC Stamp son el microcontrolador, grabado con el intérprete PBASIC en fábrica, y la EEPROM, que contiene el programa editado en el PC.

488

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

El programa para editar (Editor) los programas en PBASIC en el PC y posteriormente transferirlos al módulo microcontrolador está disponible libremente en el sitio de Parallax en Internet. Hay una versión para MS-DOS y otra para Windows, que es la que recomendamos emplear y que conviene actualizarla de cuando en cuando.

15.2. EL EDITOR STAMP Al ejecutar cualquiera de los dos programas de edición en el PC disponibles en Internet o en el CD, para MS-DOS (STAMP2.EXE) o para Windows (STAMPW.EXE), aparece en la pantalla del PC una ventana para la confección de programas. Con los iconos se pueden abrir programas ya guardados, salvar los que se crean, mandar ejecutarlos, depurar la edición, depurar el programa de diversas maneras y un sinfín de otras funciones que sólo la práctica permite su dominio (Fig. 15.1).

Figura 15.1. Ventana del editor STAMP en la versión para Windows.

15.2.1. Formato de edición de programas en PBASIC Etiquetas. Los programas en PBASIC no numeran las líneas y es una de las novedades más interesantes respecto a los BASIC clásicos. Cuando se desea hacer mención a una instrucción, como no tiene número, se le antepone una etiqueta identificativa. El nombre de las etiquetas no puede coincidir con el de las instrucciones o variables usadas, su primer carácter no puede ser un número y la primera vez que se usan deben estar seguidas por dos puntos (:). Constantes. Se pueden declarar en decimal, hexadecimal, binario y ASCII. Ejemplos:

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

100 $64 %01101100 «HOLA»

489

‘así se expresa en decimal ‘así se expresa en hexadecimal ‘así se expresa en binario ‘así se expresa en ASCII

Variables y constantes. Para facilitar la programación se utilizan etiquetas para hacer referencia a variables y a constantes. Se emplea el comando CON. Ejemplos: Nombre led zumbador

CON CON CON

n.° pin 0 15

Comentarios. Detrás de cada instrucción se recomienda escribir algún comentario para facilitar la finalidad de la misma. El procesador ignora los comentarios. Delante del comentario se puede poner REM o un apóstrofe. Ejemplos: high 0 low 5

REM saca un nivel alto por Pin 0 ‘saca un nivel bajo por el Pin 5

Operaciones aritméticas y lógicas. En la tabla de la Figura 15.2 se indican los símbolos utilizados para las diversas operaciones posibles en PBASIC. 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 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

Nombre palabra

Nombre byte

Nombre nibbles

Nombre bits

INS

INL INH

INA, INB INC, IND

IN0 - IN7 IN8 - IN15

OUTS

OUTL OUTH

OUTA, OUTB OUTC, OUTD

DIRS

DIRL DIRH

DIRA, DIRB DIRC, DIRD

W0

B0 B1

W1

B2 B3

W2

B4 B5

W3

B6 B7

W4

B8 B9

W5

B10 B11

W6

B12 B13

W7

B14 B15

W8

B16 B17

W9

B18 B19

W10

B20 B21

W11

B22 B23

W12

B24 B25

Notas Pines de entrada

OUT0 - OUT7 Pines de salida OUT8 - OUT15 DIR0 - DIR7 DIR8 - DIR15

Control de la dirección de los pines E/S

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.

En la realización de las operaciones, el PBASIC opera siempre de izquierda a derecha; por ejemplo, 5 + 4 * 7 se lleva a cabo como (5 + 4) * 7. Reserva de posiciones en la memoria de datos. El lenguaje PBASIC reserva las primeras posiciones de la memoria de datos del procesador. Las tres primeras palabras se reservan para pines de entrada INS, que es un registro que almacena la información

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

491

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

15.3. EL REPERTORIO DE INSTRUCCIONES PBASIC Se ofrece un breve resumen del cometido de las instrucciones del PBASIC para los lenguajes del Intérprete del módulo BS2-IC. Manejándolas prácticamente se llega a dominarlas en muy poco tiempo. Para obtener una completa información de las instrucciones PBASIC le recomendamos acuda al Manual del PBASIC en Internet y al tutorial «¿Qué es un microcontrolador?». Instrucciones de E/S digitales 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, guardando 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.

Instrucciones para bucles repetitivos 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

Instrucciones de E/S serie síncrona I2CIN Entrada de datos serie en comunicación I2C. I2COUT Salida de datos en serie en comunicación I2C.

Instrucciones de E/S serie asíncrona 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.

Instrucciones de E/S analógica 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 resistencia 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.

Instrucciones de control del tiempo PAUSE Cuando se ejecuta, produce una pausa de tiempo que puede alcanzar los 65.536 segundos.

Instrucciones de control de sonido 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

Instrucciones de control de energía 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.

Instrucciones de acceso a la EEPROM 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.

Instrucciones para la depuración del programa 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.

15.4. EL PRIMER PROGRAMA Vamos a ir describiendo con esquemas y fotos la realización de un primer programa muy sencillo. Para la implementación física de este y otros ejercicios didácticos hemos escogido al laboratorio de prácticas Universal Trainer, que, junto con el módulo PBASIC, contienen todos los elementos necesarios para desarrollar multitud de proyectos propuestos en sus manuales, así como diseño reales. En el volumen II de la obra Laboratorio de prácticas de microelectrónica, editada por McGraw-Hill, se describe una colección de ejercicios con los mencionados recursos que posibilitan formarse en el diseño real de proyectos con microcontrolador, tanto en PBASIC como en Ensamblador (módulo PIC1) cómoda y rápidamente con un coste muy asequible. Todos estos materiales los comercializa Ingeniería de Microsistemas Programados, S. L. (www.microcontroladores.com). Con objeto de adaptar el módulo OEM BS2-IC a las características específicas del entrenador Universal Trainer, se han realizado unas pequeñas modificaciones en el conexionado de sus pines. A esta tarjeta ligeramente transformada la llamaremos OEM BS2IC/MSE (Fig. 15.4) y tiene las siguientes peculiaridades:

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

495

Figura 15.4. Fotografía de la tarjeta OEM BS2-IC/MSE.

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 terminales 6 y 7 para la detección automática del puerto usado (véase la Figura 15.6). Primera parte: ¿Nos reconoce y obedece el módulo? A) Inserte la tarjeta OEM BS2-IC/MSE en el protoboard del laboratorio Universal Trainer. Conecte el borne de la alimentación de +5 V de la fuente del entrenador a la patita VDD del módulo OEM BS2-IC/MSE (cable rojo) y el borne de tierra o GND del entrenador a la patita Vss del módulo (cable negro). Asegúrese de que los cables de conexión hagan buenos contactos. B) Inserte con seguridad a presión el conector que une el puerto serie del PC con el del módulo. El resultado de estas dos últimas operaciones puede apreciarse en la foto de la Figura 15.8. C) Ejecute el programa stampw.exe y en la pantalla que aparece teclee un programa muy simple que sólo tiene una instrucción: DEBUG «Soy tu esclavo. Ejecutaré todas tus órdenes en PBASIC»

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

497

Figura 15.7. Apariencia del primer programa en la ventana del editor.

Figura 15.8. Fotografía del módulo BS2-IC/MSE insertado en la placa protoboard del laboratorio Universal Trainer y conectado a la fuente de alimentación del mismo.

498

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

D) Ejecute este mínimo programa activando RUN o con el icono representativo de PLAY. E) Si la comunicación se establece entre el sistema y el PC y todo funciona correctamente, aparecerá la pantalla del depurador y en ella se visualizará el mensaje: Soy tu esclavo. Ejecutaré todas tus órdenes en PBASIC

Segunda parte: Comprobar que el módulo emite sonidos A) Conectar el zumbador del Universal Trainer con la línea de entrada/salida P4 del módulo OEM BS2-IC/MSE. El zumbador produce un pitido cuando se le aplica un nivel lógico alto. B) Sobre la pantalla del editor se va a teclear un programa que haga pitar al zumbador. El programa sólo va a utilizar unas pocas instrucciones muy sencillas con las que se va a aplicar un nivel alto al zumbador a través del pin P4 (HIGH 4) durante 1.000 milisegundos (PAUSE 1000) y luego se le va a silenciar aplicando un nivel bajo (LOW 4) durante un tiempo igual. Para repetir este pitido cada segundo, se vuelve a empezar el programa desde la primera instrucción (GOTO INICIO). Tenga en cuenta que el PBASIC no distingue entre minúsculas y mayúsculas, por lo que puede poner como quiera el nombre de sus instrucciones. Nosotros le recomendamos que use las mayúsculas para expresar las palabras reservadas del PBASIC. Detrás de las instrucciones se pueden añadir aclaraciones o comentarios que hagan más comprensible el programa. Dichos comentarios deben ir precedidos por un apóstrofe «’» y que la máquina los ignora. C) Al ejecutar el programa, el zumbador debe sonar durante un segundo y estar en silencio durante el siguiente, repitiendo continuamente esta tarea. Durante un segundo, el zumbador pita porque por el pin 4 le aplica un nivel alto. En el siguiente segundo está en silencio porque por el pin 4 sale un nivel bajo. La instrucción DEBUG presenta en la pantalla el nombre de este ejercicio. DEBUG

“Generación de sonidos”

INICIO:

HIGH 4 PAUSE 1000 LOW 4 PAUSE 1000 GOTO INICIO

‘El pin 4 es salida con nivel alto ‘Temporización de 1.000 ms ‘El pin 4 es salida con nivel bajo ‘Temporización de 1.000 ms ‘Salta a la etiqueta INICIO

A continuación, proponemos al lector una serie de prácticas propuestas en el módulo PBASIC y que vienen recogidas en el volumen II de Laboratorio de prácticas de microelectrónica, de la editorial McGraw-Hill.

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

499

15.5. PRÁCTICA 1: MANEJANDO LUZ Y SONIDO 15.5.1. Objetivos Comprender, manejar instrucciones, habituarse a trabajar con las herramientas hardware y software y ejecutar programas en PBASIC para gobernar periféricos digitales simples.

15.5.2. Fundamentos teóricos básicos e instrucciones empleadas En esta práctica se va a combinar el funcionamiento del zumbador con un diodo led luminiscente. El Universal Trainer dispone de un zumbador y ocho diodos led. Cada uno de estos sencillos periféricos digitales dispone de una entrada en la que si se aplica un nivel lógico alto, el zumbador pita y el led se enciende. Los circuitos eléctricos de conexionado de dichos periféricos se presentan en la Figura 15.9.

Figura 15.9. Esquemas eléctricos de conexionado del zumbador y el led en el Universal Trainer.

Se describen de forma resumida las instrucciones PBASIC que se van a utilizar: 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.

15.5.3. Esquema electrónico En la Figura 15.10 se ofrece el esquema de conexionado del módulo OEM BS2-IC/MSE con los periféricos y la fuente de alimentación del Universal Trainer.

500

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

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.

15.5.4. Materiales necesarios • • • •

Entrenador Universal Trainer. Módulo OEM BS2-IC/MSE. Cable serie para conectar el PC. Cables de conexión.

15.5.5. Montaje práctico La fotografía de la Figura 15.11 muestra la disposición del módulo Parallax sobre el Universal Trainer y los cables que conectan los dos periféricos que se emplean en esta práctica y la fuente de alimentación.

Figura 15.11. Fotografía de conexionado del módulo Parallax en el Universal Trainer.

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

501

15.5.6. Desarrollo de la práctica y ejecución del programa En esta experiencia se trata de encender durante dos segundos el diodo led conectado en la patita P0; mientras tanto, durante ese tiempo, el zumbador está en silencio. Luego, durante tres segundos, el zumbador produce un pitido mientras el led permanece apagado. Además, el programa debe visualizar en la pantalla del depurador el nombre del ejercicio «LUZ Y SONIDO», así como el mensaje de «ILUMINA» mientras el led está encendido y el mensaje «PITA» cuando suena el zumbador. El programa propuesto es: debug “LUZ Y SONIDO” inicio: debug “ILUMINA” high 0 low 15 pause 2000 debug “PITA” high 15 low 0 pause 3000 goto inicio

‘Visualiza el mensaje ‘entre comillas ‘Visualiza mensaje ‘Saca 1 por P0 (LED) ‘Saca un 0 por P15 (ZUMBADOR) ‘Retardo de 2 segundos ‘Visualiza mensaje ‘Saca un 1 por P15 (ZUMBADOR) ‘Saca 0 por P0, apaga LED ‘Retardo de 3 segundos ‘Salta a instrucción de la etiqueta

Una vez editado el programa, conecte el PC al módulo OEM BS2-IC, que ya estará 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...

15.5.7. Trabajo personal El resultado ofrecido en la pantalla del depurador en el programa anterior no es muy atractivo y le proponemos que le mejore. Para ello, cada vez que salga un mensaje va a indicar que se produzca un retorno de carro (cr) para que el siguiente mensaje salga en la línea siguiente. Además, detrás del mensaje PITA va a colocar dos retornos de carro para diferenciar cada secuencia de encendido y pitido. Las instrucciones de debug quedarán modificadas de la siguiente forma: debug «LUZ Y SONIDO»,cr debug «ILUMINA»,cr debug «PITA»,cr,cr Haga las correcciones sintácticas en el programa y ejecútelo. Deberán quedar presentados los mensajes uno en cada línea y dejando dos líneas entre cada secuencia de luz y sonido.

502

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

Si todo le sale bien, cambie los retardos y procure modificar el programa para obtener 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.microcontroladores.com).

15.6. PRÁCTICA 2: CONTROL DE UN SEMÁFORO SONORO 15.6.1. Objetivos Manejar periféricos de entrada que gobiernen el funcionamiento de otros de salida. Emplear instrucciones de salto condicional y de salto a subrutina y aprender a definir variables.

15.6.2. Fundamentos teóricos básicos y nuevas instrucciones En esta práctica vamos a regular el comportamiento de dos diodos led que simulan las luces roja y verde de un semáforo. Además, cuando se encienda la luz verde, un zumbador pitará durante cortos períodos. Finalmente, existe un interruptor que permite el funcionamiento del semáforo cuando introduce un nivel alto por una patita del módulo microcontrolador. Si introduce un nivel bajo, el semáforo tiene encendida la luz roja y el zumbador está en silencio. En la Figura 15.12 se muestra un esquema del conexionado del periférico de entrada, o sea, el interruptor utilizado por primera vez en esta colección de ejemplos.

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

El programa del semáforo sonoro utiliza las siguientes nuevas instrucciones: — IN0: La patita o pin 0 del módulo queda asignada como entrada digital. — IF THEN : Si se cumple la condición, se pasa a ejecutar la instrucción de la etiqueta, y si no se cumple, se ejecuta la siguiente. — GOSUB : 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.

15.6.3. Esquema electrónico En la Figura 15.13 se muestra el conexionado de las patitas del módulo OEM BS2-IC/ MSE con los periféricos del diseño y las salidas de la fuente de alimentación del Universal Trainer.

Figura 15.13. Conexionado de las patitas del módulo microcontrolador con los periféricos residentes en el entrenador Universal Trainer.

15.6.4. Materiales necesarios • • • •

Entrenador Universal Trainer. Módulo OEM BS2-IC/MSE. Cable serie para conexión al PC. Cables de conexión.

504

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

15.6.5. Montaje práctico En la fotografía de la Figura 15.14 se presenta la disposición del módulo microcontrolador sobre la tarjeta protoboard del entrenador y el conexionado con los periféricos y la fuente de alimentación.

Figura 15.14. Fotografía del montaje de la experiencia del semáforo sonoro.

15.6.6. Desarrollo de la práctica y ejecución del programa Las especificaciones del proyecto son las siguientes: hay que gobernar las luces roja y verde de un semáforo que están simuladas con diodos led que se conectan a las patitas P15 (roja) y P14 (verde) del módulo. Para avisar a los viandantes de que pueden atravesar la calle cuando la luz verde está encendida, hay un zumbador que pita en esa circunstancia a intervalos de 400 milisegundos. Normalmente, el semáforo sólo deja pasar los coches y tiene encendida la luz roja de peatones y el zumbador en silencio. Cuando se desea poner en marcha para pasar los viandantes, se desplaza un interruptor que, al introducir un nivel lógico alto por la patita P0 del módulo, inicia la secuencia de encendido de la luz verde durante dos segundos, mientras la roja está apagada. Luego se produce el encendido de la roja y el apagado de la verde durante dos segundos y se repite continuamente el ciclo hasta que se desplaza el interruptor para introducir un nivel bajo y el semáforo pasa a su condición habitual de luz roja encendida y verde apagada. Cuando la luz verde está encendida, el zumbador pita durante 400 ms y se calla durante los 400 ms siguientes hasta finalizar los dos segundos.

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

505

El programa comentado es el siguiente: x var bit inte: x=in0 if x=1 then ini high 15 low 14 goto inte ini:

pit:

low 15 high 14 gosub pit high 15 low 14 pause 2000 goto inte high 1 pause 400 low 1 pause 400 high 1 pause 400 low 1 pause 400 high 1 pause 400 low 1 return

‘x es una variable de tamaño bit ‘x toma el valor de la entrada P0 ‘si x = 1 salta a etiqueta ini ‘si x no es 0, enciende luz roja ‘Apaga luz verde ‘Salta a la instrucción de ‘etiqueta inte ‘Apaga luz roja ‘Enciende luz verde ‘Salta a subrutina de etiqueta pit ‘Enciende luz roja ‘Apaga luz verde ‘Retardo de 2 segundos ‘Salto a etiqueta inte ‘Activa el zumbador y pita ‘Retardo de 400 ms ‘Desactiva el zumbador

‘Retorno de la subrutina

15.6.7. Trabajo personal Una gran parte del programa de este ejercicio lo ocupaban las instrucciones de la subrutina «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. PRÁCTICA 3: CONTADOR BINARIO DE 8 BITS CON ALARMA 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

15.7.2. Fundamentos teóricos básicos e instrucciones empleadas Se propone manipular a ocho diodos led colocados en las patitas P0-P7 que conforman OUTL para direccionarlas como salidas con la asignación de DIRL = %11111111. Estos ocho diodos luminiscentes van a visualizar el contaje en tiempo real de un contador binario de 8 bits que va a ir pasando unidad a unidad desde el valor 0 hasta 255, que es el máximo y en el que los ocho leds quedarán encendidos. La puesta en marcha del contador desde el valor inicial se produce al apretar durante un breve período de tiempo un pulsador conectado a la patita P14 del módulo BS2-IC. Finalmente, al llegar al valor final 255 en binario, se activa un zumbador conectado a la patita P15. La instrucción fundamental que gobierna esta experiencia es la que se encarga de repetir un número predeterminado de veces un bucle de instrucciones. Dicha instrucción ejecuta un bucle desde un valor mínimo a uno final de la variable que se incrementa una unidad cada vez que pasa por el bucle. Se trata de la instrucción FOR VARIABLE = MIN TO VARIABLE = MAX..., que ejecuta instrucciones del bucle e incrementa la variable con NEXT. El programa del contador binario con alarma utiliza las siguientes nuevas instrucciones: — 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 forman 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.

15.7.3. Esquema electrónico En la Figura 15.15 se muestra el conexionado de las patitas del módulo OEM BS2-IC/ MSE con los periféricos del diseño y las salidas de la fuente de alimentación del Universal Trainer.

15.7.4. Materiales necesarios • • • •

Entrenador Universal Trainer. Módulo OEM BS2-IC/MSE. Cable serie para conexión al PC. Cables de conexión.

PBASIC, EL LENGUAJE MÁS FÁCIL DEL MUNDO

507

Figura 15.15. Periféricos del Universal Trainer empleados en la práctica.

15.7.5. Montaje práctico En la fotografía de la Figura 15.16 se presenta la disposición del módulo microcontrolador sobre la tarjeta protoboard del entrenador y el conexionado con los periféricos y la fuente de alimentación.

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

15.7.6. Desarrollo de la práctica y ejecución del programa La práctica pone en marcha el contador CONTA desde el valor inicial 0 cuando se pulsa brevemente el pulsador conectado a la patita de entrada 14. Desde ese instante, cada algo más de 100 milisegundos se ejecuta un bucle que visualiza en ocho diodos led conectados a las patitas P0-P7 (OUTL) el valor binario del contador, incrementa el contaje y hace un retardo de 100 milisegundos. Cuando alcanza el contaje final de 255, que corresponde a 8 bits 1 en las patitas P0-P7, activa el sonido de un zumbador conectado a la patita P15 del módulo microcontrolador. El programa se muestra a continuación.

led var outl conta var byte dirl = %11111111 int: if in 14 = 1 then alar goto int alar: for conta = 0 TO 255 led = conta pause 100 next high 15 end

‘Se asigna a P0-P7 como variable LED ‘Se asigna a CONTA como variable byte ‘Las líneas P0-P7 se configuran salidas ‘Si pulsador P14 = 1 salta a ALAR ‘Si P14 = 0 se vuelve a chequear INT ‘Para CONTA de 0 a 255 ‘Se asigna LED al valor de CONTA ‘Retardo de 100 milisegundos ‘Se repite bucle e incrementa CONTA ‘Se activa zumbador cuando CONTA=255

CUARTA PARTE «Software» de desarrollo, programas fuente, apéndices y complementos incluidos en el CD

CONTENIDO DEL CD

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.

Primera. «Software» de desarrollo Esta sección contiene los programas necesarios para el desarrollo de las aplicaciones y son propiedad de las empresas y autores que los facilitan libremente en sus páginas de Internet. • MPLAB IDE. Entorno de programación para microcontroladores PIC de la empresa Microchip. • Stamp Editor. Entorno de programación para los módulos microcontroladores BASIC Stamp de la empresa Parallax. • WinPic800. Programa destinado a la grabación de los microcontroladores PIC de Francisco Benach.

Segunda. Programas fuente de los ejercicios propuestos 12F508ASM Esta carpeta contiene los ficheros fuente en lenguaje Ensamblador de las doce aplicaciones 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 dificultad.

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

(GP3/RB3)/MCLR#Vpp, 76-78 .ERR, 107 .LIST, 107 12F508ASM, 511 12F508C, 511 \12F508\Ejem_5A.ASM, 207 \12F508ASM\Ejem_4A.ASM, 191 \12F508C\Ejem_2B.C, 169 12F508ASM/Ejem_2A.ASM, 166 16F84ASM, 512 16F84AC, 512 1-Wire, 219, 245 4.333 MHz, 279 433 MHz, 287 68HC05, 305 A Acceso, 384 ACK, 233, 235 Activación, 338 Active Toolsuite, 389 ADDLW k, 362, 365 ADDWF f, d, 87, 359, 365 Aleatorio, 439 Alta impedancia, 163, 171 ALU, 306 Amplitud, 279 ANDLW k, 88, 362, 365 ANDWF f, d, 88, 359 Angulo, I., 513 Angulo, J. M., 513 Anidamiento, 239 Animate, 117, 395

Arquitectura, 306 ASCII, 105 ASK, 279 ASM, 105, 110 Aurel, 279, 287 B Bajo consumo, 65 Banco 0, 315 01, 57 1, 315 pruebas, 276 Bancos, 57, 313 Barrido de teclado, 132 BAS, 105 BASIC Stamp, 469 BASIC, 485 BCF f, b, 88, 359, 365 BC-NBK, 287,512 Bomba de carga, 198 BOR, 80 BRANCH, 492 BRINCO, 361 Brown Out, 80, 346 Browse, 112 BS1-IC, 471 BS2e-IC, 472, BS2-IC, 471 BS2p24-IC, 473 BS2p40-IC, 473 BS2sx-IC, 472 BSF f, b, 89, 359, 365

515

516

ÍNDICE ANALÍTICO

BTFSC f, b, 89, 361, 365 BTFSC, 399 BTFSS f, b, 90, 361, 365 BTFSS, 399 Bucle B, 184 C, 184 Buffer, 142, 283, 309 Build All, 116 FAILED, 116 SUCCEEDED, 116 Bus, 245 CAN, 136 I2C, 478 BUTTON, 491 Byte CRC, 282 de datos, 282 ID, 282 C C, 56, 105, 316 C: Carry, 47 Calibración, 65 CALL, 50, 309, 335 k, 90, 364, 365, 366 SUBR, 62 Cambio de estado, 338, 342 Camino de Datos, 10, 12 Campos, 83, 352 CAN, 136, 245 Caracteres, 242 Ciclo de reloj, 61 CCS, 119, 370, 402 CD, 17, 110, 158, 173, 511, 512 CEBEK, 374 Célula LDR, 271 RC, 259 Ciclo de instrucción, 61, 82 Clave, 387 CLKIN, 44 CLRF f, 91, 359, 365 CLRW, 91, 359, 365 Códec, 512 Codificación Manchester, 281 NRZ, 281 NRZI, 281 NRZL, 281 Código fuente, 398, 407

máquina, 106 op, 352 Comandos, 233 Comentarios, 489 COMF f, d, 92, 359, 365 Compilador de C, 119, 402 Compiladores, 107, 487 Condensador, 270 Conexionado, 408 Configure/Configuration, Bits, 117 Conmutación de fase, 279 Constante de carga, 259 de tiempo, 70, 259 Constantes, 488 Consumo, 482 Contador, 413 binario, 505 de Programa, 49, 61, 309 de sucesos, 320 Control de flujo,355 Controlador de LCD, 231 incustrado, 3 Corriente, 328 COUNT, 491 CP#, 77 CP, 330 Crystal de cuarzo, 63 D D:\12F508ASM\Ejem_0.ASM, 114 Dado electrónico,378 Dallas Semiconductor, 473 DATA, 494 DC, 56, 316 DC: Digit Carry, 47 DEBUG, 494 xxx, 499 DEBUGM, 479 DECF f, d, 93, 359, 365 DECFSZ f, d, 93, 361, 365 Depurador en circuito, 107 Desborda, 69 Desbordamiento, 65, 208, 335 Despertar, 76, 405 Despierta, 71 Diagrama de conexiones, 42 Direccionamiento directo, 52, 314 indirecto, 52, 314 directiva List p=12F508, 151 DIRL, 506

ÍNDICE ANALÍTICO

DIRS, 491 Divisor de frecuencia, 321 Doblador de tensión, 198 Documentación, 512 Dormido, 210 DSC, 34 DSP, 23 dsPIC30F, 35 dsPIC33F, 35 DTMFOUT, 493 DTR, 78, 79 DYM20AA, 256 E Editor, 488 de textos, 370 EEADR, 331 EECON1, 331 EECON2, 332, 333, 342 EEDATA, 331 EEIE, 338 EEIF, 332, 334, 342 EEPROM 24LC16B, 476 EEPROM, 15, 312, 330, 331, 447, 477 Efecto rebote, 413 Ejem_0.ASM, 393, 394 Ejem_10_1A.ASM, 290 Ejem_10_2A.ASM, 288 Ejem_1B.C, 159 Ejem_2_2A.ASM, 173 Ejem_2_6B.C, 226 Ejem_3A.HEX, 186 Ejem_4_3A.ASM, 199 Ejem_4_3B.C, 201 Ejem_4-2.ASM, 196 Ejem_4A.ASM, 193 Ejem_4A.HEX, 193 Ejem_4B.C, 194 Ejem_5_2B.C, 214 Ejem_5_3A.ASM, 214 Ejem_5A.ASM, 207 Ejem_6_2A.ASM, 226 Ejem_6_3A.ASM, 227 Ejem_6_3B.C, 227 Ejem_6_5A.ASM, 228 Ejem_6_5B.C, 228 Ejem_6A.ASM, 222, 224 Ejem_6B.C, 222, 224 Ejem_7_2A.ASM, 240 Ejem_7_2B.C, 241 Ejem_7_3A.ASM, 243 Ejem_7_3B.C, 243 Ejem_7A.ASM, 235, 236

Ejem_7B.C, 235 Ejem_8_2A.ASM, 255 Ejem_8_2B.C, 255 Ejem_8_3A.ASM, 256 Ejem_8_3B.C, 256 Ejem_8_4.ASM, 257 Ejem_8_4.C, 257 Ejem_8A.ASM, 251 Ejem_8B.C, 251 Ejem_9.ASM, 262 Ejem_9.C, 262 Ejem_9A.ASM, 275 Ejem_9B.C, 275 EJEM2_2.HEX, 176 EJEM2_2B.C, 177 EJEMP_0.ASM, 114 EJEMPLO_0.ASM, 113 EJEMPLO_01, 118 Emisor, 279 Emulador en circuito, 369, 373 Emuladores, 107 END, 494 Ensamblador, 105 o compilador, 370 Ensambladores, 107 Ensamblar, 393 Entradas analógicas, 127 digitales, 128 Entrenador, 124 EPROM, 14 Errores, 107 Esclavo, 248 Escritura/borrado, 293 Esquema, 302 ESR, 313 Estabilidad, 330 ESTADO, 313, 347 Etxebarria, A., 513 EXTRC, 63, 77 F Familia PIC, 512 Firmware, 348 Flag, 337 FLASH, 15, 33, 45, 57, 158 Flip-flop, 343 FOR…NEXT, 492, 506 Formato, 83, 352 Foro, 140 FOSC, 77 FOSC1-FOSC0, 330 FR, 279

517

518

ÍNDICE ANALÍTICO

Frecuencias, 279 FREQOUT, 493 FSK, 279 FSR, 52, 55, 57, 314 Fuente de alimentación, 125 Full Duplex, 220 G G:\16f84A\EJEMPLO_0, 392 Gama básica, 28, 39, 81 media, 31, 305, 365 mejorada, 33 Generador de onda cuadrada, 202 de pulsos, 202 lógico, 129, 195 GIE, 337, 338 Global, 338 GOSUB, 492, 503 GOTO k, 93, 364, 366 GOTO, 51, 84, 309, 486, 492 GP0, 67 GP0/ICSPDAT, 78 GP0-GP5, 149 GP1, 44 GP1, 67 GP1/ICSPCLK, 78 GP2/T0CKI. 67 GP3, 67 GP5-GP0, 57 GPIO, 47, 57, 66, 67, 149 GPO, 44 GPPU#, 71 GPR, 47, 52, 53, 312 GPWUF, 55 Grabación, 348 Grabador, 371 Grabadores, 14 H Half Duplex, 220 Halt, 116 Hardware, 17 Harvard, 13, 24, 25, 305 HEX, 107 HIGH pin, 499 HIGH, 491 http://perso.wanadoo.es/siscobf/winpic800. htm, 140 HyperTerminal, 222, 425

I I2C, 219, 245 I2CIN, 493 I2CLOW.INC, 249 I2COUT, 493 ICD-2, 108 ICD2, 27, 139 ICE 400, 108 ICEPIC-Jnr, 375 IcProg, 140 ICSP, 139 ICSPDAT, 44 ICSPTM, 77 ID, 77, 143, 331 Identificación, 77 IF…THEN, 492, 503 ILUMINA, 501 IN0, 503 INCF f, d. 94, 359, 365 INCFSZ f, d, 94, 361, 365 Include P12F508.INC, 152 INDE, 313 INDF, 54, 314 Ingeniería de Microsistemas Programados, 109, 119, 121, 147, 301, 373, 470, 494, 514 Inicio, 247 Inmediato, 362 INPUT, 491 INS, 490 Instrucciones, 365, 491 INTCON, 313, 328, 337 INTDEG, 340 INTE, 338, 340 INTEDG, 323 Inter Integrated Circuit, 245 Intermitente, 181 Intérpretes, 487 Interrupción, 336 Interrupciones, 335 INTF, 340 INTRC, 63 INTRC, 77 IORLW k, 95, 362, 365 IORWF f, d, 95, 359, 365 IPCSPCLK, 44 IRP, 314, 316 J J. Kemeny, 485 Jumper JP2, 126

ÍNDICE ANALÍTICO

JP4, 158 JP8, 134 L L293D, 134 Lance Walley, 470 latch, 68, 150 LC, 231 LCD, 137, 256, 381, 433, 447 LCDXXX.INC, 433 LDR, 259 Lectura/grabación, 139 LED VAR OUTL, 506 LED = CONTA, 506 Lenguaje BASIC, 486, 511 C, 119, 241, 486, 511 Ensamblador, 486, 511, 512 Líneas de E/S, 66, 481 List, 115 Literals, 81 Llamada a subrutina, 52 LOOKDOWN, 492 LOOKUP, 492 LOW pin, 499 LOW, 491 LP, 63 LUZ Y SONIDO, 501 Luz, 271 M Macros, 240 Maestro, 248 MANCHESTER.INC, 283 Matriz, 242 MAX-232, 135 McGraw-Hill, 494, 498, 513 MCLR#, 44, 76, 294, 299, 343, 346, 347 MCLR#/Vpp, 78 MCLRE, 77 MCU, 34 Memoria, 11 de configuración, 142 de datos, 15, 52, 57, 311 de programa, 13, 49, 57, 308 Mensaje, 239 Micro PIC Programmer, 371 Trainer, 22, 303, 372, 374 Microchip MPASM Toolsuite, 112, 389 Microchip, 6,17, 19, 371, 512, 514

519

Microcontrolador, 3 Microcontroladores de 16 bits, 34 Microprocesador, 10 Migrabilidad, 27 Modo contador de eventos, 70 de bajo consumo, 71, 75 de reposo, 347 PC, 123, 140 RUN, 123 temporizador, 70 Modulación, 279 Módulo OEM B52-IC/MSE, 503 PIC12FXXX, 147 Módulos de E/S, 11 Motorola, 19 MOVWF f, 96, 365 MOVF f, d, 95, 359, 365 MOVLW f, 359, 362 MOVLW K, 96, 365 MOVLW XX, 50 MOVWF GPIO, 68 MOVWF OSCCAL, 65 MOVWL XX, 65 mpasmwin.exe, 112 MPLAB IDE, 17, 105, 110, 389, 511 SIM, 116, 394 mplink.exe, 112 MPSIM, 371 MS-DOS, 488 nanoWatt, 28 N NAP, 494 NCALL Destino, 240 NMOS, 327 Nomenclatura, 82, 356 NOP, 96, 359, 365 NTC, 259, 272 O OEM BS2-IC, 471, 474, 476, 479, 496 BS2-IC/MSE, 494 One Wire 473 OPCODE, 83 Operandos, 352 OPTION, 47, 70, 97, 190, 313, 320, 322, 340 Org 0x00, 115

520

ÍNDICE ANALÍTICO

Organigrama, 154, 191, 368, 390, 398, 406, 426 OSC1, 44 OSC1/CLKIN, 294 OSC2, 44 OSC2/CLKOUT, 294 OSCCAL, 50, 56, 65 Oscilador, 126 externo, 64 externo RC, 64 HS, 330 interno, 64, 65 LP, 330 RC, 330 tipo HS 298 tipo LP, 298 tipo RC, 297 tipo XT, 298 XT, 330 Osciloscopio, 200 OTP, 14 OUTPUT, 491 OUTS, 491 P PA0, 55 Página, 55 Palabra de Configuración, 67, 76, 152, 324, 330, 331 Parallax, 370, 469, 470, 473, 514 Pastillero, 38, 512 inteligente, 38 PAUSE, 493 valor, 499 PBASIC, 105, 470, 491 PC, 50, 51, 308, 309, 480 PCF854A, 249 PCF8574A, 245, 246, 251 PCL, 55 PCLATH, 310, 313 PD#, 56, 316, 345 Pentium, 11 Periféricos, 408, 429 Permiso de interrupción, 338 Perro Guardián, 47, 65, 71, 72, 152, 205, 316, 320, 321, 324, 343, 345, 405 Philips, 245 PIC Burner, 109 PIC School, 110, 121, 122, 157, 201, 238, 275, 289, 400, 444 PIC, 21, 23, 110 PIC10F, 29 PIC12F, 29, 30, 32 PIC12F508, 37, 41, 46, 50, 149, 511, 512

PIC12F509, 41, 44 PIC12F510, 41 PIC14000, 32 PIC16C, 32 PIC16C54, 378 PIC16C56, 471 PIC16C57, 471, 475 PIC16C5X, 31, 40 PIC16CR57, 476 PIC16F, 32 PIC16F505, 44, 59 PIC16F5X, 31 PIC16F5XX, 40 PIC16F83, 10 PIC16F84A, 293, 300, 307, 389, 512 PIC16F87X, 513 PIC16HV540, 40 PIC16X8X, 295 PIC18-ME, 303, 384 PIC24F, 35 PIC24H, 35 Pil, 47 Pila, 50 PITA, 501 Píxeles, 242 PLOMO, 28 PMOS, 327 POR, 80, 343 PORTB, 58, 67 PORTC, 58 Postdivisor, 321 Potenciómetro, 271 Power Down, 316 Power-up, 330 Practica1.ASM, 156 Practica1.HEX, 156 Practica2.ASM, 168 Practica2.HEX, 169 Preámbulo, 282 Predivisión, 321 Predivisor de frecuencia, 69 Procesador, 12 Programa 0.ASM, 113 Programa ejecutable, 107 fuente, 106 Project Wizard, 111 Protección del código, 77 Prototipos, 301 Proyecto, 105, 110, 389 PROYECTO_0.mcp, 114 PROYECTO3.HEX, 186 PROYECTO3.MCW. 186 PS0, 69, 323

ÍNDICE ANALÍTICO

PS1, 69, 323 PS2, 69, 323 PS2:0, 190 PSA, 71, 72, 323 PSK, 279 PTC, 259 Puerta A, 300, 326 B, 300, 326 Puertas de E/S, 326 Pull-up, 71, 132 PULSIN, 491 PULSOUT, 491 PWM, 493 PWRT, 343, 345 PWRTE, 330 Q Q1, 61, 295 Q2-Q3, 295 Q2, 61 Q3, 61 Q4, 295 Q4, 61 R RA0 – RA4, 294 RA0-RA4, 326 RABDINM 492 RAM, 15, 312 RB, 76 RB0/INT, 326, 340 RB0-RB7, 295,326 RB3-RB0, 419 RB4-RB7, 132 RB6, 329, 348 RB7, 329, 348 RB7:RB4, 328, 338, 342, 419 RBIE, 338 RBIF, 329 RBO/INT, 338 RBPU#, 323, 328 RC, 63 RCTIME, 493 RD, 332 READ, 494 Receptor, 287 Reconocimiento, 247 Refresca, 210, 324 Registro de calibración, 50, 56 de datos, 81

521

de Estado, 55, 66, 315, 345 de trabajo W, 81 W, 306 Regulador, 480 Reloj digital, 377 externo, 69 interno, 69 Reposo, 210 Reset, 47. 65, 66, 80, 117, 299, 313t, 343 Resonador, 63 RETFIE, 337, 364, 366 RETLW, 97, 239, 364, 366 RETURN, 364, 366, 492, 503 REVERSE, 491 RF, 286 RISC, 24, 25, 305 RJ11, 138 RLF f, d, 98, 359, 365 ROM, 14 ROMERO, S., 513 RP0, 313 RP0, 314 RP1, 314 RP1-RP0, 316 RRF f, d, 98, 359, 365 RS-232, 135, 425 RS232, 219 RS232LOW.INC, 235, 425, 436 RS485, 219, 245 RSI, 335, 337 Run, 116, 395 Rutinas, 250 RxD, 220 S Salidas digitales, 132 Salto condicional, 355, 361 Scenix SX28AC, 472 SCL, 478 SCL, 246 SDA, 246 SDA, 478 Segmentación, 44 Semáforo, 380, 502 Señalizador, 337 Serie, 348, 480 USB, 158 SERIN, 493 SEROUT, 493 SFR, 47, 52, 53, 312 SHIFTIN, 492 SHIFTOUT, 492

522

ÍNDICE ANALÍTICO

Símbolos, 82, 356, 489 Simulador software, 108, 370 Simulador, 117 Sincronismo de carácter, 281 Sintaxis, 358 Sisco Benach, 140 Sistema de desarrollo, 372 SKIP, 361 SLEEP, 55, 75, 99, 347, 364, 366, 405, 494 Sobrepasamiento, 338 Software, 17 SPI, 245 SR, 47 SRAM, 312 Stack, 239 Stamp BASIC, 479 Stamp Editor, 511 STAMP2.EXE, 488 STAMPW.EXE, 488 Standby, 75, 206, 210 Star, 260 START, 220 STATUS, 55 Step Into, 117, 395 Step Out, 117, 395 Step Over, 117 STOP, 220 Stop, 247, 260 Su Turno, 457 SUBLW k, 362, 365 Subrutina, 240 SUBWF f, d, 99, 359, 365 SWAPF, f, d, 359, 365 SYM20AA, 231, 232, 241, 262, 512

TALLER8.HEX, 443 TALLER9.HEX, 454 Talleres, 512 Tarjeta, 301 de prototipos, 372, 376 protoboard, 504, 507 TD232, 256 Teclado, 130, 419 matricial, 275 INC, 419 Temporización, 182, 413 Temporizador, 69, 320 TMR0, 189 Tercer estado, 163 Tiempo de carga, 270 real, 373 Time Out, 316 Tipo de oscilador, 77 LP, 77 XT, 77 TMR0, 55, 69, 320, 322, 338, 341 TO#, 72, 316, 325, 345 TOGGLE, 491 Transmisor, 279 TRIS GPIO, 100 TRIS, 47, 67, 149 TRISA, 326 TRISB, 326 TRUEBA, I., 513 TxD, 220 TX SAW, 433, 512 TX-SAW/433 s-z, 279

T

U

T. Kurtz, 485 T0CKI, 44, 320, 322, 347 T0CS, 71, 190, 320, 322, 323 T0IE, 338 T0IF, 322, 338, 341 T0SE, 70, 71, 320, 322, 323 Taller, 397 TALLER_2.C, 402 TALLER_3.C, 409 TALLER_5.ASM, 422 TALLER_5.HEX, 423 TALLER_6.ASM, 428 TALLER_7.ASM, 436 TALLER10.HEX, 464 TALLER2.HEX, 401 TALLER3.HEX, 409 TALLER6.HEX, 429

UCP, 10 Ultravioleta, 14 Unidad Central de Proceso (UCP), 10 de Control, 10, 12 Universal Trainer, 494, 500, 507 Universidad de Deusto, 514 USB, 138, 219, 245 V VAR bit, 503 Variable, 489 VDD, 294 VDD, 80 Vector de Interrupción, 335

ÍNDICE ANALÍTICO

de Reset, 50 Vídeo, 512 View, 117 Von Neumann, 13

www.parallax.com, 470, 514 www.microchip.com, 514 www.sagitron.com, 514 www.deusto.es, 514

W

X

Wake-up, 405 WDT, 55, 71, 72, 76, 77, 79, 206, 321, 330 WDTE, 72, 77, 324, 330 WDTm 205 Windows, 110, 425, 488 WinPic800, 140,141, 143, 158, 209, 401, 409, 436, 511 WR, 332 WREN, 332 WRERR, 332 WRITE, 494 www.ic-prog.com, 140 www.microcontroladores.com, 121, 470, 494, 514

XORLW K, 100 XORLW k, 362, 365 XORWF f, d, 101, 359, 365 XOUT, 492 XT, 63 Z Z, 47, 56, 316 Zener, 80 Zero, 47 ZIP, 140 Zócalos, 301

523

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF