You are on page 1of 108
Curso Basico de Microcontroladores PIC CEIKIT: ‘COMPANIA EDITORIAL ELECTRONICA, En los ultimos afios, un componente electrénico ha revolucionado las técnicas de disefio; se trata del microcontrolador. Un circuito integrado programable que contiene todos los elementos necesarios para controlar un sistema. El contenido de este libro pretende introducirnos en su estudio en forma clara y simple, para que sea utilizado por personas que tienen un conocimiento basico en el area de la electronica digital y los microprocesadores. _ Este curso es un programa te6rico-practico, concebido como un nivel basico introductorio al tema de los microcontroladores. Se ha dividido en siete capitulos, empezando con una introduccién general donde se hace un poco de historia y se ambienta el tema para que el estudiante comprenda todo el universo que se puede descubrir con su estudio. El segundo capitulo nos introduce al estudio del microcontrolador PIC16C84, con el cual se desarrolla gran parte del contenido del curso. El tercer capitulo explica la forma en que se escribe un programa para el microcontrolador y los pasos que se deben seguir para llevarlo hasta la memoria del mismo. En el cuarto capitulo se presentan todas las instrucciones que pueden ser aceptadas por el PIC16C84, utilizando ejemplos practicos para que el lector logre una buena comprensi6n de las mismas. En el quinto capitulo se explica la utilizacién del PIC16C84 en circuitos practicos, realizando varios ejercicios reales, explicando cada uno de los pasos involucrados en el desarrollo de los programas. El sexto capitulo contiene una serie de programas o rutinas de uso general que son de gran utilidad en el desarrollo de sistemas microcontrolados, los cuales van acompafiados de explicaciones detalladas que facilitan el entendimiento de los mismos. El ultimo capitulo presenta la forma de realizar proyectos practicos, introduciendo asf al lector en la forma de llevar a la realidad todas sus ideas y proyectos, que con un microcontrolador, se pueden implementar mas facilmente. Para estudiar este curso se requiere un computador tipo PC (AT, 386, 486 6 Pentium) y el sistema de desarrollo CEKIT CK-175, que incluye el programador 0 “quemador” para los microcontroladores y el software 0 conjunto de programas que se entregan con él. Introduccion... CAPITULO I. Los microcontroladores Un poco de historia .... Sistemas microcontrolados.... Disefio con microprocesador vs. microcontrolado! El microcontrolador. Principales familias de microcontroladores Los microcontroladores PIC.. Proyectos con microcontroladores CAPITULO II. Conozca el PICI6C84. Pines y funciones Caracteristicas especiales .. Arquitectura interna del PICI Circuito de experimentacién con el PICI6C8% El PICI6F84... CAPITULO III. Como escribir un programa .. Cédigo fuente... Clases de lineas en un programa... Archivos y formatos del ensamblador . Cémo ensamblar un programa . Cémo programar el microcontrolador ..... CAPITULO IV. Instrucciones del PICI6C84.. Estructura de las instrucciones Tipos de instruccién Descripcién de las instruccione: CAPITULO V. Programacién en PIC.. Encender y apagar un LED... Secuenciador con cuatro LED's Leer teclado y encender el LED correspondiente .. Programas avanzados utilizando el entrenador K-061 .. CAPITULO VI. Rutinas de programacién . La suma La resta Rotaciones La multiplicacién La division Conversién de un niimero binario en su equivalente BCD Suma de dos niimeros BCD Conexién de displays al PIC CAPITULO VII. Proyectos con microcontrolador. Pasos a seguir en la elaboracién de un proyect Proyecto: Dado digital con PIC Apéndice A. Circuito impreso universal para PIC ... 1 Ios iiltimos afios, un componente electrénico ha revolucionado las técnicas ide disefio; se trata del microcontrolador. Un circuito integrado programable que Contiene todos los elementos necesarios para controlar un sistema. El contenido de este libro pretende introducimos en su estudio en forma clara y simple, para que sea utilizado por personas que tienen un conocimiento basico en el érea de la electrénica digital y los microprocesadores. Al terminar el curso, el lector estar4 en capacidad de desarrollar circuitos de aplicaci6n utilizando el microcontrolador como elemento central, tales como: Con- troladores de un proceso industrial, productos de consumo masivo, sistemas de se- guridad, etc, Es dificil encontrar en electrénica una aplicaci6n que no pueda utilizar- lo para optimizar su operacién. Este curso es un programa te6rico-préctico, concebido para un nivel bdsico in- troductorio al tema de los microcontroladores. Se ha dividido en siete capitulos, empezando por una introduccién general donde se hace un poco de historia y se trata de ambientar el tema para que el estudiante comprenda todo el universo que se pue- de descubrir con su estudio. E] segundo capitulo nos introduce al estudio del microcontrolador PIC16C84, sobre el cual se desarrolla gran parte del contenido teérico-practico del libro. El tercer capitulo contiene un tema de suma importancia: explica la forma en que se escribe un programa para el microcontrolador y los pasos que se deben seguir para Ilevarlo hasta la memoria del mismo. En el cuarto capitulo se presentan todas las instrucciones que pueden ser aceptadas por el PICI6C84, utilizando ejemplos practicos para que el lector ten- ga una buena comprensién de las mismas. El quinto capitulo trae el tema que todos esperan, la utilizacién del PICI6C84 en circuitos précticos, realizando algunos ejercicios reales, explicando cada uno de los pasos involucrados en el desarrollo de los programas. El sexto capitulo contiene una serie de programas o rutinas de uso general que son de gran utilidad en el desarrollo de sistemas microcontrolados, los cuales van acompaiiados de explicaciones detalladas que facilitan el entendimiento de los mis- mos. El tiltimo capitulo presenta la forma de realizar proyectos prdcticos, introdu- ciendo asi al lector en la forma de Ievar a la realidad todas sus ideas y proyectos que con un microcontrolador, se pueden implementar més fécilmente. De esta forma, esperamos que las personas se introduzcan facil y rapidamente en el maravilloso mundo de los microcontroladores y se preparen para asumir el reto tecnol6gico que nos imponen cada dfa los nuevos avances de la ciencia. Para estudiar este curso, se requiere un computador tipo PC (AT, 386, 486 6 Pentium) y el sistema de desarrollo CEKIT CK-175, que incluye el programador "quemador" para los microcontroladores y el software 0 conjunto de programas que se entregan con él. CEKIT S.A. Los Microcontroladores ¢Un poco de historia ¢ Sistemas microcontrolados + Disefio con microprocesador vs. microcontrolador ¢ El microcontrolador ¢ Principales familias de microcontroladores ¢ Los microcontroladores PIC * Proyectos con microcontroladores Capitulo I. Los Microcontroladores Un poco de historia El desarrollo de cada nuevo dispositive electr6nico trae consigo técnicas de dise- fio diferentes, por lo general, més simples. En los afios sesenta, para construir un reloj digital se necesitaba acoplar un buen numero de circuitos I6gicos como conta- dores, divisores, decodificadores y redes combinatorias. Al mismo tiempo, el dise- fiador debfa poseer muy buenos conocimientos sobre cada uno de los elementos. A partir de 1970, el panorama de la electrénica cambié radicalmente con la apa- ticién del microprocesador. Vendria la época de oro del Z-80, el 8085, el 6800 y otros microprocesadores utilizados como elementos centrales en aparatos de control, y se consolidarian las técnicas de integraci6n, el estudio de las memorias, la progra- macién en lenguaje de maquina y la adaptacién de periféricos de todo tipo. En 1980, aproximadamente, los fabricantes de circuitos integrados dieron a conocer un nuevo chip llamado microcontrolador, el cual contenia toda la es- tructura de un microcomputador, es decir, unidad de proceso (CPU), memoria RAM, memoria ROM y circuitos de entrada/salida. Este se concibié como un dispositivo programable que puede ejecutar un sinmimero de tareas y procesos Desde este momento, el diseiio de productos electrénicos cambié radicalmente. Circuitos légicos, manejo de periféricos, temporizadores y estructutura de com- putadores, todo programable y alojado en un solo integrado; es decir, un peque- fio computador para todas las aplicaciones. Sistemas microcontrolados Hoy en dia es comtin encontrar microcontroladores en las cafeteras, hornos mi- croondas, vidéograbadoras, alarmas, automéviles, etc. Las aplicaciones son infini- tas, el Gnico limite es la imaginacién. La posibilidad de manejar sefiales de entrada y de salida, asf como su capacidad para procesar datos y tomar decisiones, lo convier- ten en uno de los elementos electrénicos més versitile que existen. El diagrama general de un sistema microcontrolado serfa el que se muestra en la figura | Microcontrolador Dispositivos Dispositivos de entrada de salida Programa Figura 1. Diagrama general de un sistema microcontrolado Cuando se habla de dispositivos de entrada se hace referencia a todos los ele- mentos que pueden cambiar de estado ante alguna determinada condicién y gene- ran una sefial que puede ser utilizada por el microcontrolador para tomar alguna decisién, por ejemplo un teclado, un interruptor, un sensor, etc. Los dispositivos de Curso Basico de Microcontroladores PIC * CEMGT 5 Capitulo 1. Los Microcontroladores salida pueden ser indicadores visuales (LED’s), indicadores audibles (zumbado- res), interruptores de potencia que manejan motores, u otros dispositivos como relés, motores, valvulas etc. Interruptores =) Pariantes Dispositivos de entrada Dispositivos de salida Figura 2. Algunos dispositivos que pueden hacer parte de un sistema microcontrolado Unejemplo préctico puede ilustrar mejor todas las posibilidades. Veémos el caso de un horno de microondas. DISPLAY — ft Teclado >| [Receptor ]_, | Microcontrolador remoto ‘Sensores internos Figura 3. Ejemplo del uso de un microcontrolador en un horno de microondas En este ejemplo se tienen tres clases de dispositivos de entrada: el teclado por medio del cual se programa la funcién que se desea, los sensores internos para con- trolar variables como la temperatura y, si el homo tiene Ia posibilidad, un receptor remoto para ejecutar las 6rdenes dadas por el usuario desde el control. 6 Curso Basico de Microcontroladores PIC + CHRCET Capttulo I. Los Microcontroladores Como dispositivos de salida se tienen: el display, que puede ser de LED’s 0 de cristal liquido, el motor que hace girar los alimentos y algunos relevos que se encar- gan de controlar o desactivar algunos componentes del horno, Jo cual permite, por ejemplo, cambiar la potencia de coccién, entre otros. Disefio con microprocesador vs. microcontrolador Antes de existir el microcontrolador, se utilizaban para control los sistemas con microprocesador, el cual necesitaba de varios elementos externos para lle- var a cabo sus funciones. Disefio con microprocesador Cuando se hace un disefio de este tipo se deben utilizar varios médulos: * Microprocesador (CPU 0 Unidad Central de Proceso). Es el encargado de contro- lar el sistema, ejecuta las funciones escritas en la memoria de programa. * Memorias ROM (Memoria de sélo lectura). Se utilizan para almacenar el pro- grama y no pierden la informacién aunque se retire la alimentacién al sistema. * Memorias RAM (Memoria de acceso aleatorio). Se utilizan para guardar los datos temporales que se necesitan en la cjecucién del programa. Estas memo- tias se conocen como memorias volatiles porque pierden la informacién cuan- do se retira la alimentaci6n. + Decodificador de direcciones. Sirve para accesar correctamente a las memorias y a los dispositivos periféricos del microprocesador. El proceso de disefio involucra los siguientes pasos : 1. Seleccién de los circuitos 2. Disefio del mapa de memoria y de entrada/salida 3. Disefio del decodificador de direcciones 4. Montaje del circuito y programacién Salida Entrada RD 1yo(g255) WR Do:D7 cs Do:07 2K SS Figura 4. Arquitectura de un sistema usando el microprocesador Z-80 Curso Basico de Microcontroladores PIC + CEKHT 7 Capitulo I. Los Microcontroladores Si consideramos la estructura del microcomputador de la figura 4, se puede ver que cumple con los requerimientos descritos anteriormente: memorias, puertos (co- nexiones con el exterior), decodificador, etc. Lo que muestra la explicacién anterior es el cardcter constante de la estructu- ra de un sistema con microprocesador en un circuito de control. No es dificil comprender entonces por qué los fabricantes de circuitos integrados decidieron producir un chip conteniendo toda la estructura necesaria para tener un micro- computador completo. Este chip es el que se ha llamado microcontrolador. Circuito externo de reloj (Cristal u oscilador) Entradas Salidas Figura 5. Idea general de un microcontrolador En la figura 4, la linea punteada muestra todos los componentes que se hallan den- tro del microcontrolador. Ahora, para un disefiador, la idea de un microcomputador se limita al esquema mostrado en la figura 5, donde se tiene una fuente de alimentaci6n, un circuito de reloj y el chip microcontrolador. Solamente se requiere grabar el progra- ma en la memoria ROM; los puertos ya estan listos para conectarse al mundo exterior. En la practica los resultados de simplificacin son sorprendentes; la figura 6 muestra la comparaci6n entre un circuito realizado con microprocesador y uno con microcontrolador. Ventajas del microcontrolador sobre el microprocesador Como se puede ver, existen algunas ventajas importantes cuando se realiza el disefio de un circuito utilizando un microcontrolador: * El circuito impreso es mucho mas pequefio ya que muchos de los componentes se encuentran dentro del circuito integrado. * El costo del sistema total es mucho menor, al reducir el ntimero de componentes. * Los problemas de ‘ruido que pueden afectar los sistemas con microprocesador se elimi- nan, debido a que todo el sistema principal se encuentra en un sdlo encapsulado. * El tiempo de desarrollo de un sistema se reduce notablemente. 8 Curso Basico de Microcontroladores PIC CHCT Capitulo I. Los Microcontroladores a) Conector Fuente de poder Microcon- trolador Figura 6a. Circuito con microcontrolador Figura 6b. Circuito con microprocesador EI microcontrolador Un microcontrolador es un circuito integrado programable, capaz de ejecutar las 6rdenes 0 secuencias que estan grabadas en su memoria. Est4 compuesto de varios bloques funcionales, los cuales cumplen una tarea especffica dentro del ordenamien- to del mismo y a su vez permiten obtener configuraciones diferentes. Esto es, se pueden diferenciar segtin el tamafio y cantidad de sus elementos bdsicos y caracte- risticas especiales. En esta seccién nombramos algunas de las partes basicas a mane- ra de informaci6n para establecer algunas comparaciones mds adelante. * Memoria ROM (Memoria de sélo lectura) * Memoria RAM (Memoria de acceso aleatorio) * Lineas de entrada/salida (I/O). También Ilamados puertos, se utilizan para conec- tar los elementos externos al microcontrolador + Légica de control. Coordina la interaccién entre los demas bloques Componentes especiales en un microcontrolador En muchas ocasiones, se requiere algo mds que los pines de entrada y Salida para contro- lar algtin proceso, como se muestra en la figura 7. Pensando en ello los fabricantes de microcontroladores han adicionado algunos componentes especiales en algunos de sus modelos. Las posibilidades son amplisimas y el usuario puede escoger a la carta: + Algunos microcontroladores tienen conversores andlogo a digital (A/D), en caso de que se requiera medir sefiales no digitales, como por ejemplo temperatura, voltaje, luminosidad, etc. Curso Basico de Microcontroladores PIC + CENT 9 Capttulo I. Los Microcontroladores Temporizador/ Interrupciones Contador Microcontrolador Convertidor A/D " Memoria Comunicacién EEPROM serial RS-232 Figura 7. Funciones adicionales en los microcontroladores * Si se requiere medir periodos de tiempo entre eventos, generar temporizaciones 0 salidas con frecuencia especifica, algo muy comtin en electrénica, se puede dispo- ner de uno 0 varios temporizadores programables (timers). * Cuando se necesita establecer comunicacién con otro microcontrolador 0 con un computador se puede disponer de una interface serial RS-232. * Para desarrollar una aplicacién donde los datos no se alteren a pesar de que se retire la alimentacién, se puede usar un microcontrolador con memoria EEPROM, que es un tipo de memoria ROM que se puede programar o borrar eléctricamente sin necesidad de circuitos especiales. ¢ Para quienes utilizan salidas PWM (modulaci6én por ancho de pulso) en el con- trol de motores DC 0 cargas resistivas, existen microcontroladores que pueden ofrecer varias de ellas. * Cuando se requiere atender eventos en tiempo real o se tienen procesos que no dan espera, se debe utilizar la técnica llamada de «Interrupciones». Cuando una sefial externa activa una linea de interrupci6n, el microcontrolador deja de lado la tarea que se encuentra ejecutando para atender una situacién especial y luego puede regresar a continuar con la labor que estaba desempefiando. Principales familias de microcontroladores Actualmente existen en e] mercado varias marcas reconocidas como las principales, da- das sus caracteristicas, difusién y usos en productos de consumo masivo. Entre ellas estén Motorola, Intel, Philips, National y Microchip. A continuacién mencionaremos algunas. Familia Intel 8051 Esta familia de microcontroladores de 8 bits contiene varias referencias, cada una de ellas acondicionada para aplicaciones especificas. Todas las versiones existentes tienen la misma CPU, memoria RAM, temporizadores, puertos paralelos y entradas/salidas de tipo serial. El 8051 tiene 4 Kbytes de memoria ROM que debe programarse durante el proceso de fabricacién del circuito integrado. En el 8751, la memoria ROM se ha reemplazado por una memoria EPROM que el usuario puede programar y borrar con luz ultravioleta. 10 Curso Basico de Microcontroladores PIC* CENT Capttulo I. Los Microcontroladores Referenc' Memoria ROM ___MemoriaRAM__Timers 8051 4K 128 2 | 8052 8K 256 3 8031 Externa 128 2 8032 Externa 256 3 8751 4K (Eprom) 128 2 Figura 8. Microcontroladores de la familia Intel 8051 El 8031 es un caso especial; no tiene memoria ROM interna y por lo tanto, la memo- ria de programa se debe colocar externamente. Para comunicarse con la memoria exter- na, el micro debe usar tres de los cuatro puertos paralelos de entrada/salida. Familia Motorola 6805 Es una de las mas utilizadas en el mundo. Ha sido optimizada para aplicaciones de control especializado, en lugar de procesamiento de datos, y forma parte de dispositi- vos de produccién masiva como juguetes, equipos de video, impresoras, modems, electrénica automotriz y electrodomésticos. Cada afio aparecen nuevos modelos que reemplazan a los anteriores. Todos los dispositivos basicos estén construfdos a partir de la misma CPU de 8 bits y tiene RAM, ROM, puertos de entrada/salida y temporiza- dores; algunos tienen, ademas, puertos seriales, convertidores andlogo a digital y me- morias EEPROM 0 EPROM. [ Referencia|_Memoria ROM Memoria RAM __Timers Otros 68HCO5C4 4K 176 il 68HCO0508 8K 176 1 | 68HCO5C2 2K 176 1 68HC705C4 4K (Eprom) 176 1 68HC705K1 504 32 Y 64 1 68HCOSBM 2K 176 1 mejorado |Sonees eat Figura 9. Microcontroladores de la familia Motorola 6805 Familia Microchip 16CXX Esta formada por una amplia variedad de componentes con diferentes tamafios de memoria, diferentes velocidades, diferentes tipos de encapsulado y diferente ntime- ro de pines de entrada/salida. El conjunto de instrucciones es de s6lo 35, por eso se dice que es un microcontrolador de tipo RISC (Reduced Instruction Set Computer - Computador con Set de Instrucciones Reducido) a diferencia de las anteriores fami- lias que utilizan la tecnologia CISC (Complex Instruction Set Computer - Computa- dor con Set de Instrucciones Complejo). Curso Bésico de Microcontroladores PIC « CEKIT 1 Capitulo I. Los Microcontroladores Referencia___Memoria ROM ___Memoria RAM __ Pines I/O. Otros 7 Figura 10. Microcontroladores de la familia PIC16CXX de Microchip Esta familia sobresale por estar muy difundida actualmente a nivel mundial; la mayoria de revistas de electrénica en el mundo la usan para sus proyectos y le dedican articulos periddicamente. Su flexibilidad, configuraciones para todas las necesidades y bajo costo, la hacen muy atractiva para los consumidores a gran escala y para los estudiantes o disefiadores independientes. En este curso nos dedicaremos especialmente a esta familia. Los microcontroladores PIC El fabricante los define como una familia de microcontroladores de bajo costo, bajo consumo de potencia y alta velocidad de operaci6n. No est4 muy lejos de la realidad, ya que es posible operar los PIC16CXX hasta una velocidad de 20 MHz, y el consumo de potencia es de 50 microvatios a una velocidad de 32 kHz y de 6 microvatios en modo de reposo o sleep (en este modo el micro se detiene y disminuye el consumo de potencia). La tecnologia RISC (set de instrucciones reducido) lo hace muy facil de manejar, ya que tiene muy pocas instrucciones que son poderosas, a diferencia de las otras familias que tienen muchas instrucciones dificiles de recordar o que se utilizan muy poco. Los PIC16CXX tienen memoria EPROM o PROM internas; ademas tienen un circuito de vigilancia interno para evitar que el programa se pierda (watchdog), los pines de entrada/salida pueden manejar corrientes hasta de 25 mA, posee temporiza- dores programables y algunos poseen conversores andlogo a digital. Esta familia se divide en tres rangos segtin la capacidad de los microcontrolado- res. E] mas bajo lo compone la familia 16C5X, los cuales tienen un timer o tempori- zador y pines de entrada/salida. El rango medio lo componen las familias 16C6X/ 7TX/8X, que incorporan conversores andlogo a digital, comparadores, interrupcio- nes, etc. La familia de rango superior lo componen los 17CXX, que tienen muchos mis servicios y prestaciones. Dentro de todos los miembros de la familia Microchip, vale la pena destacar el PIC16C84, que se caracteriza por tener una memoria de programa del tipo EEPROM, es decir que se puede programar (grabar) sin tener que borrarlo con 12 Curso Bésico de Microcontroladores PIC + CHMCAT | Capttulo I. Los Microcontroladores luz ultravioleta como sucede con los otros tipos. Esto lo hace 6ptimo para el desarrollo de prototipos y la experimentacion. Por su facilidad de manejo, progra- maci6n y aplicaci6n, utilizaremos este microcontrolador para desarrollar este curso Dbasico. Proyectos con microcontroladores Cuando se desea construir un aparato utilizando un microcontrolador como ele- mento central, se deben tener en cuenta varios aspectos: Para empezar, se debe cono- cer los alcances del proyecto, esto con el fin de escoger el microcontrolador mas adecuado. Se debe tener conocimiento de las caracteristicas fisicas del microcontrolador escogido, tales como las funciones que desempefia cada uno de los pines, los volta- jes que estos pueden soportar, los niveles de corriente que pueden manejar, etc. Por otro lado, la parte de software o de programacién también exige un buen conocimiento de las instrucciones del microcontrolador, de las herramientas que se necesitan para escribir el programa y de la forma como éste se pasa a la memoria del integrado. Herramientas tales como el computador, donde se escribe el programa, y un circuito programador 0 quemador para grabarlo en la memoria del chip. En proyectos avanzados también se deben tener conocimientos especfficos de la aplicacién, como las conversiones andlogo a digital, las interfaces y protocolos de comunicaci6n, etc. En los capitulos siguientes trataremos los temas que acabamos de mencionar, una descripcién fisica del microcontrolador, sus instrucciones y los pasos y herra- mientas necesarios para su programaci6n, para luego terminar el curso con Ja cons- truccién de algunos proyectos, que nos introducen de Ileno en el mundo de los microcontroladores. Curso Bésico de Microcontroladores PIC + CEMAT 43 Conozca el PIC16C84 ¢ Pines y funciones * Caracteristicas especiales ¢ Arquitectura interna del PIC16C84 * Circuito de experimentacion con el PIC16C84 ¢ El PIC16F84 Capitulo I. Conozca el PICI6C84 El PIC16C84 es un microcontrolador con memoria de programa EEPROM, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje, ya que no se requiere borrarlo con luz ultravioleta como las versiones EPROM, sino, que se puede programar nuevamente el microcontrolador sin borrarlo previamente por medios diferentes al eléctrico. Por esta razén la gran mayoria de aplicaciones en este texto las haremos usando este integrado. Pines y funciones PIC16C84-04/P st oO 3° S oO 9652CBN a Figura 1. Diagrama de pines del PIC16C84 El PIC16C84 es un microcontrolador de Microchip fabricado en tecnologia CMOS, su consumo de potencia es muy bajo y es completamente estatico: el reloj puede detenerse y los datos de la memoria no se pierden. El encapsulado mds comin para el microcontrolador es e] DIP (Dual Inline Pin) de 18 pines, propio para usarlo en experimentacién. La referencia completa es 16C84-04/P, para el dispositivo que utiliza reloj de 4 MHz. Sin embargo, hay otros tipos de encapsulado que se pueden utilizar segtn el disefio y la aplicacién que se quiere realizar. Por ejemplo, el encapsulado tipo surface mount (montaje superficial) tiene un reducido tamaiio y bajo costo, que lo hace propio para pro- ducciones en serie o en lugares de espacio muy reducido, la figura 2 muestra los tipos de empaque que puede tener el integrado. PIC16C84-04/P }9652CBN et eeL eee} 9652CBN ee b) Encapsulado para montaje superficial a) Encapsulado tipo DIP Figura 2. Tipos de encapsulado Curso Basico de Microcontroladores PIC + CERCAT 17 Capitulo I. Conozea el PICI6C84 Puertos del microcontrolador Los puertos son el puente entre el microcontrolador y el mundo exterior. Son lineas digitales que trabajan entre cero y cinco voltios y se pueden configurar como entra- das o como salidas. El PIC16C84 tiene dos puertos. El puerto A con 5 lineas y el puerto B con 8 lineas, figura 3. Cada pin se puede configurar como entrada o como salida indepen- diente. Usando una instruccié6n especial llamada TRIS, se puede lograr el efecto descrito. En esa instruccién un “0” configura el pin correspondiente como salida y un “1” lo configura como entrada. RA4/TOCKI Re RAS fae RA2 RBS Puerto PIC16C84 Figura 3. Puertos del PIC16C84 _ El puerto B tiene internamente unas resistencias de pull-up conectadas a sus pines (sirven para fijar el pin a un nivel de cinco voltios), su uso puede ser habi- litado o deshabilitado bajo control del programa. Todas las resistencias de pull- up se conectan o se desconectan a la vez, usando el bit llamado RBPU que se encuentra en el registro (posicién de memoria RAM) llamado OPTION. La re- sistencia de pull-up es desconectada automaticamente en un pin si este se pro- grama como salida. Cuando ocurre un reset se deshabilitan todas las resistencias de pull-up. Por lo tanto, si se estén usando, deben ser habilitadas nuevamente por control del programa. El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/ salida 0 como temporizador/contador. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer sefiales un poco distorsionadas y llevarlas a niveles légicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto; por lo tanto se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel de cinco voltios). Como salida, la légica es inversa: un “0” escrito al pin del puerto entrega a la salida un “1” légico. Este pin como salida no puede manejar cargas como fuente, sdlo en el modo sumidero. Como este dispositivo es de tecnologia CMOS, todos los pines deben estar co- nectados a alguna parte, nunca dejarlos al aire porque se puede dafiar el integrado. Los pines que no se estén usando se deben conectar a la fuente de alimentacién de +5V, como se muestra en la figura 4. 18 Curso Bésico de Microcontroladores PIC* CENT Capitulo II. Conozea el PICI6C84 +5V +5V 10K Pines no PIC16C84 utilizados Figura 4. Los puertos no utilizados se deben conectar a la fuente. La maxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA, figura 5. La maxima capacidad de corriente total de los puertos es: PUERTO A PUERTO B Modo sumidero 80 mA 150 mA Modo fuente 50 mA 100 mA El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operacién, la frecuencia y de las cargas que tengan sus pines. Para un reloj de 4 MHz el consumo es de aproximadamente 2 mA; aunque este se puede reducir a 40 microamperios cuando se esté en el modo sleep (en este modo el micro se detiene y disminuye el consumo de potencia. Se sale de ese estado cuando se produce alguna condicién especial que veremos mds adelante). a, PIC16C84 Imax=20mA S 5 PIC16C84 Oo p © nd 1 PIC16C84 PIC16C84 eae) PuertoA Imax=80mA =50MA Puerto B imax=150mA Pucrto mane G0mA a) Manejo de corriente b) Manejo de corriente en modo sumidero (sink) en modo fuente (source) Figura 5. Capacidad de corriente del PIC16C84 Curso Basico de Microcontroladores PIC + CENAT 19 Capitulo 11. Conozea el PICI6C84 El oscilador externo ‘Todo microcontrolador requiere un circuito externo que le indique la velocidad a la que debe trabajar. Este circuito, que se conoce como oscilador 0 reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PIC16C84 puede utilizar cuatro tipos de reloj diferentes. Estos tipos son: + RC. Oscilador con resistencia y condensador. + XT. Cristal. + HS. Cristal de alta velocidad. * LP. Cristal para baja frecuencia y bajo consumo de potencia. En el momento de programar o “quemar” el microcontrolador se debe especi- ficar que tipo de oscilador se usa. Esto se hace a través de unos fusibles llamados “fusibles de configuracién”. El tipo de oscilador que se sugiere para las practicas es el cristal de 4 MHz, porque garantiza mayor precisién y un buen arranque del microcontrolador. Internamente esta frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instruccién se ejecuta en un microsegundo. El cristal debe ir acompafiado de dos condensadores y se conecta como se muestra en la figura 6. 20pF losc1 Cristal de 4MHz— josc2 20pF = Sia Pici6ce4 Figura 6. Conexidn de un oscilador a cristal Dependiendo de la aplicacién, se pueden utilizar cristales de otras frecuencias; por ejemplo se usa el cristal de 3,579545 MHz porque es muy econémico, el de 32,768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas. El limite de velocidad en estos microcontroladores es de 10 MHz. Sino se requiere mucha precisién en el oscilador y se quiere economizar dinero, se puede utilizar una resistencia y un condensador, como se muestra en la figura 7. ssvoc A loses < Fosc/4<—jOSC2 [ eon Figura 7. Conexién de un oscilador RC 20 Curso Basico de Microcontroladores PIC + CHRCET Capitulo II, Conozea el PICI6C84 Reset En los microcontroladores se requiere un pin de reset para reiniciar el funciona- miento del sistema cuando sea necesario, ya sea por una falla que se presente o porque asf se halla disefiado el sistema. El pin de reset en los PIC es llamado MCLR (master clear). El PIC16C84 posee internamente un circuito temporizador conectado al pin de reset que funciona cuando se da alimentacién al micro, se puede entonces conectar el pin de MCLR ala fuente de alimentacién. Esto hace que al encender el sistema el microcontro- lador quede en estado de reset por un tiempo mientras se estabilizan todas las sefiales del circuito y asf garantizar un buen arranque. Cuando se quiere tener control sobre el reset del sistema se puede conectar un botén como se muestra en la figura 8. +5VD0 10K oon 4} WoL Reset if 16084 Figura 8. Conexién del botén de reset Caracteristicas especiales Algunos elementos que forman parte de los PIC no se encuentran en microcontro- ladores de otros fabricantes, o simplemente representan alguna ventaja o facilidad a la hora de hacer un disefio. Veémos una breve descripcién de las més significativas: Circuito de vigilancia (Watchdog Timer) Su funcién es restablecer el programa cuando éste se ha perdido por fallas en la programacién o por alguna raz6n externa. Es muy itil cuando se trabaja en ambien- tes con mucha interferencia 0 ruido eléctrico. En las primeras précticas no se utiliza para facilitar el trabajo; por eso, en el momento de programar el microcontrolador se debe seleccionar en los fusibles de configuracién “watchdog timer off”. Temporizador de encendido (Power-up Timer) Este proporciona un reset al microcontrolador en el momento de conectar la fuente de alimentacién, lo que garantiza un arranque correcto. En el momento de grabar el micro se debe seleccionar el fusible de configuracién “Power-up Timer ON"; su tiempo de retardo es de 72 milisegundos. Modo sleep Esta caracteristica permite que el microcontrolador entre en un estado pasivo donde consume muy poca potencia. En este modo el oscilador se detiene. Se Curso Basico de Microcontroladores PIC + CENCE 21 Capitulo 1. Conozea el PICI6C84 entra en ese estado por la ejecucién de una instruccién especial (llamada sleep) y se sale de é1 cuando se cumple alguna de varias condiciones que se tratan més adelante. Arquitectura interna del PIC16C84 Este término se refiere a los bloques funcionales internos que conforman el mi- crocontrolador y la forma en que estén conectados, por ejemplo la memoria EE- PROM (de programa), la memoria RAM (de datos), los puertos, la légica de control que permite que todo el conjunto funcione, etc. EEPROM oe || ConTangn DE PROGRAMA PROGRANA ‘Bus ce DaTOR G Consno ve Reaisraoce | | Paves FEGISTROS Halt watnuccones | | NVELES WEWORA man «| KD Eero 4) DE DATOS Baers MuLTPpLExAcion DE DIREECIONES Ki2>| reeonzac0n] = CONTADOR EMPORIZADOR ead Puenros 7 <-> 1 ecaaimcason pe ee EROS INTRUCCIONES TRNCRDISA Cel Reo. starus | >| Pusrr ‘ARRANGE DEL OscAGoR CIRCUITO DE wx IG Reser y ‘GENERADOR ncurTo DE Meare VIGILANCIA ns WATCHDOG. Au & —— osc sce era —[reaistao w) Figura 9. Arquitectura interna del PIC16C84 La figura 9 muestra la arquitectura general de! PIC16C84; en ella se pueden apre- ciar los diferentes bloques que lo componen y la forma en que se conectan. Se muestra la conexién de los puertos, las memorias de datos y de programa, los bloques especia- les como el watchdog, los temporizadores de arranque, el oscilador, etc. Todos los elementos se conectan entre sf por medio de buses. Un bus es un conjun- to de Iineas que transportan informaci6n entre dos o mas médulos. Vale la pena desta- car que el PIC16C84 tiene un bloque especial de memoria de datos de 64 bytes del tipo EEPROM, pero su uso y manejo se deja para un nivel més avanzado, En este curso basico no es necesario estudiar toda la estructura interna del micro- controlador; por lo tanto, se resume en un bloque de arquitectura simplificada que se muestra en la figura 10. 22 Curso Bésico de Microcontroladores PIC* CENCE Capttulo 11. Conozea el PICI6C84 EI PIC16C8é4 tiene dos bloques de memoria, el de programa y el de datos o regis- tros. Para una mejor comprensién del funcionamiento del microcontrolador vamos a omitir algunas caracterfsticas que podrian confundir al lector, pero mas adelante, en capitulos més avanzados, se vuelven a retomar y se tratan con mayor claridad. Memoria de programa Logica de control Unidad de ee Memoria de datos Puertos eat Figura 10. Arquitectura simplificada del PIC16C84 Memoria de programa Es una memoria de 1 Kbyte de longitud y con palabras de 14 bits. Es del tipo EE- PROM y por eso se puede programar y borrar eléctricamente, lo que facilita el desa- rrollo de los programas y la experimentacién. En ella se graba, o almacena, el pro- grama 0 e6digos que el microcontrolador debe ejecutar, figura 11. Wade Ora = Memon Sel erogran =— $0000 [Instrucciones ylo Datos et es 0002 Vector de aaa interrupeiin 004 1 Kilobyte $oaFF Figura 11. Memoria de programa del PIC16C84 Vector de reset. Cuando ocurre un reset al microcontrolador, el contador de progra- ma se pone en ceros (000H). Por esta raz6n, en la primera direccién del programa se debe escribir todo lo relacionado con Ia iniciaci6n del mismo. Curso Basico de Microcontroladores PIC + CENT 23 Capitulo I. Conozca et PICI6C84 Vector de interrupcién. Cuando el microcontrolador recibe una sefial de inte- rrupcién, el contador de programa apunta a la direccién 04H de la memoria de programa, por eso, allf se debe escribir toda la programacién necesaria para aten- der dicha interrupcién. Registros (Memoria RAM) El PIC16C84 puede direccionar 128 posiciones de memoria RAM, pero s6lo tiene implementados fisicamente los primeros 48 (0-2F en hexadecimal). De estos los primeros 12 son registros que cumplen un propésito especial en el control del micro- controlador y los 36 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se esti ejecutando, figura 12. Registro $00 [ Direccionamiento indirecto DESCRIPCION DE LOS REGISTROS 01 [TMRO. RO 00H Registro de direccionamiento indirecto. oa Pou Rt 01H Registro temporizador/contador (TMRO) 03) Status 2 02H Contador de programa, parte baja (PCL) 3 03H Registro de estados R4 04H Registro selector, se usa para direccionamiento indirecto 04 | Selector de registros 05 | Dato del puerto A. 06 | Dato del puerto B R5 05H Puerto A, se usan los 5 bits mas bajos o7 RE 06H Puerto B, el bit O también puede ser mer de interrupeién 09 [Ignore R7 07H Noseusa pose R8 08H Nose usa todavia, mas adelante se oa| POLATH SaebE 0B | INTCON. R9 09H No se-usa todavia, més adelante se oc describe RA OAH __Contiene los 5 bits de la parte alta del ‘contador del programa (PCLATCH) FRB 0BH — Registro de control de las. interrupciones (INTCON) FC OCH Registros de propésito general $2 | R2F_2FH _ Registros de propésito general Figura 12. Registros del PIC16C84 Nota: Los registros 81H, 85H y 86H son ignorados por ahora. Estos se utilizan en algunas instrucciones de control, pero atin no es necesario utilizarlas, ya que se re- emplazan por otras més sencillas. En un nivel més avanzado se tratan en detalle. Registro de trabajo W. Este es el registro de trabajo principal, se comporta de manera similar al acumulador en los microprocesadores. Su uso lo explicaremos posteriormente. Registro Option. Los bits de este registro se utilizan para controlar las resistencias de pull-up del puerto B, el flanco de la sefial de interrupcién, el valor de la preescala para el temporizador/contador o para el watchdog timer y el origen de la sefial que entra al temporizador/contador, figura 13. 24 Curso Basico de Microcontroladores PIC + CENCE Capitulo 11. Conozea el PICI6C84 Por facilidad en el aprendizaje del microcontrolador, se escribird en el registro Option con una instruccién del mismo nombre (Option). Pero mas adelante, en el nivel avanzado, veremos como se ha transformado su estructura y aprenderemos a usarlo de otra manera que nos permitir tener mas compatibilidad con las nuevas familias de microcontroladores de Microchip que se desarrollen. RBPUT INTEDG] TOCS | TOSE | PSA] PS2 [PST [PSO] Valor de preescala Prescaler Assignment © Asignacisn del preescalador (0= TRMO (Controlador \famporizadon) (Circuito de vigilancia) Sele en TMRO- Flanco de subida Flanco de bajada L__Seleccién de fuente TMRO 0= Incremento con reloj interno = Incremento con sefial esterna ‘en TOCKI de flanco externo 1 Flanco de interrupcién INT O= Flanco de bajada = Flanco de subida L Resistencia de pull-up en Puerto B Habilitada Deshabilitada Valor de preescala PS2_PSi_ PSO 0 oan 1 0 1 16 0 32 1 64 oO 128 1256 Lee oooe| j4+00+400] Figura 13. Registro Option Contador de programa (PC). El PICI6C84 tiene un contador de programa de 13 bits de ancho, suficiente para direccionar una memoria de 8K, pero solo se tiene implementado el primer 1K. Cuando se ejecuta una instruccién GOTO 0 CALL se usan los 11 bits més bajos, de manera que se pueden hacer saltos en el programa y direccionar toda la memoria (1K) completamente; en la figura 14 se muestra su contenido. La parte alta del contador de programa (PCH) no se puede accesar directamen- te; ella debe cargarse desde los 5 bits mas bajos del registro llamado PCLATCH. EI PIC16C84 no usa el esquema de paginacién de memoria que se tiene en otros microcontroladores; solamente cuando se tiene una tabla que usa el PC se debe tener cuidado de no pasar las paginas de 256 bytes, porque estas instrucciones Curso Basico de Microcontroladores PIC + CEKAT 25 Capitulo 11. Conozea et PICI6C84 s6lo afectan el contenido de la parte baja del PC, para hacer tablas sin preocuparse. Por esto, se debe tener un conocimiento de paginacién usando el PCLATCH, el cual se expicard posteriormente. PCH PoL ote Umer e Taser le eres er nied ries Meee aed sh) | Incluido en la instruccién, Expansion suficiente para futura direccionar toda la memoria del PIC16C84 Figura 14. Contador de programa (13 bits) Registro de estados. Es un registro donde se tiene la informacién del resultado que dejé la diltima operacién efectuada; si el resultado de una operacién fué positivo 0 negativo, si fue cero 0 diferente de cero, etc. El estado de sus bits se puede consultar usando las instrucciones BTFSS (pruebe el bit y salte si es uno) y BTFSC (pruebe el bit y salte si es cero), figura 15. RPo| To] PO| z] oc] c oe Carry o Bit de acarreo. En instrucciones L_ aritméticas se activa cuando se presenta No usados acarreo desde el bit mas significativo del resultado Digit Carry o Bit de acarreo de digito. En operaciones ariméticas se activa cuando hay acarreo entre el bit 3 y al 4 Zero o Bit de cero. Se coloca en 1 cuando el resultado de tuna operacién légica 0 aritmética es 0 Power Down 0 Bit de bajo consumo. Se coloca en 0 por la instruccién SLEEP Time Out o Bit de finalizacién del L__ temporizador. Se coloca en 0 cuando el circuito de vigilancia Watchdog finaliza la temporizacién Seleccién de banco de memoria (Ignorar) Figura 15. Registro de estados (6 bits) Pila (Stack) Estos registros no forman parte de ningiin banco de memoria y no son accesables por parte del usuario. Se usan para guardar el valor del contador de programa 26 Curso Bésico de Microcontroladores PIC* CRRCET Capitulo 11. Conozea el PICI6C84 cuando se hace un Hamado a una subrutina o cuando se atiende una interrupcién; luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de programa recupera su valor leyéndolo nuevamente desde Ia pila. El PICI6C84 tiene una pila de 8 niveles. Circuito de experimentacion con el PIC16C84 (entrenador K-061) El entrenador K-061 de CEKIT es un circuito muy versétil que contiene varios circuitos titiles para empezar a experimentar con el PIC, en la figura 16 se muestra su diagrama en bloques. ale Pulsadores | | |__+| *| Piciece4 ») Butter » x No [* C Relé Circuito NC f de LED's Circuito de Reset Fuente de alimentacién Zumbador del sistema Figura 16. Diagrama en bloques del entrenador K-061 de CEKIT El entrenador incluye un circuito de reset, la fuente de alimentacién, simulacién de entradas con pulsadores, un relé para manejo de cargas de potencia, una salida con zumbador y salidas con LED's. Estas titimas pasan a través de un buffer con el integrado ULN2803 para mejorar la capacidad de corriente y aislar e independizar los circuitos cuando se desea extender el puerto B del microcontrolador hacia otra tarjeta o un protoboard. Descripcion El médulo es completamente auténomo, solo necesita conectarse a Ia linea de ali- mentacién de 120/220 VAC y disponer de un microcontrolador PIC16C84 progra- mado previamente. La fuente de alimentacién est incluida en el circuito; ademas se dispone de un interruptor de encendido y apagado. El entrenador ha sido construfdo de la forma més sencilla posible. Se dispone en el de 8 LED’s, un zumbador, dos teclas y un relé, con lo cual se ocupa los 12 pines de entrada/salida del microcontrolador. + Los LED’s se manejan a través de un integrado ULN2803; este es un buffer que permite obtener una buena iluminaci6n, Para encenderlos, el microcontrolador debe dar una sefial positiva en el pin correspondiente, ya que el buffer tiene inter- namente un transistor NPN que invierte el pulso. Curso Basico de Microcontroladores PIC * CECT Capitulo 11. Conozca el PICI6C84 3 RLVIVAZQ ast Ast sopesing zs 061 Figura 17. Circuito del entrenador K- Curso Bésico de Microcontroladores PIC + CNCET 28 Capitulo 11. Conozca el PICI6C84 + El zumbador se encuentra listo con su oscilador y todos los componentes necesa- tios; el microcontrolador s6lo debe entregar una sefial positiva para encenderlo y éste debe emitir su sonido. * Las teclas o pulsadores que se pueden leer tienen una resistencia conectada al positivo de la fuente, normalmente se lee una sefial I6gica positiva y al oprimir la tecla se lee una sefial I6gica negativa. + El relé se maneja usando un transistor NPN. Entonces para activarlo, el microcon- trolador debe entregar una sefial positiva. Existe en el citcuito impreso del entrenador un conector de 9 pines donde se tiene disponible todo el Puerto B del microcontrolador y también la tierra del circuito. Este sirve para que el usuario del sistema pueda trabajar con esas sefiales en otra tarjeta de aplicacién. Utilizando este entrenador, el estudiante de este curso puede realizar una gran cantidad de experimentos y ejercicios sin necesidad de gastar tiempo en el ensamble de los circuitos en protoboard o en un circuito impreso. El PIC16F84 El PIC16F84 es un nuevo microcontrolador de la familia Microchip, totalmen- te compatible con el PIC16C84. Su principal caracteristica es que posee memoria " flash” en lugar de memoria EEPROM, pero su manejo es igual. Con respecto al PICI6C84, este microcontrolador presenta dos novedades: + Lamemoria de datos aumenta de tamafio, ahora se tienen 68 registros de propésito general (el mapa de memoria de datos llega hasta 4FH). + En el momento de programar el microcontrolador, el fusible de seleccién del tem- porizador de arranque (Power Up Timer) trabaja de forma inversa, es decir, si en el PICL6C84 se selecciona la opcién "High" para activarlo, en el PICI6F84 se debe seleccionar "Low" Curso Basico de Microcontroladores PIC + CEMAT 29 Cémo escribir un programa * Codigo fuente ¢ Clases de lineas en un programa ¢ Archivos y formatos del ensamblador * Como ensamblar un programa ¢ Como programar el microcontrolador Capttulo I. Como escribir un programa El programa es lo que hace funcionar al microcontrolador; las tareas que se eje- cutan y las secuencias que se realicen dependen de él. Las instrucciones que compo- hen un programa se escriben en un editor de texto normal (¢j. el editor del MS-DOS) y son propias de cada familia de microcontroladores. Para convertir estas instrucciones, que son comprensibles para el programador, en un cédigo que pueda ser entendido por el microcontrolador, se utiliza un progra- ma llamado ensamblador. Utilizaremos en adelante un programa ensamblador de Microchip Technology llamado MPASM, el cual es facil de manejar, flexible, de libre distribucién, la detecci6n de errores es simple y tiene la ventaja de ser el més usado en el mundo. Las aplicaciones de los manuales de Microchip y os articulos publicados en las principales revistas, lo utilizan como base. El programa con las instrucciones comprensibles por el programador se llama céddigo fuente, y el que genera el ensamblador y se utiliza para programar el micto- controlador se llama cddigo objeto. Para empezar a escribir los programas del PIC, se deben copiar todos los archivos que estén en el disquete del curso al disco duro del computador. Cree un directorio llamado «CURSOPIC» y luego copie todo del disquete. El procedimiento es el siguiente: 1, Sitdese en el directorio rafz del disco duro «C:\>». 2. Cree el directorio escribiendo: «C:\>md cursopic» , luego oprima «Enter» 3. Copie los archivos del disquete: «C:\>copy a :*.* c:cursopic». 4. Para trabajar entre al directorio: «C:\>ed cursopic» , luego oprima «Enter». 5. En la pantalla debe aparecer: «C:\CURSOPIC>». Ahora esta listo para escribir los programas, usar el ensamblador, programar los microcontroladores y entrar al maravilloso mundo de los PIC’s. Codigo fuente El programa debe cumplir unas normas simples para ser aceptado por el ensam- blador, como por ejemplo el tipo de microcontrolador usado, la direccién de inicio del programa en el micro, las etiquetas, las instrucciones, ete. Para entender mis facil este concepto vamos a escribir un Programa corto y explicaremos paso a paso todo lo que este contiene, figura 1. El ejercicio consis- te en encender cuatro LED's que estdn conectados en el puerto B del microcon- trolador que hace parte del circuito entrenador K-061 que se describié en el capitulo pasado. Si en el computador estamos en el directorio de trabajo «cursopie», se debe es- cribir la siguiente linea: «C:\CURSOPIC>edit prueba.asm» , y luego oprimir «Enter», Curso Basico de Microcontroladores PIC + CEMCET 33 Capitulo IM. Cémo escribir un programa De esta forma, entramos en el editor de texto del MS-DOS y podemos escri- bir las instrucciones correspondientes. El programa se escribe en cuatro colum- nas como se ve en el ejemplo. Asegtirese de «guardar» o «salvar» cada vez que vaya a salir del editor. list p=16c84 ptob equ 6 —_ jel puerto b estd en la direccién 06 de la jemoria RAM reset org @ L_ vector de reset es la direccién @@ de la imemoria de programa iniciomovlw 0 3carga el registro w con 00 tris ptob copia el valor de w al registro que programa jel sentido de los pines del puerto B. En jeste caso los pone como salidas movlw @f ;carga el registro w con Of movwf ptob carga el puerto B con el valor Of que estaba jen el registro w ciclo nop jel programa se queda en este ciclo hasta que jsufra un reset goto ciclo end SEn el momento de quemar el microcontrolador se debe jseleccionar los fusibles de configuracién siguientes: ; oscilador XT : watchdog OFF ; cédigo de proteccién OFF ; power-up timer ON Figura 1. Ejemplo de cémo escribir un programa Las reglas basicas para escribir un programa para un microcontrolador PIC tienen que ver con palabras o comandos especiales, signos de puntuacién, tabu- laciones para escribir en columnas, etc. A continuaci6n, haremos una descrip- cién de cada una de ellas y veremos que tipos de Iineas de instrucciones o de comandos se pueden usar. Como se ve, cada {nea de programa tiene cuatro cam- pos © columnas; cada una contiene diferente informaci6n y recibe un nombre especifico, a saber: Etiqueta Operacién Operandos Comentario ei inicio movlw 0 scarga el registro w con 0 34 Curso Basico de Microcontroladores PIC + CRMCET Capitulo 11. Cémo escribir un programa Las tabulaciones se utilizan en el editor de texto para separar el contenido del programa en columnas. El programa ensamblador entiende este formato y entonces puede proceder a ensamblarlo, La longitud del tabulador (8, 9 6 10 espacios) no es critica, el ensamblador reconoce cuando se pasa de una columna a otra. Etiquetas Son nombres simbélicos que se asignan a una direccién de la memoria. Por ejem- plo, cuando se escribe la palabra inicio, se est asignando el simbolo inicio a un valor propio del microcontrolador, que es la direccién de memoria correspondiente donde quedara grabada esa instruccién. Esto es de gran utilidad porque no es necesario trabajar con los ntimeros reales de las direcciones fisicas, sino que se puede trabajar con algunos simbolos o pala- bras que son de muy fécil recordaci6n, sin importar en donde esté ubicado. Las reglas para definir etiquetas son muy simples: + Deben empezar en la primera posicién de la columna uno. + Pueden incluir carateres alfanuméricos, linea de subrayado (_) e interrogacién. + Su longitud no debe exceder de 31 caracteres. Operacién Es la instrucci6n del microcontrolador que se ejecuta. Todo el conjunto de ins- trucciones del PICI6C84 se verd en el siguiente capitulo. Operandos Son los registros o cantidades sobre los que se realizan las operaciones 0 instruccio- nes. Puede ser un registro de la memoria de datos 0 un valor constante que comtin- mente se conoce como «literal». Cuando se utilizan dos operandos, el primero es el operando fuente y el segundo el operando destino. Literal Es una constante, usualmente un nimero hexadecimal. Ejemplo: start movlw 00 En este caso, el literal (ntimero) es el 00. Los literales son valores que se definen usando la instruccién movlw y otras que se verdn mds adelante. Comentario El ensamblador ignora esta I{nea en el momento de generar el cédigo objeto, pero para la persona que hace el programa es muy importante ya que ahf puede escribir la idea o la explicacién de lo que est haciendo en esa linea del programa. Punto y coma (;). Es un delimitador; hace que el ensamblador ignore la linea de texto que se encuentra ala derecha de él, Se usa para escribir comentarios acerca de la instruccién particu- Curso Basico de Microcontroladores PIC + CEKET 35 Capitulo IH. Cémo escribir un programa lar que se tiene y de la accién que est4 ejecutando el microcontrolador. Ejemplo: En la linea que empieza con inicio, se explica lo que hace la instruccién movlw. Clases de lineas en un programa Como ya vimos qué formato tiene una linea de programa, veremos qué tipo de lineas pueden escribirse. Se pueden usar cuatro tipos diferentes, la de igualdad (equ), la de origen (org), la de instruecién normal y la final (end), figura 2. Etiqueta _Simbolo Numero hexadecimal o Comentarios de igualdad —_direccién de memoria Igualdad: equ Etiqueta Simbolo Direccién hexadecimal Comentarios| de origen Origen: org i Etiqueta Instruccién Registro o namero Comentarios| literal Program: a Noseusa Simbolode No seusa Comentarios linea final Final: end Figura 2. Tabulaciones y tipos de linea Igualdades Se utilizan para asignar un nombre o sfmbolo a un valor especifico (hexadecimal). Por ejemplo cuando se hace: ptob equ 06 Se est asignando el nombre ptob al valor 06, que corresponde a la direccién fisica de el puerto B en la memoria RAM del microcontrolador. De esta forma, cuando se quiere hacer referencia a un pin 0 a todo el puerto B no hay necesidad de buscar en 1a hoja de datos del micro cual es su direccién fisica, sino que se puede hacer referencia a ptob, el ensamblador asf lo entenderé. Ademas, para la persona que escribe el programa, es mucho més sencillo. 36 Curso Basico de Microcontroladores PIC + CRKCET Capitulo 111. Cémo escribir un programa ‘También se puede usar para asignar nombres a un ntimero cualquiera. Por ejemplo : 109 equ 09 min equ o1 Se asigna el nombre r09 al registro 09 de la memoria RAM del microcontrola- dor,. De esta forma, siempre que se refiera a dicha posici6n, se puede hacer a 109. Por ejemplo : movlw ol movwf 109 En este caso se cargé el acumulador con el valor 01 y luego se pas6 a la posicién © registro de memoria de la direccién 09, que est representado por el nombre 109. En un programa se podria tener la siguiente linea : bsf 109,min En ella se hace referencia al bit ntimero 1 del registro de memoria 09. Origen «ORG» es una directiva del ensamblador que se usa para definir el sitio (de la me- moria) donde se desea escribir alguna porcién del programa en particular. Ejemplo: org, 0 En este caso se indica que las instrucciones que vienen a continuacién quedarén a partir de la direccién de memoria 00 en el microcontrolador. La Ifnea origen se puede usar para varios fines : * Al especificar el vector de reset del microcontrolador, para escribir la instruccién que le indica al micro que debe ir al inicio del programa, asf: reset org 0 goto inicio En este caso, cuando se resetea el micro, el contador de programa apunta a la direccién 0 y entonces ejecuta la instruccién que le dice que vaya a la parte de inicio del programa, que puede estar escrita algunas Ifneas més abajo. * En el vector de interrupcién, ejemplo: inter org 04 moviw 05 Curso Basico de Microcontroladores PIC + CEMAT 37 Capitulo Mi. Como escribir wn programa ij Guando el microcontrolador detecta‘una sefial de interrupeién, él contador de programa apunta a la direccién 04 de la memoria. Entonces, alli se debe es- cribir la porcién de programa que se encarga de atendér dicho requerimiento de interrupcién. En el ejemplo, la primera instruccién que se escribe y queda gra- bada en la direccién 04 es: 16 t998d shou 9@ «ti miovlw 05 arnrt0 1 tok Final Se usa para decirle al ensamblador que el! programa ha terminado; se usa la directiva end. Formato de un:programa bal a En. vista de las descripciones anteriores, podemos resumir el formato de un’ progra- ma de la forma en que muestra la figura 3. Encabezado list Igualdades generates 'ptoa equ 05 ptob equ 06 job) OEFAS yin igual dades Programa Final SRSaaSSSeES Figura 3. Estructura o formato de un programa La informacién al comienzo del programa se llama encabezado, ejemplo: piain list p=16c84 «MPASMp , luego oprima «Enter». * Debe aparecer un pantallazo como el que se muestra en la figura 4, ) 1993-96 Mictochip Mechnology Iney/Byte Craft Timi source File : [—_iaamemermer : Processor Type : None | eeror rite + ves RISEN ANEMRNNRENNE Cross Reference File : No (IAHR R50NQaNemnNRIRa ‘isting File : Yes {Mii RsaI Hox Dump Type: Mbt .rIUN0RUHERoSAnAeR Assemble to Object File : No SiiFtiSWORs RGR mNnGIRNeDN i Move Cursor Esc : Quit ‘Type the nane of your source file. te) Tab Fl: Help F10_: Assemble Figura 4. Primer pantallazo del programa ensamblador * El cursor aparece titilando en la primera linea. Si se oprime la tecla Enter se obtie- ne el listado de los archivos .asm del directorio. * Seleccione el archivo Hamado prueba.asm usando las flechas de desplazamiento; cuando esté encima oprima «Enter». Curso Basico de Microcontrotadores PIC * CENCHT 39 Capitulo 11. Como escribir un prograyna Source File : PRUGBA.ASMiENSUiAi RS 0R00 “Processor Type : 16c84li Error File : Yes PRUEBA.ERRIAMUIMTMIG IS ‘Cross Reference File : No SNRUANNRIRAANANRnnUnNINAS ; Listing File : Yes PRUEEA.LS7}SINNR0G20NH68 a Hex Dump Type : INHK6M. PRUEBA. Hx) Assemble to object File : 2 NAAN INNINNNIeRERIED : Move Cursor Esc Press Enter to change value. Help F10 —— Figura 5. Segundo pantallazo del ensamblador + En la primera casilla de la pantalla se vera el nombre del archivo, figura 5. * Con las flechas de desplazamiento pase a escoger el tipo de microcontrolador, de la misma forma que se escoge el archivo. Seleccione el 16C84. *Tgualmente seleccione afirmativo (yes) en la opcién de generar el archivo o lista de errores. + Para ensamblar oprima la tecla F10. * Luego de ensamblado, aparecen en Ja pantalla unas lineas que dicen si se encontra- Ton 0 no errores de sintaxis en el programa y si hay mensajes de advertencia o no. Si los hay, debe revisar el archivo .err donde muestra que tipo de mensajes se tienen y en que linea del programa se encuentra el dato que caus6 dicho mensaje. Los mensajes de advertencia no son causa de falla en el programa, se pueden referir cosas de menor importancia. Los mensajes de error se pueden referir a una instruccién escrita en forma incorrecta, un caracter no reconocido por el ensamblador, etc. En el archivo .err se puede verificar en que nimero de I{nea del programa fuente estd el error. Nuevamente entre al editor de texto y revise el listado del programa prueba.asm. Desplace el cursor hasta dicha Ifnea y corrfjalo; luego vuelva aensamblar. De no presentarse errores, puede observar el archivo Ist y el archivo .hex. Con este tiltimo, se va a programar el microcontrolador. Como programar el microcontrolador Este curso esta basado en el programador de microcontroladores PIC CK-175 de CEKIT, figura 6. En el disquete que acompafia el curso est un archivo llamado prog.txt donde se encuentra una guia de como programar los micros. 40 Curso Basico de Microcontrotadores PIC + CNET Capitulo 11. Cémo escribir un programa Programador Este es un aparato que puede programar los PICs de 18 pines de la segunda genera- ci6n; estos incluyen los microcontroladores PIC 16C6X, 16C7X, el 16C8X y los microcontroladores PIC12CSOX de 8 pines. Este programador se conecta al puerto paralelo de cualquier computador PC 0 compatible, ¢ incluye el cable de conexién, el disquete con el software ensamblador y el software de programacién. tt) Conexién con el Base para computador microcontrola- dor de 18 pines Conexion al adaptador de corriente Base para microcontrolador de 8 pines i Bu PROGRAMADOR Ric ri 5 Conector para programacién en el circuito de aplicacién Fuente de alimentacion Figura 6. Programador de microcontroladores PIC Curso Basico de Microcontroladores PIC + CEKAT at Capitulo 111. Como escribir un programa Cémo guardar el programa en la memoria del microcontrolador Asegtirese que el socket del programador esté vacio, de tal manera que el microcon- trolador no se encuentre en éste hasta que el software del programador sea ejecutado. Conecte el programador al puerto paralelo de un computador PC, utilizando el cable suministrado, el cual tiene un conector macho tipo «D» de 25 pines que ird al computador y un conector macho tipo «D» de 9 pines, que iré al programador. En la figura 7 se muestra el diagrama de conexiones de este cable. Conector DB - 9 Macho (Alprogramador) Conector DB - 25 Macho (Al computador) Figura 7. Conexién entre el puerto paralelo del computador y el programador. Conecte el programador al adaptador de pared (este deberd tener un voltaje entre 15 y 20 voltios si es DC, y un voltaje entre 12 y 15 voltios si es AC), y conecte éste a la red puiblica de AC (110V/60Hz 6 220V/SOHz, dependiendo del pais). En este momento, el programador estaré preparado para programar los micro- controladores PIC descritos. Nota: Uno de los LEDs o ambos pueden encenderse en este paso, pero no debe ser causa de alarma; ellos se apagarén al momento de ejecutar el software del programador. No inserte ni remueva un microcontrolador cuando cualquiera de los LEDs esté encendido. Operacién Una vez se tiene el programa con extensién .hex listo para almacenarse en la memo- tia de programa del microcontrolador, se deben seguir los siguientes pasos: * Ejecute el software del programador con el comando «C:\CURSOPIC>PROG» , luego oprima «Enter»; debe aparecer un pantallazo como el de la figura 8. * Con el mouse seleccione la opcién Open, sino, presione la combinacién de teclas O para abrir su archivo .hex. Seleccione el archivo. + Luego debe elegir el tipo de microcontrolador apropiado usando el mouse del com- putador o las teclas que se encuentran resaltadas en cada opcién. * Seleccione los fusibles de programacién adecuados de la misma forma que en el punto anterior. 42 Curso Basico de Microcontroladores PIC + xi Capitulo 11. Cémo escribir un programa Hebd. Figura 8. Pantallazo del software programador de PIC Inserte un microcontrolador PIC16C84 en el socket del programador, cuidando que la posicién es la correcta (el pin 1 debe coincidir con el punto) y con el mouse seleccione la opcién Program, si no, presione las teclas P para programarlo. En el caso de aparecer un mensaje que dice que el micro no estd borrado, escoja la opei6n de seguir adelante con el proceso de grabacién. Esta es una ventaja del PIC 16C84: no es necesario borrarlo antes de programarlo. Luego de programado, retire el chip con cuidado y péngalo en su circuito, el cual debe estar desconectado de la fuente de alimentacién. Curso Basico de Microcontroladores PIC » Ca=RCAT 43 Instrucciones del PiC16C84 ¢ Estructura de las instrucciones ¢ Tipos de instrucciones ¢ Descripcion de las instrucciones Capitulo IV. Instrucciones det PICIGC84 Estructura de las instrucciones Las instrucciones del PIC 16C84 se dividen en tres grupos diferentes: Orienta- das a los registros, orientadas a los bits y de control. Todas se ejecutan en un ciclo de instruccién, es decir, en un microsegundo cuando se tiene un cristal de 4 MHz, excepto las instrucciones de salto que ocupan dos ciclos de instruccién. Cada una consta de 14 bits que estén divididos en dos partes: El cédigo de operacién y el operando. bit 13 bit0 Cédigo de operacién Operando (s) El c6digo de operacién especifica el tipo de instruccién (sumar, restar, cargar, probar bit, etc.) y siempre es igual. El operando es la parte variable de la instruccién y especifica un dato, una etiqueta o direccién de salto, el néimero o nombre del registro con el que se efecttia la operacién, la posicién del bit que se desea chequear © ajustar a un valor o el destino donde se guardard el resultado de la operacién. Tipos de instrucciones Instrucciones orientadas a los registros (0 al byte que contienen): En ellas la letra “f” representa uno cualquiera de los 48 registros de memoria RAM y la letra “d” representa cual es el destino del resultado de la operacién. Si d=0 el resultado de la operacién se carga en el registro de trabajo W; si d=1 el resultado se guarda en el registro “f” especificado por la instruccién. Ejemplo: INCF fd podria ser INCF 106,0 En este caso el contenido del registro 06 se incrementa una vez y ese nuevo valor se guarda en el registro W, el contenido del registro 106 permanece intacto. Instrucciones orientadas a un bit de los registros: En ellas la letra “b” representa un bit de el registro “f” que lo contiene. Ejemplo: BCF fb podria ser BCF 19,2 En este caso el bit ntimero 2 de el registro 109 se pone en cero; los otros bits perma- necen intactos. Instrucciones de control y manejo de literales: En ellas la letra “k” representa un dato constante (literal) 0 una direccién de memo- ria para un salto (etiqueta). Ejemplo 1: GOTO k podria ser GOTO 00 6 GOTO reset 48 (Curso Bésico de Microcontroladores PIC+ CENCE Capitulo IV. Instrucciones del PICI6C84 Estructura de las instrucciones Las instrucciones del PIC 16C84 se dividen en tres grupos diferentes: Orienta- das a los registros, orientadas a los bits y de control. Todas se ejecutan en un ciclo de instruccién, es decir, en un microsegundo cuando se tiene un cristal de 4 MHz, excepto las instrucciones de salto que ocupan dos ciclos de instruccién. Cada una consta de 14 bits que estén divididos en dos partes: El c6digo de operacién y el operando. bit 13 bitd Cédigo de operacién Operando (s) El cédigo de operacién especifica el tipo de instruccién (sumar, restar, cargar, probar bit, etc.) y siempre es igual. El operando es la parte variable de la instrucci6n y especifica un dato, una etiqueta o direccién de salto, el mimero o nombre del registro con el que se efecttia la operacién, la posicién del bit que se desea chequear © ajustar aun valor 0 el destino donde se guardaré el resultado de la operacién. Tipos de instrucciones Instrucciones orientadas a los registros (0 al byte que contienen): En ellas la letra “f” representa uno cualquiera de los 48 registros de memoria RAM y la letra “d” representa cual es el destino del resultado de la operacién. Si d=0 el resultado de la operacién se carga en el registro de trabajo W; si d=1 el resultado se guarda en el registro “f” especificado por la instruccién. Ejemplo: INCF fd podria ser INCF 106,0 En este caso el contenido del registro 06 se incrementa una vez. ese nuevo valor se guarda en el registro W, el contenido del registro r06 permanece intacto. Instrucciones orientadas a un bit de los registros: En ellas la letra “b” representa un bit de el registro “f” que lo contiene. Ejemplo: BCF fb podria ser BCF 09,2 En este caso el bit ntimero 2 de el registro r09 se pone en cero; los otros bits perma- necen intactos. Instrucciones de control y manejo de literales: En ellas la letra “k” representa un dato constante (literal) o una direccién de memo- ria para un salto (etiqueta). Ejemplo 1: GOTO k podria ser GOTO 00 6 GOTO reset 48 Curso Basico de Microcontroladores PIC+ CERCET Capttulo 1V. Instrucciones det PICI6C84 En este caso se le dice al contador de programa del microcontrolador que vaya a la direccién de memoria 00. Ejemplo 2: MOVLW k podria ser MOVLW 05 En este caso el registro de trabajo W se carga con el mimero 05. Otras definiciones + Nemotécnico es el nombre que se le da a la instruccién del microcontrolador que esté escrita de manera entendible por la persona que hace el programa (ej. movlw). * La letra “x” representa una condicién que no importa. * Las letras: “Z, C, DC” representan los bits del registro de estados (banderas). Tabla de equivalencias en los sistemas de numeracién De val deci Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 O©MNOMAWNA0 TAMDQDSO©ENAGALONAT Esta tabla nos sirve para comprender mejor las operaciones o estados que se obtienen en cada una de las instrucciones, ya que cada una de ellas va acompafiada por un ejemplo, en el cual uno o varios registros se ven afectados y cambian de valor. Asf, el lector puede convertir el ntimero obtenido luego de la operacién, en su equivalente binario, para observar bit a bit, el tratamiento que cada instruccién hace a los registros 0 valores constantes que en ella intervienen. Descripcion de las instrucciones Para facilitar el estudio de las instrueciones y hacer claridad en su operacién, haremos una descripeién detallada de cada una, explicando la forma de escribirla en el programa y la forma en que esta afecta los registros o bits involucrados en ella, Ademés, se incluyen ejemplos que muestran en forma clara los resultados que se obtienen con el uso de cada una. Curso Basico de Microcontroladores PIC + CEKET 49 Capitulo IV. Instrucciones del PICI6C84 ADDLW Suma un valor literal al contenido del Teg istro W. Sintaxis: ADDLW k Operacién: (W) +k>(W) 1 Ciclos de instruccién: Bits del registro de estados que se afectan: eDGiz: Ejemplo : ADDLW 15 Antes de lainstruccién = W= 10 Después de la instruccién W =25 ADDWF Suma el contenido de un registro al contenido del registro W. |] Sintaxi ADDWF fd Operacién: (W) + (> (destino) Ciclos de instruccién: 1 Bits del registro de estados que se afectan: C,DC,Z Ejemplo: ADDWF FSR,O Antes de la instrucci6n == W=17 FSR Después de la instruccién D9 FSR Operacién légica AND entre un literal y el registro W] ANDLW_ k (W) AND (k)>(W) 1 Ciclos de instruccién : Bits del registro de estados que se afectan: 4 Ejemplo: ANDLW SF Antes de la instruccién = W=A3 Después de la instruccién ~W-=03 50 Curso Basico de Microcontroladores PIC + CRERCAT Capttulo IV. Instrucciones del PICI6C84 ANDWF Operacién légica AND entre un registro “f” y el registro W. Oper BI js = ree Sintaxis : ANDWF fd Operacién : (W) AND (f) —> (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : ANDWF FSR, 1 Antes dela instruccién =» W=17 FSR=C2 Después de la instrucciin. W=17 FSR=02 | BCE Pone en cero el bit “b” del registro P'. _] Sintaxis : BCF fb Operacién : 0 (f) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : BCF regis,7 Antes de la instruccién Después de la instruccién [BSF Pone en uno el bit “b” del registro *f. Sintaxis : BSF fb Operacién : I(f) Ciclos de instruceién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : BSF regis,7 Antes de la instruccién —_regis = 0A Después de la instruccién regis = 8A Curso Basico de Microcontroladores PIC + CEMET 51 Capttulo IV. Instrucciones del PICI6C84 BTFSC ___ Prueba el bit “b” del registro “f” y salta una linea si estd en cero. Sintaxis : BTFSC fb Operacién : salta si (f) = 0 Ciclos de instruccién : 1(2) Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui BTFSC _regis,0 falso GOTO inicio verdad .......... Antes de la instruccién contador de programa = aqui Después de la instruccién si el bit 0 del registro regis = 0 contador de programa = verdad si el bit 0 del registro regis contador de programa = falso BTFSS Prueba el bit “b” del registro “f” y salta una linea si esta en uno. Sintaxis : BTFSS fib Operacién : salta si (f) Ciclos de instrucci6n : Bits del registro de estados 1(2) que se afectan: Ninguno Ejemplo: aqui BTFSS __regis,0 falso GOTO inicio verdad Antes de la instruccién contador de programa = aqui Después de la instruccién si el bit 0 del registro regis = 1 contador de programa = verdad siel bit 0 del registro regis = 0 contador de programa = falso 52 Curso Bésico de Microcontroladores PIC + CHERCET Capitulo IV. Instrucciones del PICI6C84. CALL Llama una subrutina que esta ubicada en la posicién de memoria o etiqueta “k”. Sintaxis : CALL k Operacién : (PC) + 1>pila, k-> PC) Ciclos de instruccién : 2 Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui CALL rutina Antes de la instruccién _contador de program: Después de la instruccién contador de program: pila = direccién aqué CLRE Borra el contenido del registro “f”, lo carga con 00. ] Sintaxis : CLRF f Operacién : 00> (f) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : CLRF regis Antes de la instruccién Después de la instruccién [crew Borra el contenido del registro W, lo carga con 00._] Sintaxis : CLRW Operacién : 00-—>(w) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : cLRW Antes de la instruccién = W Después de la instruccisn = W= Curso Bésico de Microcontroladores PIC + C@KIT 53 Capitulo IV. Instrucciones del PICI6C84 CLRWDT Borra el conteo del ‘Watchdog, Timer. ] Sintaxis : CLRWDT Operacién : 00-+WDT Ciclos de instrucci6n : 1 Bits del registro de estados que se afectan: TO, PD Ejemplo : CLRWDT Antes de la instruccién Contador WDT = ? Después de la instruccién Contador WDT = 00 TO=1,PD=1 COMF ‘Complementa el contenido del registro “tT”. Sintaxis : COMF fd Operacién : (f)—> (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Z Ejemplo : COMF _regis,0 Antes de la instruccién regi: 3,W=? Después de la instruccién regis = 13, W= EC DECF Decrementa el contenido del registro “f”. DECF fd (f) - 1-» (destino) 1 Ciclos de instruccién : Bits del registro de estados que se afectan: Z Ejemplo : DECF regis, 1 Antes de la instruccién regis = 13 Después de la instrucci6n _ regis = 12 54 Curso Bésico de Microcontroladores PIC® CHET Capttuto IV. Instrucciones del PICI6C8S DECFSZ Decrementa el contenido del registro “”; siel contenido queda en 00, salta una linea. Sintaxis : DECFSZ fd Operacién : (£)- 1» @estino), salta si el resultado es cero Ciclos de instruccién : 1(2) Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui DECFSZ_ regis, 1 GOTO ciclo continéa Antes dela instruccién —_ contador de programa = aqu{ Después de la instruccién regis = regis - 1 si regis = 0, entonces contador de programa = continua si regis #0, entonces contador de programa = aqu{ +1 [soto El contador de programa salta a la direccion Sintaxis : GOTO k Operacién : k—>Pc Ciclos de instruccién : 2 Bits del registro de estados que se afectan: Ninguno Ejemplo : GOTO ciclo Antes de la instruccién _contador de program: Después de la instruccién contador de program: INCF Incrementa el contenido del registro“. | Sintaxis INCF fd Operacién : (0) + 1 (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Z Ejemplo : INCF regis, 1 Antes de la instruccién regis = 24 Después de la instrucci6n regis = 25 Curso Basico de Microcontroladores PIC + CRIT 55 Capitulo TV. Instrucciones del PICI6C84 INCFSZ Sintaxis : INCFSZ f,d Operacién : (f) + 1» @estino) , salta si el resultado es cero Ciclos de instruccién : 1Q) Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui DECFSZ_ regis, 1 GOTO ciclo contintia..... Antes de la instruccién contador de programa = aquf Después de la instruccién regis = regis + 1 si regis = 0 , entonces contador de programa = continua si regis #0 , entonces contador de programa = aqui + 1 TORLW Operacién légica OR entre el registro W y el literal “k”._] Sintaxis : TORLW) sk Operacién : (W) OR (k) > (W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : IORLW 35 Antes de la instruccién W =9A Después de la instruccién ~=W = BF TORWF Operacién légica OR entre el registro W y el registro “ IORWF fd Operacién : (W) OR (f)—» (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : IORWF regis,0 Antes de la instruccién regis = 13, W=91 Después de la instruccién regis =13 , W =93 56 (Curso Basico de Microcontroladores PIC + CmnCET Capttulo IV. Instrucciones del PICI6C84 MOVLW Carga el registro W con el literal “k”. Sintaxis : MOVLW k Operacién : k>(W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : MOVLW 5A Antes de la instruccién Después de la instruccién MOVE Mueve el contenido del registro “f”. Sintaxis : MOVF fd Operacién : ()—> (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : MOVF _ regis,0 Antes de la instruccion. = W=? Después de la instruccién W = valor guardado en regis MOVWE Mueve el contenido del registro W al registro P’. Sintaxis MOVWF f Operacién : wh Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Bjemplo : MOVWF OPTION Antes de la instruccién OPTION = ?, W=48 Después de la instruccién OPTION =48, W =48 Curso Basico de Microcontroladores PIC + CEMAT 57 Capitulo IV. Instrucciones del PICI6C84 NOP No hace nada. Sintaxis : NOP Operacién : k+>(W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : NOP OPTION Carga el registro OPTION con el contenido del registro W ] Sintaxis : OPTION Operacién : W- OPTION (Programa algunas funciones especiales) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : OPTION Esta instruccién se considera obsoleta, pero por facilidad en el aprendizaje, se utiliza en el nivel basico. [RETRIE Retorno del llamado a interrupeion. ] Sintaxis RETFIE Operacién : pila—» contador de programa , 1 k intcon,gie Ciclos de instruccién : 2 Bits del registro de estados que se afectan: Ninguno Ejemplo : RETFIE Antes de la instruccién contador de programa = ? Después de la instruccién contador de programa = pila 58 Curso Bésico de Microcontroladores PIC + CERCET Capttulo IV. Instrucciones det PICI6C84 RETLW. Retorno de interrupci6n y carga el registro W con el literal "k”, Sintaxis : RETLW k Operaci6 k—>W, pila—»contador de programa Ciclos de instruccién : 2 Bits del registro de estados que se afectan: Ninguno Ejemplo : CALL tabla tabla ADDWF PC RETLW_ kl RETLW) k2 RETLW) kn Antes de la instruccién Ww Después de la instrucci6n =W =k7 [RETURN Retomo desde subratina. Sintaxis : RETURN Operacién : pila—>contador de programa Ciclos de instruccién : 2; Bits del registro de estados que se afectan: Ninguno Ejemplo : RETURN Después de la interrupci6n, contador de programa = pila RLF Rote el contenido del registro “f” ala izquierda, usando el carry] Sintaxis : RLF f,d Operacién : Rota el contenido del registro “f” a la izquierda a tra- vés del carry. Si d=0, el resultado se guarda en W, si d=1 en “f”. Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Cc Ejemplo : RLF regis,0 Antes de la instruccién C=0, W=?, regis = 11100110 Después de la instruccin C= 1,W= 11001 100 regis = 11100110 Curso Basico de Microcontroladores PIC « CEMET 59 Capitulo IV. Instrucciones del PICI6C84 RRE Rote el contenido del registro “f” a la derecha, usando el Sintaxis : RRF fd Operacién : Rota el contenido del registro “fa la derecha a través del carry. Si d=0, el resultado se guarda en W, si d=1 en “P". Ciclos de instruccién : 1 Bits del registro de estados que se afectan: G Ejemplo : RRF regis,0 Antes de la instruccién Cc=0, '=?, regis= 11100110 Después de la instruccién SLEEP Entra en modo dormido (standby). Sintaxis : SLEEP Operacién : 00->WDT, | ->TO, 0->PD Ciclos de instruccién : 1 Bits del registro de estados que se afectan: TO, PD Ejemplo : SLEEP SUBLW Resta el contenido del registro W de el literal “k” (usando el método de complemento a dos). Sintaxis : SUBLW k Operacién : k-(W)>(W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: epelz Ejemplo 1 : SUBLW 02 Antes dela instruecign = W=1,C=? Después de la instruccién ~W=1, C= I (positivo) Ejemplo 2: Antes de la instruccin = W=2,C =? Después de la instruccién. = W=0, C= I (cero) Ejemplo 3: Antes de la instruccign = W=3,C=? Después de la instruccién © W=FF , C=0 (negativo) 60 Curso Basico de Microcontroladores PIC + CET Capttulo IV. Instrucciones del PICI6C84 sta el contenido del registro W de el registro (usando el método de complemento a dos SUBWF fd Sintaxis : Operacién : (O) - (W)—> Gestino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: C,DC,Z Ejemplo 1 : SUBWF _ regis, Antes de la instruccién Después de la instruccién Ejemplo2: Antes de la instruccién Después de la instruccién Ejemplo3: Antes de la instruccién Después de la instruccién SWAPF Intercambia los cuatro bits altos y los cuatro bits bajos del registro “f”. Sintaxis : SWAPF fd Operacién : £<3:0>—» d<7:4> f<7:4> d<3:0> Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo 1 : SWAPF _ regis,0 Antes de lainstruccién regi Después de la instruccién regis = AS, W=5A Curso Basico de Microcontroladores PIC + CEMCET 61 Capitulo IV. Instrucciones del PICI6C84 TRIS Carga el registro TRIS (programaci6n de los puertos como entrada/salida) con el contenido del registro W. Sintaxis : TRIS f Operacién : W-> (registro TRIS del puerto “A 6B”) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo 1: TRIS puertoA. Esta instruccién se considera obsoleta, pero por facilidad en el aprendizaje, se utiliza en el nivel bésico. XORLW Operaci6n légica XOR entre el registro W y el literal Sintaxis : XORLW k Operacién : (W) XOR (k)—>(W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : XORLW AF Antes de la instruccién ‘W =BS5 Después de la instruccién = W =1A XORWF Operaci6n l6gica XOR entre el registro W y el registro “P'] Sintaxis : XORWF fd Operacién : (W) XOR (f)—> (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: 7) Ejemplo : XORWF regis,1 Antes dela instruccién regis = AF, W = BS Después de la instruccién regis = 1A, W = BS 62 Curso Basico de Microcontroladores PIC + Cac Programacion en PIC Los primeros pasos ¢ Encender y apagar un LED ¢ Secuenciador con cuatro LED's ¢ Leer los pulsadores y encender el LED correspondiente ¢ Programa avanzado utilizando el entrenador K-061 Capttulo V. Programacién en PIC. Los primeros pasos Como la prictica hace al maestro, veremos que con la realizacién de ejemplos. practicos se pueden despejar muchas dudas. Los ejercicios se basan en el entrenador PIC K-061 de CEKIT, cuyo diagrama esquemitico se encuentra al final del capitulo II “Conozca el PIC16C84”. Aunque lo mds conveniente es tener el entrenador, usted puede ensamblar los circuitos equivalentes en un protoboard. Ejercicio 1: Encender y apagar un LED Este es el ejercicio basico por excelencia y ayuda a todas las personas a perder el miedo al manejo del microcontrolador. Si se observa el diagrama del entrenador, los ocho pines del puerto B han sido dispuestos como salidas con el objeto de controlar LED's, necesitando s6lo una resistencia en serie con éste para limitar la corriente. El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena cantidad de corriente, suficiente para proporcionar iluminacién adecuada al LED. Para encender el primer LED, tiene que colocarse un estado I6gico alto en el pin 6 del microcontrolador , mientras que un estado bajo hard que éste se apague; esto se debe al transistor interno del ULN2803 que invierte la sefial. La funcién del micro- controlador ser entonces sencilla: alternar estados I6gicos altos y bajos en su pin RBO con un retardo tal, que nos permita visualizar el efecto. Para una mejor com- Prensi6n del proceso se muestra en la figura 1 el diagrama de flujo respectivo, el mismo que nos sirve para la realizacién del programa. EMPEZAR Encabezado Iniciatzacion ~ ¥ Encender LED l tina de retardo| ‘Apagat LED Futina do retardo Figura 1. Diagrama de flujo del primer ejercici Curso Basico de Microcontroladores PIC + CEMIT 65 Capitulo V. Programacién en PIC, Los primeros pasos Este programa prende y apaga un LED list p+16c84 jse utiliza el PICi6cE4 ptob equ 06 jel puerto b est en la direccién 06 de la jmemoria RAM regl equ b jaqui se asignan nombres para reemplazar los jregistros reg2 equ Oc regs equ sd valorl equ 3; aqui._se asignan nombres a los valores valor2 equ 40 ;constantes valor3 equ S@ reset org 0 sel vector de reset es la direcci6n 00 goto inicio ;se envia al inicio del programa org: 2bi.7. sempieza el programa en la posicién de jmemoria 7 inicio movlw @0 jse carga el registro W con el valor 00 tris ptob ;se programan los pines del puerto B como alidas }se carga el registro W con el valor 01 3Se pasa ese valor al puerto 8 para encender jel LED que se encuentra conectado al pin RBO otra movlw @1 movwf — ptob call retardo se mantiene el LED encendido por un momento moviw 00 e carga el registro W con el valor 0@ mowwf — ptob e carga el registro puerto B con cero para sapagar el LED call fe mantiene el LED apagado por un momento goto fe continda el programa en otra, es decir que jse queda ejecutando la misma accién jesta rutina genera un tiempo de espera retardo movlw valor1 ;se carga el registro W con el numero valor1 jes decir con 30 mowwf -regl se traslada ese nimero al registro regi tres movlw valor2 ;se carga el registro W con el niimero valor2, jes decir con 40 mowwf reg2_ se traslada ese nimero al registro reg2 dos movlw valor3 ;se carga el registro W con el nimero valor3, jes decir con 50 movwf reg3_ se traslada ese nimero al registro reg3 uno decfsz_reg3 se decrementa el registro reg3 y si el valor jes cero se salta a la goto uno —_;instruccién siguiente, si no es cero se jcontinda decrementando decfsz reg2 igual que el anterior goto dos decfsz regi igual que el anterior goto tres retlw @ end Figura 2. Programa que enciende y apaga un LED (ejert.asm) Consideremos este primer programa; en él se pueden observar una serie de It- neas de cabecera, antes de la etiqueta inicio. Ellas, como ya lo habfamos menciona- do, son una herramienta que nos proporciona el ensamblador para asignar nombres 66 Curso Basico de Microcontroladores PIC + CHRCET Encabezado Iniciacin a lEncender LED ©] Llamar retardo Apagar LED =| Lamar retardo Rutina de retardo 5 Final del programa Capttulo V. Programacién en PIC. Los primeros pasos logicos, facilmente memorizables, a algunas posiciones de memoria, bits, puertos y registros para utilizar éstos en el cuerpo principal del programa; el ensamblador se encarga de remplazar estos nombres por los valores numéricos correspondientes, formando asf el programa en cédigo objeto. Con lo anterior, la direccién 06 corresponde al puerto B, al cual hemos llamado ptob, de més fécil recordacién que un mimero. De igual manera tres posiciones auxiliares de memoria: la OB, OC y OD, que contendrén valores a decrementar para establecer una rutina de retardo, las hemos llamado reg], reg? y reg3. También se han utilizado tres cantidades a las cuales les hemos asignado nombres, con el objeto de facilitar el manejo ya que, al momento de ensamblar el programa, podemos rem- plazarlos répidamente si ellos no eran los adecuados. Veamos ahora algunos bloques de instrucciones més detalladamente: Inicio. La primera instruccién carga el registro W con 0 para configurar, con la segunda instruccién (tris), el puerto B como salidas. Se debe recordar que un cero, en el registro de trabajo W, configura el pin respectivo como salida, mien- tras que un uno lo hace como entrada. Esta instruccién se da, por lo regular una sola vez por puerto. Otra. Aquf se carga el registro de trabajo W con uno, con el objeto de sacar esta- dos l6gicos altos por el pin RBO del puerto B, siendo este estado el encargado de encender el LED. Después de configurado el puerto, éste puede ser tratado como cualquier otro registro, admitiendo transferencia de datos hacia (escribir sobre el puerto) y desde (leer el puerto) el registro de trabajo W. También se pueden reali- zar operaciones légicas, de rotacién, etc. La tercera linea hace un llamado a una rutina de retardo, la cual se explicara mAs adelante, retornando al programa prin- cipal tan pronto ésta es ejecutada. La parte que sigue carga el registro de trabajo W con el literal cero, el cual se sacaré por el puerto B, con el objeto de apagar el LED. De nuevo se hace un llamado ala rutina de retardo, para visualizar el efecto; después de la ejecucién de la rutina, el control del programa salta a la direccién dada por la etiqueta otra para continuar realizando la primera parte del mismo. RETARDO movlw VALORL movw£ REGL RES” novi “movi REG? “0s movi VALOR? nov? REG) [uso decfsz REGS goto UNO dectaz REGZ zetlw 10 Figura 3. Rutina de retardo Curso Basico de Microcontroladores PIC + CERT 67 Capitulo V. Programacién en PIC. Los primeros pasos Retardo. En la figura 3 se muestra Ja rutina de retardo mencionada anterior- mente. Debido a la gran velocidad con la cual se ejecutan las instrucciones en el microcontrolador (un millén por segundo, con un reloj de 4 MHz), es nece- sario efectuar, con mucha frecuencia, retardos que nos permitan observar al- gunos fenémenos lentos, tales como el encendido de LEDs, lamparas, relés, ete. Tales retardos se logran cargando, con un determinado valor, posiciones auxiliares de memoria RAM o registros, dectementdndolos posteriormente y consultando el momento en el cual llegan a cero; dependiendo del resultado de la consulta, el programa puede dirigirse a dos sitios diferentes, como puede observarse en el diagrama de flujo de la figura 4. En ella se han resaltado tres Pequefios bloques, que corresponden a una sola instruccién en la familia del microcontrolador PIC: decfsz. Esta instruccién decrementa un registro y con- sulta si el contenido de éste ha llegado a cero; si es asf, omite la siguiente instrucci6n; si no lo es, la ejecuta. Esto permite implementar bifurcaciones de acuerdo al cumplimiento de una condicién. (Gargar REG1 con valor (Gargar REG2 con valor 2 os Cargar REGS con valor DEC REGS, Figura 4. Diagrama de flujo de {a rutina de retardo 68 Curso Bésico de Microcontroladores PIC + Clair Capttuto V. Programacién en PIC. Los primeros pasos Para conocer el tiempo que se tarda toda la rutina, podemos hacer algunos célou- los, siempre expresando las cantidades en términos de los ciclos de instruccién y Para ello debemos saber cuanto tarda cada una de ellas. Afortunadamente, todas las instrucciones de los microcontroladores PIC se ejecutan en un ciclo, excepto cuan- do se realiza un salto, en cuyo caso la instruccién utiliza dos ciclos. Con lo anterior, debemos empezar por la rutina més interna, marcada con la letra A en la figura 3. Mientras que no se cumpla la condici6n, la instruccién decfsz reg3 consume I ciclo y la instruccién goto se ejecuta en dos ciclos; esta rutina intema Basta entonces tres ciclos, ejecuténdose un niimero de veces que est dado por el valor contenido en el registro valor3, en este caso el valor hexadecimal 50 (observe la definici6n de éste en la cabecera y recuerde que por defecto se asumen cantidades hexadecimales). EI ntimero total de ciclos consumidos por esta rutina serd entonces el producto: Niimero ciclos A = 3 x valor3 3 x 80 (el decimal de SOHex) = 240 ciclos de instruccién Haciendo un andlisis similar, la subrutina B (que abarca la subrutina A) tendré 245 (1 + 1 + 240 + 1 + 2) ciclos. Aqui el total de ciclos consumidos depende del registro valor? y ella se tardaré: Niimero ciclos B_ = 245 x valor2 45 x 64 (el decimal de 40Hex) = 15860 ciclos de instruccién De igual manera, podemos considerar que para la subrutina C (que abarca tanto 1a A como la B) se tienen un mimero de ciclos de 15865 (15860 + 5); considerando que el mtimero total de ciclos depende del registro valor1, se tiene: 5865 x valor] 5865 x 48 (cl decimal de 30Hex) = 761520 ciclos de instruccién Ntmero ciclos C Podemos emplear una expresién algebrdica para lo anterior, resultando més facil realizar los célculos: Total Ciclos = ((valor3*3 + 5)*valor2 + 5)*valor] En este caso, la constante 5 corresponde al niimero de ciclos que estan utilizando las instrucciones adicionales en las rutinas B y C, mientras que valor!, valor2 y valor3 corresponden a las constantes tomadas de la cabecera del programa. Si quic- Fe conocer el tiempo empleado por esta rutina, debe saber que un ciclo de instruc- ci6n corresponde a cuatro ciclos del reloj oscilador; si la frecuencia del oscilador es de 4 MHz, la frecuencia del reloj de instrucciones ser4 entonces de 1 MHz, en cuyo Curso Basico de Microcontroladores PIC + CEKET 69 Capitulo Y. Programacién en PIC, Los primeros pasos caso el ciclo de instruccin es de 1 microsegundo. Para el ejemplo anterior, se ten- dria entonces que la rutina de retardo se tardarfa un poco mas de 765520 pis, mas que suficientes para visualizar el encendido y apagado de un LED. Cuando se requiere gran precisién en el cumplimiento de rutinas de tiempo, se acude a un oscilador a cristal para el oscilador del microcontrolador. Cuando la precisiGn no es una preocupacién, se puede acudir a una sencilla red RC, para pro- porcionar la frecuencia del oscilador. En este tiltimo caso, la frecuencia de oscila- cin dependeré de las tolerancias de la resistencia y del condensador, al igual que la temperatura y el nivel de voltaje de la alimentaci6n. En caso de implementar una red RC, el fabricante sugiere para la resistencia valores comprendidos entre 5 K y 100k, y para el condensador un valor mfnimo de 20 pF. End. Aunque ésta no es propiamente una instruccién, sf es necesaria para el ensam- blador; si éste no la encuentra, emite un mensaje de error. Asf, estarfa descrito todo el programa. Después de escribirlo en el editor de tex- tos deberd ensamblarlo, con lo cual se genera el c6digo objeto propio del microcon- trolador. Si no ha cometido errores de sintaxis, estard listo para fijar este cédigo en el microcontrolador por medio del sistema de desarrollo; para éste tiltimo paso debe asegurarse que los fusibles posean la siguiente configuracién: Ose xT Watchdog OFF cP OFF Power-Up-Timer ON Ejercicio 2: Secuenciador con cuatro LED’s Este ejercicio, con un ntimero mayor o menor de LEDs, es de gran utilidad para desarrollar habilidades en el campo de la programacién. Nuevamente basamos el ejercicio en el entrenador PIC K-061, cuyo diagrama se encuentra al final del capf- tulo Il “Conozca el PICL6C84”. Se trata de encender cuatro LEDs de manera consecutiva, sin que permanezcan encendidos dos de ellos simulténeamente. Si se observa el diagrama del entrenador, Jos ocho pines del puerto B han sido dispuestos como salidas, con el objeto de contro lar LED's, necesitando s6lo una resistencia en serie con éste para limitar la corriente. El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena canti- dad de corriente, suficiente para proporcionar iluminacién adecuada a los LED's. En la figura 5 se tiene el diagrama de flujo correspondiente para la imple- mentacién del programa. El diagrama muestra que este es un proceso que, des- pués de iniciado, no tiene una terminaci6n; cada vez que se termina la secuencia se vuelve a iniciar, a menos que apliquemos un reset al dispositive o apaguemos la fuente de alimentacién. 70 Curso Basico de Microcontroladores PIC + CENET Capttuto V. Programacién en PIC. Los primeros pasos ‘Sacar por elpuerio ¥ FRtina de retardo paseo iaae ota ala izquorda Fin de aS NO. Rotacion ? Figura 5. Diagrama de flujo del ejercicio 2 Para el programa son vélidas las anotaciones hechas al anterior, salvo el hecho que se est4 utilizando una posicién adicional de memoria RAM para almacenar un valor que corresponde al estado de la rotacién presente en el puerto; ésta es la posi- cién de memoria OA, a la cual hemos llamado rota que pretende, también, ser de mis facil recordacién y manejo que el mimero hexadecimal 0A. En esta oportunidad, la parte que conviene resaltar es la rotaci6n a la izquierda del registro rota, para ser sacado por el puerto B; si después de la rotacién, el quinto bit atin no es uno, quiere decir que la rotacién todavia no ha Hegado a su fin, puesto que el ejercicio se hace s6lo con cuatro LED's. La instruccién que consulta la condicién es bifss rota,4; si ella se cumple (el bit es uno), el programa omite la instruccién goto hol y ejecuta la instruccién goto otra, empezando de nuevo la secuencia; si no se cumple la condicién (este bit es cero), el programa ejecuta la instruccién goto hol, procediendo a sacar el dato rotado por el puerto B La rutina de retardo es la misma del ejemplo anterior; por lo tanto el tratamiento hecho a los registros y valores es idéntico. Al momento de fijar este programa en el microcontrolador, como en el caso anterior, se deben tener los fusibles configurados de la siguiente manera: Ose XT Watchdog OFF cp OFF Power-Up-Timer ON Curso Basico de Microcontroladores PIC + CRIT n Capitulo V. Programacién en PIC. Los primeros pasos ;Este programa maneja una secuencia de cuatro LED's list p=16c84 se utiliza el PIC16C84 ptob equ 6 jel puerto b ésta en la direccién 06 de la jmemoria RAM rota equ a Jaqui se asignan nombres para reemplazar los jregistros regl equ eb reg2 equ Oc reg3_ equ od valor1 equ 30 jaqui se asignan nombres a los valores valor2 equ 40 jconstantes valor3 equ 10 reset org 0 jel vector de reset es 1a direccion 00 de la jmemoria de programa goto inicio jse envia al inicio del programa org 7 jempieza el programa en la posicién de jmenoria 7 inicio movin 00 jse carga el registro W con el valor 00 tris ptob se programan los pines del puerto B como jsalidas otra = movlw 1 }se carga el registro W con el valor @1 movuf rota se dispone el dato para 1a rotacién hol movf rota,® jmueve el contenido del registro rota al jregistro W movwf ptob —_ ;enciende el LED correspondiente call retardo ;se mantiene el LED encendido por un momento rlf rota — ;desplaza el contenido del registro un bit ja la izquierda btfss —rota,4 probar si el quinto bit se activa goto hot 38i no ha Llegado al quinto bit se enciende ' sel LED que sigue goto otra siya se encendié el ultimo LED se inicia ;nuevamente la secuencia jesta rutina genera un tiempo de espera retardo movlw valor1 se carga el registro W con el numero valor1, jes decir con 30 movwf regi se traslada ese numero al registro regl tres movlw —-valor2_ se carga el registro W con el nimero valor2, ses decir con 40 movwf reg2_ se traslada ese numero al registro regz dos movLw valor3 ;se carga el registro W con el numero valor3, jes decir con 50 movwf reg3_- se traslada ese numero al registro reg3 uno decfsz reg3 e decrementa el registro reg3 y si el valor jes cero se salta a la goto uno-— instruccién siguiente, si no es cero se ;continua decrementando decfsz reg2 igual que el anterior goto dos decfsz regl igual que el anterior goto tres retlw 0 end Figura 6. Programa secuenciador con 4 LED's (ejer2.asm) 72 Curso Basico de Microcontroladores PIC + Cunt Capttuto V. Programacién en PIC. Las primeros pasos Ejercicio 3: Leer los pulsadores y encender el LED correspondiente Los ejercicios anteriores s6lo han utilizado uno de los puertos como salida, no apro- vechando las posibilidades de lectura de estos. Este ejercicio pretende entonces iniciar- nos en la lectura de los puertos y tomar decisiones con respecto al valor obtenido de ella. En el diagrama esquemitico del entrenador K-061 se puede observar que hay dos pulsadores conectados al puerto A del microcontrolador, cada vez que se oprima uno de estos se debe encender el LED correspondiente del puerto B. Las teclas de lectura estén conectadas a fuente, a través de resistencias de 4.7K, asf cuando ningu- na de ellas esté presionada, la lectura del puerto A seré 03. En la figura 8 se tiene el diagrama de flujo correspondiente a este proceso, el cual servird de base para la realizacién del programa respectivo. « EMPEZAR pire est Leer pulsadores Escribir ultimo dato Figura 7. Diagrama de flujo del ejercicio 3 Para este tercer programa también son validas algunas de las anotaciones hechas al primero, salvo que al registro 02 0 contador de programa se le ha dado el nombre de pe; a un registro auxiliar para almacenar el tiltimo estado registra- do de los pulsadores se le ha denominado leido (posicién de memoria RAM OA). AL fijar este programa en el microcontrolador, hemos utilizado la siguiente con- figuracién de fusibles: Ose XT Watchdog OFF cp OFF Power-Up-Timer ON No hacemos ninguna anotacién al programa, ya que consideramos que con los dos anteriores se tienen bases para éste, ademés de los comentarios realizados al final de cada instruccién. Curso Bésico de Microcontroladores PIC * CERT 73 Capitulo V. Programacién en PIC. Los primeros pasos 3Este programa lee dos pulsadores y enciende dos LED's, segin el que se oprima 3se encenderd el LED correspondiente list 184 jse utiliza el PIC16C84 pc equ oz jdireccién del contador de programa ptoa equ 05, jel puerto a esté en la direccién 05 de la jmemoria RAM ptob equ 06 jel puerto b esta en la direccién 06 de la memoria RAM leido equ @a saqut se asignan nombres para reemplazar los jregistros reset org @ jel vector de reset es la direccién 00 de la jmemoria de programa goto inicio jse envia al inicio del programa org 7 jempieza el programa en la posicién de jmemoria 7 ‘inicio movlw Of 3se carga el registro W con el valor Of tris ptoa se programan los pines del puerto A como jentradas moviw @0 3Se carga el registro W con el valor 00 tris ptob —;se programan los pines del puerto B como jsalidas movin @0 3se carga el registro W con el valor 00 movwf leido se dispone el dato en alto para encender los 3LED's hol movF_—Leido,®@ ;mueve el contenido del registro leido al jregistro W mowwf ptob yenciende el LED correspondiente movf ptoa,® lee el puerto A y guarda el dato en el jregistro W xorlw @3 jinvierte el dato que leyé andiw —.03 jdeja solamente los dos bits de interés addwf pe jel valor que se leyé se suma al contador de jprograma goto hol 3si-no oprimen tecla, regresa a leer nop jno hace nada nop movwf leido —;carga valor que ley6 en el registro leido goto hol jactualiza el dato de salida en el puerto B y jvuelve a leer end Figura 8. Programa lector de teclas del ejercicio 3 (ejer3.asm) Programa avanzado utilizando el entrenador K-061 Este ejercicio es una pequefia muestra de las posibilidades que se tienen cuando se usa un microcontrolador PIC; ademés utiliza los recursos que brin- da el entrenador K-061. Este ejemplo es un poco avanzado, pero se da para animar al lector a seguir adelante y a estudiarlo para comprender cada una de sus partes. Si el lector lo prefiere lo puede dejar para practicar al final del nivel basico 74 Curso Basico de Microcontroladores PIC+ CENCE Capitulo V. Programacién en PIC. Los primeros pasos 3Este programa realiza una secuencia luminosa en los LED's, al llegar al 3G1timo se emite un sonido. Ademds, cuando se oprime una tecla se canbia jel sentido de giro de la secuencia list — p=16c84 slas que vienen a continuacién son una serie de equivalencias, las jcuales toma el ensamblador y las reemplaza por el nimero asociado, en jaquellos sitios en los cuales se hace referencia carry equ jestas hacen referencia a posiciones de bits cero. equ 2 : bandera equ 6 ; rtcc equ 1 sregistros que se utilizan en el programa pe equ 2 ‘ sta equ 3 3 porta equ 5 : portb equ 6 ; rota equ 18h 4 cuenta equ 19h i tiempo equ Jah F regl equ bh 3 reg2 equ Ach 3 reg3 equ dh inicio bef sta, bandera; Limpiar bandera desplazamiento movin 0 jcargar a w con cero tris port_b ;puerto b como salidas moviw 3 jcargar a w con 3 tris porta jdos lineas bajas como entradas moviw @feh fisponer dato para la rotacién movwF rota ;cargar en registro 18 movlw 1 ;dato del led encendido movwf tiempo ;carga en registro la ceros movin 2 ;cargar aw con numero dos movnf —reg3 3y luego al registro 1d uno movf — port_a,w jleer puerto a andiw 3 jelimina la parte alta xorlw 3 jinvierte el dato addwf pc jse suma al pc para salto goto dos_a 3si no hubo tecla goto _—siete_a jsi tecla derecha goto siete_b jsi tecla izquierda goto _siete_c jsi las dos teclas dos.a decfsz_regt lecrementa registro y salta si cero goto uno jst no cero lee de nuevo teclado dos_b decfsz_reg2 jdecrementa registro y salta si cero goto uno jsi_no cero lee de nuevo teclado dos.c decfsz_reg3 jdecrementa registro y salta si cero goto uno jsi_no cero lee de nuevo teclado Curso Basico de Microcontroladores PIC® CERT 75 Capitulo V. Programacién en PIC. Los primeros pasos dosd bsf —sta,carry activa 0 coloca carry en 1 btfsc sta, bandera ;salta si bandera esta desactivada goto cuatro 3st activada bifurca a cuatro tres rif rota jrota a la izquierda registro de leds btfss. sta,carry ;salta si carry esta en 1 goto tres_b isi es cero -Limite rotacién- va a tres_b tres_a incf tiempo incrementa registro del led encendido goto seis jbifurca a para sacar dato tresb rif rota jrota una vez mas registro de leds movlw 1 jcarga aw con 1 movwF tiempo jpara indicar primer led encendido call pito Sefidl sonora por limite rotacién goto seis jbifurca para sacar dato cuatro rf rota jrota a la derecha registro de leds btfss sta,carry — salta si carry esté en uno goto cuatrob —; si cero -Limite rotacién- va a cuatro_b cuatro_a decf tiempo decrementa registro led encendido goto seis jbifurca para sacar dato cuatro_b rrf rota jrota una vez més registro de leds movlw 8 3Carga a w con & movwf tiempo jpara indicar Gltimo led encendido cinco call pito }sefial sonora por Limite rotacion goto seis jbifurca para sacar dato seis movf_—rota,w scarga aw con dato led a encenderse movwf = port_b escribe dato en el puerto b goto ceros jreinicia para ir por siguiente dato sietea bsf sta,bandera activa bandera -rotacién derecha- goto. dos_a sbifurca a leer el teclado siete_b bef sta,bandera ;desactiva bandera -rotacién izquierda- goto —dos_a jbifurca a leer el teclado siete.c movf tiempo,w carga valor led encendido en w rif tiempo smultiplica por dos (valor x 2 rlf tiempo jmultiplica por dos valor x 4) rif tiempo jmultiplica por dos (valor x 8) addwf — tiempo jSe suma una vez mds (valor x 9) addwf tiempo 3s@ suma una vez mas (valor x 10) ocho comf_— tiempo,w ——;se invierte el dato y se carga en w movwf —port_b 3se saca tiempo faltante en los leds clrf cuenta 3se limpia registro call base jse llama base de un segundo decfsz tiempo idecrementa el tiempo y salta si cero goto ocho 3Si no cero vuelve a mostrar tiempo movlw @ffh ;carga a w con b’11111111' movaf —port_b 3para apagar todos los leds nueve call pito jse llama a sefial sonora movlw 4 3b’@100' carga a w con 4 movwf —port_a jpara activar el relé sleep 3ir al modo de reposo 76 Curso Basico de Microcontroladores PIC + CEMCET Capitulo V. Programacién en PIC. Los primeros pasos pito movin 8 "1000" cargar a w movwf —port_a ra activar el pito moviw 7110" argar con el decimal 110 movwF cuenta ra_que el pito call base 3dure 1 segundo/(125-110) clrf porta jdejar el puerto en b’0000" retlw 3 egresar de la interrupcién base = clrf rte jdejar en cero el rtce movin 5 jcargar a w con b'101', para cargar el option jrtce interno con una preescala de 64 bas movf — rtccyw jleer el rtcc xorlw d?125' jcomparar con el decimal 125 btfss sta,cero si es igual salta goto bas jsi no igual, vuelve a leer incf cuenta jincrementa ta cuenta movf cuenta,w ;carga a w con valor de cuenta xorlw 125" jcomparar con el decimal 125 btfss sta,cero si es igual salta goto base ssi no igual, vuelve a configurar cuenta retlw 4 jal terminar’ regresa end 3 Fusibles de programacién ; Osc xT. 3 Watchdog OFF ; cP OFF Power-Up-Timer ON jlura 9. Programa avanzado utilizando el entrenador K-061 (avanzado.asm) Los ejercicios descritos en este capitulo se encuentran en el disquete que acom- paiia al curso, tanto el listado con extensién .asm, como el archivo ensamblado con extensién .hex. El lector puede, como ejercicio, utilizarlos para comprobar su fun- cionamiento y, después, hacerles los cambios que desee para modificar los tiempos de retardo, los pines de salida, etc., con el fin de profundizar en su estudio. Curso Basico de Microcontroladores PIC * CEMAT 7 Rutinas de programacion ¢Lasuma eLaresta ¢ La rotacion ¢La multiplicacién ¢ La division ¢ Conversion binario a BCD «Suma BCD ¢ Conexion de displays al PIC Capitulo VI. Rutinas de programacién Las rutinas son uno de los recursos més valiosos cuando se trabaja en programa- ci6n; ellas permiten que los programas sean més simples, debido a que el programa principal se disminuye cuando algunas tareas se escriben en forma de programas pequefios e independientes. En programacién, una rutina se define como un procedimiento independiente (un bloque), que realiza una labor especifica y a la cual se puede lamar desde cual- quiet parte del programa principal. Dado que cada rutina realiza una labor en parti- cular, como encender un LED o establecer una base de tiempo de un segundo, por ejemplo, el programador, cuando esta seguro de su funcionamiento, puede mante- nerla almacenada y disponible en un «banco» o «librerfa», para utilizarla en cual quier programa, sin volver a escribir las lineas que realicen lo deseado: s6lo necesi- tard copiar el bloque de la rutina o tener el archivo disponible para cuando se realice la. compilacién del programa, Posteriormente, deber4 hacer el llamado al procedi- miento adecuado, en el instante preciso. Para la elaboracién de cualquier rutina, es necesario conocer més a fondo las instrucciones que la forman y cuales son las condiciones 0 estados que se modifican ante cada una de ellas. Los estados, banderas o flags son bits que se afectan por algunas operaciones l6gicas 0 aritméticas y la consulta de estos se utiliza para tomar decisiones dentro del programa. Debemos tener presente que en el microcontrolador PIC 16C84, los estados se encuentran localizados en el registro 03, Ilamado STA- TUS. Los primeros tres bits de este registro (0 al 2) son los estados sobre los cuales debemos ejercer una vigilancia, para determinar asf los siguientes pasos a ejecutar, El bit menos significativo (bit 0) es el correspondiente al estado del Carry 0 acarreo, el siguiente (bit 1) corresponde al DC 0 acarreo de digito y el tercero de ellos (bit 2) es el correspondiente al estado Z 0 cero. Cuando escribimos el programa en un editor de textos, para posteriormente uti- lizar el ensamblador , debemos recordar que, en el formato de las instrucciones primero se escribe el registro fuente y a continuacién el registro destino de la opera- cién que se esté realizando. Se lama registro fuente aquel registro que se utiliza como origen de la informacién y registro destino aquel en el cual se almacena el resultado de la operaci6n. Si deseamos que el destino sea el registro W, podemos optar por escribir en la parte correspondiente, W 6 0; si deseamos que se haga en el mismo registro fuente, podemos escribir 1 u omitirlo. Por ejemplo, las siguientes instrucciones son equivalentes: comf 10,w equivale a comf 10,0 xorwf 15 equivale a xorwf 15,1 Lasuma Esta operacién se implementa en los microcontroladores PIC por una sola ins- truccién: ADDWF; en la figura 1 se observan sus detalles. Lo més importante para considerar en todos los casos son los estados afectados ya que, como lo habiamos Curso Basico de Microcontroladores PIC + CERT 81 Capitulo VI. Rutinas de programacion mencionado, ellos son los indicadores que se deben utilizar para tomar decisiones en el programa. Instruccién: ‘ADICION Sintaxis: ADDWF f,d Cod. Op. Dest. Fuente Codificacién: Oootttd — fff ‘Operacion: (+ )-d Estados afectados: C, DC, Z Descripcién: El contenido del registro W se agrega al contenido del registro f. Si‘d’ es 0 el resultado se almacena en el registro W; sid’ es 1, 80 hard en el registro f. Figura 1. Detalles de la suma en los microcontroladores PIC Uno de los aspectos que conviene recalcar en esta instruccién, es que el estado del carry no es considerado para los resultados de la operaci6n; se afecta, pero no interviene. Consideremos los ejemplos que se muestran en Ia figura 2, y observe- mos la forma en la cual se afectan los estados y el registro destino en cada una de las instrucciones. ‘Antes de la instruccién Después de la instruccién Instruccién Fuente w Fuente Ww. z{|oclc 1 | 1001 0011 | 0104 1000 | ADDWF Fuente,w | 10010011 | 111010110 | 0 | o Jo 2 | 1010 1011] 00100101 | ADDWF Fuente 1101 0000 | co100101 | o | 1 Jo 8} 1010 1011] 0110 1100 | ADDWF Fuente,o | 1010 1011 | 000101110 | 1 | 4/4 4 | 1100 1101 | 0011 0011 | ADDWF Fuente,1 } 00000000 | 001100111] 1 | 4 |4 Figura 2. Ejemplos de la suma En estos ejemplos, las cantidades se expresan en binario, para visualizar més fécilmente las operaciones bit a bit. Los resultados, ubicados en el destino de la operaci6n, se han resaltado para comprender mejor la forma en que las instrucciones manejan este pardmetro. En las operaciones el carry (C) se coloca a 1 cuando la suma supera el valor mas alto que puede contener un byte (OFF hex 0 225 decimal); en caso contrario permanece en 0, indicando que no se presenté sobreflujo 0 acarreo. El acarreo de digito (DC) se activa cuando la suma de los nibbles (partes inferiores 0 4 bits menos significativos de los bytes) supera el valor que este puede contener (OF hex o 15 decimal). El estado Z (Zero o cero) se activa cuando la operaci6n da como resultado 0 en el registro destino, como se mues- tra en el ejemplo 4. 82 Curso Bésico de Microcontroladores PIC + CEM Capttulo VI. Rutinas de programacién La resta De manera similar a la suma, esta operacién se implementa con una sola instruc- cién: SUBWF; en la Figura 3 se observan sus detalles més importantes. Instruccién: RESTA Sintaxis: SUBWF fd C6d, Op. Dest. Fuente Coditicacién: 000010 ‘fff Operacién: ()-W)-d Estados afectados:C, DC, Z Descripcién: El-contenido del registro W se resta del contenido del registro f. Si‘d’ es 0 l resultado se almacena en el registro W; si ‘d’es 1, se hard en el registro f. Figura 3. Detalles de la resta en los microcontroladores PIC Consideremos los ejemplos de la figura 4 y observemos la forma en la cual se afectan los estados y el registro destino ante cada una de las instrueciones, De nue- Vo, las cantidades estan expresadas en binario y los resultados, ubicados en el desti- no de la operaci6n, se han resaltado para visualizar cémo las instrucciones manejan este parimetro. Como sucedfa con la suma, el carry se afecta por la operacién, pero no interviene en ella ‘Antes de la instruccion = Después de la instruccion Instruccién Fuente Ww Fuente w z Joc[c 1 | 1011 1001 | 0100 0010 | SUBW Fuente,w] 1011 1001 | ott 0111 fo | 4 | 1 2 | 1011 1001] 0100 1100 | SUBWF Fuente |01101101 | o100 1100 | 0 | o | 4 3 | 1011 1001] 1110 0011 | SUBWF Fuente,o | 1011 1001 | 1101 0110 |0 | + | 0 4 | 1011 1001 | 1011 1001 | SUBWF Fuente,1 | 00000000 | 1011 1001/1 J 1 | 4 jura 4. Ejemplos de la resta En las sustracciones, el carry 0 acarreo (C) se coloca en | cuando el valor abso- luto del registro de trabajo W (sustraendo) es menor que el valor absoluto del regis- tro fuente (minuendo); por lo tanto, es un indicador que el resultado es un ntimero Positivo. Si por el contrario, el carry resultante es 0, indica que el resultado es un ntimero negativo, ya que el minuendo era menor que el sustraendo. El acarreo de dfgito (DC), mientras tanto, se coloca en | cuando el valor abso- luto del nibble menos significativo del registro de trabajo W es menor que el nib- ble correspondiente del registro fuente y se pondré en 0 en caso contrario. Este estado es muy itil en rutinas de conversién de ntimeros binarios a ntimeros BCD, como se vera mas adelante. Curso Basico de Microcontroladores PIC +» CHEKCET 83 Capitulo V1. Rutinas de programacién Por iltimo, el estado Z.s6lo se activaré cuando ambas cantidades sean iguales y el resultado de la operacién, por lo tanto, sea cero, siendo éste el valor que se alma- cena en el registro destino. La rotacion En los microcontroladores PIC se encuentran dos instrucciones de rotacién: una hacia la izquierda y otra hacia la derecha; ambas incluyen el carry dentro de la operaci6n. Ya que la diferencia entre las dos rotaciones esté s6lo en el sentido en que se realiza, s6lo mostraremos los detalles de una de ellas, figura 5. Instruccién: ROTACION A LA IZQUIERDA Sintaxis: RLF td Céd. Op. Dest. Fuente Codificacién: ooito1 ‘ttf Operacién: fen>-den+1>; f<7>-C, C-d<0>; Estados afectados: © Descripcién: El contenido del registro ‘f se rota un bit hacia la izquierda a través del carry. Si‘d’ es 0, el resultado se almacena en el registro W; si‘d' es 1, se hard en el registro f. Figura 5. Detalles del desplazamiento a la izquierda 7 INSTRUCCION ALF o}+{tloliitlolololt ft Cary Repivo Fuente 1 [oltitfolololtio|] Registro destino después de la rotacién INSTRUCCION RAF 1l1/olololoti4 Cary Registro Fuente 1 olilttolotolols] Registro destino después de la rotacién Figura 6. Rotaciones 84 Curso Bésico de Microcontroladores PIC + C=MCET Capitulo VI. Rutinas de programacién En la figura 6, se observa como operan estas instrucciones, en donde el carry participa activamente en cada una de ellas. Un dato interesante, es que una rotacién ala derecha puede considerarse como una divisién entre dos, mientras que una hacia Jaizquierda es una multiplicaci6n por dos. Cuando es necesario realizar operaciones de este tipo, con potencias de dos, se pueden implementar fécil y rapidamente con rotaciones hacia uno u otro lado. Las cuatro instrucciones anteriores son la base para una gran cantidad de rutinas, entre las que se incluyen multiplicaciones, divisiones, conversiones de diverso tipo, etc, de las cuales vamos a desarrollar algunas. Al final de cada uno de las rutinas se incorpora un equefio programa de prueba, el cual llama la rutina respectiva, para que ésta sea ejecutada, La multiplicacién Esta rutina se desarrolla con base en las instrucciones anteriormente descritas; aqui se implementa la multiplicacién de dos cantidades, de un byte cada una. El diagrama de flujo correspondiente se muestra en la figura 7 y el programa respectivo en la figura 8. Los comentarios hechos en el programa informan sobre cada uno de los pasos desarrollados, CEmPEZAR__) ¥ Contador = 8 Bye Ato = Byo Bao =0| We Matipteande ‘inpar Gary -— ¥ ‘Roar a la derecha Muttoicaso a través ol Carry Byte Ato = Byte Ato + W (once hanes: ance oar a doresha Byte Bajo Decrement Contador SI Figura 7. Diagrama de flujo de la muttiplicacién Curso Basico de Microcontroladores PIC + Cauchy 85 Capitulo VI. Rutinas de programacién 7 Multiplicaci6n 8 x 8 3 El resultado (de 16 bits) es guardado en 2 bytes STATUS — equ 03 sRegistro de estados CARRY equ 00 jBandera de acarreo mulcnd equ 19 jContiene Multiplicando mulplr equ 10 3Contiene Multiplicador Hbyte — equ 12 jByte alto del resultado Lbyte equ B ;Byte bajo del resultado count equ 14 jContador del loop org 00 goto main Multip — clrf H_byte jLimpiar byte alto clrf L_byte ;Limpiar byte bajo movin 8 jCargar el movwf count jcontador movF mulcnd,w jMultiplicando va a W bef STATUS , CARRY ;limpiar carry loop ref mulptr ;Rotar a la derecha btfsc STATUS, CARRY ;Probar estado del carry addwf —-H_byte 3Si_uno, agregar multi- splicador al byte alto ref H_byte ;Rotar derecha byte alto ref L_byte sRotar derecha byte bajo decfsz count jDecrementa contador sy verifica si es cero goto Loop jRepite si ain no cero retlw @ jRetorna de la rutina movlw 078 movwf —— mulcnd call Multip ; queda goto queda 3En byte alto queda 57H 3y en byte bajo 30H END Figura 8. Rutina de multiplicacién La division Esta es una operacin ampliamente utilizada en los microcontroladores y los microprocesadores; permite la conversién de bases numéricas de diverso tipo. El diagrama de flujo se muestra en la figura 9 y el programa respectivo en la figura 10. 86 Curso Bdsico de Microcontroladores PIC + CHECHT Capttuto V1. Rutinas de programacién (CEMPEZAR__) ¥ We DIVISOR eles of y RETORNAR, Figura 9. Diagrama de flujo de la division Para lograr la divisi6n, esta rutina utiliza una técnica de restas sucesivas, don- de el sustraendo se coloca en el registro de trabajo W. Después de cada resta, la rutina debe consultar el estado del carry. Como se indicé anteriormente, si el aca- reo es 1, indica que el resultado es un niimero positivo, (el minuendo era mayor Que el sustraendo), la resta era valida y, por lo tanto, el cociente puede ser incre- mentado; si por el contrario, el carry es cero, indica que el resultado es un nimero negativo (el minuendo no contenfa el sustraendo). En el segundo caso se debe realizar una suma adicional, con el fin de restaurar el valor que dio origen al nu- mero negativo en el residuo. Conversi6n de un numero binario en su equivalente BCD Son numerosas las oportunidades en las que es necesario convertir un valor binario, proveniente de algiin proceso, en un valor tal que, al sacarse por uno de los puertos, pueda ser fécilmente visualizado e interpretado por el usuario del sistema. En este caso, la rutina que se presenta realiza la conversién de un mii- mero binario de 8 bits, en su equivalente BCD (Decimal Codificado en Binatio). En la figura 11 se muestra el diagrama de flujo correspondiente y en la figura 12 el programa. Esta rutina emplea las restas sucesivas descritas en la rutina anterior. Como cl valor més alto contenido en un byte es el decimal 255, se realizan inicialmen. te restas de 100 unidades y, posteriormente, restas de 10. En este proceso se consigue el ntimero de veces que fue posible restar 100, cuyo resultado son las contenas y el niimero de veces que fue posible restar 10, obteniéndose las dece. nas. El residuo de este proceso son las unidades, Curso Basico de Microcontroladores PIC + CEMET 87 pee DIVIDE UN NUMERO DE UN BYTE ENTRE OTRO = 3 Divide un némero binario existente en la posicién ; Divndo, entre otro localizado en posicion Divsor. 3 El cociente se almacena en la misma posicién de memoria ; RAM del divisor y el residuo se guarda en ; la del dividendo. STATUS equ 3 sRegistro de estados CARRY equ e jBit de acarreo Divndo equ 18 3Contiene numero a dividir Divsor equ 19 3Contiene divisor Cocinte equ 19 jGuarda el resultado Resduo equ 18 3Se almacena el residuo org 00 goto — main Div movf — Divsor,w clrf_— Cocinte | Repite subwf Resduo 3Restarle el divisor btfss STATUS,CARRY ;Verificar el carry goto SUM1 i cero, dejar de restar incf Cocinte i_uno, incrementa cociente goto ——Repite sy repite resta divisor SUML —addwf ~~ Resduo ;Sumarle divisor al residuo RETLW 3 Regresa con 0° main movlw 254 ;Cargar mowwf — Divndo jel dividendo movlw —.10 ;Cargar movwf — Divsor jel divisor call Div jLlamar la subrutina 3EL cociente es 19hex sy el residuo dhex queda goto — queda ;Quedar en un loop infinito Figura 10. Rutina de divisién A la rutina que efecttia la conversién es posible introducirle cambios, Jogrando: un cédigo diferente. La modificacién que se presenta en la figura 13, aparentemente ins desventajosa por ser de mayor longitud y utilizar un registro adicional, tiene la rutina de divisién por separado, 1a cual se llama desde la rutina de conversién y puede ser invocada por otras. 88 Curso Basico de Microcontroladores PIC + CmCET Capitulo VI. Rutinas de programacién Cary = —S!_— lincromentar] 2 Contenas NO ¥ 'SUMAR 100 y ‘Cargara Won 10 + Namero = Namero-W_ Y SI incromontar] Canty = —S1 | ncromenia 7 cena No ¥ ‘Sumar 10 v TERMINAR Figura 11. Diagrama de flujo de la conversién binario a BCD Debemos recordar en este punto que el microcontrolador PICI6C84 permite amar Cuantas rutinas se posean, pero tinicamente pueden estar anidadas ocho de ella, ya que la pila s6lo puede sostener ocho direcciones de retomo. El anidamiento de una novena ratina ocasionaré la pérdida sobre el control del programa y los resultados serén impredecibles. Suma de dos niimeros BCD Para realizar la suma de dos ntimeros BCD se muestra el diagrama de flujo en la figura 14 y el programa respectivo en la figura 15. La rutina suma las cantidades contenidas en dos posiciones de la memoria RAM del microcontrolador y coloca el resultado en una de ellas; como el resultado de la operacién puede tener tres digitos BCD, el tercero de ellos se almacena en Ia otra posicién, aprovechdndose el valor de retomo de la rutina. Curso Basico de Microcontroladores PIC * CEKAT 89 Capitulo VI. Rutinas de programacién === CONVIERTE UN NUMERO BINARIO A BCD ====-—eaca= 3 La rutina s6lo requiere que se coloque el valor 3 @ convertir en un registro, denominado aqui Unidad. 3 Ella retorna las decenas y las centenas (digitos 3 decimales) en un par de registros adicionales. STATUS equ 3 sRegistro de estados CARRY — equ @ sBit de acarreo oc equ 1 3Bit de acarreo de digito Unidad equ 18 3Para almacenar unidades Decena equ 19 ;Para almacenar decenas Centena equ 1A Registro para centenas AUX equ 1B 3Registro auxiliar org 0 goto —main Bin_BCD cirf Decena sLimpiar decenas clrf — Centena 3Limpiar centenas movlw — .100 3Cargar a W con decimal 100 Otra — subwf Unidad jRestarle 100 al valor btfss STATUS,CARRY verificar estado del carry goto SUM 3$i ®, dejar de restar 100 incf —Centena 3Si 1, incrementar centenas goto Otra jRepetir resta SUM addwf Unidad ;Sumarle 100 movlw .10 ;cargar a W con 10 Repite subwF — Unidad 3Restarle al valor digital 10 btfss STATUS,CARRY ;Verificar estado del carry goto. SUML 3Si cero, dejar de restar 10 ‘incf Decena 3Si uno, incrementa decenas goto —_—Repite sy repite la resta de 10 SUM. addwF = Unidad ;Sumarle 10 al valor digital RETLW 3Regresa con 0 ;Cargar valor a co jel registro Unidad call Bin_eco jLlamar la subrutina jCentenas = 2 jDecenas = 5 ;Unidades = 4 queda goto — queda 3Quedar en un loop infinito END Figura 12. Rutina de conversi6n binario a BCD 90 Curso Basico de Microcontroladores PIC* ©@aNCHr Capttulo V1. Rutinas de programacién No oc= 17 no si si RETLW 1, Figura 13. Diagrama de flujo de la suma BCD Conexion de displays al PIC En este ejercicio observaremos algunas de las opciones que se presentan al momento de decidir que configuracién utilizar para conectar algunos elementos indispensables, como son los visualizadores de informacién 0 displays. También veremos con detalle algunas instrucciones y uno de los aspectos més simples e interesantes de los PIC, como es el manejo de las tablas, las cuales nos pueden ayudar a agilizar numerosos procesos, como la conversién de cédigos y lecturas de teclado, por ejemplo. Para cumplir nuestros objetivos, haremos un pequefio ejercicio, que consiste en leer un teclado de cuatro elementos y enviar el dato correspondiente a un display de siete segmentos; el diagrama de flujo respectivo se muestra en la figura 15. Aunque en nuestro caso hemos optado por obtener el valor de la lectura de un teclado de cuatro elementos, el valor binario que se pretende mostrar puede prove- nir de fuentes diferentes, tal como un conteo de tiempo o de eventos externos, un proceso de conversién andlogo a digital, etc. Curso Basico de Microcontroladores PIC * CEMA 91 Capttulo VI. Rutinas de programacién jeqenmscesscasessecce== Suma BCD sin Signo s-ssceecssmecoeen== 3 Se asume que los niimeros a sumar estén en las 3 posiciones Suml y Sum2. El resultado de la 3 Suma se almacena en la posicién de Sum2 y el carry, ; si existe, regresa en el registro de trabajo W, 3 aprovechéndose el valor de retorno de la rutina Sumi equ 18 ;Sumando 1 y bit alto Acarreo equ 18 Sum2 equ 19 ;Sumando 2 y resultado org 00 goto main SumaBCD movf — Sumiw ;Colocar valor de Sum1 en W addwf — Sum2 jrealizar suma binaria clrf Sumi. jlimpiar contenido de Sumi rif Sum jrotar por si hubo carry btfsc — STATUS,DC 3Es DC = 07 goto —AdLSD 3si 1, ajustar LSD movin 6 3Ajuste binario-BCD para LSD addwf = Sum2 ;Probar para LSD > 9 btfss — STATUS,DC jverificar Carry medio subwf — Sum2 3LSD < 9, retornar valor bef STATUS CARRY ;Limpiar’ carry goto AdMSD Ir a probar MSD AdLSD movlw 6 3Ajuste de binario a BCD addwf == Sum2 3para digito (LSD) AdMSD —movlw «60 jAjuste Binario-BCD para MSD addwf — Sum2 jSumar al resultado btfsc — STATUS,CARRY Consultar carry retlw 1 jsi 1, retornar con 1 btfsc — Sum1,0 3si 0, probar carry inicio retlw 1 3si_hubo, retornar con 1 subwf — Sum2 3MSD < 9, retorna valor RETLW 3Regresa con 0 main movlw 99 mowwf Sumi. ;Sum1 = 99 (méximo ndmero BCD) moviw 99 movwf — Sum2 jHacer Sum2 = 99 call SumaBCDA ;Después de suma, Sum2 = 98 mowwf Sumi sy Suml = @1 (99+99 = 198) queda goto queda 3Se queda en un loop infinito END L Figura 14. Rutina de suma BCD 92 Curso Bésico de Microcontroladores PIC* Cam Capttulo V1. Rutinas de programacion [ENWAR DATO AL PUERTO] Figura 15. Diagrama de flujo del ejercicio Nuestro teclado se encuentra conectado a las cuatro lineas del puerto A del mi- crocontrolador, como se puede observar en las figuras 19 y 20. Para obtener el esta- do de las teclas, bastard con leer el puerto correspondiente y realizar un pequefio tratamiento al dato lefdo. En esta configuracién, para leer el teclado se realiza la siguiente instruccién: movi Puerto_A,w Por lo regular, a la lectura se le realiza algéin tipo de tratamiento, para determinar si se encuentra pulsada o no una tecla. Para nuestro caso, utilizamos una de las instrucciones més titiles e interesantes: la operacién XOR. La operacion OR exclusiva Recordemos que la funcién XOR es una operacién légica que toma uno a uno los bits de dos cantidades y genera los siguientes resultados: si los dos bits son diferentes (uno y cero o viceversa) el bit resultante ser4 uno; si los dos bits son iguales (ambos cero o ambos uno) el bit resultante ser cero, como puede obser- varse en la figura 16. A.XOR.B a+oola A o 1 ° 1 otc e Figura 16. Tabla de la verdad de la operacion légica XOR Curso Basico de Microcontroladores PIC + CENET 93 Capitulo VI. Rutinas de programacién Un elemento curioso e importante con la operacién XOR es el siguiente: sia una valor se le realiza esta operacién dos veces consecutivas con un mimero cual quiera, vuelve a presentarse la misma cantidad, como puede observarse en los siguientes ejemplos : Ej.1 1010 0111 (OA7h) Ej. 2 1101 0001 (ODih) 0111 0110 (76h) 0111 0110 (76h) xXOR 1101 0001 (OD1h) 1010 0111 (OA7h) A la cantidad original (el hexadecimal 07h) se le realiza inicialmente la opera- cién XOR con el cédigo deseado (en este caso 76h) y al resultado (ODIh) se le realiza de nuevo la operacién XOR con el mismo cédigo, dando como resultado el valor original (el hexadecimal 0A7h); el lector puede intentar realizar esta opera- cidn con cualquier ntimero y observard que esto siempre se cumple. Esta caracteristica se utiliza en sistemas en los cuales se necesita codificar encriptar una informacién, de tal manera que solamente el usuario original tenga acceso a ella, ocultdndola a los intrusos. La condicién para encriptar la informacion es realizarle la operacién XOR (0 la XNOR) con el c6digo de nuestro interés; la decodificaci6n posterior exige realizarle de nuevo la operacidn en cuestién con el c6digo correspondiente. Este cédigo puede tener la longitud que desee el usuario. En esta oportunidad, la operacién XOR la utilizaremos con el propésito de com- parar dos cantidades, ya que cuando en los PICs resultan ser iguales, el operando destino sera cero; por lo tanto, esta condicién activa (coloca en uno) la bandera de Cero (Zero Flag), que corresponde al bit 2 del registro STATUS 0 de estados, Existen dos versiones para esta instruccién en la familia de los microcontrolado- res PIC: XORWF y XORLW. En la Figura 17 se observan los detalles de las dos instrucciones; ambas utilizan el registro de trabajo W y son muy convenientes para consultar el estado de un registro, averiguando el momento en el cual se obtiene un determinado valor. Consideremos los ejemplos para la instruccién XORWE que se muestran en la figura 2: cuando los dos valores resultan ser iguales, el registro des- tino efectivamente se hace ‘cero’ y la bandera Z se coloca en ‘uno’. La instruccién XORLW acta de manera similar, con la salvedad que no actéa Sobre dos registros, sino entre el registro de trabajo W y una constante de 8 bits que reside en la memoria de programa; el destino siempre seré el registro de trabajo W. Antes de la instruccién A. Después de la instruccién Instruccion Fuente Ww Fuente w Zz 1001 0011 | 1001 0011 | XORWF Fuente,w | 1001 0011 00000000] 1 10101011 | 1010 1011 | XORWF Fuente [00000000 1010 1011] + 1040 1001 | 0110 1100 | XORWF Fuente,o | 1010 1001 11000101] o 1101 1101 | 0001 0011 | XORWF Fuente,1 [11001110 0001 0011] 0. Figura 17. Ejemplo de la instruccion XOR 94 Curso Basico de Microcontroladores PIC+ CERCET Capitulo VI. Rutinas de programacién En nuestro caso, la instruccién XOR nos servird para leer el teclado, ya que hare- mos la operacién OR Exclusiva con el nimero OFF. Como se puede observar en las figuras 19 y 20, al no presionar ninguna tecla la lectura que se obtiene del puerto es el ntimero binario ‘1111"b, ya que las teclas normalmente estn colocadas a un nivel alto a través de resistencias de 1OKQ. Cuando una tecla se presiona, se conectaré a masa y la lectura que se realice en ese momento ser4 un 0 Iégico por el bit respectivo. Por lo tanto, realizada la lectura del teclado y después de guardar el valor en un registro 0 posicién de la memoria RAM del microcontrolador, podemos realizar una operacién XOR entre el valor lefdo y OFF. Si el resultado de la operacién es cero, significa que ambas cantidades eran iguales (ninguna de las teclas se presion6), la bandera de cero se activard y este es el indicador que verificamos para determinar el siguiente paso a seguir, como se puede observar en el diagrama de flujo del programa, figura 15. Instruccién: OR Exclusiva Sintaxis: XORWF fd Cod. Op. dest Fuente Codificacién: ooo110 tft Operacién: (W.XOR. 1) Ed Estados afectados: z Descripcién: Se realiza la operacién OR Exclusiva entre el registro de trabajo W y el registro fuente. Si «d» es cero, el re- sultado se almacena en el registro de trabajo W; si «d» es uno, el resultado se almacena en el registro fuente. Instruccién: OR Exclusiva Sintaxis: XORLW k Cod. Op. Fuente Coditficacién: at kkkkkkkk Operacién: (W.XOR. k) EW Estados afectados: Zz Descripcién: Al contenido det registro W se le reali za la operacién OR Exclusiva con el literal k de 8 bits, El resultado se almacena en el registro de trabajo W. Figura 18. Descripcién de las instrucciones OR exclusiva A cada tecla se le ha asignado un peso o valor relativo, de tal manera que la primera de ellas tiene un valor de 1 y cada una de las otras el doble del valor de la anterior: por lo tanto, los valores de las teclas son 1, 2, 4 y 8. El programa se realizaré de tal forma que ante la presi6n simulténea de varias teclas, la suma de ellas se muestre en el display, por tal motivo, éste tiltimo podré mostrar valores comprendidos entre 0 y F hexadecimal, Una vez que se detecta la pulsacién de una tecla, y que el valor correspondiente se encuentre en uno de los registros del microcontrolador, debemos buscar la forma de visualizar este valor a través de uno de los elementos més populates y titiles: el display de siete segmentos, el cual nos permitird generar todos los ntimeros y algu- nos caracteres especiales y alfabéticos. Curso Basico de Microcontroladores PIC + CEMET 95 Capitulo VI. Rutinas de programacién Aqui necesitamos detenemos y pensar en cual es la configuracién electrénica (el diagrama esquematico) que necesitamos. En este caso, podemos tener dos altemnativas Para mostrar los digitos en el display: o lo hacemos directamente, manejando cada uno de los siete segmentos con las Iineas del microcontrolador, como se muestra en la figura 19, o bien, lo hacemos a través de un decodificador, como el 7447 0 el 7448, figura 20. +5V +5 5.1K re voo Wis tL mes 20 pF 19] SCT ns = Res she a 24 nas 8 roo RA2 © Ri 18 - rr mre a1 el hat et 7} Ao Bo DISPLAY DE ANODO COMUN Figura 19. Control de display directo desde el microcontrolador Cada una de estas opciones tiene sus pros y sus contras, La primera opcién tiene la ventaja de que se puede manejar directamente el display, sin necesidad de ele- mentos adicionales, ahorrando espacio y materiales que necesariamente significan dinero. Si pensamos en la segunda opcién, Ia del decodificador, presenta la ventaja de que solamente se estén dedicando cuatro de las lineas para mostrar los digitos; representando un aliorro de tres lineas sobre la primera opcisn, las cuales pueden resultar valiosas en un disefio en el cual precisemos de muchos dispositivos de En- trada/Salida y las Iineas se podrén dedicar a otras funciones dentro del circuito. Al momento de sacar la informacién por el puerto, los dos tratamientos han de ser diferentes. Para el control por medio del decodificador, bastard con tomar el valor bina- ro que se encuentra en el registro de interés y enviarlo a través del puerto respectivo, sin necesidad de realizar ningtin tratamiento adicional, siempre y cuando el control se esté realizando con la parte baja del puerto; el decodificador extemo se encargard de realizar Ja conversin. Las instrucciones necesarias serian algo como lo siguiente: movf ——_Valor,w scargar valor a sacar por el puerto movwf — Puerto_B senviarlo al puerto Para el control directo de los displays, se precisa un tratamiento diferente y de- bemos establecer nuestro propio decodificador por programa. En este caso, debe- mos tomar el valor binario del registro de interés y acudir a una tabla que contenga los c6digos correspondientes para manejar cada uno de los LED's del display de siete segmentos. Las instrucciones respectivas serfan algo como lo siguiente: 96 Curso Bésico de Microcontroladores PIC + C&T Capttuto V1, Rutinas de programacién movf ——_Valor,w seargar valor a sacar por el puerto call tabla ;llamar tabla de datos, movwf — Puerto_B senviarlo al puerto visualizarlo Las tablas se manejan como si se trataran de rutinas, La clave para el tratamiento de tablas esté en colocar un valor indice en el registro de trabajo W y hacer el llamado ala direccién base de la tabla. Dentro de la tabla debe existir una primera instruccién que realiza una suma sobre el contador del programa, logrindose un salto relativo a éste. La caracteristica de la suma ya la habfamos descrito en el nimero anterior. Debe- mos recordar que el contador de programa se trata como un registro cualquiera, sobre el cual es posible realizar operaciones l6gicas y aritméticas. +5V +5 +5 5K. afta 1| jAtcc voo WEIR ose1 (9 20pF == 10K 5] rag (28 7 a2 le Re2 ny 3 °. 2) pas 2 rer [2+ a Se 8 eo [oz . a2 18 re Se | ae Az, RAO DISPLAY DE ANDO. ‘COMUN, Figura 20. Control del display usando un decodificador En el lugar en el cual el programa salte deberd incluir alguna instruccién que le diga al microcontrolador cual es el siguiente paso a realizar; ya se trate de un salto hacia un sitio en el cual se hace el tratamiento al valor indice, o bien una instruccién de retorno que obliga al registro de trabajo a regresar con el cédigo correspondiente. En nuestro caso, hemos empleado la segunda opcién, como lo podemos observar en las siguientes Iineas: tabla addwf pe PC =PC+W retlw b’ 11000000" e6digo para el 0 retlw b’ 11111001" sc6digo para el | retlw b’ 10100100" se6digo para el 2 retlw b’ 10110000" je6digo para el 3 retlw b’ 10011001" 3e6digo para el 4 retlw b’ 10010010" 3e6digo para el 5 retlw b’ 10000010" se6digo para el 6 retlw b’ 11111000 3e6digo para el 7 retlw b’ 10000000" 3e6digo para el 8 retlw b’ 10011000" se6digo para el 9 Curso Basico de Microcontroladores PIC + CERET 97 Capttulo VI. Rutinas de programacién La tinica precaucién, la cual es realmente importante y debe tenerse siempre presente, es que cuando se hace el llamado a la tabla, el registro W no debe contener un valor mayor o igual al ntimero de elementos que contiene la tabla. Esta tabla, por ejemplo posee 10 elementos y si el registro W Iega con el valor 11, se presentaré una pérdida sobre el control del programa. Como se puede deducir, una tabla con estas caracteristicas puede llegar a contener hasta 256 elementos, por ser W un re- gistro de 8 bits. En la figura 21 se muestra el programa correspondiente al caso en el cual se est manejando el display directamente. Para el caso en el cual se posee el decodificador, se deben eliminar las Ifneas que se encuentran dentro de los bloques grises. El nuevo programa as{ obtenido omite los lamados a la tabla de datos y procede a tomar directamente el dato contenido en el registro de interés y sacarlo al puerto corres- pondiente. Debe tener presente que los decodificadores 7447 y 7448 han sido dise- fiados para mostrar cantidades decimales y por lo tanto ntimeros superiores a 9 se visualizarén de manera diferente. Ambos programas aprovechan el cerrojo de las salidas (latch) para dejar un dato sobre el puerto, cambidndose tinicamente cuando el dato lefdo es diferente al iltimo registrado. Las rutinas descritas en este capitulo son de mucha utilidad, se pueden emplear en cualquier programa sin mayores cambios. Por esto, es recomendable que se guar- den en formato texto en el disco duro del computador, para ir formando un banco 0 librerfa de rutinas, con aquellas que sean de mayor uso, y tenerlas disponibles para cualquier proyecto que se realice. 3 la tabla establece en términos de UNOS Y CEROS* 3 el dato que se vaa sacar por el display * 3 la tabla se considera para légica negativa * 3 (Display de dnodo comin) * Puerto_A equ 5 Puerto_B equ 6 dato equ 18 org 00 3 98 (Curso Basico de Microcontroladores PIC + CMMI " retiw b?10000010" retiw b?11111000' “retlw b?10000000' retlw b’10011000' ~ retlw b’10001000" retlw b?10000011" retlw b?11000110' retlw b’10100001' retlw b’10000110" retlw b’10001110" moviw 00 tris puerto_B call tabla movwf puerto_B movlw ff tris puerto_A movf puerto_A,w movwf dato xorlw 0 btfsc Status,cero goto leer movf dato,w call) tabla movwf puerto_B goto leer end leer Capitulo VI. Rutinas de programacion jcédigo icédigo ;c6digo para el para el | para el para el para la para la para la para la para la para la mMaATSOAND 3configurar puerto B como jsalidas ;Ulania rutiina spara mostrar ‘@’ en display ;configura ;puerto A como entradas jlee estado de las teclas jguardar dato jconsultar si tecla ;presionada ;si no tecla, vuelve y lee ;Si hubo, recupera valor ;llana a’ rutina 3Envia dato a LEDs sy vuelve a leer Figura 21. Programa de lectura de teclado y visualizacion Curso Basico de Microcontroladores PIC» CRAY 99 Proyectos con microcontrolador ¢ Pasos a seguir en la elaboracién de un proyecto ¢ Proyecto: Dado digital con PIC Capitulo VII. Proyectos con microcontrolador Pasos a seguir en la elaboraci6n de un proyecto Cuando se desarrolla un proyecto con un microcontrolador, realmente fabri- camos un circuito integrado propio, hecho a la medida, donde se verén refleja- das parte de nuestras ideas y concepts. En este proceso se deben seguir los siguientes pasos: + Planear el comportamiento del circuito, pensando en los elementos que es necesa- rio controlar, * Disefiar el diagrama esquemitico, el cual debe incluir todos los componentes ex- ternos al microcontrolador; ademés, se deben considerar las caracteristicas eléc- tricas de éste (capacidades de corriente por puerto, por pin, voltajes, velocidades, etc.) y las de las cargas conectadas a los puertos. + Armar el circuito en un protoboard o en un circuito impreso universal, con el objeto de tener una versi6n inicial del mismo (prototipo). + Elaborar el diagrama de flujo del programa. + Escribir el programa en un editor de texto de computador, siempre pensando en el diagrama esquemético y en la forma en que estdn conectados los pines de los puertos, estableciendo si las cargas se activan con 1’s 0 con 0's. * Acudir al ensamblador (MPASM) para corregir los errores de sintaxis y “tra- ducir” las instrucciones a cédigos binarios, de la forma en que se explicé en el tercer capitulo. * Trasladar, por medio de un programador de microcontroladores, el cédigo binario (hex) obtenido desde el computador, a la memoria de programa del microcontrolador. + Montar el microcontrolador en el protoboard, para verificar el funcionamiento del proyecto. En este momento, se hacen todas las pruebas y se puede determi- nar si es necesario modificar algunas rutinas (por ejemplo las de tiempo), para lo cual se regresa al editor y se hacen los cambios pertinentes, repitiéndose el proceso hasta llegar al comportamiento deseado. Se puede deducir también que el proyecto funcionarfa mejor con otros componentes 0 con otra confi igu- raci6n del circuito, lo cual hard que se redisefie el proyecto, modificando bue- na parte de lo hecho hasta ese punto. * Superadas todas las etapas anteriores y funcionando de manera éptima, tanto el circuito como el programa, se pueden construir el circuito impreso y la caja de montaje que alojaré los componentes de manera definitiva en la aplicacién de nuestro interés. Como ejemplo, desarrollaremos un proyecto mostrando todos los pasos involucrados en el proceso. Curso Bésico de Microcontroladores PIC « CHEAT 103 Capitulo VII. Proyectos con microcontrolador Proyecto: Dado digital con PIC Este proyecto se ha realizado con fines netamente didacticos, y muestra algunos elementos de hardware y software que les pueden ser titiles en otros circuitos. El circuito simula dos juegos diferentes: los populares dados utilizados en muchos jue- gos de sal6n y un generador de ntimeros aleatorios. Descripcién Dentro de los juegos de dados se encuentran las posibilidades de jugar con uno 0 dos dados, teniéndose la visualizacién tanto en diodos LED que estan organizados en la forma de la cara de un dado, como en los displays de siete segmentos, los cuales mostrardn el valor correspondiente a cada dado, o sea un ntimero comprendido entre Oy 6. Dentro del generador de ntimeros aleatorios se puede jugar con uno o con dos digitos, en cada uno de los cuales se puede visualizar un nimero comprendido entre Oy 9. En esta opcién, se desconecta la visualizaci6n en los diodos LED que simulan el dado, por razones obvias. En la figura 1 se muestra el diagrama esquemitico del circuito. Aqut, se utiliza un microcontrolador PIC16C84, La razén para ello es muy sencilla: gracias a que tiene memoria EEPROM de programa, lo podemos reprogramar facilmente sin ne- cesidad de acudir a borradores de memoria por luz ultravioleta. En este proyecto se esté utilizando una red RC para generar la oscilacién interna del microcontrolador, aunque las frecuencias de oscilacién no son las mismas para unos microcontroladores y otros, la diferencia no es significativa, ni la aplicacién es tan rigurosa; no se requiere precisién, asf que podemos asimilar las diferencias sin ningéin problema. Funcionamiento El funcionamiento del circuito es sencillo: tanto en los diodos LED individuales como en los displays de siete segmentos se visualiza el ntimero aleatorio. Aqui, para optimizar las lineas del microcontrolador, se utiliza un decodificador 7447 que se encarga de manejar los visualizadores de siete segmentos, con la ayuda adicional de Jos transistores Q5 y Q6, que determinan cual de los visualizadores estara encendido en un momento dado. Ya que Q5 y Q6 son transistores PNP que trabajan como interruptores, un nivel légico bajo en sus bases hard que circule corriente por el colector, permi- tiendo que se enciendan aquellos segmentos cuyos cétodos estén a un nivel l6gi- co bajo, puesto a través del decodificador. En este caso las resistencias R8 a R14 limitan la corriente que circularé a través de cada segmento, a un valor cercano a los 20 mA, mas que suficientes para lograr una iluminacién adecuada de los diodos LED de los segmentos. Lacorriente de colector de cada transistor también alimenta los LED's D2 a D15 que simulan las caras de los dados. Como se puede observar, aunque los transistores 104 Curso Bésico de Microcontroladores PIC + CRRCET Capttulo VIL. Proyectos con microcontrolador 2 3 Ry al 2x1k +5y| Clase do Yoo juego” ila bo LZ R7 + st rat Pe Fi os os av re al wl 5 Nomero 99K: TF Vos Bi 6 8 do dados © 2 le 7 13_Ra,7% 2200] 7 * RAS for Z—1]4 ce Lae o. ol. se re, [8 E ° Gr Rio al? rea fe—2}c 7447 «Ht Blo se RBS D 4 a i $2 pt +o 1Ns4o4 Hace + [S83 Sty D1 14 RN 10] 5. % 4 ono 9 9 ost ps2 a aL jay de Display de et = arctoconin | Anodoebedn 10uF/50v c2 14x 2200 Jugadal Reo rea ty 2 BS res {1 5K ras 12 16 13 osct RE? 02 93 20 T = at a | le | A R90 | o7e'8,--8 | F31 ® Rae Figura 1. Diagrama esquematico del dado digital QS 0 Q6 se encuentren activados, sélo se encenderdn los LED's si los transistores QI a Q4, que estén trabajando también como interruptores, tienen niveles Iégicos altos en sus bases, para permitir que se presente una corriente en sus colectores. Asi, si se quiere que solamente se activen los digitos, bastard con colocar niveles légicos bajos en las entradas de QI a Q4. Curso Basico de Microcontroladores PIC + CEKET 105 eee Capitulo VII. Proyectos con microcontrolador Logicamente, todas las opciones las controla el programa del microcontrolador, dependiendo del estado de los interruptores $1 y $2, que determinan su funciona miento, fundamentalmente al momento de reinicializar el sistema, por medio del interruptor $3. El programa para lograr los objetivos del proyecto no es complejo: s6lo se trata de utilizar el reloj de tiempo real para la generacién de los nimeros aleatorios y de mostrar esta informacién en los diodos LED, tanto del display, como Ios que conforman las caras de los dados. Programacién En la figura 2 se muestran los diagramas de flujo del programa, tanto del cuerpo Principal como de las dos rutinas auxiliares y el cédigo fuente respectivo en la figu- ra 3. El registro F1, asociado al Reloj de Tiempo Real (RTCC), se est utilizando como un temporizador, esto es, se incrementa ante la ejecucién de las instrucciones, y més concretamente, cada ocho ciclos de instruccién. Con los valores que se tienen para el oscilador (R=5kQ y C=20pF) se obtiene una frecuencia cercana a los 4 MHz; por tanto, en este circuito los ciclos de instruccién son prdcticamente de un microsegundo (recuerde que los PIC dividen la frecuencia del oscilador entre 4, para conformar un ciclo de instruccién). Programa principal ¥ Configurar puertos, ¥ ‘Tomar valor del registro AZAR ¥ Configurar Retoj de Tiempo Real os! Uamar rutina de Mostrar Digitos a Uamay ratina le Retardo y Actualizacion Figura 2a. Diagrama de flujo del programa principal 106 Curso Basico de Microcontroladores PIC + CEMET Capttulo VII. Proyectos con microcontrolador Mostrar digitos Desconectar transistores NPN y LED's del display Retardo y Actualizacién) -——4 No El RTCC=0 2 Conmutar registro de visualizacién sl I ¥ Inc. registro AZAR, Conmutar transistores PNP ‘Tomar nibble bajo del reg. de visualizacién Gonsuitar Y r tabla de datos iiauariarde nibble de reg. JAZAR a un BCD entre Oy 9 el juego 8 dads 2 Retornar Colocar nibble allo de dato en 0 | Figura 2c. Diagrama de flujo de la Enviar dato e so al puerto B tutina de retardo y actualizacién Figura 2b. Diagrama de flujo de la rutina de visualizacén EI incremento del RTCC se aprovecha de dos maneras. En primer lugar, cada que pasa por un valor 0 (a intervalos de 256 x 8 ciclos de instruccién), lo cual sucede aproximadamente cada 2ms, se actualiza el valor a mostrar en los Curso Basico de Microcontroladores PIC + CRT 107 Capttulo VII, Proyectos con microcontrolador displays y los LED's. En segundo lugar, a este mismo intervalo se incrementa un registro, denominado en el programa principal AZAR. Este registro se li- mita a algunos valores, dependiendo de la configuracién que se tenga en los. interruptores de seleccién. Si la opcién que se tiene por medio del interruptor S1 es para dados, cada uno de los elementos que se mostrardn en los displays debe tener un valor com- prendido entre 1 y 6; cuando se esté en Ia opcién de ntimeros aleatorios, cada uno de los elementos estar comprendido entre 0y 9. Estos valores se incremen- tan y limitan cada dos milisegundos, y para el caso del generador de mimeros aleatorios, dard un giro completo cada 200 ms, o lo que es equivalente, cinco veces cada segundo. Este valor se detiene al momento de presionar el interrup- tor S3, el cual genera una condici6n de reinicializaci6n del circuito, en donde no se borran los contenidos de la memoria RAM del microcontrolador, y se vuelve a iniciar el ciclo. El incremento permanente del registro RTCC se puede considerar como una rueda que gira sobre su eje, y la presiGn del interruptor $3 como un dardo que se arroja a esa rueda, para que se incruste en ella, Por supuesto, si la rueda gira lo suficientemente répido y el lanzador adicionalmente tiene los ojos cerrados, al arro- jar el dardo no podra determinar con certeza donde caeré el dardo. Una analogfa es la que se implementa con el programa y los componentes del proyecto, para ambas opciones del circuito. Como lo podrén deducir los que han trabajado con microcontroladores, el nico inconveniente se presenta para la primera lectura, al momento de energizar el circui- to. El fabricante, en la literatura que entrega con el sistema de desarrollo de los PIC's, afirma que ef valor de inicializaci6n de los registros, al momento de la energi- zaci6n, es indeterminado; lo mismo pueden ser ceros que unos, o una combinacién aleatoria de ellos. Ast, si no se tiene un control sobre el primer valor del registro temporizador, se puede perder el dominio del programa. Por ejemplo, si este comienza con un valor de FF hexadecimal, al enmascarar para que s6lo sobreviva la parte baja y al consul- tar una tabla de datos de tinicamente 10 elementos, podemos dar por finalizado Ruestro programa, ya que no sabemos lo que sucederé dentro de él. Esta es la tinica raz6n de una tabla de datos de 16 elementos, para prever Ja condicién del valor a mostrar en el momento de la energizacién. Otro de los aspectos a tener en cuenta, es asegurar que el registro denominado AZA se inctementard a intervalos regulares, sin importar que pase de 28 a 29 0 de 99 00. Si la segunda transiciGn se demora més que la primera, se estarfan violando condiciones de igualdad en la probabilidad, y algunos niimeros serfan més repetiti- Vos que otros. En el ejemplo de la rueda, si ésta tiene siete franjas y una de ellas es el doble del tamafio de las otras, la probabilidad de que el dardo caiga sobre esta franja no es del 14% (1 en 7), sino del 25% (1 en 4). 108 . Curso Basico de Microcontroladores PICs CECT Capttulo VI. Proyectos con microcontrolador !Programa del dado digital @ jEstas hacen referencia 20 equ 2 3@ posiciones de bits 5 jen el registro STATUS INDIR equ @ sDireccionamiento Indirecto RTCC equ x jReloj de Tiempo Real PC equ 2 ;Contador de Programa Sta equ 3 sEstados de la CPU FSR equ 4 ;Puntero para Dir. Indirecto port_A equ 5 ;Puerto A, de 5 bits port_B equ 6 ;Puerto B, de 8 bits sDefinicion de registros auxiliares FLAGS — equ ech 3Banderas CONTA equ Dh ;Contador AUX equ Fh jAuxiliar org Q A fre movlw TRIS port_B moviw — b?1100' ;Configurar el puerto A TRIS port_A 3 moviw fh jLlevar unos mowf port_B jal puerto B movlw — @1Eh jLlevar unos al puerto A, mowwf port_A — ;apagar transistores movf AZAR, W MOVWF —DISP clré PROV clrf RTCC moviw b’10' —; bajada,tempo,x, timer, /8 OPTION spara configurar reg.’ OPTION Queda call CHOIG — ; Llama rutina mostrar digitos call DELAY —Llamar rutina de retardo goto Queda ;Quedarse en un loop CHDIG = movlw —@fh srutina de mostrar los digitos mowf — port_B btfsc —port_A,3 goto UNO swapf DISP movlw —b’@@11" xorwf port_A UNO movf DISP,w andlw fh call TABLA Curso Basico de Microcontroladores PIC» Caciy 109 Capitulo VII. Proyectos con microcontrolador DELAY RAND DAA diez Que sis DAD OLE TABLA 110 btfss andlw movwf retlw movlw XORWF btfss goto incf btfsc goto movf andiw xorlw btfss GOTO movLw addwF movLw xorwf btfsc clrf mov mowwf retlw movf andiw xorlw , btfss GoTo movlw addwF movlw xorwf btfsc clrf movf addlw goto addwf sretlw retlw retlw retlw retlw retlw retlw retlw retlw retlw port_A,2 fh port_B 3 ® RTCC,w Sta,Z0 DELAY PROV port_A,2 DAD PC DCBAdcba b* 00000000" b’00010001" b’00100010" b’00110011' b’01100100' b’@1110101' b’11100110' b’00000111" b’20001000' senviar solo numeros 3Retardo cercano a 2,5 ms valores que se muestran 30 31 ®NAUAUN Curso Basico de Microcontroladores PIC + CMCET retlw b’00001001" 33. nop ;@Ah nop }0Bh nop 3@Ch nop 30Dh nop 30Eh retlw b’11110111" jQFh Fusibles de programacién osc RC WOT OFF oP OFF Figura 3. Listado del programa del dado digital Ensamble y pruebas En la figura 4 se muestra una gufa de ensamble del circuito correspondiente al juego de azar, Como se observa, los diodos LED's se deben configurar para simular los Puntos de la cara de un dado. Al momento de ensamblar el circuito, recuerde que debe colocar los elementos en orden de tamafio, comenzando con los més pequefios, y respetando la polaridad de aquellos que lo necesiten (diodos, transistores, condensa- dores, etc). Al terminar de armar el circuito, y sin colocar el microcontrolador, éste debera alimentarse con una fuente regulada de 5 voltios, con la polaridad correcta. En este momento se pueden realizar algunas pruebas al circuito para verificar su funcionamiento. Primero, verificar con la ayuda de un voltimetro si entre los pines 5 y 14 de la base del microcontrolador se presentan una diferencia de potencial de 5 voltios; si no es asf, se deben revisar las soldaduras. Posteriormente, se debe verifi- car el cambio de los estados Iégicos en los pines 1, 2 y 4 del microcontrolador cuando los interruptores asociados se conmutan. Si, con la ayuda de puentes de alambre, en la base del microcontrolador se lleva el pin 17 0 18 a un nivel l6gico bajo y simulténeamente se llevan los pines 10 a 13 a niveles l6gicos altos, los LED's asociados a cada uno de los transistores correspon- dientes se deberdn encender (D2 a D15). También, si en este momento se llevan los Pines 6 a 9, de la misma base, a un nivel l6gico bajo se deberd formar un cero en el display cuyo transistor PNP tenga su base en un nivel I6gico bajo. Puede formar otros ntimeros, dependiendo de las Iineas de entrada del decodificador que se tengan en niveles I6gicos altos (pines 6 a9 del microcontrolador). Verificadas todas las condiciones anteriores, se debe desenergizar el circuito ¢ introducir el microcontrolador grabado, con el programa que se muestra en la fi- gura 3. Finalmente, se puede empezar a jugar, recordando que debe descartar siem- pre el primer dato que aparece en la condicién de energizacién, ya que éste no es muy aleatorio. Curso Basico de Microcontroladores PIC + CmuNCir m1 Clase Jugada HMI dejuegoQ) de dados Figura 4. Guia de ensamble del circuito Este programa muestra, de manera casi que inmediata, el néimero correspon- diente en el display y en los dados ante la presi6n del interruptor de reinicializacién. Un inquieto por los microcontroladores le puede realizar modificaciones para que, por ejemplo, ante la condicin de reinicializacién los digitos muestren una cuenta répida, la cual se desacelereré lentamente hasta alcanzar el ntimero correspondiente, para.crear m4s expectativa y emocién al momento de establecer un verdadero juego. Lista de materiales Resistencias, DS1.2- Display de odo comin 785301 o similar Varios 1,2 - Interruptor de codillo ‘$3 - Imerruptor pulsador, NA. 1 cireuito impreso CK-121 1 base para circuit integrado de 16 pines 11 base para circuito integrado de 18 pines B espadines 30-cms de alambre para puentes 112 (Curso Bésico de Microcontroladores PIC* CamchT Capitulo VIL. Proyectos con microcontrolador Figura 5. Aspecto final del circuito ensamblado Todos los programas y rutinas contenidas en este curso son escritos como ejem- plos para que el lector se introduzca de la manera més sencilla posible en el estudio de los microcontroladores PIC. El estudiante puede modificarlas, mejorarlas y, cuando asf lo considere, cambiarlas por otras que sean més éptimas y quiza mas sencillas, Curso Basico de Microcontroladores PIC + CEMA 113 Circuito impreso universal para PIC Este circuito esté disefiado para que el estudiante pueda montar cualquier proyecto, usando un microcontrolador PIC como elemento de control. El impreso incluye la conexién para la fuente de alimentacién de +5Y, la conexién del oscilador a cristal de! microcontrolador y un circuito de reset para el mismo. 7805 +5V fee. mm ouTtt 1N4004. GND 1000uF/25V Fuente Microcontrolador +5V Diagrama de conexiones en el circuito impreso universal para PIC La fuente de alimentacién tiene un puente rectificador (implementado con cuatro diodos 1N4004), un condensador de 1000KF/25V y un regulador de +5V (7805). La tierra de la fuente y el punto de +5V se conectan como buses a lo largo del circuito impreso. El microcontrolador tiene lista la conexi6n para el cristal (4 MHz por ejemplo) y para los dos condensadores (20 pF). El circuito de reset, que se implementa con un transistor PNP (2N3906), tres resistencias y un diodo Zenner de 3 6 3.3 V, sirve para detectar en que momento se hia cafdo la fuente de alimentacién, y a partir de cierto voltaje (por ejemplo 4V), se garantiza un reset del microcontrolador. Esto le da mayor seguridad al funcionamiento del sistema. Curso Bésico de Microcontroladores PIC + CRIT 115 mf elie Con Curso Basico de Microcontroladores PIC ut CEIKIITT:. ‘COMPANIA EDITORIAL ELECTRONICA

You might also like