Está en la página 1de 108
Curso Basico de Microcontroladores PIC CEK it: COMPANIA EDITORIAL ELECTRONICA En los dltimos afios, un componente electrénico ha revolucionado las téenicas 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 electrénica digital y los microprocesadores. "Este curso es un programa tesrico-priictico, 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 capftulo 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 Ilevarlo 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 comprensién de las mismas. En el quinto capitulo se explica la utilizacién del PIC16C84 en circuitos précticos, realizando varios ejercicios reales, explicando cada uno de los pasos involucrados en el desarrollo de los programas. EI sexto capitulo contiene una serie de programas 0 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 tiltimo capitulo presenta la forma de realizar proyectos practicos, introduciendo asf al lector en la forma de levar 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. Introducci6n..... CAPITULO I. Los microcontroladores . Un poco de historia .. Sistemas microcontrolados .. Disefto con microprocesador vs. microcontrolador El microcontrolador... Principales familias de microcontroladores Los microcontroladores PIC... Proyectos con microcontroladores CAPITULO II. Conozca el PICI6C84. Pines y funcione: Caracteristicas especiale: Arquitectura interna del PICI6C84 .. Circuito de experimentacién con el PICI6C8: El PICIOF84.. CAPITULO HI. 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ér Descripcién de las instrucciones 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-06. CAPITULO VI. Rutinas de programacién Conversién de un nuimero binario en su equivalente BCD Suma de dos nimeros BCD. Conexion de displays al PIC CAPITULO VII. Proyectos con microcontrolador Pasos a seguir en la elaboracién de un proyecto Proyecto: Dado digital con PIC. Apéndice A. Circuito impreso universal para PIC ... 1n Jos tiltimos afios, un componente electrénico ha revolucionado las técnicas de disefio; se trata del microcontrolador. Un citcuito 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. Al terminar el curso, el lector estaré en capacidad de desarrollar circuitos de aplicacién 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 aplicacién que no pueda utilizar- lo para optimizar su operacién. Este curso es un programa teérico-practico, concebido para un nivel basico 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. EI segundo cap(tulo nos introduce al estudio del microcontrolador PIC16C84, sobre el cual se desarrolla gran parte del contenido teérico-préctico 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 evarlo hasta la memoria del mismo. En el cuarto capitulo se presentan todas las instrucciones que pueden ser aceptadas por el PICI6C84, utilizando ejemplos précticos 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 PIC16C84 en circuitos practicos, 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 microcontrolades, los cuales van acompajiados de explicaciones detalladas que facilitan el entendimiento de los mis- mos. El tiltimo capitulo presenta la forma de realizar proyectos précticos, introdu- ciendo asf al lector en la forma de llevar a la realidad todas sus ideas y proyectos que con un microcontrolador, se pueden implementar més faécilmente. De esta forma, esperamos que las personas se introduzcan fécil y rapidamente en el maravilloso mundo de los microcontroladores y se preparen para asumir el reto tecnolégico que nos imponen cada dia 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 0 “quemador" para los microcontroladores y el software 0 conjunto de programas que se entregan con él. CEKIT S.A. Los Microcontroladores ¢ Un poco ae 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 electrénico trae consigo técnicas de dise- fio diferentes, por lo general, mas simples. En los aflos sesenta, para construir un reloj digital se necesitaba acoplar un buen néimero de circuitos 16gicos como conta- dores, divisores, decodificadores y redes combinatorias, Al mismo tiempo, el dise- fiador debfa poser muy buenos conocimientos sobre cada uno de los elementos. A partir de 1970, el panorama de la electrénica cambié radicalmente con la apa- ricié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 consolidarfan las técnicas de integracién, el estudio de las memorias, la progra- macién en lenguaje de maquina y la adaptaci6n 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 sinntimero de tareas y procesos. Desde este momento, el disefio 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- ctoondas, vidéograbadoras, alarmas, automéviles, etc. Las aplicaciones son infini- tas, el tinico 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 mds versdtiles que existen. El diagrama general de un sistema microcontrolado serfa el que se muestra en la figura 1. /Microcontrolador| Dispositivos Dispositivos de entrada de salida Programa jura 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 decisi6n, por ejemplo un teclado, un interruptor, un sensor, etc. Los Curso Bésico de Microcontroladores PIC + CEWET 5 Capitulo I. Los Microcontroladores salida pueden ser indicadores visuales (LED’s), indicadores audibles (zumbado- es), interruptores de potencia que manejan motores, u otros dispositivos como relés, motores, valvulas etc. Interruptores 1 1 ! Teclados KI 1 | 1 1 Pobre petit 1 1 I 1 Transductores KR 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. Vedmos el caso de un horno de microondas. DISPLAY Teclado be aS Fecaplor Microcontrolador femoto | >| Motores [>| Relevos jensores t intemos Figura 3. Ejemplo del uso de un microcontrolador en un homo 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 intemnos para con- tolar variables como la temperatura y, si el homo tiene la posibilidad, un receptor remoto para ejecutar las érdenes dadas por el usuario desde el control. 6 Curso Basico de Microcontroladores PIC* CHET Capitulo 1. Los Microcontroladores Como dispositivos de salida se tienen: el display, que puede ser de LED's 0 de cristal Iiquido, e! motor que hace girar los alimentos y algunos relevos que se encar- gan de controlar desactivar algunos componentes del horno, lo cual permite, por ejemplo, cambiar la potencia de coccién, entre otros. Disefo 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 alimentaci6n al sistema. * Memorias RAM (Memoria de acceso aleatorio). Se utilizan para guardar los datos temporales que se necesitan en la ejecucién del programa. Estas memo- rias se conocen como memorias volatiles porque pierden la informacién cuan- do se retira la alimentacién. + Decodificador de direcciones. Sirve para accesar correctamente a las memorias y a los dispositivos periféricos del microprocesador. El proceso de disefio involucta 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 Reloj ra RD yo(g255) WR > Salida bo:b7 2K S| |Do:p7 2K Do:D7 CS K— Entrada Sas TA 2 > Figura 4. Arquitectura de un sistema usando el microprocesador Z-80 Curso Basico de Microcontroladores PIC + CENT 7 Capitulo I. Los Microcontroladores Si consideramos Ia 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 diffcil 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. +5V 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 alimentacién, un cireuito de reloj y el chip microcontrolador. Solamente se requiere grabar el progra- ma en la memoria ROM; los puertos ya estén listos para conectarse al mundo exterior. En la prictica los resultados de simplificaci6n son sorprendentes; la figura 6 muestra la comparacién entre un citcuito 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 més 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 slo encapsulado. * El tiempo de desarrollo de un sistema se reduce notablemente. 8 Curso Basico de Microcontroladores PIC + CHRCET Capttulo I. Los Microcontroladores Fuente de poder i bess Microcon- trolador ; Figura 6a. Circuito con microcontrolador Figura 6b. Circuito con microprocesador El microcontrolador Un microcontrolador es un circuito integrado programable, capaz de ejecutar las 6rdenes o secuencias que estén grabadas en su memoria. Esta compuesto de varios bloques funcionales, los cuales cumplen una tarea especifica dentro del ordenamien- to del mismo y a su vez permiten obtener configuraciones diferentes. Esto es, se pueden diferenciar segiin el tamaiio y cantidad de sus elementos basicos y caracte- risticas especiales. En esta secci6n nombramos algunas de las partes basicas a mane- ra de informacién para establecer algunas comparaciones més adelante, + Memoria ROM (Memoria de sélo lectura) + Memoria RAM (Memoria de acceso aleatorio) + Lineas de entrada/salida (1/0). También lamadbs 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 mas 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 seffales no digitales, como por ejemplo temperatura, voltaje, luminosidad, etc. Curso Basico de Microcontroladores PIC + CEMCET 9 Capttuto 1. Los Microcontroladores Microcontrolador Memoria Comunicacién EEPROM Sabda EWM serial RS-282 Figura 7. Funciones adicionales en los microcontroladores Convertidor A/D + Si se requiere medir perfodos de tiempo entre eventos, generar temporizaciones 0 salidas con frecuencia especffica, algo muy comtin en electrénica, se puede dispo- ner de uno 0 varios temporizadores programables (timers). * Cuando se necesita establecer comunicaci6n con otro microcontrolador o 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 Ja alimentaci6n, 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 (modulacién por ancho de pulso) en el con- trol de motores DC o 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 interrupcién, el microcontrolador deja de Jado 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 el 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. EI 8051 tiene 4 Kbytes de memoria ROM que debe programarse durante el proceso de fabricaci6n 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 + CENCHT Capitulo I. Los Microcontroladores Referencia__MemoriaROM _ MemoriaRAM Th 8051 aK 128 2 8052 8k 256 [ 3 8031 Extema 128 2 8032 Externa 256 3 8751 4K (Eprom) 128 2 Figura 8. Microcontroladores de la familia Intel 8051 E1 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 estan construfdos a partir de la misma CPU de 8 bits y tiene RAM, ROM, puertos de entrada/salida y temporiza- dores; algunos tienen, ademés, puertos seriales, convertidores andlogo a digital y me- morias EEPROM o EPROM. Referencia__MemoriaROM MemoriaRAM Timers __Otros__| 68HCOSC4 4k 176 + es 68HCO0508 8K 176 1 68HCOSC2 2k 176 1 68HC705C4 4K (Eprom) 176 1 68HC705K1 504 32 Y 64 1 ‘68HCOSBM 2k 176 11 mejorado| SeMveseisal Figura 9. Microcontroladores de la familia Motorola 6805 Familia Microchip 16CXX Est4 formada por una amplia variedad de componentes con diferentes tamaiios de memoria, diferentes velocidades, diferentes tipos de encapsulado y diferente niime- 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 « CERT " Capitulo I. Los Microcontroladores Referencia___MemoriaROM__MemoriaRAM_Pines/O__Otros 16C54 512 32 12 16C57 2k 80 20 16C61 1K 48 42 |/Interrupcién 16C71 1K 48 y6ces | 1K (EEPROM) 48 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 artfculos periédicamente. Su flexibilidad, configuraciones para todas las necesidades y bajo costo, Ja hacen muy atractiva para los consumidores a gran escala y para los estudiantes disefiadores independientes. En este curso nos dedicaremos especialmente aesta familia. Los microcontroladores PIC El fabricante los define como una familia de microcontroladores de bajo costo, bajo consumo de potencia y alta velocidad de operacién. No est 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 Teposo o sleep (en este modo el micto 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 PICI6CXX tienen memoria EPROM 0 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, posce temporiza- dores programables y algunos poseen conversores andlogo a digital. Esta familia se divide en tres rangos segtin la capacidad de los microcontrolado- res. El més 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/ TX/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 PICI6C84, 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 Basico de Microcontroladores PIC + CNET Capitulo I. Los Microcontroladores luz ultravioleta como sucede con los otros tipos. Esto lo hace éptimo para el desarrollo de prototipos y la experimentaci6n. Por su facilidad de manejo, progra- macién y aplicacién, utilizaremos este microcontrolador para desarrollar este curso bisico. 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 més adecuado. Se debe tener conocimiento de las caracterfsticas 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 o quemador para grabarlo en la memoria del chip. En proyectos avanzados también se deben tener conocimientos especificos de la aplicacién, como las conversiones andlogo a digital, las interfaces y protocolos de comunicacién, 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 programacién, para luego terminar el curso con Ja cons truccién de algunos proyectos, que nos introducen de Ieno en el mundo de los microcontroladores. Curso Basico de Microcontroladores PIC + CICIT 43 Conozca el PIC16C84 ¢ Pines y funciones ° Caracteristicas especiales ¢ Arquitectura interna del PIC16C84 * Circuito de experimentacion con el PIC16C84 ° El PIC16F84 Capitulo 11, Conozea 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 raz6n la gran mayorfa de aplicaciones en este texto las haremos usando este integrado. Pines y funciones ad > aml 18[] rar - i on Oe 17 []Ra0 —- srewtocni[]3 16 [] oscweiKIN=— > wetAver[]4 © 15 [Joscacikour > ‘ oe PF al 1] veo a PIC16C84-04/P mine 9652CBN > reomr[]6 G 13[]Ra7 —- > peif]7 12f}ne8 <> nez[]s if]nes > > sal] tof}nee ee 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 ms comin para el microcontrolador es el 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 segiin 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. OWL) Peeeear yd a) Encapsulado tipo DIP b) Encapsulado para montaje superficial Figura 2. Tipos de encapsulado Curso Bésico de Microcontroladores PIC + CENCAT 7 Capitulo If. Conozea et 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 0 como salidas. El PIC16C84 tiene dos puertos. El puerto A con 5 lineas y el puerto B con 8 Iineas, figura 3. Cada pin se puede configurar como entrada o como salida indepen- diente, Usando una instruccién especial llamada TRIS, se puede lograr el efecto descrito. En esa instruccién un “0” configura el pin correspondiente como salida y un “1” Jo configura como entrada. 13|—»R87 RAATOCKle—13 xt 12 —* RBG Ress 6. OT RES Puerto, raze—l1 QB 10L —ertB4 ( pucrto A RAle—li8 oT 9}—eRB3 B RAOe—117 Q 8}—eRB2 a 7}—r81 8 RBO 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 0 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 automdticamente 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 Ilevarlas a niveles l6gicos (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 Iégica es inversa: un “0” escrito al pin del puerto entrega a la salida un “1” l6gico. Este pin como salida no puede manejar cargas como fuente, s6lo 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 Ja figura 4. 18 Curso Bésico de Microcontroladores PIC* CERET Capitulo 11. Conozca el PICI6C84 +5V +5V 10K 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: PUERTOA PUERTO B Modo sumidero 80 mA 150 mA Modo fuente 50 mA 100 mA El consumo de corriente de! 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 mas adelante). Assv & \ PIC16C84 & PIC16C84 J S} imax=20ma Imax=25mA ap +5V & ) Pictece4 & Pict6ce4 S Ss S Puerto A Imax=50mA Puerto BB _Imax=100mA 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 + CERCAT 19 Me Capttuto 11. Conozea el PICI6C8S 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 o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PICI6C84 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 Hamados “fusibles de configuracién”. El tipo de oscilador que se sugiere para las précticas 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 Ja figura 6. 20pF 1f SCI Cristal de 4MHz— t+ ——4 losc2 20pF i PIciecea Figura 6. Conexién 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. Si no se requiere mucha precisi6n en el oscilador y se quiere economizar dinero, se puede utilizar una resistencia y un condensador, como se muestra en la figura 7. +5vDe R Josc1 ©; [pe Figura 7. Conexién de un oscilador RC 20 Curso Bésico de Microcontroladores PIC + CERCET Capttulo 11. 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 0 porque asf se halla disefiado el sistema. El pin de reset en los PIC es llamado MCLR (master clear). E] PICL6C84 posee internamente un circuito temporizador conectado al pin de reset que funciona cuando se da alimentaci6n 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. +5VDC 10K. 1002 4) CTR : Reset jf 16C84 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. Vedmos una breve descripcién de las mds 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 titil cuando se trabaja en ambien- tes con mucha interferencia o 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 + CERAT 21 Capitulo I. Conozea el PICI6C84 entra en ese estado por la ejecucién de una instruccién especial (llamada sleep) y se sale de él 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. EEPROW oF [| ComaDEAE ‘reas KPa? a \p V7 cca Cownto 96 aerae,| | caves OBE wSRSEERREs | | NVERES ae be = MULTIPLEXACION DE DIREGCIONES, wonecnc oa Pucrros TEMPORIZADOR v0 Conrro. DE-ENGENDIOO. JoecooircADOR De PUEATOS INTRUCCIONES [TeNeoRZanoA De] Res. staTus ar eat cneuroce |] —>[_mx a o 5 WATCHDOG, ay coset osc2 cra REGISTRO W Figura 9. Arquitectura interna del PIC16C84 La figura 9 muestra la arquitectura general del PICI6C84; 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 arrangue, el oscilador, etc. Todos los elementos se conectan entre sf por medio de buses. Un bus es un conjun- to de Iineas que transportan informacién entre dos o més 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 mas 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 Basico de Microcontroladores PIC* CENCE Capitulo 11. Conozea el PICI6C84 El PIC16C84 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 caracteristicas que podrian confundir al lector, pero més adelante, en capitulos més avanzados, se vuelven a retomar y se tratan con mayor claridad. Logica de Memoria de control Programa Unidad de | Memoria de proceso datos Puertos Ge 8 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 experimentaci6n. En ella se graba, o almacena, el pro- grama o cédigos que el microcontrolador debe ejecutar, figura 11. Memoria del programa Vector de reset «$0000 [~ tnstrucciones y/o Datos 0001 0002 Vector de 0003 see oh ome 1 Kilobyte SOSFF 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 la iniciacién del mismo. Curso Basico de Microcontroladores PIC + CERT 23 Capitulo 11, 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, alli 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 sélo 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 est ejecutando, figura 12. Registro {$00 [ Direccionamiento indirecto DESCRIPCION DE LOS REGISTROS 01| TMRO_ RO 00H Registro de direccionamiento indirecto. 02] PCL Ri 01H Registro temporizador/contador (TMRO) Glsaissce TT R2 02H Contador de programa, parte baja (PCL) ad LL R3 03H Registro de estados Or | Seeeatar de registros, R4 04H Registro selector, se usa para 05 [Datoldel puerto A. direccionamiento indirecto 06 | Dato del puerto B R5 05H Puerto A, se usan los 5 bits mas bajos o7 RG 06H Puerto B, el bit 0 también puede ser 08 | ignore’ de interrupeién 09 | Ignore R7 07H Noseusa RB 08H —_No se usa todavia, mas adelante se OA] PCLATH describe 0B | INTCON R9 09H —_No se usa todavia, mas adelante se oc: describe RA OAH Contiene los 5 bits de la parte alta del contador del programa (PCLATCH) RB 0BH Registro de control de las. interrupciones (INTCON) RC OCH _Registros de propésito general soF| FOF _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 mas sencillas. En un nivel mds 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 seffal 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 + CERCET Capitulo 11, Conozea el PICI6C84 Por facilidad en el aprendizaje del microcontrolador, se escribiré en el registro Option con una instrucci6n del mismo nombre (Option). Pero més adelante, en el nivel avanzado, veremos como se ha transformado su estructura y aprenderemos a usarlo de otra manera que nos permitird tener méis compatibilidad con las nuevas familias de microcontroladores de Microchip que se desarrollen. RBPUT INTEDG] TOCS [TOSE] PSATPS2 | PST [PSO] _—aaw Valor de preescala Prescaler Assignment © Asignacién del preescalador ‘0= TRMO (Controlador temporizador) 1=WDT (Circuito de vigilancia) L__. Seleccién de flanco externa en TMRO Flanco de subida = Flanco de bajada Seleccién de fuente TMRO. incremento con reloj interno Incremento con sefial eterna ‘en TOCK! '— Flanco de interrupcién INT O= Flanco de bajada lanco de subida Resistencias de pull-up en Puerto B 0= Habilitada. 1= Deshabilitada Valor de preescala PS2_PSi_ PSO, OF r01 0 2 o o 4 4 oT; © 8 Que igeitan & 1 16 0: 10 32 Aisne 1 64 fsco ts) 0) 128 1 1 1256 Figura 13. Registro Option Contador de programa (PC). El PIC16C84 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 El 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 + CERT 25 Capftulo 1. Conozea el 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. Incluido en la instruccién, Expansién 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 Gltima operacién efectuada; si el resultado de una operacién fué positivo 0 negativo, si fue cero o 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. nro] To] Po] Z| oc] c] © Bit de acarreo. En instrucciones L_ aritméticas se activa cuando se presenta No usados acarreo desde el bit més significative del resultado, Digit Carry o Bit de acarreo de digito. En operaciones aritméticas se activa cuando hay acarreo entre el bit 3 y al 4 Zero 0 Bit de cero. Se coloca ‘en 1 cuando el resultado de '— una operacinligiea 0 aritmética es 0 Power Down o Bit de bajo ‘consumo. Se coloca en 0 por la instruccién SLEEP Time Out o Bit de finalizacién del ‘temporizador. Se coloca en 0 cuando el Circuito de vigilancia Watchdog finaliza la temporizacion Seleccién de banco de memoria (Ignorar) Figura 15. Registro de estados (6 bits) Pila (Stack) Estos registros no forman parte de ningtin banco de memoria y no son accesables por parte del usuario. Se usan para guardar el valor del contador de programa 26 Curso Basico de Microcontroladores PIC+ CNET Capitulo 11. Conozea el PICI6C84 cuando se hace un llamado 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 la 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 versatil que contiene varios circuitos titiles para empezar a experimentar con el PIC, en la figura 16 se muestra su diagrama en bloques. a Pulsadores | | L—»| ——>| Picteces Butter | x No} c Relé Circuito NC ti de LED's Circuito de Reset Fuente de alimentacién Zumbador del sistema Figura 16. Diagrama en bloques del entrenador K-061 de CEKIT Elentrenador 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 tiltimas pasan a través de un buffer con el integrado ULN2803 para mejorar la capacidad de corriente y aislar ¢ independizar los circuitos cuando se desea extender el puerto B del microcontrolador hacia otra tarjeta o un protoboard. Descripcién El médulo es completamente aut6nomo, solo necesita conectarse a la linea de ali- mentacién de 120/220 VAC y disponer de un microcontrolador PICI6C84 progra- mado previamente. La fuente de alimentacién esté incluida en el circuito; ademds se dispone de un interruptor de encendido y apagado. Elentrenador ha sido construfdo de la forma mis 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 + CEMAT 27 Capitulo II. Conozea et PICI6C84 OVA o2z/0LL ogy LUT | v8D9LIId ast 40pesingf es 3 eau sr ZHIy [_] 4022 ee bosoley bey + dee K-061 Figura 17. Circuito del entrenador Curso Basico de Microcontroladores PIC + CENCET 28 Capitulo 11. Conozea el PICI6CS4 + El zumbador se encuentra listo con su oscilador y todos los componentes necesa- tios; el microcontrolador slo debe entregar una sefial positiva para encenderlo y éste debe emitir su sonido. * Las teclas 0 pulsadores que se pueden leer tienen una resistencia conectada al positivo de la fuente, normalmente se lee una sefial 16gica positiva y al oprimir la tecla se lee una sefial Iégica negativa. * El relé se maneja usando un transistor NPN. Entonces para activarlo, el microcon- trolador debe entregar una sefial positiva. Existe en el circuito 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 aplicaci6n. 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 E] PICI6F84 es un nuevo microcontrolador de la familia Microchip, totalmen- te compatible con el PICI6C84. 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: + La memoria 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, sien el PICI6C84 se selecciona la opeién "High" para activarlo, en el PICI6F84 se debe seleccionar "Low". Curso Basico de Microcontroladores PIC + CEKIT 29 Cémo escribir un programa ° Cédigo fuente ¢ Clases de lineas en un programa ¢ Archivos y formatos del ensamblador * Como ensamblar un programa * Como programar el microcontrolador Capitulo HI. Cémo 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- en un programa se escriben en un editor de texto normal (ej. 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 eé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 los articulos publicados en las principales revistas, lo utilizan como base. El programa con las instrucciones comprensibles por el programador se llama cédigo fuente, y el que genera el ensamblador y se utiliza para programar el micro- controlador se Hama eédigo 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, Sittiese en el directorio rafz del disco duro «C:\>». 2. Cree el directorio escribiendo: «CA>md cursopic» , luego oprima «Enter». 3. Copie los archivos del disquete: «C:\>copy a :*.* c:cursopic». 4. Para trabajar entre al directorio: «CASed cursopic» , luego oprima «Enter». 5. En la pantalla debe aparecer: «C:\CURSOPIC>». Ahora est 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, etc. Para entender mds 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 estén conectados en el puerto B del microcon- trolador que hace parte del circuito entrenador K-061 que se describis en el capitulo pasado. Si en el computador estamos en el directorio de trabajo edit prueba.asm» , y luego oprimir «Enter». Curso Basico de Microcontroladores PIC + CECT 33 Capitulo 11. Como 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- has como se ve en el ejemplo. Asegiirese de «guardar» o «salvar» cada vez que vaya a salir del editor. j Sosa nee saeseeessssaees: list p=16c84 ptob equ 06 — el puerto b esté en la direccién 6 de 1a jmemoria RAM reset org 0 jel vector de reset es la direccién @0 de la jmemoria de programa iniciomoviw 0 ;carga el registro w con 00 tris ptob copia el valor de w al registro que programa sel 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 sen el registro w ciclo nop jel programa se queda en este ciclo hasta que jsufra un reset goto ciclo En el momento de quemar el microcontrolador se debe jseleccionar los fusibles de configuracion siguientes: XT 4 oscilador ; watchdog OFF ; cédigo de proteccién OFF ‘ power-up timer ON Figura 1. Ejemplo de como escribir un programa Las reglas basicas para escribir un programa para un microcontrolador PIC tienen que ver con palabras 0 comandos especiales, signos de puntuacién, tabu- laciones para escribir en columnas, etc. A continuacién, haremos una descrip- cién de cada una de ellas y veremos que tipos de Ifneas de instrucciones 0 de comandos se pueden usar, Como se ve, cada linea de programa tiene cuatro cam- pos o columnas; cada una contiene diferente informacién y recibe un nombre especifico, a saber: Etiqueta Operacién Operandos Comentario ej: inicio movlw 0 searga el registro w con 0 34 Curso Basico de Microcontroladores PIC + CmnCiT Capitulo 111. Como 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 direcci6n 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 mimeros reales de las direcciones fisicas, sino que se puede trabajar con algunos simbolos o pala- bras que son de muy fécil recordacién, 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 (_) € interrogacién. * Su longitud no debe exceder de 31 caracteres Operacién Es la instruccién del microcontrolador que se ejecuta. Todo el conjunto de ins- trucciones del PIC16C84 se verd en el siguiente capitulo. Operandos Son los registros o cantidades sobre los que se realizan las operaciones o instruccio- nes. Puede ser un registro de la memoria de datos o 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 ntimero 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 verén mas adelante. Comentario El ensamblador ignora esta linea en el momento de generar el cédigo objeto, pero para la persona que hace el programa es muy importante ya que ahi puede escribir la idea 0 la explicacién de lo que esta 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 * CERT 35 Capitulo II. Cémo escribir un programa lar que se tiene y de la acci6n que esté ejecutando el microcontrolador. Ejemplo: En la Ifnea que empieza con inicio, se explica lo que hace Ia instruccién movlw. Clases de lineas en un programa Como ya vimos qué formato tiene una linea de programa, veremos qué tipo de Iineas pueden escribirse. Se pueden usar cuatro tipos diferentes, la de igualdad (equ), la de origen (org), la de instruccién normal y la final (end), figura 2. Etiqueta — Simbolo Numero hexadecimal o Comentarios deigualdad —direccién de memoria Igualdad: equ 3 Etiqueta Simbolo Direccién hexadecimal Comentarios de origen Origen: org é Etiqueta Instruccién Registro o ntimero Comentarios literal Programa: ‘i Noseusa Simbolode No seusa Comentarios linea final Final: end : Figura 2. Tabulaciones y tipos de linea Igualdades Se utilizan para asignar un nombre o simbolo 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 o a todo el puerto B no hay necesidad de buscar en la hoja de datos del micro cual es su direccién fisica, sino que se puede hacer referencia a ptob, el ensamblador asf lo entenderé. Ademés, para la persona que escribe el programa, es mucho més sencillo. 36 Curso Basico de Microcomtroladores PIC+ CECT Capitulo 111. Como escribir un programa También se puede usar para asignar nombres a un ntimero cualquiera. Por ejemplo : 109 equ 09 min equ ol Se asigna el nombre 109 al registro 09 de la memoria RAM del microcontrola- dor,, De esta forma, siempre que se refiera a dicha posicién, se puede hacer a 109. Por ejemplo : movlw o1 movwf r09 En este caso se cargé el acumulador con el valor 01 y luego se pasé a la posicién © registro de memoria de la direccién 09, que est representado por el nombre r09. En un programa se podrfa 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 linea 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 ong, 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 mas abajo. + En el vector de interrupcién, ejemplo: inter org 04 movlw 05 Curso Basico de Microcontroladores PIC + CERT 37 Capttula IL. Cémoescribir un prograina {Cuando el-microcontrolador detectauna sefial de’ interrupcién,’él contador de programa apunta a la direccién 04 de la memoria. Entonces, allf se debe es- cribir la porcién de programa que se encarga de atender 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: 110901 : 5 demons {9 rov6d oboucy 9@ miovlw orci 5 05: H0 i Final Se usa para decirle al ensamblador que el programa ha terminado; se usa la directiva end. Formato de.un:programa balur 28 1 En vista de las descripciones anterioresy podemos resumir el: formato de un’progra- ma de la forma en que muestra la figura 3. Encabezado list px16c84 Iqualdades generates ''ptoa equ 0s ptob equ 06 Otras yj nif 2 misene fob avitas: H AQ» + ,igualdades, Programa Final. Figura 3. Estructura o formato de un programa _ Encabezamiento del programa! od: y La informacién al comienzo del programa se llama encabezado, ejemplo: pike list p=16c84 «List es un:comando del ensamblador que indica algunasidirectrices al inicio del programa. Por ejemplo, la diréctriz p=16c84, indica cudl tipo de microcontroladot se va a grabar coniel programa queise esté escribiendo. i Archivos y formatos del ensamblador »:::«: Cuando se escribe un programa en el'editor del DOS, se debe crear un archivo con extensién .asm, com en el ejemplocanterior: prueba.asm. El ensamblador sélo acepta archivos con esa extensién. 38 Curso Basico de Mierocontroladores PIC* CHEK Capitulo 111. Como escribir un programa Cuando se ensambla un programa, se generan automaticamente varios archivos que tienen el mismo nombre del archivo fuente, pero con extensiones diferentes, a saber: * Unarchivo con extensién Ist (listado), que es muy similar al archivo .asm, pero con algunas modificaciones como la inclusién de los ntimeros de las Ifneas, entre otras. + Un archivo con extensién .err (error), que contiene una lista donde se especifica si el programa escrito tiene errores. Si los tiene, dice en que linea y de que tipo. * Un archivo con extensi6n .hex (hexadecimal), que es el c6digo objeto hexadeci- mal con el cual se puede grabar el microcontrolador. * Sise desea, también se puede generar un archivo con extensi6n .obj; este es un c6digo Objeto diferente del .hex, pero que en algunos quemadores de PIC se puede utilizar, Como ensamblar un programa Para verel funcionamiento del programa ensamblador se utiliza el programa prueba.asm que se ha usado como ejemplo en este capitulo. Los pasos son los siguientes: * Asegiirese que el programa sea escrito en forma idéntica al original. El archivo debe grabarse con el nombre prucha.asm. + Escriba el comando «C:\CURSOPIC>MPASM» , luego oprima «Enter». + Debe aparecer un pantallazo como el que se muestra en la figura 4, a ) 4ey1993296) Microchip: mechhology/THei/Byte Ceate tami Source Fle : (ESRI remem "Processor Type : Noneliifill] r "error rile : ves RIRESERINEIGRUUERUNRRRtRE Cross Reference File : No jiilS)OhiINNiiGgsnisnngnaan | cisting File : Yeo iii amnNc nna Hex Dump ‘Type : XNHXEM .#PROG» , luego oprima «Enter; debe aparecer un pantallazo como el de la figura 8. + Con el mouse seleccione la opcin Open, si no, 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 + CET Capitulo II. Como escribir un programa Figura 8. Pantallazo del software programador de PIC Inserte un microcontrolador PIC16C84 en el socket del programador, cuidando que la posici6n es la correcta (el pin 1 debe coincidir con el punto) y con el mouse seleccione la opeién Program, sino, presione las teclas P para programarlo. En el caso de aparecer un mensaje que dice que el micro no est borrado, escoja la opcién 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 Ia fuente de alimentacién. LS Curso Bésico de Microcontroladores PIC + CHAT 43 Instrucciones del PiIC16Cs8s4 ¢ Estructura de las instrucciones ¢ Tipos de instrucciones * Descripcion de las instrucciones 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 instrucci6n, 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 estn divididos en dos partes: El cédigo de operacién y el operando. bit 13 bit Cédigo de operacién Operando (s) El c6digo de operacién especifica el tipo de instrucci6n (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 nimero o nombre del registro con el que se efectiia la operacién, la posicién del bit que se desea chequear © ajustar a un valor o 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 Ia operaci6n se carga en el registro de trabajo W; si d=1 el resultado se guarda en el registro “f" especificado por la instruceié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 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: BCE 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) 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® CEMCET 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 estn divididos en dos partes: El cédigo de operacién y el operando. bit 13 bitO Cédigo de operacién Operando (s) El c6digo de operaci6n 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 nimero o nombre del registro con el que se efectia la operacién, la posicién del bit que se desea chequear © ajustar a un valor o 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 Ia 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: BCE fb podria ser BCF 09,2 En este caso el bit mimero 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 Basico de Microcoutroladores PIC + CHKET Capttulo IV. Instrucciones del PICI6C84 En este caso se le dice al contador de programa del microcontrolador que vaya a la direcci6n de memoria 00. Ejemplo 2: MOVLW k podria ser MOVLW 05 En este caso el registro de trabajo W se carga con el ntimero 05. Otras definiciones * Nemotécnico es el nombre que se le daa la instruccién del microcontrolador que est4 escrita de manera entendible por la persona que hace el programa (ej. movlw). * La letra “x” representa una condicin 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 Decim: Hexadecimal inario. O 0 0000 1 1 0001 2 a 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 2 1001 10 A 1010 11 B 1011 12 Cc 1100 13 D 1101 14 =z 1110 15 F 1114 Esta tabla nos sirve para comprender mejor las operaciones 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 némero 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 o valores constantes que en ella intervienen, Descripcién de las instrucciones Para facilitar el estudio de las instrucciones y hacer claridad en su operacién, haremos una descripcié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, Ademis, se incluyen ejemplos que muestran en forma clara los resultados que se obticnen con el uso de cada una. Curso Basico de Microcontroladores PIC + CERT 49 Capttuto IV. Instrucciones del PICI6C84 ADDLW Suma un valor literal al contenido del registro W. Sintaxis: ADDLW k Operacién: (W) +k—>(W) Ciclos de instruccién: 1 Bits del registro de estados que se afectan: Cc, DC,Z Ejemplo : ADDLW 15 Antes de la instruccién W=10 Después de la instruccién = W = 25 ADDWF Suma el contenido de un registro al contenido del registro W. | Sintaxis: ADDWF f,d 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 instruccién W=17 FSR=C2 Después de la instruccin W=D9 FSR=C2 ANDLW Operaci6n l6gica AND entre un literal y el registro W] Sintaxis : ANDLW k Operacién : Ciclos de instruccién : Bits del registro de estados que se afectan: Ejemplo: 50 (W) AND (k)->(W) 1 Zz ANDLW 5F Antes de la instruccién = W= A3 Después de la instruccién W =03 Curso Basico de Microcontroladores PIC + CENCET Capitulo IV. Instrucciones del PICI6C84 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 de la instruccin =) W=17 Después de la instruccién = W=17 |ANDWF Operacién légica AND entre un registro “f” y el registro FSR = C2 FSR = 02 BCE Pone en cero el bit “b” del registro P". Sintaxis : BCF fb Operacién : 0» () Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : BCF regis,7 Antes de la instrucci6n regis = C7 Después de la instruccién regis = 47 BSF Pone en uno el bit “b” del registro “P". BSF fb I(f) Ciclos de instruceién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : BSF regis,7 Antes de lainstruccién regis = 0A Después de la instruccién regis = 8A Curso Basico de Microcontroladores PIC + CERT 51 Capttulo IV. Instrueciones del PICI6C84 BTFSC Prueba el bi del registro salta una Ifnea si est4 en cer Sintaxis : BTFSC fb Operacién : salta si (Feb>) = 0 Ciclos de instrucci6n : 1(2) Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui BTFSC falso GOTO verdad Antes de la instruccién Después de Ja instruccién contador de programa = aqui si el bit 0 del registro regis contador de program: si el bit 0 del registro regis = contador de programa = falso Sintaxis Operacién : Ciclos de instruccién : Bits del registro de estados que se afectan: Ejemplo : Antes de la instruccién Después de la instruccién 52 BTFSS Prueba cl bit “b” del registro “f” y salta una linea si est en un BTFSS fb salta si (Feb>) 1Q) Ninguno aqui BTFSS __regis,0 falso GOTO inicio verdad «2... contador de programa = aqui si el bit 0 del registro regis = 1 contador de programa si el bit 0 del registro regis = 0 contador de programa = falso rerdad Curso Basico de Microcontroladores PIC + GENET Capitulo IV. Instrucciones del PICI6C84 CALL Llama una subrutina que esta ubicada en Ia posicién de memoria o etiqueta “k” Sintaxis : CALL k Operacién : (PC) + I->pila, k-> PC) Ciclos de instruccién : 2 Bits del registro de estados que se afectan: Ninguno Ejemplo : aqui CALL rutina Antes dela instracci6n _contador de programa = aqui Después de la instruccién contador de programa = rutina pila = direccién aqut CLRF Borra el contenido del registro “P”, lo carga con 00. } Sintaxis : CLRF f Operacién : o> Ciclos de instruccién: = Bits del registro de estados que se afectan: z Bjemplo : CLRF regis Antes de la instruccién regis = 5A Después de la instruccion regis = 00 CLRW Borra el contenido del registro W, lo carga con 00._] CLRW Operacién : 00>) Ciclos de instruceién ; 1 Bits del registro de estados que se afectan: Ninguno Bjemplo : CLRW Antes de Ja instruccién W=5A Después de la instruccion W=00 Curso Basico de Microcontroladores PIC + CEMCET 53 Capttulo 1V. Instrucciones del PICI6C84 CLRWDT Borra el conteo del Watchdog Timer. Sintaxis : CLRWDT Operacién : 00-»WDT Ciclos de instruccién : 1 Bits del registro de estados que se afectan: TO, PD Ejemplo : CLRWDT Antes de la instrucci6n Contador WDT = ? Después de la instrucci6n — Contador WDT = 00 TO=1,PD=1 ‘COMF Complementa el contenido del registro “f”. Sintaxis : COMF fd Operacién : ()—>(destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Z Ejemplo : COMF _regis,0 Antes de la instruccién regis = 13, W=? Después de la instruccién _ regis = 13, W= EC DECF Decrementa el contenido del registro “f”. Sintaxis : DECF fd Operaci6n : (8) - 1» (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo ; DECF regis, 1 Antes dela instruccién regis = 13 Después de la instruccién regis = 12 54 Curso Basico de Microcontroladores PIC + CHKCET (Capitulo IV. Instrucciones del PICI6C84: DECESZ, Decrementa el contenido del registro “f" si el contenido queda en 00, salta una linea, Sintaxis : DECFSZ £4 Operacién : (f) - 1» Gestino), 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 contintia ..... Antes de la instruccién _ contador de programa = aqui Después de la instruccién regis = regis - 1 si regis = 0, entonces contador de programa = continua si regis #0, entonces contador de programa = aqut + 1 [ GOTO Elcontador de programa salta a la direccién 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 programa = ? Después de la instruccién contador de programa = ciclo INCF Incrementa el contenido del registro “T’. | Sintaxis : INCF fd Operacién : (£) + 1—> G@estino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : INCF regis, 1 Antes de la instruccién regis = 24 Después de la instruccién regis = 25 Curso Basico de Microcontroladores PIC + CEMIT 55 Capitulo TV. Instrucciones del PICI6C84 INCFSZ Incrementa el contenido del registro el contenido de “f” queda en 00, salta una linea. Sintaxis : INCFSZ fd Operacién : (f) + 1—» (destino) , 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 continia..... Antes de la instruccién contador de programa = aqui Después de la instruccién regis = regis + 1 si regis = 0 , entonces contador de programa = continua si regis #0 , entonces contador de programa = aquf + 1 [ToRLW Operaci6n ldgica OR entre el registro W y el literal “k”. Sintaxis : JORLW k Operacién : (W) OR (k) +(W) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : TORLW 35 Antes de la instruccién. = W =9A Después dela instruccién = W = BF TORWF Operaci6n l6gica OR entre el registro W y el registro P Sintaxis : IORWF fd Operacién : (W) OR (f)-+ (destino) Ciclos de instruccién : 1 Bits del registro de estados gue se afectan: Zz Ejemplo : IORWF regis,0 Antes de la instruccién Después de la instruccién 56 Curso Basico de Microcontroladores PIC + CNET Capitulo IV. Instrucciones del PICI6C84 [Moviw. 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 SA Antes de la instruccién = W=? Después de la instrucci6n =W=5A MOVF Mueve el contenido del registro Sintaxis : MOVF fd Operacién : ()—> Gestino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Zz Ejemplo : MOVE _ regis,0 Antes de la instruccién = W=? Después de la instruccién _ W = valor guardado en regis [mMovwr Mueve el contenido del registro W al registro“. Sintaxis : MOVWF f Operacién : Ww) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo : Antes de la instrucci6n OPTION MOVWF OPTION , W=48 Después de la instrucci6n OPTION =48, W =48 Curso Basico de Microcontroladores PIC + CRKAT 57 Capitulo IV. Instrucclones 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 : Bits del registro de estados 1 que se afectan: Ninguno Ejemplo : OPTION Esta instruccién se considera obsoleta, pero por facilidad en el aprendizaje, se utiliza en el nivel basico. RETFIE Retorno del Mamado a interrupcién. | Sintaxis RETFIE Operacién : Ciclos de instrueci6n : Bits del registro de estados pila—> contador de programa , | k intcon,gie 3 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 Basico de Microcontroladores PIC + CERET Capitulo IV. Instrucciones del PICI6C84 [RETLW Retomo de interrupeién y carga el registro W con el literal “k”. Sintaxis : RETLW) k Operacién : kW, 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 Después de la instruccién [RETURN Retomo desde subrutina. Sintaxis ; RETURN Operacién : pila—> contador de programa Ciclos de instruccién : Bits del registro de estados que se afectan: Ninguno Ejemplo : RETURN Después de Ia interrupcién, contador de programa = pila [RIF Rote el contenido del registro “fa la izquierda, usando el carry Sintaxis : RLF fd 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=l en “f”. Ciclos de instruceién : 1 Bits del registro de estados que se afectan: c Ejemplo : RLF regis,0 Antes de la instrucci6n C=0, W=?, regis = 11100110 Después de la instrucciin = C= »W = 1100 1100 regis = 1110 0110 Curso Basico de Microcontroladores PIC + CEMAT 59 Capitulo IV. Instrucciones del PICI6C84 RRF Rote el contenido del registro “f” a la derecha, usando el Sintaxis : RRF fd Operacién : Rota el contenido del registro “f” a la derecha a través del carry. Si d=0, el resultado se guarda en W, si d=1 en“ Ciclos de instruccién : 1 Bits del registro de estados que se afectan: ¢ Ejemplo : RRF regis,0 Antes de la instruccién C=0, W=?, regis = 11100110 Después de Ja instrucci6n ~C=0,W=0111 0011 regis = 11100110 SLEEP Entra en modo dormido (standby). Sintaxis : SLEEP Operacién : 00+ WDT, 1-+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: C,DC,Z 5 Ejemplo 1: SUBLW 02 Antes de la instrucci6n W=1,C=? Después de la instruccién W = 1, C= I (positivo) Ejemplo 2: Antes de la instruceién W=2,C=? Después de la instrucci6n ~=W-=0,C=1 (cero) Ejemplo 3 : Antes de la instruccién Ww i Después de la instruccin. = W = 0 (negativo) 60 Curso Bésico de Microcontroladores PIC + CEMET Capitulo IV. Instrueciones del PICI6C84 Resta el contenido del registro W de el registro "f (usando el método de complemento a dos). Sintaxis SUBWF fd Operacién : (©) - (W)—> (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: €,DOyZ Ejemplo 1: SUBWF _ regis,1 Antes de la instruccién regis = Después de la instruccién regis = Ejemplo2: Antes de lainstruccién _—regis = 2, Después de la instruccién regis = 0, Ejemplo 3: Antes de la instrucci6n 1, Después de la instruccién _regis = FF, W SWAPE Tntercambia los cuatro bits altos y los cuatro bits bajos del registro“. SWAPF fd £<3:0>—> d<7:4> £<7:4>—¥d<3:0> Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo 1: SWAPE _ regis,0 Antes de la instruccién Después de la instruccién (Curso Basico de Microcontroladores PIC + CHRCiT 61 Capitulo IV. Instrucciones del PICI6C84 TRIS Carga el registro TRIS (programacion de los puertos como entrada/salida) con el contenido del registro W. Sintaxis : TRIS f Operacion : W-> (registro TRIS del puerto “A 6B”) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Ninguno Ejemplo | : TRIS puertoA Esta instruccién se considera obsoleta, pero por facilidad en el aprendizaje, se utiliza en el nivel basico. : 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 =B5 Después de la instrucci6n W =1A XORWF Operacién Iégica XOR entre el registro W y el registro “T'] Sintaxis : XORWF fd Operacién : (W) XOR (f) > (destino) Ciclos de instruccién : 1 Bits del registro de estados que se afectan: Z Ejemplo : XORWF regis,1 Antes de la instruccién regis = AF, W = BS Después de la instruccién regis = 1A, W= BS 62 Curso Basico de Microcontroladores PIC + CMMCET Programacioén 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 Capituto V. Programacién en PIC. Los primeros pasos Como la préctica hace al maestro, veremos que con la realizaci6n de ejemplos précticos se pueden despejar muchas dudas. Los ejercicios se basan en el entrenador PIC K-061 de CEKIT, cuyo diagrama esquematico se encuentra al final del capftulo I “Conozea el PIC16C84”. Aunque lo mas 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 iluminacin adecuada al LED. Para encender el primer LED, tiene que colocarse un estado légico 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 sera 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 Iniciaizacion -— Encender LED | Ruta de retardo Sie ‘Apagar LED ¥ Fut do retardo Figura 1. Diagrama de flujo del primer ejercicio. Curso Basico de Microcontroladores PIC * CEKAT 65 Capitulo V. Programacién en PIC. Los primeros pasos Este programa prende y apaga un LED list p=16c84 yse utiliza el PICI6Ce4 ptob 3el puerto b estd en la direccién 06 de la ;memoria RAM regl equ. = @b_~—s aqui se asignan nombres para reemplazar los jregistros reg2 equ Oc reg3 equ sd valorl equ 30 jaqui se asignan nombres a los valores valor2 equ 40 jconstantes valor3 equ 50 reset org 0 sel vector de reset es la direccién 00 goto inicio ;se envia al inicio del prograna org) 7 jempieza el programa en la posicién de jmemoria 7 inicio moviw 00 jse carga el registro W con el valor 00 tris ptob se programan los pines del puerto B como jsalidas otra movlw jse carga el registro W con el valor 01 mowwf ptob se pasa ese valor al puerto B para encender jel LED que se encuentra conectado al pin RBO call retardo;se mantiene el LED encendido por un momento movin 0 jse carga el registro W con el valor 00 mowwf ptob se carga el_registro puerto B con cero para japagar el LED call retardo;se mantiene el LED apagado por un momento goto otra se contindia el programa en otra, es decir que 3se queda ejecutando la misma accién jesta rutina genera un tiempo de espera retardo movlw valor1 ;se carga el registro W con el ndmero valor1, jes decir con 30 movwf - regi se traslada ese numero al registro regt tres movlw valor2 ;se carga el registro W con el numero valor2, jes decir con 40 mowif reg2 _ 3se traslada ese numero al registro reg2 dos movlw valor3 ;se carga el registro W con el némero valor3, jes decir con 50 mowwf reg3_ ;se traslada ese numero 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 continua decrementando decfsz reg? igual que el anterior goto dos decfsz regl ;igual que el anterior goto tres retlw igura 2, Programa que enciende y apaga un LED (ejer1.asm) Consideremos este primer programa; en é1 se pueden observar una serie de Ii- 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 + CuBCET |Encabezado Iniciacion Encender LED “| Lamar retardo ‘Apagar LED Rutina de retardo 5 Final del programa Capitulo V. Programaci6n en PIC. Los primeros pasos l6gicos, 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 ntimero, 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. Aqui se carga el registro de trabajo W con uno, con el objeto de sacar esta- dos I6gicos 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- zat operaciones légicas, de rotacién, etc. La tercera linea hace un llamado a una rutina de retardo, la cual se explicard 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 moviw VALORL dectsz REG3 goto UNO A dectex REGZ retlw 10 Figura 3. Rutina de retardo Curso Basico de Microcontroladores PIC + CEWHT 67 (Capitulo V. Programacién en PIC. Los primeros pasos Retardo. En la figura 3 se muestra la 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, lémparas, relés, etc. Tales retardos se logran cargando, con un determinado valor, posiciones auxiliares de memoria RAM 0 registros, decrementindolos posteriormente y consultando el momento en el cual Ilegan a cero; dependiendo del resultado de Ja 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 Ia familia del microcontrolador PIC: decfsz. Esta instruccién decrementa un registro y con- sulta si el contenido de éste ha Ilegado a cero; si es asi, omite la siguiente instrucci6n; si no lo es, la ejecuta, Esto permite implementar bifurcaciones de acuerdo al cumplimiento de una condicién. ‘Cargar REG! con valor 4 TRES —— ‘Cargar REG2 con valor 2 Cargar REGS con valor 3 2 DEC REGS Figura 4. Diagrama de flujo de la rutina de retardo 68 Curso Basico de Microcontroladores PIC* CEKET Capitulo V. Programacién en PIC. Los primeros pasos Para conocer el tiempo que se tarda toda la rutina, podemos hacer algunos céleu- 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 Io anterior, debemos empezar por la rutina més interna, marcada con la letra A en la figura 3. Mientras que no se cumpla la condicién, la instrucci6n decfsz reg3 consume | ciclo y la instruccién goto se ejecuta en dos ciclos; esta rutina intera Basta entonces tres ciclos, ejecutindose un niimero de veces que esté dado por e! valor contenido en el registro valor3, en este caso el valor hexadecimal 50 (observe ladefinicién de éste en la cabecera y recuerde que por defecto se asumen cantidades hexadecimales). E] mimero total de ciclos consumidos Por esta rutina serd entonces el producto: Numero ciclosA = 3 x valor3 x 80 (el decimal de 50Hex) ‘40 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 de! registro valor2 y ella se tardaré: Niimero ciclosB = 245 x valor2 = 245 x 64 (el decimal de 40Hex) = 15860 ciclos de instruccién De igual manera, podemos considerar que para la subrutina C (que abarca tanto {a A como la B) se tienen un niimero de ciclos de 15865 (15860 + 5); considerando que el mimero total de ciclos depende del registro valor!, se tiene: Niimero ciclos C =.15865 x valor! = 15865 x 48 (el decimal de 30Hex) = 761520 ciclos de instruccién va Podemos emplear una expresi6n algebréica para lo anterior, resultando més fécil realizar los célculos: Total Ciclos = ((valor3*3 + 5)*valor2 + 5)*valor1 En este caso, la constante 5 corresponde al mimero de ciclos que estén utilizando las instrucciones adicionales en las rutinas B y C, mientras que valorl, valor? y valor3 corresponden a las constantes tomadas de la cabecera del programa, Si quie- 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 serd entonces de 1 MHz, en cuyo Curso Bésico de Microcontroladores PIC + CEMAT 69 Capitulo V. Programacién en PIC. Los primeros pasos caso el ciclo de instruccién es de 1 microsegundo. Para el ejemplo anterior, se ten- dria entonces que la rutina de retardo se tardarfa un poco mas de 765520 jis, mds 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 precisi6n 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- ci6n dependerd de las tolerancias de la resistencia y del condensador, al igual que la temperatura y el nivel de voltaje de la alimentacién. 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 minimo de 20 pF. End. Aunque ésta no es propiamente una instrucci6n, si es necesaria para el ensam- blador; si éste no la encuentra, emite un mensaje de error. Ast, estaria descrito todo el programa. Después de escribirlo en el editor de tex- tos deberd ensamblarlo, con lo cual se genera el codigo objeto propio del microcon- trolador. $i no ha cometido errores de sintaxis, estaré 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: Osc XT Watchdog OFF cp OFF Power-Up-Timer ON Ejercicio 2: Secuenciador con cuatro LED’s Este ejercicio, con un nimero 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 capi- tulo II “Conozea el PICI6C84”. 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 terminacién; cada vez que se termina la secuencia se vuelve a iniciar, a menos que apliquemos un reset al dispositivo o apaguemos Ia fuente de alimentacién. 70 Curso Bésico de Microcontroladores PIC + CEAT Capttulo V. Programaci6n en PIC. Los primeros pasos Rotacién = 07 + ¥ ‘Sacar por ol puerio | utina de retard paeeesirpien ioe FRotar a la iquierda Figura 5. Diagrama de flujo del ejercicio 2 Para el programa son vélidas las anotaciones hechas al anterior, salvo el hecho que se esté 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 Iamado rota que pretende, también, ser de mis fécil recordacién y manejo que el nimero hexadecimal OA. 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 llegado a su fin, puesto que el ejercicio se hace sélo con cuatro LED's. La instruccién que consulta la condicién es bifss rora,4; si ella se cumple (el bit es uno), el programa omite la instruccién goto hol y ejecuta Ja 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: Osc XT Watchdog OFF co OFF Power-Up-Timer ON Curso Basico de Microcontroladores PIC + CCT n Capitulo V. Programacién en PIC. Los primeros pasos 3Este programa maneja una secuencia de cuatro LED's list jse utiliza el PIC16Ca4 ptob equ 6 jel puerto b ésta en la direccién 06 de 1a jmemoria RAM rota equ @a jaqui se asignan nombres para reemplazar los jregistros regl equ @b reg2 equ Oc reg} equ od valorl equ 30 jaqui se asignan nombres a los valores valor2 equ 40 3constantes valor3 equ 10 reset org o jel vector de reset es la direccién @0 de la jmemoria de prograna goto inicio se envia al inicio del programa org z jempieza el programa en la posicién de jmemoria 7 inicio movilw 00 jse carga el registro W con el valor @0 tris ptob se programan los pines del puerto B como jsalidas otra movin OL jse carga el registro W con el valor 01 movwf rota _— se dispone el dato para la 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 rif rota ;desplaza el contenido del registro un bit la izquierda btfss rota,4 ;probar si el quinto bit se activa goto hol "jst no ha Llegado al quinto bit se enciende . jel LED que sigue goto otra; st_ya se encendié el Gltimo LED se inicia jnuevamente la secuencia jesta rutina genera un tiempo de espera retardo movlw valord se carga el registro W con el nimero valor1, jes decir con 3@ movwf regi se traslada ese numero al registro regi tres moviw —valor2_ se carga el registro W con el nimero valor2, jes decir con 40 movwf reg2_— se traslada ese niimero al registro regZ dos movlw —-valor3 jse carga el registro W con el nimero valor3, s decir con 50 mowwf — reg3 e traslada ese nimero al registro reg3 uno decfsz — reg3 e decrementa el registro reg3 y si el valor S cero se salta a la goto uno jinstruccién siguiente, si no es cero se jcontinua decrementando decfsz reg2 igual que el anterior goto dos decfsz reg1 —_—; igual que el anterior goto tres retln 0 Figura 6. Programa secuenciador con 4 LED's (ejer2.asm) 72 Curso Basico de Microcontroladores PIC + Cait Capttuto Y. Programacién en PIC. Los 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 esquemético 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 ser4 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. Escribir ultimo dato a Leer pulsadores Figura 7. Diagrama de flujo del ejercicio 3 Para este tercer programa también son vélidas 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 0A). 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 anotaci6n al programa, ya que consideramos que con los dos anteriores se tienen bases para éste, ademas de los comentarios realizados al final de cada instruccién. Curso Basico de Microcontroladores PIC * CENCE 73 Capituto V. Programacién en PIC. Los primeros pasos jEste programa lee dos pulsadores y enciende dos LED's, segun el que se oprima je encendera el LED correspondiente list 6c84 jse utiliza el PIC16CE4 pc equ ez jdireccién del contador de programa ptoa equ os jel puerto a esta en la direcci6n 05 de la jmemoria RAM ptob equ 06 jel puerto b estd en la direccién 06 de 1a jmemoria RAM leido equ @a jaqui se asignan nombres para reenplazar los jregistros reset org ° sel 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 movin of jse carga el registro W con el valor Of tris ptoa 5Se programan los pines del puerto A como jentradas moviw jse carga el registro W con el valor @0 tris ptob —;se programan los pines del puerto B como jsalidas movin 20 jse carga el registro W con el valor a0 mowwf leido je dispone el dato en alto para encender los 3LED's hol movf_~—sLeido,@ ;mueve el contenido del registro leido al registro W movwf ptob ——jenciende el LED correspondiente movf _ ptoa,@ lee el puerto A y guarda el dato en el jregistro W xorlw @3 sinvierte el dato que Ley6 andiw 03 jdeja solamente los dos bits de interés addwf pe jel valor que se ley se suma al contador de iprograma goto hol ssi no oprimen tecla, regresa a leer nop ino hace nada nop mowwf 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 Bésico de Microcontroladores PIC + CERT Capttulo V. Programacién en PIC. Los primeros pasos 5Este programa realiza una secuencia Luminosa en los LED's, al llegar al jUltimo se emite un sonido. Ademds, cuando se oprime una tecla se cambia jel sentido de giro de la secuencia list p=16c84 jlas que vienen a continuacién son una serie de equivalencias, las jcuales toma el ensamblador y las reemplaza por el numero 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 7 rtcc equ 1 sregistros que se utilizan en el programa pe equ 2 ; sta eq 3 ; port_a equ 5 ; port_b equ 6 ; rota equ 18h ; cuenta equ 19h ; tiempo equ ah 3 regl equ 4bh 3 reg2 equ ch 3 reg3 equ dh inicio bef sta, bandera —; Limpiar bandera desplazamiento movilw 0 j¢argar a w con cero tris port_b 3puerto b como salidas movlw 3 jcargar a w con 3 tris port_a jdos lineas bajas como entradas moviw @feh disponer dato para la rotacién movwf rota cargar en registro 18 movlw 1 dato del led encendido movwf — tiempo jcarga en registro 1a ceros movlw 2 jcargar a w con numero dos mowf — 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 pe 3se 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_ regi idecrementa registro y salta si cero goto uno jsi_no cero lee de nuevo teclado dos_b decfsz_ reg jdecrementa registro y salta si cero goto uno jst no cero lee de nuevo teclado dos.c decfsz_reg3 jdecrementa registro y salta si cero goto uno jst no cero lee de nuevo teclado Curso Basico de Microcontroladores PIC + CEMET 75 Capitulo V. Programacién en PIC. Los primeros pasos — dos.d 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 rlf rota jrota a la izquierda registro de leds btfss sta,carry —_jsalta si carry esta en 1 goto tres_b ssi es cero -limite rotacién- va a tres_b tres.a incf tiempo jincrementa registro del led encendido goto seis jbifurca a para sacar dato tresb rif rota jrota una vez mds registro de leds moviw 1 jearga a w con 1 movwf tiempo jpara indicar primer led encendido coll pito 3sefial sonora por Limite rotacion goto seis 3bifurca para sacar dato cuatro ref rota srota a la derecha registro de leds btfss sta,carry —;salta si carry esté en uno goto cuatro_b si cero -limite rotacion- va a cuatro_b cuatro_adecf tiempo jdecrementa registro led encendido goto seis ;bifurca para sacar dato cuatro_b rrf rota jrota una vez mis registro de leds movlw 8 3carga a w con 8 movwf tiempo ;para indicar Ultimo led encendido cinco call pito 3sefial sonora por limite rotacion goto seis jbifurca para sacar dato seis movf_—rrota,w 3carga a w con dato led a encenderse mowf —port_b jescribe dato en el puerto b goto ceros sreinicia para ir por siguiente dato siete.a bsf — sta,bandera activa bandera -rotacién derecha- goto. dos_a jbifurca 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 jmultiplica por dos (valor x 2) rif tiempo jmultiplica por dos (valor x 4) rif tiempo jmultiplica por dos (valor x 8) addwf — tiempo 3se suma una vez mas valor x 3) addwf — tiempo 3s suma una vez mds (valor x 10) ocho comf_—tiempo,w se invierte el dato y se carga en w movwf —port_b jse saca tiempo faltante en los leds clrf cuenta jse limpia registro call base jse llama base de un segundo decfsz tiempo sdecrementa el tiempo y salta si cero goto ocho ino cero vuelve a mostrar tiempo movilw Offh jcarga a w con b’11111111" movwF —port_b jpara apagar todos los leds nueve call _pito jse Llama a sefial sonora movin 4 3b’0100" carga a w con 4 mowwf — port_a jpara activar el relé sleep sir al modo de reposo 76 Curso Basico de Microcontroladores PIC + CCT Capitulo V. Programacién en PIC. Los primeros pasos pito —movlw 8 movwf —port_a movlw d?110" mowwf — cuenta call base clrf — port_a retlw 3) base = clrf rte movlw 5 option bas movf —rtccw xorlw d?125" btfss sta,cero goto bas ‘incf cuenta movf — cuenta,w xorlw d?125" btfss sta,cero goto base 3b"1000" cargar a w jpara activar el pito jcargar con el decimal 110 jpara que el pito jdure 1 segundo/(125-110) jdejar el puerto en b’0000' jregresar de la interrupcion jdejar en cero el rtce jcargar a w con b'101", para cargar el jrtce interno con una preescala de 64 jleer el rtcc jcomparar con el decimal 125 jsi es igual salta 3si_no igual, vuelve a leer jincrementa 1a cuenta }carga a w con valor de cuenta jcomparar con el decimal 125 jsi es igual salta 3si no igual, vuelve a configurar cuenta retlw 4 jal terminar’ regresa end ; Fusibles de programacion ; Osc xT ; Watchdog OFF ; cP OFF ; Power-Up-Timer ON Figura 9. Programa avanzado utilizando el entrenador K-061 (avanzado.asm) Los ejercicios descritos en este capitulo se encuentran en el disquete que acom- pafia al curso, tanto el listado con extensién .asm, como el archivo ensamblado con extensi6n .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 Bésico de Microcontroladores PIC * CENT 7 Rutinas de programacion ¢Lasuma °Laresta ¢ La rotacién ¢ La multiplicacion ¢ 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 mAs valiosos cuando se trabaja en programa- cién; 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- quier 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 est 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 Iineas que realicen lo deseado: sélo necesi- tard copiar el bloque de la rutina o tener el archivo disponible para cuando se realice la compilaci6n del programa. Posteriormente, deberd hacer el lamado 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 o 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, llamado STA- TUS. Los primeros tres bits de este registro (0 al 2) son los estados sobre los cuales debemos ejercer una vigilaneia, para determinar asf los siguientes pasos a ejecutar. El bit menos significativo (bit 0) es el correspondiente al estado del Carry o acatreo, 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 operaci6n se implementa en los microcontroladores PIC por una sola ins- truccién: ADDWF; en la figura 1 se observan sus detalles. Lo mas importante para considerar en todos los casos son los estados afectados ya que, como lo habjamos Curso Basico de Microcontroladores PIC + CEMGT 81 Capitulo VI. Rutinas de programacién meneionado, ellos son los indicadores que se deben utilizar para tomar decisiones enel programa. Instruccion: ADICION Sintaxis: ADDWF fd Cod. Op. Dest. Fuente Coditicacién: ooortid tft Operacién: (+ (W)-d Estados afectados: C, DC, Z Descripci El contenido del registro W se agrega al contenido del registro f. Si‘d’ es 0 el resultado se almacena en el registro W; si‘d' es 1, se hard en el registro f. Figura 1. Detalles de la suma en los microcontroladores PIC Uno de los aspectos que conviene recalcar en esta instrucci6n, es que el estado del carry no es considerado para los resultados de la operacién; se afecta, pero no interviene. Consideremos los ejemplos que se muestran en la 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 Ia instruccién Instruccién Fuente w Fuente w z [occ 1001 0011 | 0101 1000 | ADDWF Fuente,w | 1001 0011 | 1110 10110 1010 1011 | 0010 0101 | ADDWF Fuente 1101 0000 | 0010 0101 1010 1011 | 0110 1100 | ADDWF Fuente,o | 10101011 | 0001 01110, 1100 1101 | 0011 0011 | ADDWF Fuente,1 | 00000000 | 0011 00111 aaSo suse ° ° 1 1 FON Figura 2. Ejemplos de la suma En estos ejemplos, las cantidades se expresan en binario, para visualizar mds facilmente 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 més alto que puede contener un byte (OFF hex 0 225 decimal); en caso contrario permanece en 0, indicando que no se present6 sobreflujo o acarreo. El acarreo de digito (DC) se activa cuando la suma de los nibbles (partes inferiores o 4 bits menos significativos de los bytes) supera el valor que este puede contener (OF hex o 15 decimal). El estado Z (Zero 0 cero) se activa cuando la operacién da como resultado 0 en el registro destino, como se mues- tra en el ejemplo 4. 82 Curso Bésico de Microcontroladores PIC + CRAY Capitulo 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 ms importantes. Instruccién: RESTA Sintaxis: SUBWF fd Céd. Op. Dest. Fuente Codificacién: oo0010 tft Operacién: ()-(W)-d Estados afactados: C, DC, Z Descripcién: El contenido del registro W se resta. del contenido dol registro f. Si ‘d’ es 0 @1 resultado se almacena en el registro Wisi ‘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 instrucciones. De nue- Vo, las cantidades estén expresadas en binario y los resultados, ubicados en el desti- no de la operacién, se han resaltado para visualizar c6mo las instrucciones manejan este parimetro. Como sucedia con la suma, el carry se afecta por la operacién, pero no interviene en ella. ‘Antes de la instruc insular Después de la instruccion Fuente Ww. Fuente w Zz [oc 1011 1001 | 01000010 | SUBWF Fuente,w] 1011 1001 | 0111 0111 1011 1001) 0100 1100 | SUBWF Fuente | 0110 1101 | 0100 1100 1011 1001] 11100011 | SUBWF Fuente,o | 1011 1001 | 1101 0110 1011 1001] 1011 1001 | SUBWF Fuente,1 | 0000 0000 | 1011 1001 coo soaalo 1 ° 1 1 BONe Figura 4. Ejemplos de la resta En las sustracciones, el carry 0 acarreo (C) se coloca en I 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 mimero positivo. Si por el contrario, el carry resultante es 0, indica que el resultado es un nuimero negativo, ya que el minuendo era menor que el sustraendo. El acarreo de digito (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 titil en rutinas de conversién de ntimeros binarios a ntémeros BCD, como se veri mas adelante. Curso Basico de Microcontroladores PIC + CENCET 83 Capttulo VI. Rutinas de programacién Por titimo, 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 rotaci6n: una hacia la izquierda y otra hacia la derecha; ambas incluyen el carry dentro de la operacién. Ya que la diferencia entre las dos rotaciones esté sélo en el sentido en que se realiza, s6lo mostraremos los detalles de una de ellas, figura 5. ROTACION ALA IZQUIERDA RLF fd Céd. Op. Dest. Fuente oo101 ‘tft Operacién: fen>-den+1>; f<7>-C, C-d<0>; Estados afectados: C Descripcién: El contenido del registro ‘f se rota un bit hacia la izquierda a través del cary. 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 INSTRUCCION RLF 0 Tee Carry Registro Fuente 1] [olti1fololol1to Regist destino después dea olan INSTRUCCION RAF 1lilololololi}a Carry Registro Fuente. 1 oltiifolololols| Registro destino después de la rotacién Figura 6. Rotaciones 84 Curso Basico de Microcontroladores PIC + CmmuChr Capitulo VE. 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 la izquierda es una multiplicaci6n por dos. Cuando es necesario realizar operaciones de este tipo, con potencias de dos, se pueden implementar fécil y répidamente 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 equetio programa de prueba, el cual llama la rutina respectiva, para que ésta sea ejecutada, La multiplicacion Esta rutina se desarrolla con base en las instrucciones anteriormente descritas; aqui se implementa la multiplicaci6n 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. CCeMPezaR ¥ Contador =8 Byte Ato = Bye Bajo =0 We Mutieando UrnparCary —-* | v oar aia dorecha Mutpleador a raves etary Byte Ato = Byte Ao « W Foiara dareom Ope Ro oar adores Bye Bajo ecromentar Contador si Figura 7. Diagrama de flujo de la multiplicaci6n Curso Bésico de Microcontroladores PIC + CRCtT Capitulo VI. Rutinas de programacién ; Multiplicacién 8 x 8 5 El resultado (de 16 bits) es guardado en 2 bytes STATUS equ 03 3Registro de estados CARRY equ 20 ;Bandera de acarreo mulcnd — equ 19 jContiene Multiplicando mulplr equ 10 ;Contiene Multiplicador Hbyte equ 12 ;Byte alto del resultado Libyte equ B jByte bajo del resultado count equ 14 ;Contador del loop org 20 goto main Multip clr H_byte jLimpiar byte alto clrf L_byte ;Limpiar byte bajo mvlw 8 ;Cargar el mowwf count jcontador movf mulcnd,w ;Multiplicando va a W bef STATUS, CARRY — ; Limpiar carry Loop ref mulpir ;Rotar a la derecha btfsc STATUS,CARRY — Probar estado del carry addwf —_ H_byte jSi uno, agregar multi- splicador al byte alto ref H_byte jRotar derecha byte alto ref L_byte ;Rotar derecha byte bajo decfsz count jDecrementa contador sy verifica si es cero goto loop jRepite si aun no cero retlw e jRetorna de la rutina ~ Prograi call Multip 5 queda goto queda jEn byte alto queda 57H sy en byte bajo 30H END Figura 8. Rutina de multiplicacion La division Esta es una operacién 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 Basico de Microcontroladores PIC * CERCHT Capitulo VI. Rutinas de programacién W< DIVISOR [Ovicondo = Ovidendo —W] —— ry es si Camry = 1 2. NO Diidondo = Ovidendo RETORNAR Figura 9. Diagrama de flujo de la division Para lograr la divisin, 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- treo es 1, indica que el resultado es un nimero positivo, (el minuendo era mayor que el sustraendo), la resta era valida y, por lo tanto, el cociente puede set incre- mentado; si por el contrario, el carry es cero, indica que el resultado es un mimero negativo (el minuendo no contenia 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. Conversion de un numero binario en su equivalente BCD Son numerosas las oportunidades en las que es necesario convertir un valor binario, proveniente de algtin 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 ni- mero binario de & bits, en su equivalente BCD (Decimal Codificado en Binario), 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 el valor ms 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 Centenas y el ntimero de veces que fue posible restar 10, obteniéndose las dece. nas. El residuo de este proceso son las unidades, Curso Bésico de Microcontroladores PIC + CERT 87 iF DIVIDE UN NUMERO DE UN BYTE ENTRE OTRO wee Divide un nimero binario existente en la posicion Divndo, entre otro localizado en posicion Divsor. 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 ;Registro de estados CARRY equ e ;Bit de acarreo Divndo equ 18 3Contiene nimero a dividir | Divsor equ 19 ;Contiene divisor Cocinte equ 19 ;Guarda el resultado Resduo equ 18 3Se almacena el residuo | org 00 | goto main | Div movf —Divsor,w i clrf — Cocinte Repite subwf — Resduo 3Restarle el divisor i btfss STATUS,CARRY ;Verificar el carry goto SUML 3Si cero, dejar de restar incf — Cocinte 3Si_uno, incrementa cociente goto —Repite 5y repite resta divisor ‘SUML addwf — Resduo ;Sumarle divisor al residuo RETLW 3 Regresa con 0° ' PROGRAMA DE PRUEBA main movlw 254 ;Cargar movwf — Divndo sel dividendo moviw — .10 3Cargar mowwf — Divsor sel divisor call Div jLlamar la subrutina jEl cociente es 19hex 3y el residuo 4hex queda goto — queda 3Quedar en un loop infinito Figura 10. Rutina de divisién A Ia rutina que efectiia la conversién es posible introducirle cambios, logrando un cédigo diferente. La modificacién que se presenta en la figura 13, aparentemente més desventajosa por ser de mayor longitud y utilizar un registro adicional, tiene la rutina de divisién por separado, la cual se lama desde Ja rutina de conversi6n y puede ser invocada por otras. 88 Curso Bésico de Microcontroladores PIC + CRIT Capitulo VI. Rutinas de programacién empezar) Cargar a Weon 100 ¥ Namero = “any =1 Incrementar e Contenas ¥ ‘SUMAR 100 ¥ Cargar a Won 10 «——______ Tiare = Nia St Incrementar| e Decenas v TERMINAR Figura 11. Diagrama de flujo de la conversién binario a BCD Debemos recordar en este punto que el microcontrolador PIC16C84 permite lamar Cuantas rutinas se posean, pero tinicamente pueden estar anidadas ocho de ellas, ya que la pila s6lo puede sostener ocho direcciones de retomo. El anidamiento de una novena rutina ocasionard la pérdida sobre el control del programa y los resultados serdn impredecibles, Suma de dos ntimeros BCD Para realizar la suma de dos ntimeros BCD se muestra el diagrama de flujoen la figura 14y 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 la otra posicién, aprovechéndose el valor de retomo de la rutina. (Curso Basico de Microcontroladores PIC * CEKCAT 89 Capitulo VI. Rutinas de programacién = CONVIERTE UN NUMERO BINARIO A BCD =-=-a=ecnm= 3 La rutina s6lo requiere que se coloque el valor 3 @ convertir en un registro, denominado aqui Unidad. ; Ella retorna las decenas y’las centenas (digitos 3 decimales) en un par de registros adicionales. STATUS equ 3 3Registro de estados CARRY equ @ 3Bit de acarreo oc equ 1 ;Bit de acarreo de digito Unidad equ 18 ;Para almacenar unidades Decena equ 19 ;Para almacenar decenas Centena equ 1A Registro para centenas AUX equ 1B 3Registro auxiliar org 7) goto — main Bin_BCD clrf — Decena 3Limpiar decenas clrf —— Centena jLimpiar centenas movlw — .100 3Cargar a W con decimal 100 Otra — subwF_— Unidad 3Restarle 100 al valor btfss STATUS, CARRY ;verificar estado del carry goto ‘SUM iQ, dejar de restar 100 incf —Centena 3Si 1, incrementar centenas goto Ota sRepetir resta suM addwf Unidad ;Sumarle 100 movlw .10 scargar a W con 10 Repite subwf Unidad 3Restarle al valor digital 10 btfss STATUS,CARRY Verificar estado del carry goto. SUM1 3Si cero, dejar de restar 10 incf _Decena 3Si uno, incrementa decenas goto —Repite sy repite la resta de 10 SUM1 —addwf Unidad ;Sumarle 10 al valor digital RETLW 0 3Regresa con Q Programa de Prueba movlw ;Cargar valor a converti movwf Unidad 3el registro Unidad call Bin_BCD jLlamar 1a subrutina 3Centenas = 2 ;Decenas = 5 jUnidades = 4 queda goto — queda 3Quedar en un loop infinito END Figura 12. Rutina de conversion binario a BCD 90 (Curso Basico de Microcontroladores PIC + CMNCET Capitulo VI. Rutinas de programacion Realizar suma, Ct = Carry ‘SUMAR 6a LSD |}+—_——________| ¥ SUMAR 6 a MSD_ (C2= Carry si 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 o displays. También veremos con detalle algunas instrucciones y uno de los aspectos mas simples 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 sicte segmentos; el diagrama de flujo respectivo se muestra en la figura 15. Aunque en nuestro caso hemos optado por obtener el valor de Ja 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 conversin andlogo a digital, etc. Curso Bésico de Microcontroladores PIC + CRIT 91 Capttuto V1, Rutinas de programacion jecewessesccomsessssa== Suma BCD sin signo ==ssssssssssseesaco ; Se asume que los ndmeros 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, 3 si existe, regresa en el registro de trabajo W, } aprovechdndose el valor de retorno de la rutina oc Suma ;Sumando 1 y bit alto Acarreo equ 18 Sum2 equ 19 ;Sumando 2 y resultado org 00 goto — main SumaBCD movf Sumi w ;Colocar valor de Suml en W addwf = Sum2 jrealizar suma binaria clrf = Sumi ;limpiar contenido de Sumi rif Sumi jrotar por si hubo carry btfsc — STATUS,DC jEs DC = 07 goto —AdLSD 3si 1, ajustar LSD movlw 6 3Ajuste binario-BCD para LSD addwf — Sum2 ;Probar para LSD > 9 btfss — STATUS,DC sverificar Carry medio subwf Sum: 3LSD < 9, retornar valor bef STATUS, CARRY ;Limpiar carry goto —AdMSD 3Ir a probar MSD AdLSD ss movlw 6 ;Ajuste de binario a BCD addwF = Sum2 spara digito (LSD) AdMSD = movlw «60 jAjuste Binario-BCD para MSD addwf = Sum2 ;Sumar 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 0 3Regresa con @ ; Programa de Prueba mowwf Sum 3Sum1 = 99 (méximo némero BCD) movlw 99 movwf Sum2 ;Hacer Sum2 = 99 call SumaBCDA jDespués de suma, Sum2 = 98 mowwf Sumi sy Sum1 = 01 (99499 = 198) queda goto. ~— queda 3Se queda en un loop infinito END Figura 14. Rutina de suma BCD 92 Curso Basico de Microcontroladores PIC* Canc Capttulo VI. Rutinas de programacién ¥ LEER TECLADO X TECLA PRESIONADA, sl v [ENVIAR DATOAL PL Figura 15. Diagrama de flujo del ejercicio Nuestro teclado se encuentra conectado a las cuatro Ifneas 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 pequeiio tratamiento al dato lefdo. En esta configuracién, para leer el teclado se realiza la siguiente instruccién: movf Puerto_A,w Por lo regular, a la lectura se le realiza algtin 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 operacién OR exclusiva Recordemos que la funcién XOR es una operacién Ié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 0 viceversa) el bit resultante serd uno; si los dos bits son iguales (ambos cero o ambos uno) el bit resultante serd cero, como puede obser- varse en la figura 16. Figura 16. Tabla de la verdad de la operacion légica XOR Curso Basico de Microcontroladores PIC * CEKIT 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 ntimero cual- quiera, vuelve a presentarse la misma cantidad, como puede observarse en los siguientes ejemplos : Ej.1 1010 0111 (OA7h) Ej.2 1101 0001 (Dib) 0111 0110 (76h) O111 0110 (76h) XOR 1101 0001 (ODIh) 1010 O111 (OA7h) A la cantidad original (el hexadecimal OA7h) se ie realiza inicialmente la opera- cién XOR con el cédigo deseado (en este caso 76h) y al resultado (OD Ih) se le realiza de nuevo la operaci6n XOR con el mismo c6digo, dando como resultado el valor original (el hexadecimal 0A7h); el lector puede intentar realizar esta opera- cién con cualquier nimero y observard que esto siempre se cumple. Esta caracterfstica se utiliza en sistemas en los cuales se necesita codificar 0 encriptar una informacién, de tal manera que solamente el usuario original tenga acceso a ella, oculténdola a los intrusos. La condicién para encriptar la informacion es realizarle la operacién XOR (0 la XNOR) con el cédigo de nuestro interés; la decodificacién posterior exige realizarle de nuevo la operacién en cuestin con el cédigo 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 serd cero; por lo tanto, esta condicién activa (coloca en uno) la bandera de Cero (Zero Flag), que cortesponde al bit 2 del registro STATUS o de estados. Existen dos versiones para esta instrucci6n en la familia de los microcontrolado- tes 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 XORWF 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 instrucci6n XORLW acta de manera similar, con la salvedad que no acta sobre dos registros, sino entre el registro de trabajo W y una constante de 8 bits que reside en Ja memoria de programa; el destino siempre serd el registro de trabajo W. Instruccién Fuente Ww Fuente Ww Zz Antes de la instruccion Después dela senso] 1001 0011 | 1001 0011 | XORWF Fuente,w |1001 0011 0000 0000| + 1010 1011 | 1010 1011 | XORWF Fuente |00000000 1010 1011 | 1 1010 1001 | 01101100 | XORWF Fuente,o |1010 1001 11000101 | 0 1101 1101 | 0001 0011 | XORWF Fuente,1_]1100 1110 0001 0011 | 0 Bono Figura 17. Ejemplo de la instruccién XOR 94 Curso Bésico de Micracontrotadores PIC® CEMCET 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 niimero binario ‘1111’b, ya que las teclas normalmente estan colocadas a un nivel alto através de resistencias de 10KQ. Cuando una tecla se presiona, se conectaré a masa y Ja lectura que se realice en ese momento seré un 0 légico por el bit respectivo. Por lo tanto, realizada la lectura del teclado y después de guardar el valor en un registro o posici6n 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 activaré 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. OR Exclusiva XORWF fd Cod. Op. dest Fuente Codificacién: ooo1t0 diff Operacié (W.XOR. 1) Ed Estados afectados: Zz Descripcién: Se realiza la operaci6n OR Exclusiva entre el registro de trabajo W y el registro fuente. Si «de 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 Codificacién: mit Kkkkkkkkk, Operacién: (W.XOR. k) EW Estados afectados: Zz Deseripcién: Al contenido del 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 Ie 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; porlo 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 tltimo podré mostrar valores comprendidos entre Oy 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 populares y itiles: el display de siete segmentos, el cual nos permitira generar todos los ntimeros y algu- nos caracteres especiales y alfabéticos. Curso Basico de Microcontrotadores PIC * CRKET 95 Capitulo VI. Rutinas de programacién Aqui necesitamos detenemos y pensar en cual es la configuracién electrénica (el diagrama esquemitico) que necesitamos. En este caso, podemos tener dos alternativas para mostrar los digitos en el display: 0 lo hacemos directamente, manejando cada uno de los siete segmentos con las lineas del microcontrolador, como se muestra en la figura 19, o bien, lo hacemos a través de un decodificador, como el 7447 o el 7448, figura 20. fey +8v +v +5v ce voo WeuR 2 10 osc: R88 WE 20pF == 10K ci Mi ne, [22 7 tw 68 |g z <. ras 8 pes 2 Wan — ae Vra2 2 ree [2 + S18 rT = 7 6 alt 7 oA! pet 7 st 47} a0 reo [& Ox7 vss $30 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 opci6n 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, la del decodificador, presenta la ventaja de que solamente se estén dedicando cuatro de las Ifneas para mostrar los digitos; epresentando un afiorro de tres lineas sobre la primera opcién, las cuales pueden resultar valiosas en un disefio en el cual precisemos de muchos dispositivos de En- trada/Salida y las Iineas se podran dedicar a otras funciones dentro del circuito. Al momento de sacar Ia 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- rio que se encuentra en el registro de interés y enviarlo a través del puerto respectivo, sin necesidad de realizar ningin tratamiento adicional, siempre y cuando el control se esté realizando con la parte baja del puerto; el decodificador extemo se encargard de realizar la conversi6n. Las instrucciones necesarias serfan algo como lo siguiente: movf —_Valor,w seargar valor a sacar por el puerto movwf — Puerto_B cenviarlo 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 e6digos correspondientes para manejar cada uno de los LED's del display de siete segmentos. Las instrucciones respectivas serian algo como lo siguiente: 96 (Curso Basico de Microcontroladores PIC + CMMCET Capitulo VI. Rutinas de programacién movf ——_-Valor,w scargar valor a sacar por el puerto call tabla jllamar tabla de datos movwf — Puerto_B jenviarlo 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, lograndose un salto relativo a éste. La caracterfstica 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 Idgicas y aritméticas. +5 +5V “Vv . ' — 3 wee woo i es ose 20pF == 10K 16} reg }26/0 1 ag § mee P2ic § $184 Stas ror P18 Fg ssf [1H nae 2 m0 : « + 18) Rat b sis os __17 | rao Gnd_@ = vss DISPLAY DE ANODO comuN 5 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 instrucci6n de retorno que obliga al registro de trabajo a regresar con el codigo correspondiente. En nuestro caso, hemos empleado la segunda opcién, como lo podemos observar en las siguientes Ifneas: tabla addwf pe PC =PC+W retlw b’ 11000000" e6digo para el 0 retlw b’ 11111001" sc6digo para el 1 retlw b’ 10100100" retlw b’ 10110000" 6digo para el 2 se6digo para el 3 retlw b’ 10011001" se6digo para el 4 retlw b’ 10010010" se6digo para el 5 retlw b’ 10000010" se6digo para el 6 retlw b’11111000" sc6digo para el 7 retlw b’ 10000000" se6digo para el 8 rethw b’ 10011000" se6digo para el 9 Curso Basico de Microcontroladores PIC * CENCET 97

También podría gustarte