DISEO INSTRUCCIONAL: Maril Snchez y Csar lvarez Escuela de Ingeniera Elctrica Contenido Instrucciones 2 INSTRUCCIONES Botn para avanzar.......................... Botn para retroceder...................... Botn para ir al contenido principal.. Botn para retornar.......................... Para ir a un tema del contenido, hacer clic en ttulo del tema............. Para salir, presione la tecla.............. INICIO Tema.. Esc
3 Equipo necesario Requerimientos mnimos Computador personal Pentium III 128MB RAM, disco duro con 100MB libres, unidad de CD, monitor igual o mayor de 14 de alta resolucin y puertos: serial (RS-232) o paralelo (LPT), y conexin a Internet (no indispensable, pero recomendable). Sistema operativo Windows 98SE o superior. Software MS Office 2000 o superior (Power Point). En cuanto a componentes, podrs tratar de ubicar lo siguiente: Microcontroladores: PIC16C54JW o PIC16F54, PIC16F84A y un PIC16F877 o algn otro PIC16F87X. Leds rojos, verdes y amarillos, resistencias, indicadores numricos 7 segmentos, pulsadores, interruptores y lo que te interese utilizar para tus aplicaciones. Un programador PICSTART Plus. Si no lo consigues o te parece muy costoso, podrs construir tu propio programador, para ello debers consultar el anexo 7 despus de ver el tema 2. Adems ser necesario Mucha voluntad y dedicar suficiente tiempo para aprender sobre los microcontroladores PIC.
4 INSTALACIONES Instalar el siguiente software, si no lo ha hecho con anterioridad, para la consulta de artculos en Internet y tener tu sistema de desarrollo: Acrobat Reader Win Zip MPLAB IDE Para ello podr hacer Clic en el programa que deseas instalar o debers ingresar a los sitios webs de cada uno de ellos, buscar el software de instalacin, bajarlo gratis, y luego hacer las instalaciones. Te recordamos que para hacer las instalaciones, debers salir del mdulo instruccional al pulsar la tecla y luego llamar a cada uno de los programas instaladores por separado, en el orden sugerido. Esc CONTENIDO INTRODUCCIN. E TEMA I. GENERALIDADES DE LOS MICROCONTROLADORES PIC E TEMA 2. PROGRAMACIN DEL PIC16C54. E TEMA 3. MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y TEMPORIZADORES E TEMA 4. CARACTERSTICAS ESPECIALES DEL HARDWARE E TEMA 5. OTROS MICROCONTROLADORES DE LA GAMA BSICA E TEMA 6. MICROCONTROLADOR PIC 16F84A E TEMA 7. MICROCONTROLADORES DE LA SERIE PIC16F87X E CONCLUSIN E ANEXOS 6 El objetivo primordial que nos movi a disear este material, es el de que adquieras, a travs de su estudio terico y prctico, las habilidades y destrezas necesarias para conocer los microcontroladores y disear circuitos basados en algunos de ellos. Se explicar y describir qu son los microcontroladores, cules son sus aplicaciones y funciones, y se describirn ejemplos de circuitos, para aprender a manejarlos. Para ello hemos decidido trabajar con los microcontroladores PIC de Microchip, debido a que, en la actualidad, son los que tienen mayor popularidad, tanto en las universidades del continente americano y europeo, como en las diversas industrias que desarrollan proyectos en electrnica. Este material se ha dividido en siete temas, con los cuales irs aprendiendo poco a poco acerca de los microcontroladores PIC, desde el ms bsico, el PIC16C54, luego podrs observar las diferencias con otros miembros de la serie PIC16C5X, si as lo deseas. Despus podrs conocer al microcontrolador PIC16F84A que es uno de los ms bsicos la gama media, y finalmente se hablar sobre los microcontroladores de la serie PIC16F87X, los cuales son los ms utilizados de la gama media. INICIO 7 La metodologa empleada consiste en explicar de manera secuencial, desde el microcontrolador ms bsico, hasta que poco a poco vayas conociendo aquellos componentes con mayor complejidad. Por otro lado, se incluir desde un principio, nociones bsicas del software que te ambientar en el desarrollo de tus programas: El MPLAB, el cual irs empleando, a medida que vayas elaborando tus programas, instrucciones del lenguaje ensamblador, mtodos para simular tus programas, elaboracin de interfaces electrnicas para la adaptacin de seales y el uso del programador, para que puedas hacer el montaje de los circuitos que has desarrollado.
Este mdulo instruccional te ofrece adems, algunos anexos, los cuales podrs consultar para profundizar tus conocimientos acerca de los microcontroladores y el software que emplears, definiciones comnmente utilizadas en este campo, y sugerencias para la elaboracin de circuitos electrnicos con microcontroladores PIC.
INICIO 8 DIVISIN DE LOS TEMAS Los temas estn divididos de la siguiente manera:
Tema 1: Se muestra en forma general el concepto de microcontroladores, cmo han surgido, cules son los fabricantes ms destacados y se resume las caractersticas principales de los microcontroladores PIC. Luego se presenta la arquitectura del microcontrolador PIC16C54 y se describe cada una de las instrucciones de los microcontroladores de la gama bsica.
Tema 2: Se explica detalladamente los pasos para programar cualquier microcontrolador. Se dan ejemplos y se ensean los primeros pasos para trabajar con el lenguaje Ensamblador y el ambiente de trabajo MPLAB, el cual es una herramienta muy poderosa para trabajar con cualquiera de los microcontroladores PIC que vayas a utilizar en el futuro. Aqu aprenders: a editar un programa, a ensamblarlo en un cdigo para la memoria del microcontrolador, a simularlo para observar si la lgica del programa est correcta y grabarlo en un microcontrolador. Para ello utilizaremos unos ejemplos sencillos.
Tema 3: En este aparte, se describe cmo est organizada la memoria de programa y de datos del microcontrolador PIC16C54. Esto te ayudar a comprender cmo programar por medio de los registros de funciones especiales que son los que controlan el programa y algunos circuitos especficos dentro del microcontrolador. Con ello podrs hacer programas un poco ms complejos.
INICIO 9 TEMAS RELACIONADOS CON MICROCONTROLADORES MS AVANZADOS Tema 4: Aqu vers las caractersticas de los circuitos internos o hardware del microcontrolador PIC16C54. En este tema podrs informarte acerca de la inicializacin del circuito, los temporizadores internos, el modo de reposo o bajo consumo y los tipos de osciladores que puedes utilizar.
Tema 5: En este aparte aprenders acerca de otros microcontroladores de la gama bsica y las diferencias con el PIC16C54.
Tema 6: En este tema te iniciars con la familia de los microcontroladores de la gama media. Aqu vers las diferencias entre el PIC16C54 y el PIC16F84A; encontrars que estas diferencias consisten en algunas mejoras que te permitirn desarrollar circuitos ms verstiles. En el estudio del PIC16F84A te dars cuenta que todo lo que aprendiste en los cuatro primeros temas, lo aplicars a este tema.
Tema 7: En este ltimo tema encontrars informacin sobre los microcontroladores de la gama media de la serie PIC16F87X, los cuales tienen mucha aplicacin en la industria. Estos microcontroladores tienen gran capacidad de funciones, ya que pueden leer seales analgicas, hacer control de potencia por modulacin de ancho de pulsos, comunicacin serial y otras posibilidades ms.
Anexos: En los anexos encontrars una gua de referencia para consulta: El glosario, el manejo detallado de instrucciones, las directivas del lenguaje ensamblador, algunas notas de aplicacin, etc.
INICIO 10 UNOS CONSEJOS MS ANTES DE EMPEZAR Para el mejor aprendizaje de este mdulo es conveniente que leas y practiques con este material de manera ordenada, para que t, como interesado en esta rea, conozcas los microcontroladores, su tecnologa electrnica avanzada y su aplicacin en la actualidad. Es importante que cuentes, al menos con una computadora compatible con las PCs que trabaje en ambiente Windows, e instales el MPLAB IDE, el cual lo puedes bajar gratuitamente en la direccin microchip.com. Si tienes la posibilidad de obtener el PICSTART PLUS, y conseguir algunos microcontroladores, tales como el PIC16F54, el PIC16F84 y el PIC16F877 sera mucho ms provechoso para ti todava, ya que podrs contar con la posibilidad de hacer tus propios montajes. Si no tienes la posibilidad de obtener el PICSTART PLUS, en el anexo 7 encontrars un circuito y un software que podrs utilizar para grabar tu microcontrolador PIC. Finalmente, te aconsejamos que para empezar a estudiar con microcontroladores, ser necesario que tengas conocimientos de electrnica analgica y electrnica digital: Circuitos con resistencias, condensadores, diodos, leds, transistores, tiristores, amplificadores operacionales, interfaces, lgebra de Boole, sistemas numricos binarios y hexadecimales, aritmtica de nmeros binarios, compuertas lgicas, bloques funcionales combinacionales, contadores, etc. Mientras mayores conocimientos tengas de electrnica, circuitos digitales, instrumentacin y otros campos relacionados o no con la electrnica, mejor provecho podrs sacar a estos microcontroladores para tus planes en el futuro. INICIO 11 Te recomendamos que leas el material detalladamente, porque as comprenders mejor el contenido. Ten presente, que gracias a tu empeo el aprendizaje depender de ti, ya que eres el nico responsable directo de l. Debes cumplir con las actividades y ejercicios que aparecen en el material. Cuando tengas dudas, pide a tu profesor asesor de la materia una entrevista. Si eres claro al responder la auto-prueba que aparece en el material, sabrs cul ha sido tu avance. INICIO 1.1.- Contexto histrico de los microcontroladores 1.2.- Definiciones de microcontroladores 1.3.- Funciones de los microcontroladores 1.4.- Aplicaciones de los microcontroladores 1.5.- Algunos fabricantes de microcontroladores 1.6.- Consideraciones que debes tener antes de seleccionar un microcontrolador 1.7.- Familia de los microcontroladores PIC 1.8.- Principales caractersticas del PIC16C54 1.9.- Descripcin de los microcontroladores PIC16C54 1.10.- Arquitectura del microcontrolador PIC16C54 1.11.- Instrucciones del PIC16C54 y los PIC de la gama bsica
Generalidades de los Microcontroladores PIC INICIO Objetivos Terminales:
Describir cmo han surgido los microcontroladores a travs del tiempo. Enumerar algunas aplicacio- nes de los microcontrolado- res. Explicar la arquitectura de los microcontroladores de la serie PIC16C54. Clasificar las instrucciones de los microcontroladores de la gama bsica. INICIO 14 Al comenzar la dcada de 1970, los microcontroladores hicieron su aparicin, y han encontrado una gran aceptacin en los diseos de aplicaciones electrnicas que requieren un nivel bsico de automatizacin y programacin. Hoy en da su uso se extiende en casi cualquier elemento que contenga componentes electrnicos: equipos de sonido, televisores, hornos de microondas, aires acondicionados, sistemas de alarmas, automviles, perifricos de computadoras, telfonos inalmbricos y celulares, calculadoras, agendas electrnicas, traductores de idiomas, controles inalmbricos, relojes despertadores, equipos de control industrial, equipos mdicos, medidores digitales, y as puede nombrarse un sinnmero de aparatos los cuales tienen al microcontrolador como circuito de control para el funcionamiento de stos. La razn de tal aceptacin, se debe a que un microcontrolador, es bsicamente una computadora en miniatura, y como tal, puede desarrollar un gran nmero de funciones segn los programas que tenga grabado en su memoria. Hoy en da existen microcontroladores con un potencial superior al de las primeras computadoras personales, lo cual indica las posibilidades que se pueden desarrollar con ellos, y todo esto en un pequeo circuito integrado. 1.1.- Contexto histrico de los Microcontroladores INICIO 15 Durante la dcada de 1960, algunas compaas fabricantes de dispositivos electrnicos, entre ellas Intel, Texas Instruments y Motorala, decidieron integrar componentes electrnicos para el desarrollo de circuitos integrados. Intel marc una pauta al desarrollar un procesador de 4 bits, el Intel 4004, despus fabric microprocesadores de 8 bits: el 8008 en 1972, el 8080 en 1973 y el 8085 en 1975. Por su parte en 1971 Texas Instruments anunci el desarrollo de su primer microcontrolador: El TMS1000, cuya patente fue dada al ingeniero Gary Boone y a la Texas Instruments. Este componente fue utilizado inicialmente para la construccin de calculadoras de 8 dgitos que realizaban las cuatro operaciones bsicas: suma, resta, multiplicacin y divisin. INICIO El primer microcontrolador Al TMS1000, en un principio, se le llam computador en un chip, constaba de las siguientes partes: oscilador, unidad central de procesamiento con un juego de 32 instrucciones, 64 x 4bits de RAM, 1024 bytes de ROM y puertos de entrada salida. En los ltimos veinte aos del siglo XX, muchos fabricantes se han dedicado a la tarea de desarrollar una gran diversidad de microcontroladores de 4, 8, 16 y 32 bits, siendo los de 8 y 16 bits, los ms populares. 16 En cuanto a los microcontroladores PIC, en 1965, la empresa General Instruments cre una divisin de microelectrnica, GI Microelectronics Division, que comenz fabricando memorias. A principios de los aos 1970 dise el microprocesador de 16 bits CP1600, razonablemente bueno, pero que no manejaba eficazmente las entradas y salidas. Para solventar este problema, en 1975 dise un circuito integrado destinado a controlar los puertos: el PIC (Peripheral Interface Controller). Se trataba de un controlador rpido pero limitado y con pocas instrucciones, pues iba a trabajar en combinacin con el microprocesador CP1600. La arquitectura del PIC, que se comercializ en 1975, era sustancialmente la misma que la de los actuales modelos PIC16C5X. En aquel momento se fabricaba con tecnologa NMOS y el producto slo se ofreca con memoria de lectura solamente (ROM) y con un pequeo pero robusto conjunto de instrucciones. La dcada de los aos 1980 no fue buena para GI, que tuvo que reestructurar sus negocios, concentrando sus actividades en los semiconductores de potencia. INICIO Surgimiento de los PICs 17 La GI Microelectronics Divisin se convirti en una empresa subsidiaria, llamada GI Microelectronics Inc. Finalmente, en 1985, la empresa fue vendida a un grupo de inversores de capital de riesgo, los cuales, tras analizar la situacin, rebautizaron a la empresa con el nombre de Arizona Microchip Technology, y orientaron su negocio a los PICs, las memorias EPROMs paralelo y las EEPROMs serie. Se comenz rediseando los PICs, que pasaron a fabricarse con tecnologa CMOS, surgiendo la familia de gama bsica PIC16C5X, considerada como la "clsica". El xito de los microcontroladores PIC ha sido vertiginoso. Mientras en 1990 ocupaba la vigsima posicin en ventas de microcontroladores de 8 bits, en 1999 subi a la segunda posicin, y desde 2002 se mantiene en la primera. En febrero de 2004 llegaron a totalizar las tres mil millones de unidades vendidas y la tendencia es seguir aumentando esta cantidad. INICIO 18 Las razones del xito de los PIC se basa quizs en muchas cosas: simplicidad en el uso, conjunto de pocas instrucciones con alta eficiencia de cdigo, rapidez en la ejecucin de programas, compatibilidad de instrucciones desde la gama bsica a la alta, gran variedad de modelos, multiplicidad de interfaces, soporte de software, librera de aplicaciones prcticas. En pocas palabras, son elementos de muy alta versatilidad que pueden utilizarse en un sinnmero de diferentes diseos electrnicos y, cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fcil emplear otro modelo. Los fabricantes de los PICs, ofrecen una gama de diversos tipos de microcontroladores, que pueden ser usados en muchas aplicaciones; desde un sencillo reloj digital, hasta el control de velocidad de motores de induccin y circuitos de control que utilizan lgica difusa en aplicaciones de robtica y procesos industriales.
INICIO 19 La diversidad de modelos, abarca los microcontroladores bsicos, los cuales tienen: Unidad central de procesamiento, memoria de programa (PROM, EPROM o FLASH), memoria de datos (RAM), puertos y temporizadores. Hay otros, ms avanzados, que ofrecen, adems de los elementos mencionados anteriormente, algunos de los circuitos que se nombran a continuacin: Manejador de interrupciones, convertidores A/D, convertidores D/A, memoria EEPROM y FLASH (que pueden mantener sus datos despus de quitar la alimentacin, sin aadir un equipo externo), moduladores de ancho de pulso, sensores de temperatura, comparadores, interfaces seriales, entre otros. INICIO 20 w Es un computador completo dedicado, aunque con limitadas prestaciones, que est contenido en un circuito integrado y se destina a gobernar una sola tarea.
w Son circuitos integrados programables que constan bsicamente de una unidad central de procesamiento (CPU), una memoria de programa, una memoria de datos, puertos de entrada y salida, temporizador y circuitos de inicializacin y reloj. 1.2.- Definiciones de Microcontrolador INICIO 21 Los microcontroladores tienen funciones especficas, que se realizan de acuerdo al programa grabado y a las conexiones de las lneas de entrada y salida. Estas lneas se conectan a interfaces que manejan elementos de lectura y de accin final en un equipo o sistema a controlar. 1.3.- Funciones de los Microcontroladores INICIO AUTOR: Csar lvarez DISEO INSTRUCCIONAL: M. Snchez y C. lvarez 100 0 20 40 60 80 Microcontrolador Interfaces 22 Los microcontroladores tienen una gran cantidad de aplicaciones; prcticamente cualquier aparato electrnico que se fabrica en la actualidad utiliza al menos un microcontrolador. Las aplicaciones de stos pueden desglosarse en reas de: computacin, comunicaciones, industria, automocin y electrodomsticos. 1.4.- Aplicaciones de los Microcontroladores INICIO 1.5.- Algunos Fabricantes de Microcontroladores Fabricante Microcontroladores Capacidad de Memoria Intel MCS51, 151, 251 8KB - 16KB ROM, 256B - 1KB RAM Siemens C540U (8051) 4KB - 8KB ROM, 256B RAM Dallas, Atmel 8051-52 2KB - 16KB ROM, 256B - 16KB RAM Motorola 68HC05 68HC08 68HC11 0 - 16KB ROM, 176B 512B RAM 16KB - 32KB ROM, 512B - 1KB RAM 4KB - 32KB ROM, 256B - 2KB RAM Texas Instruments TMS370 0KB - 64KB ROM, 128B - 2KB RAM NEC m PD7890xxx m PD780xxx 2KB - 24KB ROM, 128B 512B RAM 8KB - 60KB ROM, 256B - 2KB RAM Toshiba TLCS-870 TLCS-90 4KB - 60KB ROM, 256B - 2KB RAM 0 - 60KB ROM, 0 - 2KB RAM Hitachi H8/300 8KB- 60KB ROM, 256B - 2KB RAM SGS- THOMSON (ST-Micro) ST-6 ST-7 ST-9 1KB- 8KB ROM, 64B 320B RAM 4KB- 60KB ROM, 256B - 2KB RAM 0KB-128KB ROM, 512B - 4KB RAM National Semiconductor COP820, 840, 880C, 912 COP884xx, 888xx 1KB- 4KB ROM, 64B 128B RAM 4KB-32KB ROM, 128B 1088B RAM Zilog Z8 0,5KB - 32KB ROM, 61B 237B RAM Microchip 16Cxx 18Fxx 512X12 - 4KX14 ROM, 25B 192B RAM 2K - 32Kx16 ROM, 232B 2KB RAM INICIO Las compaas de mayor produccin de microcontroladores de 8bits 1990 - 2002 INICIO 25 Principalmente se debe tomar en cuenta, en qu aplicacin quieres que ste opere. Si deseas seleccionar algn fabricante especfico, para desarrollar muchas prototipos, entonces se deber escoger aqul que ofrezca ciertas ventajas tanto en las caractersticas del hardware como del software. Suficiente capacidad de memoria para los programas y datos. Lneas de entrada y salida suficientes para la aplicacin a desarrollar. Que presente rapidez en la ejecucin de los programas. Sencillez en el montaje. Sistema de soporte para la grabacin. Diversidad de productos. Disponibilidad en el mercado y bajo costo. Debe seleccionarse a aquellos que ofrezcan facilidad de programacin y cdigos de programacin eficientes. Programas de simulacin de fcil uso. Soporte de lenguajes de programacin de alto nivel. Compatibilidad con los sistemas operativos ms comunes. Disponibilidad de programas y libreras de aplicaciones. Disponibilidad de herramientas de desarrollo. 1.6.- Consideraciones a tomar antes de seleccionar un Microcontrolador: INICIO En este mdulo instruccional hemos seleccionado a los microcontroladores PIC de Microchip, ya que ofrecen una gran variedad de productos para muchas aplicaciones. 26 En principio, para la seleccin de un microcontrolador en una aplicacin especfica, debers tomar en cuenta muchos factores para que esta escogencia resulte en una relacin efectiva de bajo costo. Entre estos factores estn: tensin de alimentacin, tipo de fuente a utilizar, capacidad de memoria de programa y de datos, tipos de seales a manejar, cantidad de lneas de entrada y salida, tipos de memorias para programa y datos, capacidad de interrupcin, tamao y otros factores ms. Podra darse el caso, de tomar en cuenta muchos de estos factores y luego encontrar otro microcontrolador que se adapte mejor a lo que t deseabas. En este sentido, no hay mayor problema, ya que el programa que elaboraste en el primer microcontrolador, podr ejecutarse en otro, si ste es de la misma gama o de una gama superior. Por otro lado podramos dar una idea inicial de aquellos microcontroladores que ofrece Microchip, segn la serie a la cual pertenece. En las pginas siguientes de este mdulo instruccional se mencionan las caractersticas principales de estos microcontroladores. Para un anlisis ms detallado, debers consultar con las especificaciones que presenta el manual del fabricante. Finalmente, en este mdulo encontrars cmo trabajar con los microcontroladores ms utilizados de Microchip. Obteniendo un buen aprendizaje, podrs seleccionar el microcontrolador ms adecuado para tu aplicacin especfica. INICIO 27 La familia de los microcontroladores de 8 bits de Microchip, es muy variada, y prcticamente hay un tipo de microcontrolador para cada aplicacin. La siguiente tabla resume las caractersticas principales de cada familia hasta comienzos de 2004. La serie dsPIC, que aparece al final de la tabla, es una familia de procesadores seales de 16bits que entr en produccin recientemente. PIC Memoria de Caractersticas Principales Series Programa PIC 12C5XX 0,5 - 1K x 12 Opcin EEPROM, Velocidad: 1 a 2 MIPS PIC 12C6XX 2K x 14 8 Terminales, Oscilador incluido, A/D C PIC 12F6XX 0,5 - 1K x 14 A/D C, EEPROM, FLASH, Oscila. interno Velocidad: 5 MIPS, 8 Terminales. PIC 14C000 4K x 14 A/D C 16 Bits, DA/C, Lector de temperat. 28 terminales, manejo de Interrupciones
PIC 16C5X 0,5K -2K x 12 Velocidad: 5 MIPS, Disponibilidad en 14, 18 y 28 terminales PIC 16CXXX 0,5K -8K x 14 Comparador Digital y analgico, Interrpc. Modulador de ancho de pulso (PWM), Interfaz serial (USART), A/D C , Manejador LCD, variedad de tamaos. 1.7.- Familia de los Microcontroladores PIC INICIO 28 INICIO PIC 17C4X/7XX 2K - 8K x 16 Multiplicador de 8x8 bits, Comparador Digital, PWM, Opciones en: OTP, EPROM y FLASH - ROM, USART, I2C,Velocidad: 8,5 MIPS, manejo de Interrupciones, Disponibilidad de hasta 44 Terminales. Conjunto de 58 instrucciones de 16 bits. PIC 16FXXX 0,5K - 8K x 14 A/D C de 10bits, PWM, USART, EEPROM, FLASH o ROM, Manejo de Interrupciones, I2C, Comparador Digital, Vel: 5 MIPS, Disponibles en 18, 28,40 y 44 Terminales. PIC18CXX /18FXX 0 - 65K x 16 Similar a la serie PIC 17C7XX. Conjunto de 77 instrucciones de 16 bits velocidad de 10 MIPS. Compilacin en C eficiente rfPIC12C5XX 1K x 12 Similar a la serie PIC 12XXX, pero incluye rfPIC12F6XX 1K x 14 un transmisor de radio frecuencia UHF. dsPIC30FXXXX 4K - 48K x 24 A/D C de 12bits, PWM, EEPROM, FLASH (Procesadores de Manejo de Interrupciones, USART, I2C, seales de 16bis) CAN, Comparador Digital, Vel: 30 MIPS, 18 a 80 Terminales. Conjunto de 84 instruc. 29 w Facilita la labor de depuracin de programas. w Permite el desarrollo de aplicaciones en poco tiempo. w Todas las instrucciones son sencillas y presentan un cdigo eficiente, lo que permite reducir un programa a la mitad con respecto a otros microcontroladores de 8 bits. w Circuito de inicializacin incluido. w Presenta cuatro configuraciones programables para el oscilador. w Modo Reposo (sleep) para el ahorro de energa. w Temporizador perro guardin (Watchdog), para prevenir que un programa se cuelgue. w Proteccin de programas. 1.8.- Principales caractersticas del PIC16C54 INICIO 30 El PIC16C54 es un microcontrolador de 8 bits de tecnologa CMOS. Este microcontrolador tiene una arquitectura RISC con un conjunto de apenas 33 instrucciones de una sola palabra (12 bits), lo cual reduce esfuerzo en memorizar los cdigos de instruccin. 1.9.- Descripcin del Microcontrolador PIC16C54 INICIO 31 El microcontrolador PIC16C54 utiliza una arquitectura Harvard, lo cual significa que la memoria de programa y la de datos est separada en dos buses diferentes. Esto mejora la velocidad en el acceso a instrucciones y datos, y permite utilizar palabras de una longitud para las instrucciones y otra para los datos.
El PIC16C54 utiliza cdigos de instruccin de 12 bits, esto permite combinar instrucciones de un ciclo donde se incluye el acceso directo a la memoria de datos; adems, se cuenta con una estructura de entubamiento en la cual, mientras se ejecuta una instruccin, se prepara la siguiente, es decir, significa un ahorro en el tiempo de ejecucin de cada programa, en donde se necesita apenas cuatro perodos del oscilador por cada ciclo de ejecucin de una instruccin. Por ejemplo: para un oscilador con una frecuencia igual a 20 MHz, el perodo del oscilador es de 50nSeg; esto significa que el ciclo de una instruccin tarda 4 X 50nSeg, es decir, 200 nSeg. Las instrucciones en donde se ejecutan saltos demoran dos ciclos, ya que la instruccin que se prepara es la de la siguiente lnea del programa, y al realizar el salto se va a una instruccin que est ubicada en otra lnea del programa.
A continuacin se presenta la arquitectura del microcontrolador PIC 16C54: 1.10.- Arquitectura del Microcontrolador PIC16C54 INICIO 32 Diagrama de Bloques del Microcontrolador PIC16C54 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS (SRAM) 25 BYTES F RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS 5-7 TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 33 Al examinar la figura de la arquitectura, se puede ver que arriba a la izquierda se encuentra la memoria de programa EPROM o ROM; su capacidad es de 512 palabras de 12 bits, y all est el programa desde la posicin 000h. A la derecha de la memoria de programa, se encuentra el registro PC o Contador de Programa, del cual salen los valores de las direcciones que se leern en la memoria de programa. El programa del microcontrolador comienza en la direccin 0 que corresponde a la siguiente instruccin despus de la inicializacin. Los datos que salen de la memoria de programa, que corresponden a los cdigos de instruccin, que son las lneas del programa codificadas en binario, van al Registro de Instrucciones. En este registro se almacena temporalmente el cdigo de la instruccin a ejecutar, la cual es interpretada por el Decodificador de Instrucciones. El Decodificador de Instrucciones traduce el cdigo o valor binario que est en la memoria del programa a una instruccin que se va a ejecutar. Esta instruccin puede tomar dos caminos: Si la instruccin implica un salto de direccin, entonces se colocar en el registro PC (va directa) un nuevo valor, el cual corresponde a la nueva direccin del programa; si la instruccin consiste en hacer una operacin con uno de los Registros de Propsitos Generales (vase el bloque en la parte derecha de la figura) o con el registro W, se tomarn unas lneas del Registro de Instrucciones para especificar la direccin de acceso al registro, y las otras lneas para colocar el cdigo de la operacin que se realizar en la Unidad de Lgica y Aritmtica. INICIO 34 En la Unidad de Lgica y Aritmtica se puede hacer clculos aritmticos, tales como la suma y la resta binarias, u operaciones lgicas, tales como: and, or, exor, complemento y desplazamientos. Las operaciones se pueden ejecutar con una o dos variables de 8 bits, que pueden estar en el registro de trabajo W o en un registro indicado por medio de la direccin F, que seala una posicin de la memoria de datos o Registro de Propsitos Generales, un Puerto, un registro TRIS o el temporizador TMR0, como puede observarse en la parte inferior de la arquitectura PIC 16C54. En la parte superior derecha de la figura, se puede observar el bloque que se refiere a la Palabra de Configuracin, la cual define si se va a inhabilitar el Temporizador WDT (perro guardin), si se va a hacer la Proteccin de Cdigos del programa de la memoria y cul palabra de configuracin se va a emplear para seleccionar el tipo de oscilador en el bloque Oscilador, Tiempo y Control. El registro Option, el cual se escribe por medio del registro W, es el encargado de colocar la palabra de configuracin en el Escalamiento de WDT y TMR0. Este escalamiento fijar la programacin del divisor de frecuencia en uno de los temporizadores. Finalmente, en la parte derecha del registro PC, se encuentran los registros Pila1 y Pila2, que se utilizan para almacenar la direccin del contador de programa en el momento en el que se va a ejecutar una subrutina. INICIO 35 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 36 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 37 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 38 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 39 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 40 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 41 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 42 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES F RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 43 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 44 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 45 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 46 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 47 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 48 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 49 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 50 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 51 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 52 ENTRADA TOCKI RA3 RA0 TRIS 6 TRISB PUERTO B 8 8 8 RB7 RB0 9-11 EPROM-ROM 512x12 PC 9-11 REGISTRO DE INSTRUCCIONES DECODIFICADOR DE INSTRUCCIONES PILA 1 PILA 2 DIRECCIN DIRECTA TIEMPO DE ESPERA DEL WDT ESCALAMIENTO DE TMRO Y WDT TEMPORIZADOR WDT PALABRA DE CONFIGURACIN INHABILITA PROTECCIN DE CODIGOS TIPO DE OSCILAD. OSCILADOR, TIEMPO Y CONTROL OSC1 OSC2 MCLH REG. OPTION SLEEP OPTION REGISTROS DE PROPOSITOS GENERALES (SRAM) 25 BYTES RAM DE DIRECCIN DIRECTA W UNIDAD LGICA Y ARITMTICA TMRO BUS DE DATOS TRIS 5 TRISA PUERTO A 4 4 4 STATUS 9 8 12 12 8 2 8 6 5 8 8 INICIO 53 Diagrama de conexiones del Microcontrolador PIC16C54 A continuacin, se presenta la interconexin del los PIC 16C54 Cada conexin tiene su propia funcin especfica. Haz clic en el terminal deseado para encontrar la funcin correspondiente en el glosario. INICIO PIC 16C54 54 1.11.- Instrucciones del PIC16C54 y los PIC de la gama bsica Un programa que se graba en un microcontrolador, es el encargado de ejecutar una funcin de aplicacin para el circuito a utilizar. Para hacer un programa, es necesario conocer las instrucciones que ofrece el lenguaje con el que se va a trabajar y manejar el software necesario para comprobar que el programa haga lo que se desea. Queremos hacerte entender que la labor de programacin no es difcil. Hacer un programa es algo as como hablar con alguien para que ejecute una o ms acciones. Para realizar esto, t necesitas conocer una gran cantidad de palabras del idioma con el que te puedas expresar, y la persona deber entender el mismo lenguaje que t empleas. Mientras ms palabras conozcas, podrs manejar con mayor eficiencia tu lenguaje y tu modo de expresin. Sin embargo, adems de conocer las palabras, necesitars manejar tambin las reglas de expresin o sintaxis. Por ejemplo cuando le dices a alguien: Quiero que me traigas 1Kg de azcar. En ese caso ests expresando un deseo a ese alguien, que consiste en que esa persona salga de la casa, camine hacia el abasto, entre al lugar, busque el azcar en los estantes, tome un paquete de 1 Kg de azcar, vaya a la caja a pagarlo, saque el dinero, tome el vuelto, salga del abasto, regrese a la casa y finalmente te entregue el paquete de azcar. Fjate que en la expresin utilizada inicialmente, que es bastante corta, implica una serie de pasos que se deben ejecutar para llegar a la accin final, y estos pasos podrn ser tan especficos como a nosotros se nos pudiera ocurrir. La expresin Quiero que me traigas 1Kg de azcar podra interpretarse en un software, como una instruccin de un lenguaje de alto nivel o una subrutina de un lenguaje de bajo nivel, y los pasos que implican realizar la accin, pueden verse como los cdigos del lenguaje del microcontrolador. INICIO 55 Cuando se quiere dar rdenes a un microcontrolador, se deber emplear un lenguaje de programacin que l lo entienda directamente. Sabemos que un microcontrolador entender cdigos compuestos por 1 y 0, que nosotros podramos aprenderlo, pero invertiramos mucho tiempo y sera muy fcil equivocarnos al emplear este lenguaje. Sin embargo, como vamos a contar con una computadora, podremos utilizar un lenguaje un poco ms fcil de entender, y la computadora har las traducciones necesarias al lenguaje del microcontrolador. Este proceso se llama ensamblaje o compilacin.
El lenguaje que se utiliza comnmente para trabajar con microcontroladores es el lenguaje Ensamblador, que es un lenguaje de bajo nivel. Existen otros lenguajes, de alto nivel, que tambin se pueden utilizar para programar estos componentes, tales como los lenguajes C y Basic. El lenguaje Ensamblador es bsicamente un lenguaje de mquina, es decir, que las instrucciones que emplea se codifican directamente para ser grabadas en la memoria del programa del microcontrolador.
Para facilitar un poco el entendimiento del lenguaje Ensamblador de un microcontrolador o un microprocesador, las instrucciones se presentan con cdigos, que representan abreviaciones, y a continuacin, los operadores que van a realizar la instruccin. El lenguaje ensamblador permite colocar, de manera opcional, algunos comentarios, que se reconocern por ser expresiones que estn despus de ; en una lnea del programa. Otra opcin que nos permite el ensamblador, consiste en colocar etiquetas o encabezados, que indican posiciones en la memoria de programa escritas en palabras de uso comn. INICIO 56 Para escribir un programa en un microcontrolador, sea cual fuere el lenguaje que vamos a emplear, debemos utilizar un software que nos facilite la labor de la comunicacin. En este curso se emplear el software MPLAB, ya que es la plataforma de programacin gratuita que ofrece Microchip para todos los microcontroladores que fabrica, y permite realizar todos los pasos necesarios en la programacin del microcontrolador, sin necesidad de llamar a otro software. Para escribir un programa en un microcontrolador, debes comenzar por conocer las instrucciones o el lenguaje que vas a emplear. En este curso comenzaremos por utilizar el lenguaje Ensamblador, ya que ste nos permitir conocer con bastante profundidad el modo de funcionamiento del microcontrolador. Ms adelante podrs emplear un lenguaje de alto nivel; sin embargo queremos que sepas que si puedes hacer un buen programa en el lenguaje ensamblador, ste se ejecutar con mayor rapidez y emplear menos cantidad de memoria que al hacer uso de un compilador de lenguaje de alto nivel. Despus de conocer las instrucciones del lenguaje de programacin, podrs utilizar el MPLAB o algn otro software para editar el programa, es decir, escribirlo como si fuera una carta, pero de manera ordenada; luego debers ejecutar el comando que ensambla o compila el programa; despus, si no hubo error de sintaxis, podrs hacer la simulacin del programa; y si no hay errores de lgica, podrs finalmente grabarlo en la memoria del microcontrolador para que, de esta manera, puedas probar si funciona correctamente en un circuito. En cada fase debe hacerse las correcciones necesarias segn los resultados que se van obteniendo.
INICIO 57 Fjate en lo siguiente: El microcontrolador PIC16C54 utiliza palabras de 12 bits divididas en un cdigo de operacin que especifica el tipo de instruccin y los registros en donde se va a ejecutar la operacin y en qu lugar se va a colocar el resultado. Esto te permite utilizar instrucciones que en el microcontrolador se codifican en una sola palabra. Eso te garantiza que tu programa en el microcontrolador ocupa igual nmero de instrucciones como las que empleaste en el lenguaje ensamblador. Esto no ocurre con la mayora de los otros microcontroladores. El nmero de instrucciones que presenta el PIC16C54, es de apenas 33. El formato de estas instrucciones, permite tratar a la memoria de datos, como si fueran registros de trabajo, lo cual implica un ahorro tanto en la codificacin de la instruccin, como en el tiempo de ejecucin en la misma. Las instrucciones pueden hacer operaciones entre registros de un byte, para lo cual se utiliza el apuntador de direcciones de registros f y el registro de trabajo W; pueden ejecutarse entre operaciones con valores constantes y el registro de trabajo W; tambin pueden ejecutarse operaciones orientadas a bits, para esto se utiliza la variable b, que indica la posicin del bit en el registro apuntado por f. En las instrucciones orientadas a bytes, f es un valor que representa la direccin de un registro de asignacin y d representa el destino, que puede ser el mismo registro apuntado por f o el registro W. Los registros sealados por f, son uno de los 32 lugares de memoria a los que puede acceder la instruccin, por medio de los 5 bits del cdigo especificado para ello. INICIO 58 En resumen W Registro de trabajo. F Direccin del registro de la RAM. d Destino, a donde va el resultado (W o F). b Direccin del bit a utilizar en el registro de direccin F. K Valor numrico constante. INICIO 59 La designacin del destino, que se hace por medio de d, indicar si el resultado se llevar al registro de trabajo W, cuando d=W, o al registro de direccin f, cuando d=f. Recuerda que las operaciones lgicas y aritmticas se hacen en cdigo binario, y por lo general se utiliza el cdigo hexadecimal en los valores asignados en el lenguaje ensamblador. Por ejemplo, la instruccin:
ADDWF f,d Indicar sumar (ADD) el registro de trabajo W, con el registro de direccin f. El resultado se colocar en W si d=W, o en f si d=f. Si no colocas ningn destino, el ensamblador guardar el resultado en el registro de direccin f y te dar un mensaje de advertencia.
Operaciones entre W y f Digamos que la instruccin: ADDWF 12,W ;Suma en binario el contenido del registro ;W con el contenido del registro 12 y el ;resultado se guardar en el registro W INICIO Cdigo de la instruccin Registro Destino 60 GOTO K ; (Ejemplo GOTO LAZO) Indica que el programa saltar a la posicin indicada por el valor K, donde K puede ser un nmero de 9 bits en este caso, o una palabra clave o etiqueta que indica una posicin en la memoria de programa. Para las instrucciones orientadas a bits, b representa la posicin de un bit ubicado en el registro f. Por ejemplo, la instruccin: BCF f,b Indicar una instruccin (Bit Clear) que borrar el bit en la posicin b (0 a 7) del registro de direccin f (0 a 31). IORLW K
Donde K es un valor constante de 8 bits, indicar que se realizar la funcin (Inclusive) OR entre los bits del Literal K y los del registro W. El resultado ir a W. Para instrucciones con literales y control, K representa una constante de 8 9 bits, o un valor literal indicado por medio de una palabra clave o etiqueta. Un ejemplo: IORLW B10010110 ; 10010110 es un nmero ; en binario Operaciones con literales y bits INICIO 61 INSTRUCCIONES DEL LENGUAJE ENSAMBLADOR Clasificacin de las instrucciones del microcontrolador PIC16C54:
Instrucciones de transferencia de datos, las cuales mueven datos de un registro a otro (los registros involucrados son el W y un registro apuntado por f), o un dato constante en la memoria del programa al registro W. Instrucciones aritmticas, las cuales ejecutan operaciones aritmticas binarias entre W y un registro de direccin f. Instrucciones lgicas, las cuales ejecutan operaciones lgicas bit a bit entre W y un registro de direccin f, o entre W y un valor constante. Instrucciones de borrado, las cuales colocan el valor cero a un registro. Instrucciones de rotacin, las cuales permiten rodar el contenido de un registro de direccin f, un bit hacia la derecha o hacia la izquierda. Estas instrucciones se utilizan para efectuar multiplicaciones y divisiones aritmticas binarias. Entre estas instrucciones tambin existe una que permite intercambiar grupos de 4 bits, para el manejo de dgitos. Instrucciones de manejo de bits, las cuales pueden colocar en 0 o en 1 un bit determinado de un registro de direccin f. Instrucciones de saltos, las cuales permiten la posibilidad de cambiar la direccin de ejecucin de un programa de manera incondicional o segn la evaluacin de un bit o si un registro es igual a cero. Instrucciones de control, las cuales permiten hacer algunas configuraciones de hardware en el microcontrolador.
INICIO 62 INSTRUCCIONES DE TRANSFERENCIA DE DATOS
MOVF f,d ; Mueve el contenido de f hacia el destino d (W o f) MOVLW K ; Se asigna a W el valor K MOVWF f ; Mueve el contenido de W hacia el registro f INSTRUCCIONES ARITMTICAS ADDWF f,d ; Suma W con f (y guarda el resultado en d: W o f) SUBWF f,d ; Resta f menos W DECF f,d ; Decremento en 1 el contenido de f INCF f,d ; Incremento en 1 en contenido de f Instrucciones de transferencia de datos y aritmticas INICIO 63 INSTRUCCIONES LGICAS ANDLW K ; And de los bits de W con los de K y guarda en W ANDWF f,d ; And de los bits del registro W con los de f COMF f,d ; Complemento en uno el contenido del registro f IORLW K ; Or de los bits de W con los de K y guarda en W IORWF f,d ; Or de los bits del registro W con los de f XORLW K ; Exor de los bits de W con los de K y guarda en W XORWF f,d ; Exor de los bits del registro W con los de f INSTRUCCIONES DE BORRADO CLRF f ; Borra el contenido del registro f CLRW W ; Borra el contenido del registro W Instrucciones lgicas y de borrado INICIO 64 INSTRUCCIONES DE ROTACIN RLF f,d ; Rotacin de f hacia la izquierda a travs de Carry RRF f,d ; Rotacin de f hacia la derecha a travs de Carry SWAPF f,d ; Intercambia nibles (grupo de 4 bits) en el registro f INSTRUCCIONES DE MANEJO DE BITS BCF f,b ; Pone en 0 bit b del registro f BSF f,b ; Pone en 1 bit b del registro f Instrucciones de rotacin y manejo de bits INICIO 65 INSTRUCCIONES DE SALTO (Si se ejecuta el salto, la instruccin demora dos ciclos) BTFSC f,b ; Si el bit b de f es cero, salta una instruccin BTFSS f,b ; Si el bit b de f es uno, salta una instruccin CALL K ; Llama a subrutina en la direccin K GOTO K ; El programa va a la direccin K DECFSZ f,d ; Decremento de f y si es cero, salta una instruccin INCFSZ f,d ; Incremento de f y si es cero, salta una instruccin RETLW K ; Retorno de subrutina, W toma el valor de K Instrucciones de Salto INICIO 66 INSTRUCCIONES DE CONTROL CLRWDT ; Borra temporizador Perro guardin (WDT) SLEEP ; Inhabilita el procesador, (Reposo) NOP ; No ejecuta operacin OPTION ; El contenido de W se carga al registro OPTION, ; que se utiliza para la configuracin de los ; temporizadores y el escalamiento. TRIS f ; Contenido de W va a TRIS (programacin puertos), ; f representa uno de los puertos A o B (5 6). ; Un 1 en el bit de programacin, configura la lnea ; correspondiente al puerto como entrada; un 0 lo ; configura como lnea de salida. Instrucciones de Control Nota: Si deseas ver el significado en detalle de todas las instrucciones de los microcontroladores PIC de las gamas bsica y media, puedes consultar el anexo 2. INICIO 67 ACTIVIDADES A REALIZAR En este aparte, se pide que t desarrolles las actividades que a continuacin se presentan, para comprender mejor el tema siguiente. 1.- Define con tus propias palabras los siguientes trminos: a.- Qu es un Microcontrolador? b.- Cmo funciona un microcontrolador? c.- En cules aplicaciones se podra utilizar un microcontrolador? d.- Describe las principales caractersticas de los microcontroladores PIC. 2.- Dibuja la arquitectura de un microcontrolador PIC16C54. 3.- Haz una clasificacin de las instrucciones de los microcontroladores PIC de la gama bsica y relaciona el significado de cada cdigo de operacin con la instruccin que ejecuta con sus operadores. 4.- Explica qu es lenguaje ensamblador y haz un ejemplo de un programa que lea dos datos ubicados en la memoria de datos y los sume. INICIO 2.1.- Programacin de Microcontroladores 2.2.- Pasos para programar un Microcontrolador 2.3.- Representacin del circuito. 2.4.- Edicin del Programa con el MPLAB 2.5.- Ensamblaje del Programa 2.6.- Simulacin 2.7.- Grabacin del Microcontrolador 2.8.- Reduciendo el programa 2.9.- Advertencia para un vehculo 2.10.- Control de leds por medio de pulsadores 2.11.- Ejemplo de un programa para sumar 2.12.- Resta de dos nmeros TEMA 2 Programacin del PIC 16C54
Contenido INICIO 69 Objetivos Terminales: Explicar los pasos necesarios para programar un microcontrolador para una aplicacin especfica. Desarrollar programas bsicos para aplicaciones especficas, que puedan ejecutarse por un microcontrolador PIC16C54. TEMA II: Programacin del microcontrolador PIC16C54 INICIO 70 La programacin es el modo de organizacin de las instrucciones que va a realizar el microcontrolador para cumplir una o ms funciones especficas.
Para programar los microcontroladores es importante que utilices el lenguaje ensamblador, ya que es el ms parecido al lenguaje del procesador, y esto te ayudar a entender mejor cmo trabaja cada instruccin. Existe tambin la posibilidad de utilizar los programas en lenguaje C, Basic o algn otro de alto nivel.
Queremos convencerte que esta labor no es difcil, especialmente si ya has programado en cualquier otro lenguaje, recuerda que programar es parecido a hablar o escribir en el idioma que empleas usualmente para comunicarte.
Para hacer un diseo en el que se utilicen circuitos integrados programables, ser necesario emplear herramientas que ayuden a la puesta a punto del Hardware y del Software. 2.1.- Programacin de Microcontroladores INICIO 71 Debes tener en cuenta que, adems de los compiladores o intrpretes de los lenguajes usados, es muy interesante disponer de simuladores de programas, que consisten en un software que ejecuta las instrucciones que representan, en una computadora, el comportamiento interno del procesador y el estado de las lneas de entrada y salida. Recuerda que es indispensable el grabador, encargado de escribir el programa en la memoria del microcontrolador. Existen grabadores muy completos capaces de trabajar con muchos modelos de diferentes familias. Otra herramienta de desarrollo, es el emulador en circuito, que consiste en un complejo dispositivo fsico que, controlada por un programador desde tu computadora personal, dispone de un conector con cables que van hacia la computadora y que tiene los mismos terminales que el microcontrolador que trata de imitar. El conector se introduce en la base donde ir el microcontrolador, con el programa definitivo en la memoria de la computadora. El emulador en circuito (ICE) hace funcionar el sistema como si hubiese un microcontrolador real, pero con la ventaja de poder observar todo el funcionamiento en la computadora. Un inconveniente de los emuladores, es su elevado precio que los aleja de los usuarios personales INICIO 72 Despus de seleccionar un microcontrolador para una aplicacin especfica, para programarlo ser necesario:
Despus de cada fase, se deber corregir los errores hasta que todo funcione bien. Ensamblar el programa Simular el programa Grabar el programa en el microcontrolador Hacer pruebas en el circuito Editar el programa Representar el circuito 2.2.- Pasos para programar un Microcontrolador: INICIO 73 2.3.- Representacin del circuito. Un ejemplo Para representar el circuito, se colocar el siguiente ejemplo: Se desea hacer un circuito con cuatro interruptores de entrada y ocho indicadores a la salida, de los cuales cuatro sern de color rojo, y cuatro sern de color verde. Cada interruptor estar asociado a dos indicadores de diferente color, y al accionarlo, deber cambiar el encendido, de uno a otro. Cuando un interruptor est abierto, deber encender el indicador de color rojo asociado a ste. En el caso de estar cerrado encender el indicador de color verde. Solucin: De acuerdo al problema planteado, debers contestar estas preguntas: Cuntas lneas de entrada y salida sern necesarias para desarrollar el circuito? Cules sern conectadas como entradas y cules se conectarn como salidas? Qu tipo de interfaz se colocar para las entradas? Qu tipo de interfaz se colocar para las salidas? El PIC 16C54 ser apropiado para este circuito? Antes de pasar a la siguiente pgina, recomendamos que t respondas estas preguntas. Si lo deseas, podrs consultar con las pginas anteriores de este mdulo instruccional. INICIO 74 Respuestas De acuerdo a las preguntas planteadas en la pgina anterior, las respuesta sern las siguientes: Se necesitarn doce lneas de entrada y salida, de las cuales cuatro sern entradas, que correspondern a los interruptores y ocho sern salidas, que correspondern a los indicadores o leds. Las interfaces se harn de una forma sencilla. Se tomar en cuenta que en los puertos de entrada, si las lneas no estn conectadas, la lectura ser indefinida (0 1), entonces se conectar una resistencia de 4,7K al voltaje de alimentacin para cada entrada, y en el mismo punto, se colocar un interruptor a la referencia negativa o tierra, de manera que si el interruptor est abierto, se leer un 1, y si est cerrado, se leer un 0. En cuanto a las interfaces de salida, se deber considerar si los microcontroladores pueden manejar directamente a los leds. Teniendo en cuenta que los puertos de los microcontroladores pueden entregar o absorber hasta 25mA a 25C con una alimentacin de 5V, y para un led basta una corriente de 5 a 10mA para encenderlo, entonces la interfaz se har por medio de una resistencia de 300 en serie con cada led. La ecuacin para calcular la resistencia de cada Led, ser: Rled=(Vdd-Vled)/Iled Donde: Vdd = 5V (O la tensin de alimentacin que utilizas para el circuito) Vled 2V (Depende del color del led: Rojo -> 1,6V; Verde -> 2,4V) Iled 10mA (Depende del brillo deseado y la corriente mxima del led) INICIO 75 Seleccin del Microcontrolador Segn lo establecido anteriormente, el microcontrolador PIC16C54 es adecuado para esta aplicacin, ya que tiene doce lneas disponibles para los puertos de entrada-salida. Si en el mercado local no consigues el PIC16C54, podras utilizar el PIC16F54, el PIC16F84A o algn otro microcontrolador PIC de 18 terminales que pertenezca a la gama bsica o media, ya que dispone de doce terminales de entrada-salida, y los programas que se elaboran con los PIC16C54, funcionan con los otros de la gama bsica o media; las conexiones externas entre ellos tambin son compatibles. A continuacin se presenta el circuito a utilizar, en donde se escoger al puerto A como entrada (4 bits) y el puerto B como salida (8 bits). Vdd PIC 16C54 INICIO 76 2.4.- Edicin del Programa con el MPLAB Alt Despus de representar el circuito, y de asignar cada lnea de entrada y salida a los puertos del microcontrolador, se proceder a editar el programa. Debes tener claro con qu elemento se conecta cada lnea de los puertos del microcontrolador. Existen muchos editores para programar los microcontroladores PIC. Sin embargo, se utilizar el MPLAB, debido a que esta herramienta de programacin, ofrece la posibilidad de: Editar, compilar, simular y grabar. Para entrar al entorno MPLAB, se deber acceder al software que ofrece gratuitamente la compaa Microchip (www.microchip.com), o al comprar uno de los sistemas de desarrollo para estos microcontroladores. Despus de instalar el software, se abrir el programa MPLAB. Si deseas alternar entre este mdulo instruccional y el MPLAB, puedes hacerlo al presionar simultneamente las teclas: y (Tab) La primera vez que se abre este programa, aparecer la siguiente pantalla: Llamada: Microchip MPLAB IDE INICIO 77 Familiarizacin con el MPLAB Despus de abrir el MPLAB, ya podrs comenzar a editar tu programa en el espacio donde dice Untiteled Work space. Si quieres trabajar con mayor comodidad, podrs ampliar esta ventana. Los recursos que se ofrecen con este software son bastante variados, es por esto que en este aparte se mostrar slo algunos de los comandos necesarios para iniciar una edicin de un programa. Algo que debers tomar en cuenta, es el ser consistente con el dispositivo que vas a usar. Para ello, debers seleccionar el microcontrolador en este ambiente de trabajo; en este caso el PIC16C54 (o el microcontrolador que encontraste en el mercado local). Para esto se ir a la barra de men, y se escoger en Configure y luego Select Device... Si el MPLAB se est utilizando por primera vez, en pantalla aparecer la siguiente ventana: INICIO 78 Opciones del MPLAB Si vas a utilizar el PIC 16C54, se deber cambiar a: Ntese el cambio al PIC16C54. Luego se seleccionar en OK. Despus de hacer esto, el MPLAB estar listo para trabajar con el PIC16C54. Si se va a trabajar con otro microcontrolador, ste se seleccionar en Device. Al regresar al ambiente de trabajo, en la parte inferior aparecer el tipo de microcontrolador que se va a emplear, el cual deber ser igual al que se utilizar en el circuito, o de lo contrario podr haber problemas en el momento de ensamblar, cuando se realice la simulacin o al grabar el programa. 1 2 INICIO 79 Es importante documentar bien el programa En un programa ensamblador, es muy importante hacer una buena documentacin; en lo posible, hay que colocar los comentarios que sean necesarios para comprender bien qu es lo que se est haciendo. Los comentarios se reconocern por el smbolo ; tal como se puede ver en la figura de la pgina siguiente, en donde se hace una breve descripcin del programa que se va a realizar. Te recalcamos la importancia de colocar los comentarios, ya que los que comienzan a trabajar en esto, consideran innecesario colocarlos. Sin embargo, un tiempo despus, a la hora de analizar el programa no recuerdan qu fue lo que hicieron, y prcticamente tienen que comenzar desde cero para tratar de entender el programa. Antes de comenzar a editar el programa, te recomendamos que revises, en el tema 1, en la parte de las Instrucciones del Lenguaje Ensamblador, lo que hacen las siguientes instrucciones, o sino accede a las explicaciones de ellas, por medio del hipervnculo asociado: MOVLW K GOTO K TRIS f BSF f,b CLRW BCF f,b BTFSS f,b BTFSC f,b En la pgina siguiente encontrars la primera parte de la edicin del programa. Fjate bien en los comentarios escritos. INICIO 80 Comentarios INICIO 81 Los archivos INCLUDE En el ejemplo de la pgina anterior, se puede observar una parte inicial compuesta de comentarios, los cuales se colocan para describir el programa. Despus se observa la directiva INCLUDE P16C5X.INC. Esta directiva, bsicamente se utiliza para incluir un archivo que asigna valores numricos a cada uno de los registros de funciones especiales y los bits del registro STATUS. Esto nos facilitar la elaboracin del programa, es decir, que para emplear, por ejemplo, una instruccin MOVF 5,0; el programa entender que el contenido del puerto A, que est en la direccin 5, pasar al registro W. Sin embargo, ser mucho ms fcil comprender la instruccin, si se escribiera de esta manera: MOVF PORTA, W. Esta ltima instruccin se aceptar, si previamente se defini PORTA y W, y esto se puede hacer con la directiva INCLUDE. Si deseas ms informacin acerca de las directivas del lenguaje ensamblador, puedes consultar el anexo 3 de este mdulo instruccional. En el archivo P16C5X.INC, est la asignacin de los registros de funciones especiales (tal como PORTA y W) de los microcontroladores de la gama bsica. En el caso de no utilizar este archivo, tendramos que asignar nosotros mismos los registros en el programa. Es decir, que antes de comenzar el programa deberamos escribir lo siguiente: PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' W EQU H'0000' F EQU H'0001 INDF EQU H'0000' TMR0 EQU H'0001' INICIO 82 Las Directivas y las Bases Numricas El hecho de que un valor aparezca como H0000, slo significa que se est escribiendo en hexadecimal. Por otro lado, EQU significa igual, o sea que al escribir la directiva: W EQU H0000, significa que en cualquier instruccin que se escriba W, al codificarse el texto, se colocar un valor 0 en el programa ensamblador. Una directiva, es algo as como una instruccin que no se codifica en el programa, pero que realiza una operacin de control en el ensamblador. En otras palabras, la directiva EQU asigna la igualdad entre una etiqueta y un nmero, para que en el momento de hacer la codificacin del programa, en donde aparezca la etiqueta, se asignar el nmero, ya que en el microcontrolador slo pueden entrar valores numricos binarios. El ensamblador permite tambin que utilices varios tipos de sistemas numricos, por ejemplo, el nmero 11 en decimal se puede representar de las siguientes maneras: Base Numrica Representacin Hexadecimal 0B / 0BH / H0B / 0x0B Binaria B1011 Decimal D11 Observa que a los nmeros hexadecimales que empiezan por una letra, le debes colocar un 0 a la izquierda. A continuacin seguimos con la elaboracin del programa en la siguiente pgina, donde podrs observar, cmo se separa el programa en columnas, por medio de la tecla de tabulacin, de manera que la columna 1 se utiliza para etiquetas, la segunda para la instruccin, la tercera para los operadores y la cuarta para los comentarios: INICIO 83 {Comentarios} {Etiquetas} {Instrucciones} {Operadores} Colu. 1 Colu. 2 Colu. 3 Columna 4 Divisin por columnas INICIO 84 Comienzo del Programa Puede verse en la pantalla anterior, la directiva ORG (Origen) poco despus de la directiva INCLUDE. lla asigna la direccin en la cual va a comenzar una seccin del programa. En este caso, el programa comienza en la direccin 0 de la memoria EPROM del microcontrolador. Al comenzar el programa, se debe preparar los puertos y registros que se van a utilizar. En este caso, se asignar la programacin de los puertos, tal como se puede observar a partir de la etiqueta PREPAR en el programa de la pgina anterior. En la seccin siguiente se presenta el comienzo el programa. Se ver cmo se realiza el anlisis para un grupo de una sola entrada del puerto A y dos salidas del puerto B. INICIO 85
Trata de completar lo que debe ir en las secciones: GRUPO1, GRUPO2 y GRUPO3. Es importante que cada etiqueta se escriba en una sola palabra, sin espacio, es decir que sera incorrecto colocar, por ejemplo, GRUPO 1. Recuerda que aqu se utiliza la instruccin BTFSS PORTA,0; la cual indica que se va a hacer un test del bit 0 del puerto A, o sea RA0, (Bit Test de F, Salta si es 1). Si el resultado es 0, ejecutar la instruccin siguiente GOTO VERD0ON, la cual har que el programa salte a la posicin VERD0ON, en donde se apagar el led rojo (BCF PORTB,0; que har RB0=0) y encender el led verde (BSF PORTB,1; que har RB1=1). Si al hacer el test de RA0, ste es igual a 1, el interruptor estar abierto; en el programa se indica que debe saltar una lnea, por lo tanto se pasar a la lnea ROJO0ON, en donde se apagar el led verde (BCF PORTB,1), y se encender el rojo. Las direcciones que se le asignan a las etiquetas, se hacen de manera automtica. Por ejemplo, la etiqueta PREPAR, que est ubicada despus de los comentarios iniciales, tendr asignada la direccin 0, ya que se ubica inmediatamente despus de la directiva ORG 0. La etiqueta INICIO, se ubicar entonces en la direccin 4, ya que est cuatro instrucciones por debajo de PREPAR. Recuerda que ni los comentarios ni las directivas cuentan como instrucciones del programa en el microcontrolador. En la pgina siguiente, podrs observar la parte final de este programa, que sirve como una de las soluciones para activar los cuatro interruptores que manejan los ocho leds. Si no estuvo claro el comienzo, lee esto detenidamente INICIO 86 Continuacin del programa INICIO 87 2.5.- Ensamblaje del Programa Despus de editar el programa, o en los momentos que creas convenientes, debers guardar tu programa con un nombre luego un punto (.) y despus asm: nombre.asm. Te recomendamos que abras un subdirectorio en el directorio Mis documentos y guardes all los programas elaborados. Cuando hayas editado todo, proceders a ensamblar el programa. El programa que se present anteriormente, no presenta errores de codificacin. Sin embargo, t puedes intentar editarlo, y luego podrs proceder a ensamblarlo o codificarlo. Al ensamblar un programa, se generar un archivo objeto codificado en binario o hexadecimal, el cual ser el mismo que se grabar en la memoria del microcontrolador; este archivo tendr como nombre, el mismo del programa editado, pero con extensin .hex. Por ejemplo si al programa anterior le colocaste por nombre conmutador.asm, el archivo generado al compilar se llamar conmutador.hex. Por otro lado se generar un archivo de listado con todos los smbolos utilizados (conmutador.lst) y un archivo con los errores (conmutador.err), INICIO 88 Ensamblando el archivo editado Para ensamblar un archivo, debers seleccionar en Project y luego Quickbuilt nombre.asm: INICIO 89 Resultados del ensamblaje Si al final aparece la frase: BUILD SUSCCEEDED, significa Que ha sido exitosa la compilacin. INICIO 90 Archivos con errores Si algo sale mal, es decir, si hay errores al introducir las instrucciones, entonces habr que buscar el problema y solucionarlo. Si en tu programa no ha habido errores, te felicitamos, porque lo copiaste muy bien. En caso contrario, no te preocupes, porque te ayudaremos a encontrarlos. Primero volveremos a ensamblar el programa con errores intencionales. Fjate en esta seccin del programa: INICIO 91 Listado de errores Al tratar de ensamblar nuevamente, nos encontraremos con un error, tal como lo muestra la siguiente figura: INICIO Al aparecer la frase BUILD FAILED, indica que no se pudo realizar el ensambalje, debido a que hay uno o ms errores en el programa. 92 Encontrando los errores Una forma sencilla de encontrar en cul lnea se cometi el error, se logra al hacer doble clic en el error que queremos ver. Es posible que un error aparezca varias veces, ya que ste puede reflejarse en las lneas del programa que estn asociadas con ese problema. Hagamos doble clic en donde aparece el error y caemos en el programa fuente, en el cual podemos ver la indicacin que seala la lnea donde se produjo ese error. El error consiste en que no se ha definido previamente PUERTOA. Para solucionar esto, se deber colocar la variable PORTA, definida en P16C5X.INC o escribir previamente la directiva PUERTOA EQU 5, para indicar que el puerto A corresponde a la direccin 5 de la memoria de registros o RAM. Si hay ms errores en el programa, el procedimiento para hallarlos es el mismo. En la edicin de errores, se hace doble clic en la lnea correspondiente, donde aparece el error, luego te indicar dnde se produjo ste en el programa fuente. Trata de interpretar los mensajes dados, y corrige los errores en el programa. INICIO Indicacin de la lnea con error 93 2.6.- Simulacin Debemos asegurarnos que la herramienta MPLAB SIM est activada, para poder ejecutar la simulacin. Despus de ensamblar el programa, en la memoria ROM del MPLAB se encuentra el programa ensamblado. Podremos ver las memorias y registros en la simulacin al seleccionar en View, segn veremos en la pgina siguiente. Las ventanas las podemos colocar segn nuestra conveniencia. Corregiste todo? Es importante que lo hagas, y que te fijes bien, para dar el prximo paso. El prximo paso, consiste en la simulacin del programa. Esto significa que se debe revisar si hay errores de lgica, los cuales no se detectan al ensamblar el archivo. Una vez ensamblado el programa, procederemos a hacer la simulacin. Para ello, vamos a asegurarnos que el MPLAB tiene activada la simulacin. Nos colocamos en el men Debugger: INICIO 94 Ventanas para verificar el programa INICIO Registros Memoria de programa Registro de funciones especiales 95 Simulacin de las condiciones de entrada Ser tambin til, colocar un simulador de condiciones, para variar los valores en las lneas que corresponden al puerto A. Para ello se seleccionar en Debugger, Stimulus. Esta opcin slo aparecer, si ya ha sido seleccionada la herramienta de simulacin. A continuacin aparece la siguiente ventana. INICIO 96 Para asignar cada entrada Para asignar cada entrada, se har lo siguiente: 1. Presionar el botn Add Row 2. Presionar uno de los rectngulos blancos de la primera fila. Aparecer: INICIO 97 Explicacin de los estmulos INICIO Los terminales seleccionados y el tipo de accin, se podrn escoger en cada fila: Type. Indica si la entrada es sincrnica o asincrnica con respecto a los pulsos del reloj. Por lo general, para entradas externas se fija en Asynch (Asincrnico). Enable. Se utiliza para generar la accin en el terminal de entrada. Pin. Indica el terminal del microcontrolador que se va a utilizar para generar el estmulo: RA0, RA1, etc. Al presionar la flecha adyacente encontrars las opciones. Action. Determina el tipo de entrada que se va a colocar: High (cambia a 1), Low (cambia a cero), Toggle (cambia al estado opuesto cada vez que se presiona), Pulse (pulso que cambia momentneamente al estado opuesto y luego vuelve al inicial). High cicles. Nmero de ciclos en que la entrada se mantiene en uno, al aplicar un estmulo sincrnico. Low cicles. Nmero de ciclos en que la entrada se mantiene en cero, al aplicar un estmulo sincrnico. PC. Direccin numrica o smbolo en el cual ocurrir el estmulo. Invert. Si el smbolo de chequeo est activo, indica que se invertir el pulso si se est utilizando un estmulo sincrnico. Comments. Puedes indicar un comentario relacionado con el estmulo.
98 Asignacin de cada entrada T podrs aadir ms entradas de estmulo cada vez que presionas el botn Add Row. Cuando termines de colocar todos los estmulos con sus caractersticas, presionars Edit Complete y luego Save para guardar lo que hiciste. Despus de esto podrs comenzar la simulacin. Trata de colocar las entradas del puerto A como estmulo tipo toggle: INICIO 99 Ejecucin del programa Para ejecutar el programa, podrs seleccionar inicialmente la velocidad del microcontrolador, los puntos de parada y las opciones de trazado en Debugger y luego en Settings. Si no has seleccionado nada en Settings, al ejecutar el programa y mover adecuadamente las ventanas, encontrars lo siguiente: INICIO Ejecucin del programa
Detencin del programa
Paso que se ejecuta
Verificacin de estados
Estimulacin de entradas
Reinicio
Ejecucin paso a paso
Ejecucin animada 100 Revisin de resultados INICIO Los resultados no los podrs ver en el momento del aplicar los estmulos. Para observar los cambios, debers detener el programa. Tambin tienes la posibilidad de correr el programa paso a paso, para observar el comportamiento del mismo al ejecutarse cada instruccin, o al presionar F8. Al ejecutar en forma animada, se observa en el programa editado y en la memoria de programa, cmo se van ejecutando cada paso del programa. En este modo, al aplicar los estmulos no siempre obedecen. Esto se podr verificar en la lectura de los bits de los puertos. Despus de verificar que el programa se ejecuta correctamente, se deber proceder a grabar en la EPROM del microcontrolador. Si existe algn problema, entonces se deber revisar el programa, ya sea paso a paso o entre dos posiciones de la EPROM. 101 2.7.- Grabacin del Microcontrolador Despus de revisar cuidadosamente el programa, ahora se proceder a grabar el microcontrolador. Es importante tener un borrador de EPROM y el programador. Si no tienes el borrador de EPROM que consiste en una lmpara ultravioleta, entonces trabaja mejor con un PIC16F54 o un PIC16F84A. En el caso de no tener el programador, trata de comprarlo o hacer alguno de los que se proponen en la Internet. Para realizar este paso, supondremos que se dispone del programador PICSTART Plus. La ventaja de utilizar este programador, es que sirve para casi cualquier microcontrolador PIC, desde ocho terminales hasta cuarenta terminales. Si tienes una versin vieja del programador, podrs ir al anexo 7, en el cual se explican los pasos para actualizar el programador. El programador se conectar por medio de una fuente que trae el equipo, y el puerto de comunicacin serial disponible de una computadora personal. Para empezar, debers seleccionar en el MPLAB, el programador que vas a utilizar: INICIO 102 Seleccin del puerto de comunicacin serial Si se desea cambiar el puerto serial, como por ejemplo, el puerto 2, se deber escoger en Programmer, Settings, Comunications. Despus se selecciona el puerto serial deseado. INICIO 103 Equipo de Desarrollo PICSTAR Plus 1 Programador PICSTART Plus 2 Cable serial RS-232 (Interfaz con la Computadora) 3 Microcontroladores 4 Disco con software, manuales y notas de aplicaciones INICIO 104 Comenzando a Grabar INICIO Una vez que escogiste el puerto de comunicacin serial y tienes todo conectado, entonces colocars el microcontrolador en el conector del programador. Procederemos a llamar al programador en Programmer, Enable Programmer. Primero se verificar la comunicacin con el programador. Si todo est correcto, entonces aparecer la siguiente ventana: Chequeo si Leer Grabar Verificar Borrar est borrado memoria programa programacin memoria Flash 105 Cargando el programa a la computadora Si un programa ha sido recin ensamblado, en la ventana View, Program Memory, aparecer el programa en cdigo hexadecimal. En este caso ya todo estara listo para programar el microcontrolador. Suponiendo que antes de cargar el programa, queremos verificar si el microcontrolador est borrado, al presionar en , se podr hacer esta verificacin. En el caso de hacer una lectura del contenido de la memoria del microcontrolador, los datos se tranferiran a la ventana de la memoria del programa y se borra la del programa ensamblado. Para cargar nuevamente el programa ensamblado, se buscar en File, Import, Download To Memory... Luego se accede al archivo con el nombre con extensin .hex, el cual ha sido ensamblado anteriormente. INICIO 106 Estableciendo las condiciones de Hardware y grabacin en la memoria del microcontrolador INICIO Antes de programar nos fijaremos en la ventana inferior, la cual establece algunas condiciones del hardware del microcontrolador: De stas cambiaremos el Watchdog Timer a Off, ya que en nuestro programa, no hemos usado este temporizador. Por otro lado, debemos dejar el Code Protect en off, ya que si lo cambiamos, no podramos volver a regrabar el microcontrolador. Una vez realizado esto, se puede proceder a grabar. Para ello, simplemente se activar el botn , y se transfiere los datos a la EPROM del microcontrolador. Si se desea verificar que la grabacin fue correcta, se podr activar el botn . 107 Si no se dispone del microcontrolador PIC16C54 o un borrador de EPROM Si no puedes trabajar con el PIC16C54JW, ya sea porque no lo consigues en el mercado local, o porque no tienes la lmpara de luz ultravioleta, entonces podrs utilizar el PIC16F54, el cual es igual al PIC16C54, con la diferencia de que se puede regrabar sin necesidad de la lmpara de luz ultravioleta, gracias a su memoria de programa tipo FLASH. Otro microcontrolador PIC que puedes utilizar, haciendo pocas modificaciones, es el PIC16F84A que tambin contiene una memoria del tipo FLASH. Entre el PIC16C54 y el PIC16F84A hay compatibilidad de hardware, es decir que los terminales de conexin coinciden en ambos casos y por lo tanto no tienes que modificar el circuito. Otro detalle que hay en ambos microcontroladores, es la compatibilidad del software. A pesar de que el PIC16F84A es un microcontrolador de la gama media, el programa que editaste con el PIC16C54 puede ejecutarse sin problemas, ya que las instrucciones de los microcontroladores de la gama bsica son compatibles con los de la gama media. A pesar de esta compatibilidad, debers hacer las siguientes modificaciones para que puedas grabar correctamente al PIC16F84A: En el programa debers cambiar la directiva INCLUDE P16C5X.INC, por la directiva INCLUDE P16F84.INC, ya que vas a trabajar con el PIC16F84A. En el MPLAB debers seleccionar en Options, Development Mode y Processor al PIC16F84A. De esta manera al grabar con el MPLAB seleccionars los cdigos adecuados para este microcontrolador. Finalmente, debers reensamblar el programa, para generar los cdigos del PIC16F84. INICIO 108 Conexiones externas al microcontrolador Una vez que se ha grabado el microcontrolador, este dispositivo est listo para ser utilizado en un circuito. Como se vio en el captulo 1, las conexiones restantes a los puertos sern: Vdd voltaje de alimentacin positiva, cuyo valor continuo, puede estar comprendido entre 3V y 6V; Vss que corresponde al punto negativo de la fuente o comn; MCLR o inicializacin, que en operacin normal se deber conectar a Vdd; TOCKI, que es la base de tiempo del temporizador TMR0, y que se deber conectar a Vdd o a Vss en el caso de no utilizarse. Las otras dos lneas son OSC1 y OSC2, que se utilizan para conectar el circuito oscilador. Como primera prueba, se podr conectar el circuito, segn se muestra en la siguiente pgina. Al activar los interruptores, se deber observar el funcionamiento del circuito, tal como se program. En el caso de no ser as, se deber chequear las conexiones, y las tensiones en cada punto del circuito, observar si hay oscilacin en OSC1 y OSC2, y chequear si los leds no estn invertidos. En el caso de haber revisado todo, y el circuito sigue sin funcionar, consulta con tu profesor. INICIO 109 Circuito final
PIC16C54
18 17 16 15 14 13 12 11 10 5V 5V 1 2 3 4 5 6 7 8 9 5V 5V 8 Resistencias de 300 4 Resistencias de 4,7K 10K f680KHz 100 pF INICIO 110 Algunas Preguntas Para qu sirve la instruccin TRIS? Cules lneas se emplearon para entrada y cules para salida? Qu hace la directiva ORG? Qu hace la directiva EQU? Cul es la diferencia entre una directiva y una instruccin? Cunta corriente circulan por los leds, cuando ellos estn encendidos? Qu hace la instruccin BTFSS? Qu hacen las instrucciones BCF y BSF? En cules partes del programa se ejecutan saltos? Para qu sirve la directiva END? Por qu son importantes los comentarios en un programa? Entendiste la lgica del programa? Te atreveras a escribir nuevamente un programa que haga lo mismo, sin consultar este mdulo instruccional? Explcalo claramente. Comprendiste los pasos necesarios para programar a un microcontrolador? INICIO 111 2.8.- Reduciendo el programa Es posible reducir la cantidad de lneas de programa, para utilizar menor espacio en la memoria de programa. Para ello, se leer el puerto de entrada, y con la instruccin de rotacin. Se podr hacer la evaluacin bit por bit en un registro. Con este procedimiento, tambin se podr escribir los bits en el puerto de salida. Te recomendamos que antes de comenzar a interpretar el programa que se presenta en la siguiente pgina, analiza lo que realizan las siguientes instrucciones: MOVWF f MOVF f,d DECF f,d INCF f,d DECFSZ f,d INCFSZ f,d RRF f,d RLF f,d En las instrucciones RRF y RLF, el registro f rueda un bit hacia la derecha o hacia la izquierda respectivamente; sin embargo esto lo hace al travs de un noveno bit que se llama Carry (C) que se encuentra en el registro STATUS. Este registro guarda algunas condiciones despus de que se ejecutan ciertas operaciones, por ejemplo, si un resultado es igual a cero, en STATUS hay un bit Z, que se colocar en 1. De manera similar, si en el bit 0 de f hay un 1, al hacer la rotacin a la derecha, el bit C del STATUS, se colocar en 1. INICIO 112 Programa reducido para la lectura de interruptores INICIO 113 2.9.- Advertencia para un vehculo Te recomendamos que analices, edites, ensambles y simules el programa que se present anteriormente. Vers que har lo mismo que el primer programa. Nota que en este programa se utiliza algunas posiciones de la RAM, en la que se guarda los valores temporales del puerto A, puerto B y el contador de ciclos. A continuacin, se presentar un programa que indicar ciertas condiciones de advertencia para un vehculo. Para ello te recomendamos que estudies y analices las siguientes instrucciones: ANDWF f,d ANDLW K IORWF f,d IORLW K XORWF f,d XORLW K COMF f,d NOP Recordando las funciones lgicas que se efectuar en cada bit de ndice n de los registros W y F: AND IOR XOR COM Donde: n [ Posicin de bit f [ Direc. de RAM w [ Reg de trabajo d [ Destino (w o f) INICIO 114 Descripcin del Problema Se desea hacer un circuito que indique seales de advertencia para un vehculo de dos puertas. Las advertencias se darn segn se cumplan las condiciones siguientes: Condicin 1: El motor est encendido y alguna de las puertas est abierta. Se utilizar la lnea RA0 para sealar esta condicin. Condicin 2: El motor est encendido y el cinturn de seguridad del conductor est desabrochado. Se utilizar la lnea RA1 para indicar esta condicin. Condicin 3: El motor est apagado y las luces estn encendidas. Se utilizar la lnea RA2 para sealar esta condicin. Condicin 4: El motor est apagado, la puerta del conductor abierta y la llave de encendido puesta. Se utilizar la lnea RA3 para indicar esta condicin. Advertencia General: Si ocurre cualquiera de las condiciones anteriores. Se tomar la lnea RB7 para sealar esta condicin. Cada condicin se mostrar por medio de un indicador luminoso (Led) y la advertencia general se dar por medio de una seal sonora. Se dispone de seis detectores tipo pulsador, que detectan las seales de entrada y sern conectadas a cada lnea de entrada del puerto B. La lgica de los detectores se dar de la siguiente manera: Motor: Indica un 1 si ste est encendido, se conectar a RB0. Pcond (puerta del conductor): Indica un 1 si sta est abierta, se conectar a RB1. Pacom (la otra puerta): Indica un 1 si sta est abierta, se conectar a RB2. Cintu (cinturn de seguridad): Indica un 1 si est desabrochado, se conectar a RB3. Luces: Indica un 1 si estn encendidas, se conectar a RB4. Llave: Indica un 1 si est colocada, se conectar a RB5. INICIO 115 Circuito y Ecuaciones Lgicas De acuerdo a la descripcin del problema, te proponemos como actividad, que dibujes el circuito del microcontrolador, con los detectores y las luces de advertencia.
Las ecuaciones lgicas para cada condicin de advertencia, segn el problema planteado, se podrn colocar de la siguiente manera:
Donde RAn son las lneas que corresponde al puerto A y RBn son las lneas que corresponden al puerto B. INICIO 116 Lgica del Programa En un primer intento, la lgica a utilizar en este programa, consiste en asignar un registro a cada entrada, y luego hacer las operaciones lgicas correspondientes, para colocar los resultados en registros que correspondan a cada solucin. Esto implica que hay que tomar la lectura de las lneas RB0 hasta RB5, y asignar las condiciones al bit menos significativo de cada uno de los registros correspondientes. Los resultados, se colocarn en el bit menos significativo de cada registro. Vase a continuacin, la asignacin de etiquetas en el programa:
INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC
MOTOR EQU 10 ;MOTOR PCOND EQU 11 ;PUERTA DEL CONDUCTOR PACOM EQU 12 ;PUERTA DEL ACOMPAANTE CINTU EQU 13 ;CINTURON DE SEGURIDAD LLAVE EQU 14 ;LLAVE DE ENCENDIDO LUCES EQU 15 ;LUCES COND1 EQU 16 ;CONDICION 1 COND2 EQU 17 ;CONDICION 2 COND3 EQU 18 ;CONDICION 3 COND4 EQU 19 ;CONDICION 4 ALGEN EQU 1A ;ALARMA GENERAL
Nota: Es muy importante que las direcciones asignadas a cada etiqueta, no coincidan con las reservadas para cada uno de los registros de propsitos especiales del microcontrolador. INICIO 117 CONSIDERANDO UN PROGRAMA MODULAR La forma en la cual se present las posiciones de los registros es completamente vlida. Sin embargo, te recomendamos que te acostumbres a hacer mdulos de subrutina, de manera que con pocos cambios, lo puedas utilizar sin problemas en otros programas. Para ello, en cada subrutina se especificar la longitud del programa, la direccin de arranque, la cantidad de registros utilizados y la posicin de referencia de estos registros. Si te acostumbras a hacer esto, entonces podrs hacer mdulos que utilizaras luego sin mucha dificultad. Para ello te proponemos que especifiques los registros de la manera siguiente:
MOTOR EQU 10 ;MOTOR PCOND EQU MOTOR+1 ;PUERTA DEL CONDUCTOR PACOM EQU MOTOR+2 ;PUERTA DEL ACOMPAANTE CINTU EQU MOTOR+3 ;CINTURON DE SEGURIDAD LLAVE EQU MOTOR+4 ;LLAVE DE ENCENDIDO LUCES EQU MOTOR+5 ;LUCES COND1 EQU MOTOR+6 ;CONDICION 1 COND2 EQU MOTOR+7 ;CONDICION 2 COND3 EQU MOTOR+8 ;CONDICION 3 COND4 EQU MOTOR+9 ;CONDICION 4 ALGEN EQU MOTOR+0A ;ALARMA GENERAL
En este caso, sabremos que la cantidad de registros utilizada es de 11, y que la posicin de referencia es MOTOR, que ocupa la posicn 10H. INICIO 118 Otra forma de nombrar bloques de constanes Otra manera que puedes utilizar para nombrar las etiquetas de tu programa en un bloque, es la siguiente:
La directiva cblock asigna un bloque de constantes, a partir de un valor especfico, es decir que en el caso anterior se define la etiqueta MOTOR con el valor 10h, y a continuacin a PCOND se le asigna el valor 11h, y as sucesivamente. Como podrs observar sta es una manera ms sencilla de asignar valores a un bloque de constantes. La directiva endc indica la finalizacin de la lista de constantes, es decir que la ltima de ellas es ALGEN. INICIO 119 Asignacin de detectores a registros INICIO 120 Asignacin de advertencias INICIO 121 Condicin de Alarma General El programa presentado, es una de las formas de solucionar este problema. En la siguiente pgina, se presenta otro programa, mucho ms corto y que utiliza menos registros. La lgica que se utiliz, se basa en asignar las operaciones lgicas en forma paralela, es decir, que cada condicin se manifiesta en un bit de una palabra. Deber notarse que en todas las operaciones est involucrada la variable MOTOR, por lo que se aprovecha esto, para simplificar ms el programa. INICIO 122 Una alternativa ms eficiente La lgica se basa en s, en que hay dos operadores: OPER1, donde se colocar las condiciones del motor y OPER2, donde se asignarn las otras condiciones. Para ello, en el bit 0 se coloca la condicin 1, en el bit 1 la condicin 2 y as sucesivamente. Luego se escribe la condicin inicial 0011 a OPER1, que asignar una suposicin de que el motor est encendido. En el caso de detectarse que est apagado, se inviertir esta condicin. OPER1 (Motor): Motor Motor Motor Motor OPER2 (Otros): (Llave. Pcond) Luces Cintu (Pcond+Pacom) Condicin4 Condicin3 Condicin2 Condicin1 ; COMIENZO DEL PROGRAMA ; ; ASIGNACIONES DE VARIABLES ; OPER1 EQU 10 ; OPERADOR 1 SE UTILIZARA PARA COLOCAR LAS CONDICIONES ; DEL MOTOR OPER2 EQU OPER1+1 ; EL OPERADOR 2 SE UTILIZARA PARA COLOCAR LAS OTRAS ; CONDICIONES
INCLUDE "P16C5X.INC" ; INCLUYE ETIQUETAS DE P16C5X.INC
ORG 0 PREPAR CLRW ; EL PUERTO A SERA UTILIZADO COMO ENTRADA TRIS PORTA MOVLW 7F ; RB7 SERA UTILIZADO COMO SALIDA Y EL RESTO TRIS PORTB ; DE LOS BITS DEL PUERTO B SERAN ENTRADAS
INICIO 123 INICIO Programa de advertencia reducido 124 2.10.- Control de leds por medio de pulsadores En este ejemplo se har lo mismo que en el caso de la lectura de los interruptores, pero se utilizar pulsadores para encender los leds de manera alterna. Se deber considerar el efecto de rebote del pulsador, el cual consiste en que al accionarlo, sus contactos rebotan varias veces antes de lograr permanecer en su estado estable; el tiempo de duracin del efecto de rebote, podr estar entre 5 y 25 mSeg dependiendo de la calidad y el tipo del pulsador. En otras palabras, se deber hacer la lectura de los conmutadores por lo menos cada 25 mSeg. El programa a realizar, entonces deber leer el estado del pulsador. En el caso de que ste se haya presionado, se deber encender el led que estaba apagado, y apagar el que estaba encendido en el canal correspondiente, adems se deber esperar un tiempo de aproximadamente 25 mSeg, para efectuar la siguiente lectura. El circuito, entonces deber constar de cuatro entradas y ocho salidas, de manera similar que en el caso de los interruptores. INICIO 125 Circuito utilizado para leer pulsadores De acuerdo a lo establecido anteriormente, se deber escoger un microcontrolador que tenga al menos doce lneas para puertos de entrada-salida. Una eleccin posible, podra ser el PIC16C54, ya que tiene doce terminales de entrada-salida. Las conexiones se presentarn a continuacin, en donde se escoger al puerto A como entrada (4 bits) y el puerto B como salida (8 bits). Vss PIC 16C54 INICIO 126 Comienzo del Programa El programa que se presenta a continuacin, se utilizar para detectar el estado de uno de los pulsadores. Como siempre, el programa deber empezar con comentarios que den suficiente informacin acerca del programa que se va a realizar. ; ; ; PROGRAMA PARA LA LECTURA DE PULSADORES ; ; ; Este programa se utilizar en un circuito con cuatro pulsadores de entrada y ; ocho indicadores a la salida, de los cuales cuatro sern de color rojo, y cuatro ; sern de color verde. ; ; Longitud del programa 82 (51h) palabras. Direccin de inicio del programa 0H ; Cantidad de registros 2. Posicin de referencia PBANTES direccin 10h ; ; Cada pulsador estar asociado con dos indicadores de diferente color, y ; al presionarlo, deber cambiar el encendido, de uno a otro. En condiciones iniciales, ; debern encender los indicadores de color rojo. ; ; Se tomar el puerto A como entrada para los pulsadores. ; Un "1" determinar que el pulsador est abierto ; Un "0" determinar que el pulsador est presionado ; ; El puerto B se utilizar como salida ; Los terminales pares se conectarn a los leds rojos ; Los terminales impares se conectarn a los leds verdes INICIO 127 Preparacin y deteccin INCLUDE "P16F84.INC" ; ESTA DIRECTIVA INDICA QUE SE ASIGNARA VALORES ; NUMERICOS A CADA UNO DE LOS REGISTROS DE FUNCIONES ; ESPECIALES Y LOS BITS DEL REGISTRO STATUS
PBANTES EQU 10 ; INDICA EL ESTADO ANTERIOR DEL PUERTO B STTUSPA EQU PBANTES + 1 ; INDICA EL ESTADO DE LOS BITS LEIDOS EN EL PUERTO A
ORG 0 PREPAR MOVLW 0F TRIS PORTA ; PUERTO A SERA ENTRADA CLRW TRIS PORTB ; PUERTO B SERA SALIDA MOVLW 55 MOVWF PORTB ; SE ALTERNAN 1 Y 0 EN LAS LINEAS DE SALIDA DEL PUERTO B CLRF PBANTES ; PALABRA DE ESTATUS QUE INDICA EN CADA GRUPO QUE LOS ; LEDS ROJOS ESTAN ENCENDIDOS Y LOS VERDES APAGADOS CLRF STTUSPA ; PALABRA DE CONTROL PARA MANTENER VALOR EN LA ENTRADA
INICIO BTFSS PORTA,0 ; CONDICION BIT 0 DEL PUERTO A: SI ES 1 => PULSADOR NO PRESIONADO GOTO CAMBIO0 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 0 BCF STTUSPA,0 ; PONE UN 0 PARA MANTENER CONDICION MIENTRAS SE PRESIONA PULSADOR GRUPO1 BTFSS PORTA,1 ; CHEQUEA CONDICION BIT 1 DEL PUERTO A GOTO CAMBIO1 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 1 BCF STTUSPA,1 GRUPO2 BTFSS PORTA,2 ; CHEQUEA CONDICION BIT 2 DEL PUERTO A GOTO CAMBIO2 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 2 BCF STTUSPA,2 GRUPO3 BTFSS PORTA,3 ; CHEQUEA CONDICION BIT 3 DEL PUERTO A GOTO CAMBIO3 ; SI ES CERO HACE EL CAMBIO EN EL GRUPO 3 BCF STTUSPA,3 SIGCICL CALL RETARDO ; LLAMA RUTINA DE RETARDO PARA ESPERAR TIEMPO DE REBOTE GOTO INICIO INICIO 128 Cambio de estado en dos de los grupos INICIO 129 Eliminacin del Rebote El programa se repite en forma similar para los otros dos grupos. Intenta t terminar lo que falta del programa. Finalmente queda por editar el retardo. Para ello, se asumir que el oscilador del microcontrolador, produce una frecuencia de 4MHz, lo cual quiere decir que el perodo es igual a 0,25Seg. Si una instruccin se ejecuta en cuatro perodos del oscilador, significa que el tiempo de duracin de una instruccin es de 1Seg. Para eliminar el rebote, se podr esperar un tiempo de 30mSeg, es decir que se necesitara ejecutar 30.000 instrucciones. Esto se puede hacer mediante lazos repetitivos, como el que se muestra a continuacin, que corresponde a la instruccin siguiente despus de la ltima escritura al puerto B: INICIO 130 En el siguiente ejemplo, se muestra cmo realizar la suma binaria de dos nmeros de 4 bits que se leen en el puerto B. Trata de aprender a utilizar las siguientes instrucciones: 2.11.- Ejemplo de un programa para sumar INICIO ADDWF f,d SUBWF f,d CALL K RETLW K CLRF SWAPF f,d 131 Programa SUMABYTE ; SUMABYTE ; ; Programa que suma dos nmeros de 8 bits. Los sumadores se encuentran ; en PORTB, luego se ubican en las posiciones 8h y 9h en la memoria de datos. ; El resultado se guardar en la posicin 0Ah y sale por PORTA PREPAR CLRW ; SE ASUME PORTB COMO ENTRADA Y SE PROGRAMA PORTA TRIS PORTA ; COMO SALIEA INICIO MOVF PORTB,W ; EL CONTENIDO DE PORTB VA A W ANDLW 0F ; SE TOMAN LOS 4 BITS MENOS SIGNIFICATIVOS MOVWF 8 ; SE GUARDA VALOR EN LA POSICIN 8H MOVF PORTB,W ; SE VUELVE A LEER EL PUERTO B ANDLW OFO ; SE TOMAN LOS 4 BITS MAS SIGNIFICATIVOS MOVWF 9 ; SE GUARDA VALOR EN LA POSICIN 9H SWAPF 9,F ; EL VALOR SE COLOCA EN CALL SUMABYTE MOVF 0A,W MOVWF PORTA GOTO INICIO ; VA AL INICIO DEL PROGRAMA SUMABYTE MOVF 8,W ; Mueve Sumador ubicado en la posicin 8 a W ADDWF 9,W ; Suma valor de la posicin 9 con W, resultado a W MOVWF 0A ; El resultado se guarda en la posicin 0A RETLW 0 ; Retorno con W = 0 END INICIO 132 Resta de dos nmeros Este ejemplo es similar al anterior. Sin embargo, hay que tomar en cuenta que la operacin restar en un microprocesador, se hace por medio de una suma, en donde el valor negativo se complementa a dos, es decir, se complementa en 1 (se cambia unos por ceros y viceversa) y luego se le suma 1. ; ; RESTABYTE ; ; Programa que resta dos nmeros de 8 bits ; Los valores se encuentran ubicados en las posiciones minuendo (8h) ; y sustraendo (9h) en ;la memoria de datos. ; El resultado se guardar en la posicin 0Ah ;
MINUENDO EQU 8 ; Posicin del minuendo SUSTRAENDO EQU 9 ; Posicin del sustraendo RESULTADO EQU 0A ; Posicin del resultado ORG 50 ; Direccin del comienzo del programa 50h RESTABYTE MOVLW 5 ; Asigna el valor 5 a W (Registro de trabajo) MOVWF MINUENDO ; El valor 5 pasa al minuendo MOVLW 3 ; Asigna el valor 3 a W MOVWF SUSTRAENDO ; El valor 3 pasa al sustraendo MOVF SUSTRAENDO,W ; El valor del sustraendo pasa a W SUBWF MINUENDO,W ; Resta MINUENDO SUSTRAENDO, ; resultado en W MOVWF RESULTADO ; El resultado se guarda en la posicin 0A
END ;Finalizacin del programa INICIO 133 Trata de hacerlo t En el siguiente ejemplo se propone hacer el control de cuatro semforos en una interseccin de dos vas. Los semforos tienen cruces a la izquierda en cada esquina. Se asume que los tiempos de duracin sern los que se muestran en la tabla anexa:
Esquinas1 y 3 Esquinas 2 y 4 Duracin Rojo y Verde cruce Rojo 8 segundos Verde Rojo 20 segundos Amarillo Rojo 3 segundos Rojo Rojo y Verde cruce 8 segundos Rojo Verde 25 segundos Rojo Amarillo 3 segundos 1 2 3 4 INICIO 134 ACTIVIDADES A REALIZAR Hasta este punto hemos visto los pasos necesarios para realizar programas, simulaciones y prototipos con microcontroladores desde un punto de vista muy bsico. Algunas de las actividades que puedes realizar, para complementar este tema, son las siguientes: 1.- Edita, compila y simula los programas que se han explicado en este tema. 2.- Graba un microcontrolador PIC16C54JW, PIC16F54 o PIC16F84 con los programas que se proponen como ejemplos y monta los circuitos para verificar el funcionamiento. 3.- Hacer un circuito con un microcontrolador, que detecte una clave secreta de 8 bits. El usuario introducir un valor binario en uno de los puertos y, por medio de un pulsador, har vlido el cdigo de entrada. Si el cdigo falla tres veces seguidas, se deber inhibir el circuito por un perodo de dos minutos. En el caso de que el cdigo sea correcto, se deber activar una luz indicadora. 4.- Hacer un contador binario de 8 bits, con dos pulsadores de entradas, que permita que cuente en forma ascendente o descendente, de acuerdo al pulsador que se presione. INICIO 3.1- Organizacin de las memorias del PIC 16C54: 3.2.- Organizacin de la memoria de programa del PIC16C54: 3.3.- Organizacin de la memoria de datos del microcontrolador PIC 16C54: 3.4.- Registro STATUS 3.5.- Registros INDF y FSR, Modo de acceso indirecto 3.6.- Registro contador de programa PC 3.7.- Registro STACK (pila) 3.8.- Puertos de Entrada y Salida 3.9.- Registro OPTION 3.10.- Temporizador contador 3.11.- Temporizador WDT (Perro Guardin)
TEMA 3 MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y TEMPORIZADORES
CONTENIDO INICIO 136 Objetivos Terminales: Describir los registros de funciones especiales del microcontrolador PIC16C54. Mencionar la utilidad de los temporizadores en los microcontro- ladores. TEMA III: MEMORIA DE PROGRAMA, REGISTROS, PUERTOS Y TEMPORIZADORES INICIO 137 Memoria de Datos Memoria de Programa Se almacenan todas las instrucciones del programa de control. El tamao de esta memoria es de 512 palabras. Los datos que manejan los programas varan continuamente y esto exige que la memoria que los contiene, debe ser de lectura y escritura, por lo que la memoria RAM esttica (SRAM) es la ms adecuada, aunque sea voltil. Para entender un poco ms las instrucciones, hace falta conocer la organizacin de la memoria, cules son los registros especiales, dnde se ubican, y cules son los registros de propsitos generales. Poco a poco se ir incluyendo ejemplos con otras nuevas instrucciones en donde se observar cmo stas influyen, tanto en los diferentes registros como en el funcionamiento del microcontrolador. La memoria del PIC16C54 se organiza en dos tipos: 3.1- Organizacin de las memorias del PIC16C54 INICIO 138 El PIC16C54, tiene un contador de programa (PC) de 9 bits, capaz de ubicar al programa, en una de las 512 direcciones del espacio de memoria que se utiliza la palabra de 12 bits. PC<8:0> NIVEL DE PILA 1 NIVEL DE PILA 2 MEMORIA DE PROGRAMA VECTOR DE INICIALIZACIN 000h 0FFh 100h 1FFh Espacio para memoria del usuario CALL, RERLW 9 Memoria de programa del PIC16C54 3.2.- Organizacin de la memoria de programa del PIC 16C54 INICIO 139 La memoria de datos est organizada por registros de un byte de extensin, contenidos en una RAM. Los registros se dividen en dos grupos: Registros de funciones especiales Registros de propsitos generales Estos incluyen: El registro STATUS (Estado) El Registro FSR (Registro apuntador de direcciones de la RAM). El PCL (Contador de programa) Los registros PORTA y PORTB (puertos de entrada y salida) El Registro TMRO (Temporizador)
Se utilizan para guardar informacin de datos y control por medio de las instrucciones del programa. 3.3.- Organizacin de la memoria de datos del microcontrolador PIC 16C54 INICIO 140 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh 10h 1Fh REGISTROS DE PROPSITOS GENERALES MEMORIA DE DATOS DEL PIC16C54 (1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est contenida en el registro FSR. INICIO 141 a.- Registro de propsitos generales: Los registros de propsitos generales, son aqullos donde se guardan los datos de los programas de aplicacin. Ellos se pueden acceder de manera directa por medio de la direccin f en una instruccin, o de manera indirecta, a travs del registro FSR o registro apuntador de direcciones.
b.- Registros de funciones especiales: Estos registros los usa la CPU y los perifricos para el control de la operacin del microcontrolador. Debes tener cuidado de no utilizar un registro de funcin especial, como un registro de propsito general, ya que en los registros de funciones especiales se asigna un control especfico, que puede estar relacionado con el hardware del microcontrolador o el control del programa. En la siguiente tabla se representa un resumen de las funciones de estos registros. Tipos de Registros INICIO 142 Funcin de cada bit de los registros de funciones especiales Nota: x significa cualquier cosa y u significa no cambia Valor despus Valor despus Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB) 1111 1111 1111 1111 N/A OPTION Contiene los bits de configuracin del escalamiento, TMRO y WDT --11 1111 --11 1111 00h INDF Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx uuuu uuuu 01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu 02h
PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111 03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx 04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx 05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu 06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu INICIO 143 Est ubicado en la direccin 03h, en la memoria de datos, y contiene los bits de estado de la Unidad Lgica y Aritmtica y el estado de la inicializacin (RESET). El registro STATUS puede ser el destino para una instruccin, como cualquier otro registro. Si este registro es el destino de una instruccin que afecta los bits C (acarreo), DC (acarreo decimal) o Z (cero), entonces la escritura de estos tres bits es inhibida, es decir, estos bits se establecern de acuerdo a la lgica del dispositivo.
Por otro lado, los bits TO (Tiempo de espera) y PD (Reposo) no se pueden escribir.
A continuacin se presentarn los bits del registro STATUS (direccin: 03h). 3.4 Registro STATUS INICIO 144 R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin. Bit 7-5: PA2 PA0: No se usan para el PIC16C54 Bit 4: TO: Bit Tiempo de espera. 1 = Al encender la alimentacin o con las instrucciones CLRWT o SLEEP. 0 = Al haber un desbordamiento en el registro WDT. Bit 3: PD: Bit Reposo. 1 = Al encender la alimentacin o con las instrucciones CLRWT. 0 = Al ejecutar la instruccin SLEEP. Bit 2: Z: Bit cero. 1 = El resultado de una operacin lgica o aritmtica es cero. 0 = El resultado de una operacin lgica o aritmtica es diferente de cero. Bit 1: DC: Bit de acarreo/dbito de dgito (instrucciones ADDWF o SUBWF). ADDWF 1 = Ocurre un acarreo en el cuarto bit del resultado (se excede el valor 0Fh). 0 = No ocurre un acarreo en el cuarto bit del resultado. SUBWF 1 = No ocurre un dbito en el cuarto bit del resultado. 0 = Ocurre un dbito en el cuarto bit del resultado. R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x PA2 PA1 PA0 TO PD Z DC C bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 INICIO Bits del Registro STATUS 145
Bit 0: C: Bit de acarreo/dbito (instrucciones ADDWF, SUBWF, RRF o RLF). ADDWF 1 = Ocurre un acarreo. 0 = No ocurre un acarreo. SUBWF 1 = No ocurre un dbito. 0 = Ocurre un dbito.
RRF: Toma el valor del bit menos significativo (LSb) del registro f. RLF: Toma el valor del bit ms significativo (MSb) del registro f.
El bit C o bit de acarreo (Carry) INICIO 146 Programa para incrementar un contador BCD Un programa tpico es el de un contador BCD. ste, a diferencia de los contadores binarios, presentan la salida en cdigo BCD, de manera que pueda ser fcilmente llevado a una presentacin decimal. El programa que se presenta a continuacin, cada vez que es llamado, incrementa un contador cuya salida es de cdigo BCD. Para ello se utilizan los bits DC y C del registro STATUS.
INCLUDE "P16C5X.INC" CONT EQU 0X10 ; En CONT se encuentra el contador BCD
org 0 clrf CONT ; Se hace CONT igual a 0 Increm incf CONT,F ; Se incrementa CONT en 1 movlw 6 ; Se hace el ajuste a BCD addwf CONT,W ; suma 6 para correccin digito 0 btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0 movwf CONT ; corrige si hay acarreo digito 0 movlw 60 addwf CONT,W ; suma 60 para correccin digito 1 btfsc STATUS,C ; corrige si hay acarreo digito 1 movwf CONT goto Increm end INICIO 147 El registro INDF no es un registro fsico; si se accede al registro INDF, se coloca en el registro cuya direccin est contenida en el registro FSR, es decir, que FSR es un apuntador de direcciones. Ejemplo de cmo utilizar los registros INF y FSR: La siguiente seccin de programa, permite borrar los registros ubicados desde la direccin 10h hasta la 1Fh. Una forma de realizar esto es por medio del modo de acceso indirecto. MOVLW 0X10 ; Inicializacin del apuntador de la RAM MOVWF FSR ; El Registro FSR toma el valor 10h Prximo CLRF INDF ; Borra registro cuya direccin est en FSR INCF FSR, F ; Incremento del apuntador BTFSS FSR,5 ; Borrado completo? (Examina bit 5 de FSR) GOTO Prximo ; No, borra siguiente 3.5 Registros INDF y FSR, Modo de acceso indirecto INICIO 148 Cuando una instruccin es ejecutada, el contador de programa (PC) contendr la direccin de la prxima instruccin a ejecutarse. El valor del PC se incrementa en uno por cada ciclo de instruccin, al menos que la instruccin cambie el valor del PC. Para una instruccin GOTO, los bits 8 a 0 del PC se incluyen en dicha instruccin. El registro PCL toma los bits 7 a 0. Vase figura a continuacin: 8 7 0 PC PCL Palabra de Instruccin PIC16C54 3.6 Registro contador de programa PC INICIO 149 Para una instruccin CALL, o alguna instruccin donde el PCL es el destino, los bits 7 a 0 del PC se obtienen del cdigo de la instruccin. Sin embargo, el bit 8 del PC no viene del cdigo de la instruccin, sino que es puesto en cero.
Algunas de las instrucciones donde el PCL es el destino, o se le modifica el contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la direccin del PCL es la 2
8 7 0 PC PCL Palabra de Instruccin PIC16C54 Inicializacin A 0 INICIO 150 Saltos de direccin del programa A lo largo de este mdulo instruccional, hemos visto algunos ejemplos en los que se ejecutan algn cambio en la direccin del programa. Recordemos que estas instrucciones son las nicas que duran dos ciclos de mquinas, es decir, que se demoran en ejecutar el doble de las otras instrucciones. Veamos algunos ejemplos de saltos de direccin del programa:
BTFSS REG0,3 ; Chequea el bit 3 de REG0 si es 1 salta una instruccin BTFSC STATUS,C ; Chequea el bit de acarreo del estatus, salta si es 0 GOTO FINAL ; Salto incondicional a la direccin final, el salto corresponde a 9 bits CALL MULT ; Ejecuta la rutina MULT, el salto corresponde a 8 bits RETLW 0 ; Retorno de subrutina, la direccin del STACK va al PC MOVWF PCL ; El contenido de W va a los 8 bits menos significativos del PC ADDWF PCL,F ; Se suma W + PCL y el resultado va al PC XORWF PCL,F ; Se hace el exor entre PCL y W y el resultado modifica al PC BCF PCL,2 ; Coloca en 0 el bit 2 del PC
Otras instrucciones que ejecutan cambios en el PC son: ANDWF PCL,F; IORWF PCL,F; COMF PCL; BSF PCL,1; RRC PCL,F; RLC PCL, F; INCF PCL,F; DECF PCL,F; INCFSZ PCL,F; DECFSZ PCL,F; CLRF PCL; SWAPF PCL,F; etc.
INICIO 151 El registro STACK guarda las direcciones de retorno de las rutinas que se llaman por medio de la instruccin CALL, y carga la direccin de retorno al PC con la instruccin RETLW. la longitud de palabra de la pila es la misma que la del PC. La pila tiene dos niveles: Una instruccin CALL coloca el contenido del nivel 1 de la pila, en el nivel 2 y luego coloca el valor del contador del programa actual, incrementando en uno, en el nivel 1 de la pila. Si se llama a ms de dos subrutinas en una misma secuencia, nicamente las direcciones de las dos ms recientes sern almacenadas. Una instruccin RETLW, cargar el contenido del nivel 1 de la pila al PC y el del nivel 2 al nivel 1. Si ms de dos instrucciones RETLW se ejecutan, la pila se llenar con la direccin almacenada previamente en el nivel 2, y podra dar problemas en el programa.
NOTA: Al utilizar la instruccin RETLW, el registro W se cargar con el valor literal en la instruccin. Esto es til para la construccin de tablas de conversin con la memoria de programa. 3.7 Registro STACK (pila) INICIO 152 Convertidor BCD a 7 Segmentos Este es un programa tpico que utiliza una tabla de conversin BCD a 7 segmentos. Bsicamente se coloca el valor a convertir en el registro W, y se utiliza este valor para sumrselo al PC, luego se regresa W con el valor convertido en 7 segmentos. Para esta rutina, se asume que un 1 significa que el valor del segmento es activo, lo cual se usa en indicadores del tipo ctodo comn. El bit menos significativo (RB0) corresponde al segmento a.
include "P16C5X.INC" valorBCD equ 10 org 0 INICIO movf valorBCD,w ; el valor BCD a convertir se lleva a W call BCD7SEG goto INICIO BCD7SEG ; rutina de conversion BCD a 7 segmentos addwf PCL,f ; El valor BCD se suma al contador de programa ; en el retorno se convierte en 7 segmentos retlw b'00111111' ; 0 retlw b'00000110' ; 1 retlw b'01011011' ; 2 retlw b'01001111' ; 3 retlw b'01100110' ; 4 retlw b'01101101' ; 5 retlw b'01111101' ; 6 retlw b'00000111' ; 7 retlw b'01111111' ; 8 retlw b'01101111' ; 9 end INICIO
a (RB0) f (RB5) b (RB1) g (RB6) e (RB4) c (RB2) d (RB3)
153 Los puertos de entrada y salida pueden ser ledos y escritos como cualquier registro de datos por medio de las instrucciones de programa. Sin embargo, una instruccin de lectura (por ejemplo MOVF PORTB, W) leer los terminales de los puertos, independientemente si ellos estn programados como entrada o salida. Despus de una inicializacin, todos los puertos se definen como entrada (alta impedancia), ya que los registros de control TRISA y TRISB son puestos en 1.
Puerto A: El puerto A es un registro de 4 bits (PORTA), los bits que se utilizan son los menos significativos (RA3:RA0). Los bits 7-4 se leen como ceros.
Puerto B: El puerto B es un registro de entrada-salida de 8 bits (PORTB<7:0>).
3.8 Puertos de Entrada y Salida INICIO 154 Los registros de control de puertos, son cargados con el contenido del registro W, al ejecutar la instruccin TRIS F. Un 1 en un bit del registro TRIS, coloca el adaptador del terminal correspondiente en modo de alta impedancia o entrada. Un 0 en ese bit, coloca el adaptador de ese terminal como salida.
NOTA: Una lectura de los puertos, lee los terminales de los puertos de salida, y no la salida que ha sido enviada. Esto significa que si una salida de un terminal es habilitada para tener un 1 y en el sistema externo, este terminal es forzado a un nivel bajo, la lectura del puerto indicar que en el terminal correspondiente habr un cero. Los registros TRIS, son registros de escritura solamente, y son colocados en 1 despus de una inicializacin (RESET todas las lneas de los puertos quedarn programados como entradas). Los registros TRIS no tienen una direccin asignada en los microcontroladores de la gama bsica. Sin embargo en los microcontroladores de la gama media si tienen una direccin asignada, y por lo tanto, en ellos no se recomienda utilizar la instruccin TRIS. Registro de control de puerto TRIS INICIO 155 Cada terminal de un puerto, puede ser utilizado como entrada o salida. Para operaciones de entrada, estos puertos no guardan la condicin. El nivel de entrada debe permanecer hasta que la instruccin de lectura se ejecute (por ejemplo MOVF PORTB, W). En el caso de las salidas, las lneas mantienen su nivel hasta que haya una nueva instruccin de escritura en el puerto. Para usar un terminal como salida, la direccin correspondiente del bit de control en TRISA o TRISB, debe colocarse en cero. Para usar este terminal como entrada, el bit correspondiente en el registro TRIS debe colocarse en uno.
Cualquier lnea de un puerto, puede programarse individualmente como entrada o salida.
El circuito equivalente para cada lnea de un puerto, es el que se muestra a continuacin: Interfaces de Entrada y Salida INICIO 156 Registro Tipo D Q D Q CK Bus de Datos Escribe en puerto Registro TRIS Q D Q CK Registro W TRIS f Inicializacin Lee de Puerto P N Vss terminal de Entrada/Salida Vdd INICIO 157 La siguiente tabla presenta un resumen de la posicin de las lneas en cada uno de los puertos: Nota: x significa cualquier cosa y u significa no cambia INICIO N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111 05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu 06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu Valor despus Valor despus Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR 158 Escritura en un Indicador 7 segmentos RB0 RB1 RB2 PIC 16C54 RB3 RB4 RB5 RB6 En el registro W se encuentra el cdigo 7 segmentos que se va a escribir en el indicador numrico. La instruccin: MOVWF PORTB ; Lleva el contenido de W al puerto B. Previamente se debe programar al puerto B como salida con la instruccin TRIS PORTB. INICIO 159 Escritura en Dgitos Multiplexados
RA0 RA1 RA2 RA3
PIC16C54 RB0 RB1 RB2 RB3 RB4 RB5 RB6 La siguiente figura muestra una configuracin de una salida de cuatro dgitos controlados por los puertos A y B. Los indicadores numricos 7 segmentos son del tipo nodo comn, por lo tanto se debe considerar que los segmentos encendern con un 0 en vez de con un 1. Los dgitos se encendern con un 0 en la entrada del transistor que le corresponde manejar al dgito correspondiente. En la siguiente pgina se muestra una rutina para el control de varios dgitos. INICIO 160 Rutina para el manejo de cuatro dgitos ;4IDIGITOS
;Salida para 4 dgitos 7 segmentos INCLUDE "P16C5X.INC" CBLOCK H'10' DIGITO0, DIGITO1, DIGITO2, DIGITO3 ENDC ; VALORES DE SALIDA DE CADA DIGITO ORG 0
PREPARA CLRW TRIS PORTA TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS
INICIO MOVF DIGITO0,W ; EL CONTENIDO DE DIGITO 0 VA A W MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B MOVLW B1110 ; SELECCION DEL PRIMER DIGITO MOVWF PORTA,F ; SE SELECCIONA RA0, PARA EL PRIMER DIGITO CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR MOVF DIGITO1,W ; EL CONTENIDO DE DIGITO 1 VA A W MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B MOVLW B1101 ; SELECCION DEL SEGUNDO DIGITO MOVWF PORTA,F ; SE SELECCIONA RA1, PARA EL PRIMER DIGITO CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR MOVF DIGITO2,W ; EL CONTENIDO DE DIGITO 2 VA A W MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B MOVLW B1011 ; SELECCION DEL TERCER DIGITO MOVWF PORTA,F ; SE SELECCIONA RA2, PARA EL PRIMER DIGITO CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR MOVF DIGITO3,W ; EL CONTENIDO DE DIGITO 3 VA A W MOVWF PORTB,F ; SE SACA EL VALOR POR EL PUERTO B MOVLW B0111 ; SELECCION DEL CUARTO DIGITO MOVWF PORTA,F ; SE SELECCIONA RA3, PARA EL PRIMER DIGITO CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR INICIO 161 Rutina para el manejo de varios dgitos ;MULTIDIGITO ;Salida para 4 o ms dgitos 7 segmentos INCLUDE "P16C5X.INC" CBLOCK H'10' DIGITO0, DIGITO1, DIGITO2, DIGITO3, SELDIGI ENDC ; VALORES DE SALIDA DE CADA DIGITO ORG 0
PREPARA CLRW TRIS PORTA TRIS PORTB ; SE PROGRAMAN PUERTOS A Y B COMO SALIDAS
INICIO MOVLW B11111110 ; SE HACE 0 EL BIT 0, PARA ENCENDER PRIMER DIGITO MOVWF SELDIGI,F ; EL VALOR SE LLEVA DE W A SELDIGI MOVLW DIGITO0 ; VALOR DIGITO 0 VA A W PARA CARGARLO A FSR MOVWF FSR ; DIGITOX VA AL APUNTADOR DE DIRECCIONES PROXDIG MOVF INDF,W ; VALOR DEL DIGITO VA A W MOVWF PORTB ; SE SACA VALOR AL PUERTO B MOVF SELDIGI,W ; SELECCIONADOR DE DIGITO A W MOVWF PORTA ; SELECCION DE DIGITO AL PUERTO A BSF STATUS,C ; COLOCA ACARREO EN 1, PARA APAGAR DIGITO 0 RLF SELDIGI,F ; CAMBIO EN LA SELECCION DE DIGITO INCF FSR,F ; INCREMENTA APUNTADOR DE DIGITOS CALL RETARDO ; PERMANENCIA DEL VALOR EN EL INDICADOR BTFSS SELDIGI,4 ; SI FINALIZA ULTIMO DIGITO SALTA GOTO PROXDIG ; SINO VA AL PROXIMO DIGITO INICIO 162 El registro OPTION es un registro de 6 bits de escritura solamente, y contiene los bits de control para configurar el escalamiento del temporizador TMR0 (Timer 0) o del temporizador WDT (Perro guardin). El registro OPTION no tiene direccin asignada en los microcontroladores de la gama bsica. Sin embargo, este registro s tiene una direccin especfica en los microcontroladores de la gama media. A continuacin se presenta la asignacin de los bits del registro OPTION: U-C U-0 W1 W1 W1 W1 W1 W1 TOCS TOSE PSA PS2 PS1 PS0 7 6 5 4 3 2 1 0 Bit 5: TOCS: Bit de seleccin de fuente del temporizador TMR0 1 = Transicin del terminal TOCKI 0 = Reloj de ciclo de instrucciones interno (CLKOUT) Bit 4: TOSE: Bit de seleccin de transicin de fuente del temporizador TMR0 1 = Incremento en una transicin de bajada en el terminal TOCKI 0 = Incremento en una transicin de subida en el terminal TOCKI
3.9 Registro OPTION INICIO 163 Bit 3: PSA: Bit de asignacin del escalamiento. 1 = Se asigna el escalamiento a WDT (perro guardin). 0 = Se asigna el escalamiento al temporizador TMR0 (Timer 0). Bit 2-0: PS2:PS0: Bits de seleccin de la relacin de escalamiento. PS2 PS1 PS0 Relacin TMR0 Relacin WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 INICIO 164 Cambios en el preescalador Veamos un ejemplo de cmo cambiar el preescalador para los temporizadores del PIC16C54. En el primer caso se hace un cambio del temporizador 0 al WDT. Recuerda que los valores binarios x, son los que vamos a asignar:
CLRWDT ; BORRA EL TEMPORIZADOR PERRO GUARDIAN WDT CLRF TMR0 ; BORRA TEMPORIZADOR TMR0 MOVLW B00xx1111 ; LAS ULTIMAS TRES INSTRUCCIONES SE REQUERIRAN SI OPTION ; SE DESEA HACER EL CAMBIO CLRWDT ; PS<2:0> A 000 O 001 MOVLW B00xx1xxx ; SE ESTABLECE EL PREESCALADOR AL VALOR DESEADO OPTION ; PARA EL WDT
En el segundo caso se hace un cambio del preescalador del WDT al TMR0.
CLRWDT ; BORRA EL WDT Y EL PREESCALADOR MOVLW Bxxxx0xxx ; SELECCIONA EL NUEVO ESCALAMIENTO PARA TMR0 Y LA OPTION ; FUENTE QUE ACTIVA ESTE TEMPORIZADOR INICIO 165 Un temporizador contador tiene la funcin de calcular el tiempo transcurrido durante la ejecucin del programa del microcontrolador o, contar los pulsos producidos por uno o ms eventos externos. Bsicamente el circuito que se utiliza es el de un contador independiente, que puede ser activado por el oscilador del microcontrolador o por un oscilador externo.
El temporizador TMR0 presenta las siguientes caractersticas:
w Registro contador - temporizador de 8 bits de lectura y escritura. w Escalamiento programable (Vase registro Option). w Seleccin de entrada de oscilador interna o externa. w Seleccin del tipo de transicin que activa la cuenta.
3.10 Temporizador contador INICIO 166 El modo temporizador se selecciona al colocar un cero en el bit TOCS, bit 5 del registro OPTION. En este modo, el temporizador se incrementa por cada transicin del escalamiento, el cual divide la frecuencia de cada ciclo de instruccin. Si se escribe el registro TMR0 (temporizador 0), el incremento se inhibe durante los dos ciclos siguientes, vase las siguientes figuras: INICIO Ciclos del Temporizador 0, para el oscilador interno sin escalamiento: PC (Contador de programa) 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 Preparacin de instruccin Temporizador 0 Instruccin Ejecutada Escribir TRMRO Ejecutado Leer TMRO Lee NTO Leer TMRO Lee NTO Leer TMRO Lee NTO Leer TMRO Lee NTO+1 Leer TMRO Lee NTO+2 MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0, W Modo Temporizador 167 PC (Contador de programa) 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 Preparacin de instruccin Temporizador 0 Instruccin Ejecutada Escribir TRMRO Ejecutado Leer TMRO Lee NTO Leer TMRO Lee NTO Leer TMRO Lee NTO Leer TMRO Lee NTO Leer TMRO Lee NTO+1 MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOV TMR0,W MOVF TMR0,W Ciclos del Temporizador 0: Oscilador interno con escalamiento 1 a 2 INICIO El programador debe considerar este retardo en la escritura para ajustar el valor deseado en TMR0. 168 El modo contador se selecciona al poner en 1 el bit TOCS (bit 5 del registro OPTION). En este modo, el temporizador o el escalamiento se incrementar en 1 cada vez que haya una transicin en el terminal de entrada TOCKI. El tipo de transicin se determina por medio del bit TOSE (bit 4 del registro OPTION); si ste es cero, la entrada es sensible a transiciones de subida. En la siguiente figura, se muestra la conexin elctrica del terminal TOCKI, que es la entrada del temporizador TMR0:
El escalamiento puede ser usado por TMR0 o por el temporizador WDT perro guardin, pero no por ambos. La asignacin del escalamiento se hace por el bit PSA (bit 3 de OPTION). Si el bit PSA es cero, el escalamiento ser asignado al temporizador TMR0. Los valores de escalamiento pueden ser desde 1/2 hasta 1/256, segn la tabla mostrada en el registro OPTION. INICIO TOCKI N Entrada con Disparador de Schmitt Modo Contador 169 Valor al Valor despus Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Encender de TMR0 y TO N/A TMRO Temporizador 0 - Contador/reloj de tiempo real de 8 bits xxxx xxxx uuuu uuuu N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 11 1111 1111 1111 En la tabla siguiente, se muestra un resumen de los registros asociados con el temporizador TMR0. INICIO 170 Contador de tiempo INICIO Veamos como ejemplo que se quiere incrementar un contador de tiempo cada segundo, y que en una posicin de memoria, se lleve la cuenta del tiempo en minutos. Supongamos que el microcontrolador tiene un cristal de 10MHz. Para este caso, si el oscilador es de 10MHz, el perodo del oscilador es igual a 100nSeg. El ciclo de mquina dura cuatro perodos del oscilador, por tanto corresponde a 400nSeg. El valor mximo que se puede asignar al preescalador para el TMR0, corresponde a 256 veces. Es decir que si tomamos el mximo valor, se obtiene: 400nSeg X 256 = 102,4Seg. El TMR0 es de 8 bits, por tanto este tiempo lo podemos ampliar hasta 102,4Seg X 255 = 26,112mSeg. Si la idea es obtener un tiempo submltiplo de 1Seg, podramos seleccionar por ejemplo 20mSeg o 10mSeg, de manera que al leer 50 o 100 veces el incremento de un registro que detecte cada vez que el TMR0 se desborda, entonces obtendramos 1 segundo respectivamente. Supongamos que seleccionamos como base del temporizador 10mSeg, entonces podramos tomar el valor de escalamiento en 1/128, en vez de 1/256 que es el mximo. As se podr tener mayor exactitud en la medicin del tiempo. El incremento del tiempo se har en 400nSeg X 128 = 51,2Seg. En 10mSeg se necesitarn 10mSeg/51,2Seg perodos del TMR0, es decir; 195,3125 ciclos de TMR0. Como ste slo admite un valor entero, se tomar el 195. El resto podra corregirse con una rutina que retarde la escritura del temporizador unos 51,2Seg X 0,3125 = 16Seg, que corresponde a la ejecucin de 40 ciclos del PIC. Sin embargo, lo mejor sera probarlo sin tomar en cuenta este remanente, y luego corregir. Para obtener los 195 ciclos del TMR0, debe cargarse el valor 256-195=61; no se toma en cuenta el retardo en la escritura, ya que el valor del escalamiento es alto. 171 El Contador de segundos y minutos INICIO include "P16C5X.INC" ; Incluye los smbolos del PIC16C54 cblock 10H segund, minuto, hora, dia endc prepara movlw b'00000110' ; Seleccin del preescalador a TMR0 y divisin por 128 option ; Carga al registro OPTION la configuracin tmr0full movf TMR0,w btfss STATUS,Z ; Chequea si el TMR0 est en 0 goto tmr0full movlw d'61' movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0 incf segund,f ; Se incrementan los segundos call ajuste goto tmr0full ; Se espera hasta que el tmr0 vuelva a 0. Para otras aplicacione ; el programa principal puede seguir mientras se incrementa TMR0 ajuste movlw 6 ; Se hace el ajuste a BCD addwf segund,w ; suma 6 para correccin digito 0 btfsc STATUS,DC ; chequea si hubo un acarreo en digito 0 movwf segund ; corrige si hay acarreo digito 0 movlw 0A0 addwf segund,w ; suma 100 para correccin de segundos btfsc STATUS,C ; corrige si hay acarreo goto incminu ; va a incrementar los minutos retlw 0 ; retorna si no hay incremento de minutos incminu movwf segund ; corrige si hay acarreo en el siguiente dgito incf minuto,f ; ; el programa contina, aqu se puede hacer las correcciones para ; contar los minutos, horas, das, etc. 172 En el programa anterior observamos que el microcontrolador est un tiempo inactivo, mientras espera el desbordamiento del TMR0. Para este programa, puede no ser problema alguno, pero en otros programas se necesita administrar mejor el tiempo del microcontrolador. Esto se puede solucionar si el microcontrolador tuviera una interrupcin que avisara que ya se llen el TMR0. Sin embargo los PIC de la gama media no tienen este recurso, cosa que s tienen los PICs de gamas ms avanzadas. Si se desea aprovechar mejor un programa de un PIC de la gama bsica, entonces se sugiere que el programa que se est ejecutando realice sus actividades mientras el TMR0 est contabilizando el tiempo. Es importante que mientras se ejecuta dicho programa, el tiempo no exceda al de un ciclo del TMR0, porque sino, al evaluar su salida, pudo ya haber pasado por cero, y entonces habr que esperar otro desbordamiento del temporizador. Una consideracin respecto al programa anterior INICIO 173 Un pequeo pulso se pierde en el muestreo Entrada de un Oscilador Externo o Salida del Escalamiento Salida del Oscilador Externo/Escalamiento Despus del muestreo 01 02 03 04 01 02 03 04 01 02 03 04 01 02 03 04 (3) (1) Incremento del tem- porizador TMR0 (Q4) Temporizador TMR0 INICIO Si un oscilador externo se usa para el temporizador TMR0, hay que considerar que debe haber una sincronizacin con la fase del oscilador externo; sino habr un retardo en el incremento del temporizador TMR0 despus de la sincronizacin.
Al no usar el escalamiento, la seal del oscilador externo entra directamente al bloque de sincronizacin. Esta sincronizacin de TOCKI con la fase del oscilador interno, se realiza por medio del muestreo de la salida escalada en los ciclos Q2 y Q4 de la fase del oscilador interno. Por consiguiente, se necesita que TOCKI est en 1 por lo menos dos veces el periodo del oscilador y en 0 al menos otro intervalo de tiempo igual. Vase la siguiente figura:
Uso de un oscilador externo para TMR0 174 Cuando se usa el escalamiento, se obtiene una seal simtrica cuya frecuencia est divida con respecto a la de la frecuencia de entrada del oscilador. Es necesario que en la entrada TOCKI, el perodo sea de por lo menos 4Tosc dividido entre el valor escalado. Por otro lado, la duracin de un nivel debe ser mayor que el mnimo ancho de pulso requerido de acuerdo a las especificaciones, es decir 10nSeg.
Debido a que la salida del escalamiento se sincroniza con el oscilador interno, cuando ocurre una transicin en la seal externa habr un pequeo retardo en el incremento del temporizador TMR0. INICIO 175 En la mayora de los microcontroladores, se incorpora un temporizador independiente llamado perro Guardin (Watchdog Timer). ste tiene la finalidad de reiniciar el programa principal o atender una interrupcin, cuando ocurre una anormalidad en la ejecucin de la secuencia de instrucciones programadas. Bsicamente esta anormalidad har que el programa ejecute un lazo sin retorno, y por tanto el microcontrolador no har la funcin que se le haba asignado. Si esto ocurre, y se dispone de un temporizador perro guardin, ste, despus de un tiempo de espera, enviar la seal de interrupcin que repondr al microcontrolador y podr ser capaz de iniciar o continuar el programa principal. Es de suponer, que si se va a utilizar este temporizador, el programa principal debe borrarlo en un tiempo menor al tiempo de espera especificado por el temporizador, porque de lo contrario el programa nunca se ejecutara completamente. 3.11 Temporizador WDT (Perro Guardin) INICIO 176 En los PIC16C5X, el temporizador WDT o perro guardin es un oscilador independiente de configuracin RC que est dentro del microcontrolador. Esto significa que este circuito genera una seal, aunque el oscilador principal (terminales OSC1/CLKIN y OSC2/CLKOUT) se haya detenido, como por ejemplo al ejecutar la instruccin SLEEP. En una operacin normal o en el modo Reposo (SLEEP), una seal de habilitacin del WDT, resultar en una inicializacin del microcontrolador. El bit TO (bit 4 de STATUS) se borrar despus de esta seal de inicializacin.
El temporizador WDT puede ser deshabilitado permanentemente al colocar en 0 el bit de configuracin WDTE. Vase el tema IV, acerca de los bits de configuracin para los microcontroladores 16C5X. INICIO 177 El perodo de espera del temporizador WDT, es de alrededor 18 mSeg cuando no tiene escalamiento. Si se desea un mayor tiempo de espera, este perodo se puede aumentar por medio del escalamiento hasta 128 veces. Para ello se debe colocar en 1 los bits PSA, PS2, PS1 y PS0 del registro OPTION. De esta manera, se puede obtener un tiempo de espera normal de hasta 2,3 segundos. Este periodo puede variar con la temperatura, VDD y las tolerancias en las especificaciones. Perodo del temporizador WDT INICIO 178 REGISTROS ASOCIADOS CON EL TEMPORIZADOR WDT (PERRO GUARDIN): Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor al Valor despus de Encender TMR0 y MCLR N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111 INICIO Consideraciones al programar el Temporizador WDT:
La instruccin CLRWDT borra el contenido del temporizador WDT y el escalamiento, si ste ha sido asignado a WDT. Esto permitir que no ocurra una inicializacin del microcontrolador.
La instruccin SLEEP, borra el contenido del temporizador WDT y el escalamiento, si ste ha sido asignado a WDT. El perro guardin (WDT) despertar al microcontrolador en el tiempo mximo de espera fijado por el WDT. 179 Programa que utiliza el WDT para prevenir lazos infinitos INICIO Veamos el ejemplo del contador de segundos y minutos. Sabemos que el programa deber chequear continuamente el temporizador TMR0. Una manera de prevenir que el programa se guinde es de la siguiente manera:
tmr0full movf TMR0,w btfss STATUS,Z ; Chequea si el TMR0 est en 0 goto tmr0full movlw d'61' movwf TMR0 ; carga el valor 61 para que se ejecuten 195 ciclos de tmr0 clrwdt ; Borra el temporizador WDT incf segund,f ; Se incrementan los segundos
Recordemos que el WDT reiniciara el microcontrolador cada 18mSeg aproximadamente, si no se borra antes de que transcurra ese tiempo, ya que este valor no se puede ampliar porque el TMR0 est utilizando el escalador. Si sabemos que el TMR0 se carga cada 10mSeg, entonces podra ser una buena alternativa colocar la instruccin de borrado del WDT despus de cargar el valor en el TMR0. Es importante tomar en cuenta, que el WDT se activa por medio de los bits de configuracin al hacer la programacin del PIC, lo cual se ver en el prximo tema. 180 ACTIVIDADES A REALIZAR 1.- Hacer un contador BCD con dos pulsadores para el control ascendente y descendente, y que tenga dos dgitos de salida en formato siete segmentos. 2.- Hacer un control de luces para el semforo propuesto en el tema 2, en el cual se lleve la medicin del tiempo con el temporizador TMR0. Suponga que la frecuencia del oscilador es igual a 4MHz. 3.- Hacer un reloj digital, que sincronice su velocidad con el temporizador TMR0. Este reloj deber tener la posibilidad de ajustar la hora y minutos, por medio de pulsadores. Asuma que la frecuencia del oscilador es igual a 20MHz. 4.- Incluir el temporizador WDT en las actividades anteriores, de manera que el programa se ejecute correctamente, en condiciones normales, y que haga la inicializacin, en el caso de caer en un lazo infinito. INICIO TEMA 4 Caractersticas Especiales del Hardware
CONTENIDO 4.1.- Configuracin de la serie PIC16C5X 4.2.- Modo SLEEP (Reposo) 4.3.- Inicializacin de los PIC16C5X 4.4.- El Temporizador de Inicializacin (DRT) 4.5.- Inicializacin por Encendido (POR) INICIO 182 Objetivos Terminales: Describir los modos de configuracin que presentan los microcontroladores PIC. Sealar la importancia que tiene activar el modo Reposo en un microcontrolador. Describir los modos de inicializacin que presentan los microcontroladores PIC. INICIO 183 En la direccin FFFh de los microcontroladores de la serie 16C5X, se dispone de una palabra de configuracin de 12 bits, de los cuales 4 bits tienen funciones especficas. Cuando se va a grabar el programa en el microcontrolador, se tiene acceso a esta direccin. Para ello, se dispone de una ventana que permite configurar algunas caractersticas del hardware del microcontrolador.
Estos bits pueden programarse para seleccionar algunas funciones de Hardware del microcontrolador.
Dos de los bits son para seleccionar el tipo de oscilador que se va a utilizar, un bit es para la habilitacin del temporizador Perro Guardin (WDT) y un bit es para habilitar la proteccin del cdigo del programa. 4.1.- Configuracin de la serie PIC16C5X INICIO 184 CP WDTE FOSC0 FOSC1 Bit 11 10 9 8 7 6 5 4 3 2 1 Bit 0 Registro CONFG Direccin FFFH Bits 11-4: No utilizados: Se leen 0
Bit 3: CP: Bit de proteccin de cdigos 1-> No protegido 0-> Protegido
Bit 2: WDTE: Habilitacin del temporizador WDT (Perro Guardin) 1-> Habilitado 0-> Inhabilitado Diagrama de la palabra de configuracin INICIO 185 Los microcontroladores PIC tienen la posibilidad de proteger el programa grabado en memoria al acceder al bit 3 de la palabra configuracin.
Si este Bit tiene valor 0, entonces no ser posible leer el programa guardado. Habilitacin del Temporizador WDT El temporizador WDT se utiliza normalmente para reiniciar el programa principal, cuando ocurre una anormalidad.
En el bit 2 de la palabra de configuracin se puede habilitar o no este temporizador, al colocar un 1 un 0 respectivamente. Proteccin de cdigos INICIO 186 Los microcontroladores PIC16C5X, pueden operar en uno de cuatro modos de oscilacin; para ello, el usuario deber programar dos de los bits de configuracin del microcontrolador.
En la palabra de configuracin, que slo se accede a ella en el modo de programacin, se encuentran los bits FOSC1 y FOSC0 (bits 1 y 0 respectivamente).
De acuerdo a la combinacin de ellos, se puede escoger lo siguiente:
LP Cristal resonante a bajo consumo (00) XT Cristal resonante (01) HS Cristal resonante de alta velocidad (10) RC Resistencia y condensador (11) Seleccin del Oscilador INICIO 187 En las figuras de la pgina siguiente, se puede observar la conexin del cristal en el microcontrolador, y los valores adecuados de los condensadores segn el modo de oscilacin seleccionado. Otra alternativa existente es la de conectar una seal producida por un oscilador externo en la entrada OSC1/CLKIN, lo cual se puede observar a continuacin Seal de un oscilador externo Abierto OSC1 OSC2 PIC 16C5X INICIO 188 Tipo de Frecuencia C1 C2 Oscilador resonante LP 32KHz
OSC2 XTAL C1 (1) OSC1 PIC16C5X NOTAS: 1.- Ver tabla de seleccin de C1 y C2 2.- Puede ser necesario colocar una resistencia en cristales sin blindajes 3.- El valor de RF depende del cristal seleccionado INICIO Tabla de Seleccin 189 Para las aplicaciones en las cuales no se requiera precisin en la medicin del tiempo, el modo RC ofrece una alternativa econmica para el desarrollo de circuitos. La frecuencia del oscilador RC, depende de los valores del voltaje de alimentacin, la resistencia R ext , el condensador C ext , la temperatura de operacin y la tolerancia que ofrece el dispositivo. Se recomienda utilizar valores de R ext entre 3 K y 100 K. En cuanto a C ext se recomienda utilizar valores por encima de los 20 pF. En la siguiente figura se muestra la conexin de circuito RC, ntese que se dispone de una salida con la frecuencia de oscilacin dividida entre cuatro en el terminal OSC2/CLKOUT. VDD R ext
OSC1 PIC16C5X OSC2/ClkOUT FOSC/4 Vss Cext Reloj Interno N INICIO 190 Valores tpicos de frecuencia que se pueden obtener en el modo RC C ext R ext Frecuencia V dd = 5V, T amb =25C 20pF 3.3K 5K 10K 100K 5,0MHz 3,8MHz 2,2MHz 260KHz 100pF 3.3K 5K 10K 100K 1,6MHz 1,2MHz 680KHz 72KHz 300pF 3.3K 5K 10K 160K 660KHz 480KHz 270KHz 29KHz INICIO 191 Los microcontroladores PIC, tienen la posibilidad de estar en un modo de operacin de bajo nivel de consumo. Sin embargo, durante ese tiempo, no podr ejecutar instrucciones, tal como si estuviera durmiendo. Luego podr despertar para funcionar en el modo normal, por medio de una seal de inicializacin.
Para estar en el modo Reposo, se deber ejecutar en el programa la instruccin SLEEP. Si el temporizador perro guardin est habilitado, al ejecutar la instruccin SLEEP, borrar el contenido del registro WDT, para dar comienzo el tiempo de espera seleccionado segn el escalamiento del WDT, y enviar despus la seal del temporizador perro guardin. Por otro lado, el bit TO o tiempo de espera (bit 4 de STATUS), se coloca en 1, y el bit PD o baja potencia (bit 3 de STATUS), se coloca en 0, entonces el oscilador se detiene. Los puertos de entrada y salida mantienen el estado anterior a la ejecucin de la instruccin SLEEP.
Si se desea un consumo an menor en este estado, se deber colocar el terminal TOCKI a un nivel fijo (V DD o V SS ) y la entrada MCLR/V pp deber colocarse a un nivel alto.
4.2.- Modo SLEEP (Reposo) INICIO 192 Para salir del modo de reposo, existen dos posibilidades: Por medio de una inicializacin externa o al cumplirse el tiempo de espera en el temporizador perro guardin (si WDT haba sido habilitado).
Estas dos formas causarn una inicializacin del dispositivo, y los bits TO y PD pueden usarse para determinar cmo se hizo la inicializacin.
Un cero en el bit TO, indicar que el tiempo de espera en el WDT despert al microcontrolador. INICIO 193 Los microcontroladores PIC pueden iniciar sus funciones de las siguientes formas:
/ Inicializacin por encendido (POR). /Inicializacin MCLR (operacin normal). / Inicializacin MCLR al despertar (desde el modo Reposo o SLEEP). / Inicializacin WDT (operacin normal). / Inicializacin del WDT para despertar (desde el modo Reposo o SLEEP).
La siguiente tabla muestra las condiciones de los bits de los registros PCL y STATUS, despus de una inicializacin. 4.3.- Inicializacin de los PIC16C5X INICIO 194 Nota: x significa cualquier valor; u significa que mantiene el valor anterior Condicin PCL Direccin: 02h STATUS Direccin: 03h Inicializacin por encendido 1111 1111 0001 1xxx Inicializacin MCLR (operacin normal) 1111 1111 000u uuuu Inicializacin MCLR al despertar (desde modo Reposo) 1111 1111 0001 0uuu Inicializacin WDT (operacin normal) 1111 1111 0000 1uuu Inicializacin WDT al despertar (desde modo Reposo) 1111 1111 0000 0uuu INICIO 195 Algunos registros se establecern segn la condicin de inicializacin. Los otros no sern afectados y sus estados sern indefinidos despus de una inicializacin al encender el dispositivo, y mantendrn sus valores para otro tipo de inicializacin. Los bits TO (tiempo de espera) y PD (Reposo); se colocarn en 0 o en 1, dependiendo de la condicin de la inicializacin. Estos bits pueden utilizarse para conocer la causa de inicializacin. A continuacin se muestra cmo se afectan los bits TO y PD segn el tipo de inicializacin y segn ciertas condiciones en el microcontrolador. TO PD Inicializacin fue causada por: 1 1 Encendido (POR) u u Inicializacin MCLR (Operacin Normal) 1 0 Inicializacin MCLR al despertar 0 1 Inicializacin WDT (Operacin Normal) 0 0 Inicializacin WDT Al despertar INICIO 196 Registro Direccin Inicializacin por Encendido Inicializacin por MCLR o WDT W N/A xxxx xxxx uuuu uuuu TRIS N/A 1111 1111 1111 1111 OPTION N/A --11 1111 --11 1111 INDF 00h xxxx xxxx uuuu uuuu TMRO 01h xxxx xxxx uuuu uuuu PCL (1) 02h 1111 1111 1111 1111 Estados de los registros, despus de una inicializacin Nota: x significa cualquier valor. u significa que mantiene el valor anterior. INICIO 197 Registro Direccin Inicializacin por Encendido Inicializacin por MCLR o WDT STATUS 03h 0001 1xxx 000? ?uuu FSR 04h 1xxx xxxx 1000 0000 PORTA 05h --- xxxx ---- uuuu PORTB 06h xxxx xxxx uuuu uuuu 07h-7Fh xxxx xxxx uuuu uuuu Registros de propsitos generales INICIO 198 En la siguiente figura, se muestra el diagrama de bloques del circuito de inicializacin: Detector de Encendido V DD
MCLR/V DD
Oscilador RC Interno Contador de 8 Bits Asincrnico (Temporizador de Arranque) Inicio S Q Q R Inicializacin del Chip
POR (Inicializacin por Encendido) Tiempo de espera del WDT INICIO 199 El temporizador de inicializacin (DRT) es un circuito interno, basado en un oscilador RC, que introduce un tiempo de espera nominal de 18mseg, antes de la inicializacin del microcontrolador.
El retardo en la inicializacin que introduce este circuito, permite la estabilizacin de la frecuencia de oscilacin en el circuito resonante que fija los ciclos del microcontrolador; lo cual evita la necesidad de colocar una red RC externa para este propsito.
El DRT tambin se activa despus de un tiempo de espera del perro guardin (WDT), lo cual es importante para aplicaciones en las que despertar al microcontrolador, despus del modo dormir o reposo. 4.4. El Temporizador de Inicializacin (DRT) INICIO 200 Los microcontroladores de la familia PIC16C5X incorporan un circuito de inicializacin por encendido dentro del chip, para la mayora de las situaciones. Para utilizar estas facilidades, el diseador simplemente debe colocar el terminal MCLR/V pp al voltaje de alimentacin V pp.
Los circuitos de la inicializacin por encendido (POR) y del temporizador de inicializacin (DRT), estn muy relacionados. Cuando se enciende el microcontrolador, el registro de inicializacin se coloca en 1 y se borra el DRT. Luego el DRT arranca cuando detecta un 1 en la lnea MCLR. Despus de un tiempo de espera, que dura aproximadamente 18mseg, se pone en 0 el registro de inicializacin y de esta manera se genera la seal de inicializacin.
Un ejemplo de encendido en donde MCLR no se conecta a V DD se grafica en la siguiente figura: 4.5. Inicializacin por encendido (POR) INICIO 201 POR INTERNO MCLR V DD
ESPERA DRT INICIALIZACIN INTERNA TDRT V 1
El V DD aumenta y se estabiliza antes de que MCLR sea igual a 1. La inicializacin se efectuar un tiempo despus de que MCLR sea 1 y ser fijado por el DRT. INICIO 202 INICIALIZACIN INTERNA V DD
MCLR POR INTERNO TDRT ESPERA DRT V 1
El caso conveniente se consigue cuando MCLR se conecta a V DD . El valor de V DD permanece estable antes de que se cumpla el tiempo de espera en el DRT, y no hay problemas en obtener la inicializacin adecuada. La siguiente figura muestra el caso en que MCLR se conecta a V DD . INICIO 203 Para los casos en los que la alimentacin sube de manera muy lenta, ocurre una situacin problemtica. Vase la siguiente figura: V DD
INICIALIZACIN INTERNA MCLR POR INTERNO ESPERA DRT V 1
TDRT Cuando VDD se eleva lentamente, el tiempo de espera TDRT se acaba antes de que VDD llegue al valor final. En este ejemplo, el dispositivo tendr una inicializacin apropiada, nicamente si V1 VDD. INICIO 204 Si se desea mayor informacin, consultar la nota de aplicacin AN522 en el Embedded Control Handbook o en www.microchip.com. Cuando el DRT detecta el 1 lgico en la entrada MCLR/V pp , y sta no ha llegado a estabilizar su voltaje, no habr garanta de que la inicializacin en el microcontrolador se haya hecho correctamente. Para estos casos, se recomienda colocar un circuito RC como se muestra a continuacin, de manera de solventar este problema. V DD
V DD
D R R1 C MCLR PIC16C5X INICIO 5.1.- Introduccin 5.2.- Familia de los microcontroladores PIC de la gama bsica 5.3.- Conexiones externas de los microcontroladores PIC de la gama bsica 5.4.- Organizacin de las memorias de los microcontroladores PIC de la gama bsica 5.5.- Registro STATUS 5.6.- Registro Contador de Programa PC 5.7.- Memoria de Datos
TEMA V Otros Microcontroladores de la Gama Bsica INICIO 206 5.1 INTRODUCCIN Hemos visto hasta ahora todo lo relacionado con el PIC16C54. Este microcontrolador es muy til para aplicaciones bsicas. En la medida en que aumenta la complejidad de un circuito, ser necesario utilizar dispositivos con mayor capacidad de memoria, o posiblemente se requiera una mayor cantidad de lneas de entrada y salida, o por el contrario, pueden haber aplicaciones en las que se requiera pocas lneas y bajo consumo. Dentro de los PIC de la gama bsica, hay otros microcontroladores que pueden solucionar estos problemas. Recuerda que la idea al utilizar microcontroladores, es para que este circuito haga prcticamente todas las funciones electrnicas de la aplicacin requerida. En otras palabras, un circuito con microcontrolador no debera tener, en lo posible, ampliaciones externas de memoria ni circuitos digitales de soporte. Por qu? Simplemente, porque si se hace esto, estas soluciones implican la utilizacin de ms circuitos externos y en muchos casos se sacrificaran lneas que pueden utilizarse como puertos; por otro lado, si en un programa se pueden realizar todas las funciones lgicas, entonces ser ms econmico aprovechar la elaboracin de rutinas que ejecuten esas funciones. Por ejemplo, no sera conveniente hacer un contador con un microcontrolador, cuyas salidas vayan a un decodificador BCD a 7 segmentos. Es ms econmico y funcional hacer la decodificacin BCD a 7 segmentos, por medio de una rutina de conversin. Tampoco ser lgico aadir una memoria externa para aumentar la capacidad, ya que al comunicar la memoria con el microcontrolador se utilizarn lneas de puerto, que bien pueden emplearse para otra actividad. La solucin ser adquirir un microcontrolador con mayor capacidad de memoria. INICIO 207 5.2 Familia de los microcontroladores PIC de la gama bsica A continuacin se presentan otros modelos de microcontroladores PIC de la gama bsica con sus caractersticas: INICIO Producto Memoria de programa RAM Lneas Encapsulado Temporizadores Veloc. Otras caractersticas MCU Bytes OTP/EPROM ROM Bytes E/S y WDT Mx. 208 Familia de los microcontroladores PIC de la gama bsica con memoria FLASH A continuacin se presentan los dos modelos de microcontroladores PIC de la gama bsica con memoria FLASH y sus caractersticas: INICIO Producto MCU Memoria de programa FLASH RAM Bytes Lneas E/S Encapsulado Temporiza- dores y WDT Velocidad Mx. Otras Caractersticas PIC16F54 512X12 25 12 18/PDIP 18/SOIC 20/SSOP 1-8 bits 1-WDT 20MHz Memoria FLASH PIC16F57 2KX12 72 20 1-8 bits 1-WDT 20MHz Memoria FLASH Podemos observar que las caractersticas son idntica a los PIC16C54 y PIC16C57, con la diferencia de que la memoria de programa es del tipo FLASH. Esto ofrece una ventaja considerable, ya que no se necesita el borrador de luz ultravioleta para poder reprogramar los microcontroladores. 209 5.3 Conexiones externas de los microcontroladores PIC de la gama bsica A continuacin, se presenta la interconexin de los PICs 16C54 hasta el 16C58. Puede observarse que las lneas RA0 a RA3, RB0 a RB7 y RC0 a RC7 constituyen las lneas de puertos de entrada y salida. Cada conexin tiene su propia funcin especfica INICIO 210 5.4 Organizacin de las memorias de los microcontroladores PIC de la gama bsica Sabemos que los microcontroladores de la gama bsica tienen un mismo conjunto de instrucciones. Sin embargo, debido a las diferencias que hay entre cada modelo, en cuanto a las capacidades de memoria y nmeros de lneas de entrada y salida, se deber tomar esto en consideracin para realizar la programacin. Los 16C54 y 16C55, tienen un contador de programa (PC) de 9 bits, capaz de ubicar al programa, en una de las 512 direcciones del espacio de memoria que se utiliza la palabra de 12 bits.
INICIO PC<8:0> NIVEL DE PILA 1 NIVEL DE PILA 2 MEMORIA DE PROGRAMA VECTOR DE INICIALIZACIN 000h 0FFh 100h 1FFh Espacio para memoria del usuario CALL, RERLW 9 Memoria de programa de los PIC16C54 y 55 211 Organizacin de las memorias de los microcontroladores PIC16C56, 57 y 58 PC<9:0> NIVEL DE PILA 1 NIVEL DE PILA 2 MEMORIA DE PROGRAMA (pgina 0) VECTOR DE INICIALIZACIN 000h 0FFh 100h 1FFh Espacio para memoria del usuario CALL, RERLW 10 MEMORIA DE PROGRAMA (pgina 1) 200h 2FFh 300h 3FFh Memoria de programa del PIC16C56 PC<10:0> NIVEL DE PILA 1 NIVEL DE PILA 2 MEMORIA DE PROGRAMA (pgina 0) VECTOR DE INICIALIZACIN 000h 0FFh 100h 1FFh Espacio para memoria del usuario CALL, RERLW 11 MEMORIA DE PROGRAMA (pgina 1) 200h 2FFh 300h 3FFh 400h MEMORIA DE PROGRAMA (pgina 2) MEMORIA DE PROGRAMA (pgina 3) 4FFh 500h 6FFh 700h 7FFh Memoria de programa del PIC16C57 y 58 5FFh 600h INICIO 212 5.5 Registro STATUS R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin.
Bit 7: PA2: No se usa para la serie 16C5X
Bit 6-5: PA1-PA0: Pgina seleccionada de la memoria de programa (PIC 16C56/57/58) 00 = Pg. 0 = (000h - 1FFh) 01 = Pg. 1 = (200h - 3FFh) 10 = Pg. 2 = (400h - 5FFh) PIC16C57/58 11 = Pg. 3 = (600h - 7FFh) PIC16C57/58
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x PA2 PA1 PA0 TO PD Z DC C bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 INICIO Hemos visto en la descripcin del PIC16C54 que el registro STATUS se ubica en la direccin 03h en la memoria de datos. Este registro tiene unos bits que indican los estados de las operaciones lgicas y aritmticas, la deteccin del tipo de inicializacin y la seleccin de pgina de la memoria de programa. A continuacin se presentan los bits del registro STATUS y ms abajo, la explicacin de los bits PA1 y PA0, los cuales son los bits que se utilizan para la seleccin de pgina de la memoria de programa. 213 Cuando una instruccin es ejecutada, el contador de programa (PC) contendr la direccin de la prxima instruccin a ejecutarse. El valor del PC se incrementa en uno por cada ciclo de instruccin, al menos que la instruccin cambie el valor del PC. Para una instruccin GOTO, los bits 8 a 0 del PC se incluyen en dicha instruccin. El registro PCL toma los bits 7 a 0. Vase figura a continuacin: 5.6 Registro Contador de Programa PC PIC16C56 7 PA0 STATUS 0 9 8 7 0 PC PCL Palabra de Instruccin 8 7 0 PC PCL Palabra de Instruccin PIC16C54/55 PIC16C57/58 10 9 8 7 0 PC PCL Palabra de Instruccin 2 7 PA1 PA0 STATUS 0 INICIO 214 Para una instruccin CALL, o alguna instruccin donde el PCL es el destino, los bits 7 a 0 del PC se obtienen del cdigo de la instruccin. Sin embargo, el bit 8 del PC no viene del cdigo de la instruccin, sino que es puesto en cero.
Algunas de las instrucciones donde el PCL es el destino, o se le modifica el contenido, son: MOVWF PCL, ADDWF PCL y BSF PCL, 5. Recuerda que la direccin del PCL es la 2
Para los PIC16C56, 16C57 y 16C58, se debe agregar un nmero de pgina. El bit 5 del registro STATUS se transfiere al bit 9 del PC para el PIC16C56, y los bits 5 y 6 del registro STATUS se transfieren respectivamente a los bits 9 y 10 del PC para los PIC16C57 y PIC16C58. Vase figura a continuacin. INICIO 215 8 7 0 PC PCL Palabra de Instruccin PIC16C54/55 Inicializacin A 0 7 PA0 STATUS 0 9 8 7 0 PC PCL Palabra de Instruccin Inicializacin A 0 PIC16C56 PIC16C57/58 10 9 8 7 0 PC PCL 0 Palabra de Instruccin 2 7 PA1 PA0 STATUS 0 INICIO 216 El contador de programa (PC) es cargado en la ltima direccin de la memoria de programa cuando hay una inicializacin (RESET), lo cual significa que la direccin del PC se coloca al finalizar la direccin de la ltima pgina, es decir al valor del vector inicializacin.
Los bits de la pgina preseleccionada en el registro STATUS, son borrados despus de una inicializacin, lo cual significa que se preselecciona la pgina 0. Por consiguiente, despus de la inicializacin, una instruccin GOTO en la posicin del vector inicializacin, har que el programa salte a la pgina 0.
Si ocurre una inicializacin inadecuada (por ejemplo una baja de tensin en la alimentacin), los bits de preseleccin de pgina, en el registro STATUS, pueden no ser borrados. Por consiguiente, es una buena prctica de programacin borrar el registro STATUS (CLRF STATUS) en la posicin del vector de inicializacin para que despus el PC se coloque en la posicin 000h. Efectos de la inicializacin INICIO 217 Consideraciones para las pginas en los PIC 16C56/57/58 Si el contador de programa est apuntando a la ltima direccin de una pgina seleccionada, cuando ste se incremente, har que el programa contine hacia la pgina siguiente. Sin embargo, los bits de la pgina preseleccionada en el registro STATUS, no se actualizarn. Por consiguiente, la prxima instruccin GOTO, CALL o de modificacin del PCL, enviar al programa a la pgina especificada por los bits preseleccionados de pgina (PA0 o PA1).
Por ejemplo, una instruccin NOP en la posicin 1FFh (pgina 0), incrementa el PC a 200h (pgina 1). Un GOTO xxh en la posicin 200h, har que el programa salte a la posicin xxh en la pgina 0 (asumiendo que PA1: PA0 valen 0). Para prevenir esto, los bits de la pgina preseleccionada deben actualizarse por medio del control del programa. INICIO 218 La memoria de programa est seleccionada en pginas de 512 palabras de 12 bits. Cada posicin en una pgina, puede ser accedida directamente cuando se va a ejecutar un salto de direccin por medio de las instrucciones: CALL, RETLW o GOTO. Para los dispositivos con capacidad de ms de 512 palabras, se utilizan los bits de seleccin de pgina PA1 y PA0, los cuales se encuentran en el STATUS. En la memoria de datos se ubican los registros de funciones especiales y los de propsitos generales. En las siguientes pginas, podrs observar la ubicacin de los registros en los microcontroladores PIC de la serie 16C5X. En ellos encontrars que los dispositivos de 28 terminales, tienen al puerto C ubicado en la posicin 07h, que corresponde a un registro de propsito general para los microcontroladores de 18 terminales. Por otro lado, observars que los PIC16C57 y PIC16C58 tienen una memoria RAM de mayor capacidad, y por tanto el acceso se hace por medio del registro FSR, ya sea de manera indirecta a travs del registro INDF o directa, por medio de los bits 6 y 5 del registro FSR, ya que stos indican el banco de memoria a utilizar, que est especificado de acuerdo a su valor en binario. ecuerda INICIO 219 5.7 Memoria de datos PIC16C54, 55 y 56 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh 10h 1Fh REGISTROS DE PROPSITOS GENERALES MEMORIA DE DATOS DE LOS PIC16C54 Y 56 MEMORIA DE DATOS DEL PIC16C55 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh 10h 1Fh REGISTROS DE PROPSITOS GENERALES PORTC (1) El registro INDF, no corresponde a una posicin fsica, sino al registro cuya direccin est contenida en el registro FSR. INICIO 220 Memoria de datos PIC16C57 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 08h 0Fh REGISTROS DE PROPSITOS GENERALES PORTC 00 01 10 11 REGISTROS DE PROPSITOS GENERALES 10h 1Fh FSR<6:5> Direccin de registro REGISTROS DE PROPSITOS GENERALES 30h 3Fh REGISTROS DE PROPSITOS GENERALES 50h 5Fh REGISTROS DE PROPSITOS GENERALES 70h 7Fh 20h 40h 60h Este Mapa de Direcciones retoma a las direcciones del Banco 0 2Fh 4Fh 6Fh Banco 0 Banco 1 Banco 2 Banco 3 MEMORIA DE DATOS DEL PIC16C57 INICIO 221 Memoria de datos PIC16C58 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh REGISTROS DE PROPSITOS GENERALES 00 01 10 11 REGISTROS DE PROPSITOS GENERALES 10h 1Fh FSR<6:5> Direccin de registro REGISTROS DE PROPSITOS GENERALES 30h 3Fh REGISTROS DE PROPSITOS GENERALES 50h 5Fh REGISTROS DE PROPSITOS GENERALES 70h 7Fh 20h 40h 60h Este Mapa de Direcciones retoma a las direcciones del Banco 0 2Fh 4Fh 6Fh Banco 0 Banco 1 Banco 2 Banco 3 MEMORIA DE DATOS DEL PIC16C58 INICIO 6.1.- Introduccin 6.2.- Familia de los microcontroladores PIC16F8X 6.3.- El PIC16F84A 6.4.- Nuevas instrucciones de los PIC de la gama media 6.5.- Organizacin de la memoria del PIC16F84A 6.6.- El registro STATUS 6.7.- Manejo de Interrupciones en el PIC16F84A 6.8.- La Memoria EEPROM 6.9.- Registro Contador de Programa PC 6.10.- El Registro STACK (Pila) 6.11.- Los temporizadores y algo ms de PORTB 6.12- Los Bits de configuracin
TEMA VI Microcontrolador PIC16F84A INICIO 223 Objetivos Terminales:
Establecer las diferencias de software y hardware entre los microcontroladores de la gama bsica y los de la gama media. Explicar la arquitectura del microcontrolador PIC16F84. Disear circuitos bsicos con microcontroladores de la gama media. INICIO 224 6.1- INTRODUCCIN Los microcontroladores de la gama bsica son tiles para aplicaciones sencillas, en donde se realiza una tarea a la vez. Ejemplos de estas aplicaciones, pueden ser los relojes digitales, las combinaciones de cajas fuertes y cerraduras, medidores de frecuencia, tacmetros y algunos circuitos bsicos de control. Cuando una aplicacin se hace ms compleja, se podra aadir circuitos externos a estos microcontroladores; sin embargo, la idea de utilizar estos dispositivos consiste en reducir considerablemente el nmero de componentes, y por tanto, el espacio y el consumo de energa en los circuitos de diferentes aplicaciones. Por ejemplo. Suponiendo que se necesita disear un circuito que sea capaz de controlar un sistema con varias seales analgicas a la vez; si utilizramos un microcontrolador de la gama bsica, tendramos que aadir al circuito: un convertidor analgico a digital, uno o ms multiplexers analgicos, posiblemente se deba agregar ms memoria RAM, se necesitara utilizar una EEPROM externa para guardar constantes del sistema y constantes de calibracin, y as el circuito se hara bastante complejo, de tal forma, que quizs sea ms indicado utilizar un microprocesador que un microcontrolador. Como se ha visto en la primera seccin de esta gua, existen microcontroladores que internamente tienen los elementos que nombramos anteriormente, y por lo tanto hay la posibilidad de disear equipos con cierta complejidad utilizando un solo microcontrolador. En esta seccin se vern los microcontroladores de la gama media a partir del PIC16F84. INICIO 225 6.2- Familia de la serie PIC16F8X INICIO Producto Memoria. de programa EEPROM RAM Lneas Encapsulado Canales Comparadores PWM Temporizadores Puertos Veloc. ICSP BOR/ CCP/ Otras caractersticas MCU FLASH Bytes Bytes E/S A/D C Analgicos 16bits y WDT seriales Mxima PBOR ECCP A continuacin, se presenta la familia PIC16F8X con sus caractersticas principales: 226 6.3- El PIC16F84A Inicialmente se har una descripcin del PIC16F84A, ya que ste es uno de los ms sencillos de la familia de los microcontroladores de la serie PIC16F8X. En principio se establecern las diferencias con respecto al microcontrolador PIC16C54, luego se harn unos ejemplos de aplicacin con este microcontrolador. El PIC16F84A es un microcontrolador Microchip de la gama media que presenta las siguientes caractersticas bsicas, las cuales se comparan con las del PIC16C54:
Microcontrolador PIC16F84A PIC16C54JW Memoria de Programa 1Kx14 tipo Flash 0,5Kx12 tipo EPROM Memoria de datos 68 bytes tipo RAM 64 bytes tipo EEPROM 25 bytes tipo RAM Manejo de interrupciones 4 0 Nmero de lneas de E/S digitales 13
12 Nmero de temporizadores 2: TMR0 y WDT 2: TMR0 y WDT INICIO 227 Diferencias entre los microcontroladores de la gama bsica y los de la media Despus de programar y utilizar un PIC de la gama bsica, notars que no hay mucha diferencia en la programacin con respecto a los PICs de la gama media. Algo importante que debes saber, es que podrs utilizar sin ningn problema el MPLAB para los PIC de la gama media, tal como se sugiri al ejecutar un programa editado para el PIC16C54 en un PIC16F84. En otras palabras, si editas un programa para un PIC de la gama bsica, ste se ejecutar en un PIC de la gama media. Sin embargo, existen algunas diferencias que debes tomar en cuenta al programar los PIC de la gama media. En primer lugar la longitud de las palabras de instruccin en los PICs de la gama media es de 14 bits, en comparacin con los 12 bits de la gama bsica. Esto significa que se podr obtener ciertas ventajas en la programacin. Por otro lado, los registros TRIS y OPTION, tendrn una direccin definida, y por lo tanto, las instrucciones asociadas a ellas cambian. A pesar de que en un programa, estas instrucciones se pueden ensamblar sin problemas, se recomienda sustituirlas por las instrucciones MOVWF TRISX, donde X es el puerto que se desea configurar (A, B, etc.) y MOVWF OPTION_REG. Una ventaja que aparece en el manejo de instrucciones en los microcontroladores de la gama media, es que ahora se podr acceder directamente a 128 registros de la memoria RAM con una sola instruccin, sin necesidad de seleccionar bancos de memoria, a diferencia de los PICs de la gama bsica, en los cuales slo se tena acceso directo a 32 registros de la RAM. Otra ventaja importante de los PICs de la gama media, es que ahora se cuenta con ocho niveles de subrutinas, a diferencia de dos en los PICs de la gama bsica. INICIO 228 6.4 Nuevas instrucciones de los PICs de la gama media Es importante considerar que existen cuatro nuevas instrucciones en los PICs de la gama media. Dos de ellas permiten hacer operaciones aritmticas con valores constantes, y las otras dos se utilizan para retornos de subrutinas e interrupciones. Si eliminamos las instrucciones TRIS y OPTION, significa que el conjunto de instrucciones de los microcontroladores PIC de la gama media suman un total de 35. Las nuevas instrucciones y el grupo al que pertenecen, se presentan a continuacin: INSTRUCCIONES ARITMTICAS ADDLW K ; Suma W con K, donde K es constante y el resultado va a W. SUBLW K ; Resta K menos W, donde K es un valor constante. INSTRUCCIONES DE SALTO, se realizan en dos ciclos porque ejecutan un salto hacia la direccin de retorno. RETFIE ; Retorno y habilitacin de interrupcin, el PC toma el valor del TOS (Pila) RETURN ; Retorno de subrutina, el PC toma el valor del TOS (Pila) Cambios en las INSTRUCCIONES DE CONTROL OPTION MOVWF OPTION_REG ; Las posiciones de estos registros estn en TRIS f MOVWF TRISF ; el banco 1 de la RAM (BSF STATUS,RP0) INICIO 229 6.5- Organizacin de la Memoria del PIC16F84A Debido a que los microcontroladores de la gama media tienen una mayor cantidad de funciones, stas se configuran por medio de registros. Fjate cmo en los microcontroladores de la gama bsica encontrbamos registros de funciones especiales para: INDF, TMR0, PCL, STATUS, FSR, PORTA y PORTB; dependiendo del nmero de terminales, tambin poda aparecer PORTC. Ahora hay que agregar los registros OPTION, TRISA y TRISB (y otros PORT y otros TRIS segn la cantidad de puertos). Por otro lado existen otros registros de control, que para el PIC16F84A, se resumen en la tabla de la pgina siguiente. En primer lugar, se podr observar la coincidencia con algunas direcciones de los registros de los microcontroladores de la gama bsica. En segundo lugar, se puede ver que las posiciones de los registros TRISA y TRISB estn en las direcciones 85h y 86h respectivamente, por otro lado el registro OPTION est en la direccin 81h. Mientras los primeros registros mencionados pertenecen al banco 0 de la memoria RAM, estos ltimos pertenecen al banco 1, es decir, hay que considerar en las instrucciones, a cul banco se est sealando, ya que en la palabra de instruccin de los PIC de la gama media, slo podemos acceder de manera directa a 128 posiciones de la RAM. Si estamos en el banco 0, podemos acceder desde la posicin 00h hasta la 7Fh, y si estamos en el banco 1, desde la posicin 80h hasta la 0FFh. La seleccin del banco se har por medio del bit RP0 del registro STATUS. Finalmente veremos que hay un grupo de registros que son nuevos para nosotros, y que sern explicados ms adelante. INICIO 230 Ubicacin de los registros del microcontrolador PIC16F84A INICIO Banco 0 Banco 1 En la siguiente tabla, se presentan las direcciones y los nombres de los registros del PIC16F84A. Notas: (1) Al igual que el PIC16C54, el registro indirecto INDF, no corresponde a una posicin fija en la RAM; al acceder a ese registro, se lee o escribe en el registro sealado en la direccin sealada por el registro FSR. (2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas. 231 Asignacin de bits en cada registro INICIO Direccin Nombre Valor despus de encender Valor despus de otra inicializacin 232 Como en el caso de los microcontroladores de la gama bsica, este registro est ubicado en la direccin 03h de la memoria de datos, y contiene los bits de estado de la Unidad Lgica y Aritmtica, el estado de la inicializacin (RESET), y los bits de seleccin de los bancos de registros de la memoria de datos. Los bits de STATUS de los PIC de la gama bsica y el PIC16F84A tienen las mismas funciones, con la excepcin de que los bits de seleccin de pgina en los microcontroladores de la gama bsica se cambian por los de seleccin de banco de los registros de la memoria de datos. Observa las diferencias en el tema 3. 6.6- Registro STATUS R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x IRP RP1 RP0 TO PD Z DC C bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 R = bit de lectura W = bit de escritura -N = Valor despus de la inicializacin. Bit 7: IRP: Se utiliza para acceso indirecto 0-> 00h a 0ffh. 1-> 100h a 1ffh (nota: IRP y RP1 no se utilizan en los PIC16F84, por tanto se hacen iguales a 0). Bit 6-5: RP1-RP0: Seleccin de banco de la memoria de datos 00 = Banco 0 = (00h - 7Fh) 01 = Banco 1 = (80h - 0FFh) 10 = Banco 2 = (100h - 17Fh) RP1 no se utiliza en los PIC16F84A 11 = Banco 3 = (180h - 1FFh) INICIO 233 6.7- Manejo de las Interrupciones en el PIC16F84A Muchas veces cuando ests desarrollando una actividad, como por ejemplo una tarea para entregarla al da siguiente, encuentras momentos en que necesitas interrumpir tus labores, ya sea para comer, para descansar, para atender una llamada telefnica o para alguna otra cosa. Algo similar ocurre con los programas que se ejecutan en los microcontroladores. Un programa es una secuencia de instrucciones que ejecutan una actividad en el microcontrolador. Si ese programa se encarga de leer un dato en memoria, luego lo muestra en un indicador numrico, y despus vuelve a comenzar, para que cclicamente ejecute esa actividad, entonces esa actividad podra ser el programa principal. Supongamos que ese dato que se muestra corresponde a la temperatura de una habitacin. Si se quiere leer la seal que corresponde a la lectura de temperatura y llevarla a la posicin de memoria que el programa principal busca y lo lleva al indicador, se necesitar interrumpir este programa principal por un momento, ejecutar una rutina de lectura de la seal de temperatura y almacenamiento del dato de temperatura y luego volver al programa principal en el punto donde fue interrumpido, sin que se pierda los valores de los registros que utiliza el programa principal, especialmente el registro W, el registro STATUS y cualquier otro registro que se modifique en la rutina de interrupcin. INICIO 234 Entonces, se puede definir las interrupciones, como desviaciones del flujo de control del programa originadas asncronamente mediante diversas causas que pueden ser externas al sistema, tales como el cambio de nivel de una entrada; o internas, tal como el desbordamiento en la cuenta de un temporizador. La manera de ejecutar una interrupcin, es similar al llamado de una subrutina con la instruccin CALL, ya que se almacena la direccin del PC de la siguiente instruccin a ejecutar, en el registro PILA, con la diferencia de que en la interrupcin, el programa salta a una posicin de la memoria de programa llamada vector de interrupcin. AUTOR: Csar lvarez DISEO INSTRUCCIONAL: M. Snchez y C. lvarez 100 0 20 40 60 80 Programa Principal: Lee posicin de la memoria Convierte a 7 segmentos Escribe valor en el indicador Interrupcin: Lee la seal Convierte a digital Guarda en memoria INICIO 235 Fuentes de interrupcin en el PIC16F84A En el PIC16F84A, el vector de interrupcin est ubicado en la direccin 4h de la memoria de programa. Esto significa que en esa posicin comienza la rutina de interrupcin, y por lo tanto, el programa principal no debera tener nada escrito all. Debemos considerar lo siguiente acerca de las interrupciones en el PIC16F84A: Una interrupcin puede ocurrir debido a diversas causas. Para el PIC16F84A estas causas pueden ser: Una activacin en la entrada RB0/INT Un desbordamiento en la cuenta del temporizador 0 (TMR0). El cambio de estado de uno de los 4 terminales de mayor peso del puerto B. La finalizacin de la escritura en la EEPROM. Cuando se atiende una interrupcin, el microcontrolador deshabilita automticamente cualquier otra interrupcin que pueda ocurrir, al colocarse en 0 el bit GIE del registro INTCON. Al salir de la rutina de interrupcin, por medio de la instruccin RETFIE se vuelve a habilitar automticamente la atencin de alguna otra interrupcin. Las interrupciones se pueden habilitar o deshabilitar por software al escribir un 1 o un 0 en el bit GIE del registro INTCON. Cada interrupcin se puede habilitar o deshabilitar individualmente segn los bits de control del registro INTCON.
INICIO 236 El registro INTCON Control de interrupciones La mayor parte de las indicaciones de las fuentes de interrupcin y las habilitaciones de interrupcin, se encuentran en el registro INTCON. En el caso de las habilitaciones de las interrupciones, un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las indicaciones, un 1 seala que ocurri el evento, es decir que podr interrumpir si hay habilitacin y un 0 que no ha ocurrido nada. GIE. Habilitacin global de interrupciones. Si GIE = 0 no se acepta ninguna de las interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas. EEIE. Habilitacin de interrupcin por finalizacin de la escritura en la EEPROM. T0IE. Habilitacin de interrupcin por desbordamiento de TMR0 (Temporizador 0). INTE. Habilitacin de interrupcin por la activacin del terminal RB0/INT. RBIE. Habilitacin de interrupcin por cambio de estado en RB7, RB6, RB5 RB4. T0IF. Indicador de un desbordamiento en TMR0. INTF. Indicador de la activacin en el terminal RB0/INT. RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 RB4. INICIO INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 237 Guardar W y STATUS en la rutina de interrupcin En el momento de ejecutar una rutina de interrupcin, es sumamente importante guardar los registros W y STATUS, adems de algn otro que pueda ser utilizado en el programa principal y que la rutina de interrupcin los modifique. En los PICs de la gama media esta labor no es tan directa como en otros microcontroladores, los cuales utilizan las instrucciones PUSH y POP. Aqu hay que tomar en cuenta el banco seleccionado por la RAM en el programa principal, el cual al interrumpir al microcontrolador, no sabemos cul est seleccionado. En el caso del PIC 16F84A, los registros de propsitos generales que se acceden en el banco 0, corresponden a la misma direccin en el banco 1, de esta manera bastara con salvar los registros W y STATUS como se muestra a continuacin:
Rut_interr movwf W2 ; se guarda el valor de w en W2. swapf STATUS,w ; se utiliza esta instruccin, ya que movf afecta al bit Z de STATUS movwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados ; Se ejecuta la rutina de interrupcin
swapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posicin original movwf STATUS swapf W2,f ; se toma el valor de W2 con los nibbles intercambiados swapf W2,w ; se recupera el valor de w. retfie ; Retorno de la interrupcin
INICIO 238 Ejemplo de interrupcin por TMR0 include "P16F84A.INC" ; Incluye los smbolos del PIC16F84A ; Definicin de smbolos, tales como: segundo, minuto, hora, da, etc. org 0 ; Direccin inicial del programa en el microcontrolador goto prepara ; En prepara se establece la seleccin de TMR0, interrupciones, puertos, etc. org 4 ; Direccin donde comienza la rutina de interrupcin interrupt btfsc INTCON,T0IF ; Evala si la interrupcin fue del TMR0 goto tmr0full ; si es 1 atiende rutina de TMR0 btfsc eecon1,eeif ; Evala si la interrupcin fue de la EEPROM
tmr0full movwf W2 ; se guarda el valor de w en W2, para recuperarlo al retorno swapf STATUS,w movwf STATUS2 ; Se guarda el STATUS en STATUS2, para luego recuperarlo movlw d'61 movwf TMR0 ; carga el valor 61 decimal para que se ejecuten 195 ciclos de tmr0 incf segundo,f ; Se incrementan los segundos call ajuste ; En ajuste se cambia los incrementos a la bases numricas adecuadas swapf STATUS2,w ; se recupera el valor del STATUS movwf STATUS swapf W2,f swapf W2,w ; se recupera el valor de w bcf INTCON,T0IF ; se borra el bit de interrupcin de TMR0 retfie ; Se regresa al programa principal. En la rutina ajuste, se pueden hacer ; todos los ajustes para llevar la cuenta del tiempo real prepara movlw b'00000110 ; Seleccin del preescalador a TMR0 y divisin por 128 movwf TMR0 ; Se carga a TMR0 con un valor diferente de 0 0FF para no interrumpir an bsf STATUS,RP0 ; Selecciona banco 1 para acceder a los registros OPTION y TRIS movwf REG_OPTION ; Carga al registro OPTION la configuracin movlw b11100000 ; Se habilita interrupcin global, la de TMR0 y la EEPROM movwf INTCONT ; Despus de esta instruccin, contina otras inicializaciones y el programa movlw bxxxxxxxx ; Palbra de configuracin del puerto A movwf TRISA ; Configura puerto A INICIO 239 6.8- La memoria EEPROM En muchos equipos se hace necesario el uso de datos que deben mantener su valor despus de haber quitado la energa del circuito. Un ejemplo de esto lo podemos ver en equipos que necesiten calibracin. En estos equipos el ajuste de ciertos parmetros se puede hacer por medio de resistencias ajustables o potencimetros, los cuales pueden utilizarse para la calibracin del cero, la ganancia, la linealidad, los parmetros de control y algunos otros ms. Si se dispone de una memoria que mantenga los datos despus de apagarse el equipo, estos potencimetros se hacen innecesarios, ya que estos factores de ajuste se pueden grabar en esta memoria y ser llamados por medio de un simple programa que aproveche stas y otras constantes para poder introducirlas en ecuaciones matemticas que compensen las calibraciones. Esto supone una reduccin del espacio en el circuito; una mayor seguridad para la realizacin de los ajustes, ya que se puede incluir una clave secreta que tambin puede ser grabada en la EEPROM para la solicitud del ajuste; tambin se puede lograr ajustes con mucha mayor precisin y en un tiempo mucho ms corto. El uso de una EEPROM tiene semejanzas con el de la RAM; sin embargo, hay que tomar en cuenta algunas consideraciones que se mencionarn a continuacin: El tiempo de escritura de una EEPROM est en el orden de los 10mSeg. El nmero de grabaciones en la EEPROM est limitado entre 10 5 y 10 7 veces. Se debe utilizar un cdigo especial para la grabacin de datos, para evitar el borrado accidental de la EEPROM en el momento de quitarle la alimentacin. INICIO 240 Explicacin de los registros relacionados con la EEPROM Para acceder a las direcciones de la EEPROM en el PIC16F84A, se deber utilizar los registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 08h y 09h en el banco 0 y, 88h y 89h en el banco 1 respectivamente. EEADR: Es el registro de 8 bits que tiene la direccin del dato de la EEPROM. El PIC16F84, slo puede acceder a 64 bytes de la EEPROM, por lo tanto estas direcciones estn comprendidas desde la direccin 0h hasta la 3Fh. EEDATA: Es el registro de 8 bits en el cual se escribe o se lee el valor del dato a guardar en la EEPROM en la direccin que est en el registro EEADR. EECON1: Este registro contiene los bits de control de las operaciones en la EEPROM: RD, Bit 0 (Lectura). Se escribir 1 cuando se va a realizar un ciclo de lectura de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0. WR, Bit 1 (Escritura). Se enviar 1 cuando se va a realizar un ciclo de escritura de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0. WREN, Bit 2 (Habilitacin de escritura). Si se escribe 1, se permitir la escritura de la EEPROM. Si se coloca 0, no permitir la escritura en la EEPROM. WRERR, Bit 3 (Indicador de error). Se lee un 1 si hubo error en la escritura debido a una inicializacin del PIC. Un 0 indicar que la operacin se hizo correctamente. EEIF, Bit 4 (Indicador de finalizacin de escritura). Un 1 indicar que se complet el ciclo de escritura. Se deber colocar en 0 por medio del programa. EECON2: En este registro se coloca una secuencia clave para evitar grabaciones accidentales.
INICIO 241 Escribir un dato en la EEPROM El registro EECON2 se utiliza para colocar el cdigo de control en la escritura de datos de la EEPROM y evitar una grabacin accidental de la misma. Para ello, despus de habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deber escribir en EECON2 el cdigo 55h y luego el cdigo AAh; finalmente, para grabar el dato que est en el registro EEDATA en la direccin marcada por el registro EEADR que fija la direccin de la EEPROM, se deber escribir un 1 en el bit WR del registro ECON1. Un programa propuesto que realiza la escritura de un byte en la EEPROM es el que se presenta a continuacin: BCF STATUS, RP0 ; En el banco 0 estn los registros EEADR y EEDATA MOVLW DIRECCION ; DIRECCION indica la posicin donde se guardar MOVWF EEADR ; el dato en la EEPROM MOVLW DATO ; DATO es el valor que ir a la EEPROM MOVWF EEDATA ; BSF STATUS, RP0 ; Selecciona banco 1 de la RAM BCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROM BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura . BSF EECON1, WREN ; Habilita escritura en la EEPROM MOVLW 55h ; MOVWF EECON2 ; Escribe cdigo 55h en EECON2 MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental- MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2 BSF EECON1,WR ; Comienza la grabacin del dato BSF INTCON,GIE ; Habilitacin global de interrupciones INICIO 242 Lectura de un dato en la EEPROM Durante la seccin del programa que escribe en la EEPROM se recomienda deshabilitar las interrupciones para que el proceso de escritura se realice correctamente. Despus de iniciarse el proceso de escritura de la EEPROM, se podr habilitar las interrupciones por medio de la instruccin BSF INTCON, GIE. En la escritura de la EEPROM el bit WR de EECON1 se colocar en 0 automticamente. T podrs determinar cundo termina el ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Despus de esto se deber colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM. Trata de volver a escribir el programa anterior como una rutina, de manera que la direccin y el dato provengan de registros y no de valores constantes. Para leer un dato en la EEPROM se podr utilizar la seccin de programa que se muestra a continuacin: BCF STATUS, RP0 ; Selecciona banco 0 para EEADR MOVLW DIR_LECT ; Direccin de lectura en W MOVWF EEADR ; Direccin de lectura en EEADR BSF STATUS, RP0 ; Selecciona banco 1 para EECON1 BSF EECON1, RD ; Lectura de la EEPROM BCF STATUS, RP0 ; Selecciona banco 0 para EEDATA MOVF EEDATA, W ; Coloca dato ledo de EEPROM en W Una buena prctica para escribir un dato en la EEPROM, consiste en verificar si ese dato ha sido grabado correctamente mediante la lectura del dato escrito y comparacin con l mismo por medio de una resta y al evaluar el bit Z del registro STATUS. INICIO 243 Vimos que en los PIC16C5X los 8 bits de menos peso del contador de programa ocupan la posicin 2h de la memoria RAM, y los bits de mayor peso se dividen en pginas y se encuentran en el registro STATUS. En el caso de los PICs de la gama media los bits de mayor peso estn en los 5 bits de menor peso del registro PCLATCH que est ubicado en la posicin 0Ah u 8Ah. Debido a que el PIC16F84A slo tiene acceso a 1024 direcciones de la memoria de programa (000h a 3FFh), se necesitan 10 bits, de los cuales son efectivos los ocho del PCL y los dos bits menos significativos del PCLATCH. En las instrucciones GOTO y CALL se incluyen 11 bits para cargar la direccin del PC, por tanto se puede tener acceso a 2048 posiciones. Como la capacidad del PIC16F84A es 1024 bits no tiene sentido hacer divisiones por pginas. 6.9 Registro contador de programa PIC16F84 12 11 10 9 8 7 0 PC PCL Palabra de Instruccin 2 7 4 PCLATCH 4-3 PCLATCH 0 11 INICIO 244 Para aquellas instrucciones donde el PCL es el destino, en los bits 7 a 0 del PC se obtienen del cdigo de la instruccin. Los bits superiores provienen del PCLATCH. Algunas de las instrucciones donde el PCL es el destino, o se le modifica el contenido, son: MOVWF PCL; ADDWF PCL; BSF PCL, 5; etc. Recuerda que la direccin del PCL es la 2h
PIC16F84 12 11 10 9 8 7 0 PC PCL Resultado de la ALU 5 7 PCLATCH 4-0 PCLATCH 0 INICIO El vector de inicializacin del PIC16F84A est en la direccin 3FFh, esto significa que la primera instruccin del programa se debe colocar en esa direccin. 245 El registro STACK guarda las direcciones de retorno de las rutinas que se llaman por medio de la instruccin CALL o una interrupcin, y carga la direccin de retorno al PC con la instruccin RETLW, RETURN o RETFIE. la longitud de palabra de la pila es la misma que la del PC. La pila tiene ocho niveles, a diferencia de los dos niveles que tienen los microcontroladores de la gama bsica:
Una instruccin CALL o una llamada de interrupcin coloca el contenido del nivel 7 de la pila, en el nivel 8, el nivel 6 lo coloca en el 7 y as sucesivamente hasta colocar el valor del contador del programa actual, incrementando en uno, en el nivel 1 de la pila. Si se llama a ms de ocho subrutinas en una misma secuencia, nicamente las direcciones de las ocho ms recientes sern almacenadas.
Una instruccin RETLW, RETURN o RETFIE cargar el contenido del nivel 1 de la pila al PC y el del nivel 2 al nivel 1 y as sucesivamente, hasta colocar el nivel 8 al 7. Si ms de ocho instrucciones entre RETLW, RETURN o RETFIE se ejecutan, la pila se llenar con la direccin almacenada previamente en el nivel 8. 6.10 Registro STACK (pila) INICIO 246 6.11 Los Temporizadores y algo ms de PORTB El PIC16F84A, utiliza, al igual que los PIC de la gama bsica el temporizador TMR0 y el WDT, los cuales, a su vez se programan segn el registro OPTION. El registro OPTON del PIC16F84 agrega 2 bits que en los PIC de la gama bsica no estn asignados. stos son: RBPO# (Bit 7) y INTEDEG (Bit 6). Si RBPO# = 0, conecta resistencias de valor alto a Vdd (Pull up). En el caso de INTEDEG, ste determina el tipo de transicin que llevar la interrupcin externa (RB0): 1=> Transicin de subida, 0=> Transicin de bajada. Los circuitos asociados a estos temporizadores son iguales a los de los PIC de la gama bsica, con la diferencia de que si se utiliza el TMR0 como temporizador, la entrada RA4/TOCKI se convierte en una lnea adicional del puerto A. En el caso de los PIC16F84A la ubicacin del registro OPTION, en la memoria de datos, se encuentra en la posicin 81H (banco 1). Una posibilidad que ofrece los PIC de la gama media, es que cuando se detecta un desbordamiento en el contador, se genera una seal de interrupcin, la cual se puede verificar en el bit TOI, el cual es el bit 2 del registro INTCON. Esta interrupcin se habilita al colocar un 1 al bit TOIE, que es el bit 5 del registro INTCON Si deseas repasar el tema de los temporizadores de los PIC de la gama bsica, selecciona el men siguiente: TMR0 WDT OPTION INTCON INICIO 247 6.12 Los Bits de Configuracin Al igual que los PICs de la gama bsica, los bits de configuracin del PIC16F84A se acceden slo en el momento de grabar el programa en el microcontrolador. Los bits de configuracin WDT, FOSC1 y FOSC0 del PIC 16F84 coinciden en lgica y posicin con los de los PICs de la gama bsica (Repasar). En el caso del bit de proteccin de programa, ste trabaja de la misma manera en ambos casos, pero la lgica es invertida y la ubicacin es diferente, es decir que en el PIC16F84A este bit se ubica en la posicin 4 de la palabra de configuracin y un 1 indicar que el dispositivo no estar protegido, y un 0 indicar que no ser posible leer el contenido del programa ni los datos de la EEPROM. Finalmente el PIC16F84A tiene adicionalmente el bit PWRTE#, el cual, con un 0 activa un retardo en el reinicio por 72 ms. Este bit ocupa la posicin 3 en la palabra de configuracin.
Palabra de Configuracin en el PIC16F84A: CP CP CP CP CP CP CP CP PWRTE WDTE FOSC0 FOSC1 Bit 11 10 9 8 7 6 5 4 3 2 1 Bit 0 INICIO 248 TEMA VII MICROCONTROLADORES DE LA SERIE PIC16F87X E 7.1 Generalidades E 7.2 La familia PIC16F87X E 7.3 Registros de funciones especiales E 7.4 Las interrupciones de los PIC16F87X E 7.5 Las Memorias EEPROM y FLASH E 7.6 El Puerto A, el Puerto E y el Convertidor A/D E 7.7 El Puerto B E 7.8 El Puerto C y los Temporizadores E 7.9 El Puerto C y los mdulos de Captura, Comparacin y PWM E 7.10 El Puerto C y el Mdulo de Comunicacin Serial Sncrona E 7.11 El Puerto C y la Comunicacin I2C E 7.12 El Puerto C y el USART E 7.13 El Puerto D, el Puerto E y la Interfaz Paralela E 7.14 Palabra de Configuracin
INICIO 249 Objetivos Terminales:
Establecer las diferencias de hardware entre el microcontrolador PIC16F84A y los PIC16F87X Describir las caractersticas de los PIC16F87X Explicar el uso de las interrupciones en los PIC16F87X Describir cada uno de los mdulos de hardware de los PIC16F87X Disear circuitos con microcontroladores PIC16F87X INICIO 250 7.1 Generalidades de los PIC16F87X INICIO En el tema anterior hemos visto al PIC16F84A, con el cual nos iniciamos a los microcontroladores PIC de la gama media. Qued todo bien claro? Es importante que lo hayas comprendido todo bien hasta ahora, para continuar con los PIC16F87x. Estos microcontroladores presentan una serie de caractersticas que permiten una mayor versatilidad en un sinnmero de aplicaciones. Estas caractersticas se pueden resumir en las siguientes: * Mayor capacidad de memoria RAM y EEPROM. * Manejo de hasta 14 fuentes de interrupcin. * Lneas de entrada y salida adicionales. * Dos temporizadores adicionales: TMR1 y TMR2. * Mdulos de captura, comparacin y modulador de ancho de pulsos. * Convertidor Analgico a Digital de 10 bits para varias entradas. * Mdulos de comunicacin serial. * Los modelos de 40 terminales tienen un mdulo de comunicacin paralela.
Todas estas caractersticas colocan a los PIC16F87X como la familia de microcontroladores de la gama media de mayor cantidad de recursos, y que obviamente se presentan como soluciones a una gran diversidad de desarrollos. 251 7.2 La familia de los PIC16F87X INICIO Anteriormente ya habamos presentado a la familia de los PIC16F87X. Conviene volverlos a mostrar, y esta vez observa mejor las caractersticas que presentan cada uno de sus miembros y la comparacin con el PIC16F84A: Microcontrolador PIC16F84 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877 FLASH (Programa) 1Kx14 2K x 14 2K x 14 2K x 14 4K x 14 4K x 14 8K x 14 8K x 14 RAM (Datos) 64 bytes 128 bytes 128 bytes 128 bytes 192 bytes 192 bytes 368 bytes 368 bytes EEPROM (Datos permanentes) 64 bytes 64 bytes 64 bytes 64bytes 128 bytes 128 bytes 256 bytes 256 bytes Puertos A,B A, B, C A,B,C,D,E A, B, C A, B, C A,B,C,D,E A, B, C A,B,C,D,E Entradas Analgicas No 5 canales 8 canales 5 canales 5 canales 8 canales 5 canales 8 canales Captura, Comparacin y Modulador de ancho de pulso No 1 1 1 2 2 2 2 Puerto serial No AUSART AUSART M 2 CSPI AUSART/ M 2 CSPI AUSART/ M 2 CSPI AUSART/ M 2 CSPI AUSART/ M 2 CSPI Temporizadores 1-8bits, WDT 1-16bits 2-8bits, WDT 1-16bits, 2-8bits,WDT 1-16bits, 2-8bits, WDT 1-16bits, 2 8bits, WDT 1-16bits, 2-8bits, WDT 1-16bits, 2-8bits, WDT 1-16bits 2-8bits, WDT 252 Conexiones de los PIC16F870/72/73/76 INICIO 253 Conexiones de los PIC16F871/74/77 INICIO 254 7.3 Registros de funciones especiales INICIO Sabemos que las instrucciones de los microcontroladores PIC16F87X, son las mismas que las del PIC16F84, ya que todos pertenecen a la gama media. Sin embargo, para la programacin se hace necesario conocer los nuevos registros de funciones especiales que ofrecen los PIC16F87X con sus caractersticas mejoradas. Estos registros se ubican en la memoria RAM del microcontrolador. Recordemos que para acceder a una posicin de la RAM, contamos con 7 bits en la palabra de instruccin, que corresponden directamente a 128 posiciones. Para seleccionar un banco de la memoria RAM se cuenta con los bits RP1 y RP0 que se ubican en el registro STATUS. En el caso del PIC16F84 slo se puede modificar el bit RP0, y por consiguiente, nicamente se puede acceder a dos bancos de la RAM. En el caso de los PIC16F87X, podemos acceder a 4 bancos de la RAM. Los registros de funciones especiales los podemos ubicar en las tablas de las pginas siguientes, no hace falta que te lo aprendas todava, despus lo analizaremos con ms detalle. En ellas encontraremos a los siguientes microcontroladores: PIC16F870 y PIC16F871 PIC16F872 PIC16F873 y PIC16F874 PIC16F876 y PIC16F877 Bits de los registros de Funciones especiales 255 PIC16F870 y 871 Banco 0 Banco 1 Banco 2 Banco 3 En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F870 y PIC16F871. Notas: (1) El registro indirecto INDF, no corresponde a una posicin fija en la RAM; al acceder a ese registro, se lee o escribe en el registro sealado en la direccin indicada por el registro FSR.
(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.
(3) El PIC16F870 no tiene los puertos D y E ni los registros TRIS correspondientes.
INICIO 256 PIC16F872 Banco 0 Banco 1 Banco 2 Banco 3 INICIO En la siguiente tabla, se presentan las direcciones y los nombres de los registros del PIC16F872. Notas: (1) El registro indirecto INDF, no corresponde a una posicin fija en la RAM; al acceder a ese registro, se lee o escribe en el registro sealado en la direccin indicada por el registro FSR.
(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.
257 PIC16F873 y 874 Banco 0 Banco 1 Banco 2 Banco 3 INICIO En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F873 y PIC16F874. Notas: (1) El registro indirecto INDF, no corresponde a una posicin fija en la RAM; al acceder a ese registro, se lee o escribe en el registro sealado en la direccin indicada por el registro FSR.
(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.
(3) El PIC16F873 no tiene los puertos D y E ni los registros TRIS correspondientes.
258 PIC16F876 y 877 Banco 0 Banco 1 Banco 2 Banco 3 INICIO En la siguiente tabla, se presentan las direcciones y los nombres de los registros de los PIC16F876 y PIC16F877. Notas: (1) El registro indirecto INDF, no corresponde a una posicin fija en la RAM; al acceder a ese registro, se lee o escribe en el registro sealado en la direccin indicada por el registro FSR.
(2) Los espacios de la tabla en color gris, corresponden a direcciones no implementadas.
(3) El PIC16F876 no tiene los puertos D y E ni los registros TRIS correspondientes.
259 Bits de los Registros de Funciones Especiales (Banco 0) INICIO 260 Bits de los Registros de Funciones Especiales (Banco 1) INICIO 261 Bits de los Registros de Funciones Especiales (Bancos 2 y 3) INICIO 262 Diferencias entre los registros de funciones especiales de los PIC16F87X Los PIC16F87X tienen ms registros de funciones especiales que el PIC16F84. En la siguiente tabla, podemos observar aquellos registros diferentes entre ellos, sus respectivas ubicaciones y a qu funcin est asociada: INICIO Funciones asociadas Registro PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877 PORTD ----- 08h ----- ----- 08h ----- 08h Puerto TRISD ----- 88h ----- ----- 88h ----- 88h Paralelo PORTE ----- 09h ----- ----- 09h ----- 09h TRISE ----- 89h ----- ----- 89h ----- 89h SSPBUF ----- ----- 13h 13h 13h 13h 13h Mdulo de SSPCON ----- ----- 14h 14h 14h 14h 14h Comunicacin SSPCON2 ----- ----- 91h 91h 91h 91h 91h Serial SSPADD ----- ----- 93h 93h 93h 93h 93h Sncrona SSPSTAT ----- ----- 94h 94h 94h 94h 94h RCSTA 18h 18h ----- 18h 18h 18h 18h Puerto TXTA 98h 98h ----- 98h 98h 98h 98h de Comunicacin TXREG 19h 19h ----- 19h 19h 19h 19h Serial Universal SPBRG 99h 99h ----- 99h 99h 99h 99h USART RCREG 1Ah 1Ah ----- 1Ah 1Ah 1Ah 1Ah Segundo mdulo CCPR2L ----- ----- ----- 1Bh 1Bh 1Bh 1Bh de Comparacin, CCPR2H ----- ----- ----- 1Ch 1Ch 1Ch 1Ch Captura y PWM CCP2CON ----- ----- ----- 1Dh 1Dh 1Dh 1Dh 263 7.4 Las Interrupciones de los PIC16F87X Los microcontroladores PIC de la serie 16F87X de 28 terminales tienen 13 fuentes de interrupcin, y los de 40 terminales tienen 14 fuentes de interrupcin. Esta cantidad de fuentes de interrupcin obedece a que estos microcontroladores cuentan con ms perifricos que el PIC16F84. Entre ellos podemos nombrar: El convertidor analgico a digital, el mdulo de comparacin, captura y modulador de ancho de pulso (PWM), el mdulo de comunicacin serial y el mdulo de comunicacin paralela. Los registros asociados a las interrupciones son los siguientes: Registro Funcin Direcciones INTCON Habilitacin y sealizado de interrupciones 0 0BH, 8BH, 10BH, 18BH PIE1 Habilitacin de Interrupciones 1 8CH PIE2 Habilitacin de Interrupciones 2 8DH PIR1 Indicador de Interrupciones 1 0CH PIR2 Indicador de Interrupciones 2 0DH Bsicamente estos registros contienen los bits que permiten o no las interrupciones en el microcontrolador (registros INTCON, PIE1 y PIE2) y los bits que se establecen cuando se genera una interrupcin (registros INTCON, PIR1 y PIR2). El registro INTCON es similar al del PIC16F84, con la diferencia de que se sustituye la habilitacin de la escritura de la EEPROM por la de habilitacin de los dispositivos que no estn en INTCON. Esto se podr ver mejor en la siguiente pgina. INICIO 264 El registro INTCON Control de interrupciones El registro INTCON contiene algunas de las indicaciones de las fuentes de interrupcin y las habilitaciones de interrupcin. En el caso de las habilitaciones de las interrupciones, un 1 indica habilitado y un 0 indica deshabilitado. Para el caso de las indicaciones, un 1 seala que ocurri el evento, es decir que podr interrumpir si hay habilitacin y un 0 que no ha ocurrido nada. Los bits del registro INTCON son:
GIE. Habilitacin global de interrupciones. Si GIE = 0, no se acepta ninguna de las interrupciones. Si GIE = 1, se aceptan solamente las interrupciones habilitadas. PEIE. Habilitacin de interrupciones de dispositivos que no se controlan con INTCON. T0IE. Habilitacin de interrupcin por desbordamiento de TMR0 (Temporizador 0). INTE. Habilitacin de interrupcin por la activacin del terminal RB0/INT. RBIE. Habilitacin de interrupcin por cambio de estado en RB7, RB6, RB5 RB4. T0IF. Indicador de un desbordamiento en TMR0. INTF. Indicador de la activacin en el terminal RB0/INT. RBIF. Indicador de un cambio de estado en RB7, RB6, RB5 RB4. INICIO INTCON (Acceso a todos los bancos por medio de la direccin 0BH) GIE PEIE T0IE INTE RBIE T0IF INTF RBIF bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 265 Registro PIE1 BIT Funcin PSPIE Habilitacin de interrupcin para escritura o lectura de la interfaz paralela ADIE Habilitacin de interrupcin para indicar la finalizacin de una conversin A/D RCIE Habilitacin de interrupcin que indica que se recibi un dato en del USART TXIE Habilitacin de interrupcin que indica que se envi un dato desde el USART SSPIE Habilitacin de interrupcin para el puerto serial sncrono CCP1IE Habilitacin de interrupcin para CCP1 al producirse una captura o comparacin TMR2IE Habilitacin de interrupcin para un desbordamiento del TMR2 TMR1IE Habilitacin de interrupcin para un desbordamiento del TMR1 PIE1 (8CH) PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 INICIO El registro PIE1 contiene 8 bits que se utilizan para la habilitacin de ocho de las interrupciones de los PIC16F87X. 266 Registro PIE2 BIT Funcin EEIE Habilitacin de interrupcin para finalizacin de escritura en la EEPROM BCLIE Habilitacin de interrupcin para indicar colisin de datos en el bus SSP CCP2IE Habilitacin de interrupcin para CCP2 al producirse una captura o comparacin PIE2 (8DH) --- 0 --- EEIE BCLIE --- --- CCP2IE bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0
(1) Este bit es reservado y deber mantenerse en 0 INICIO El registro PIE2 contiene 3 bits que se utilizan para la habilitacin de tres de las interrupciones de los PIC16F87X. 267 Registro PIR1 BIT Funcin PSPIF Aviso de interrupcin por escritura o lectura de la interfaz paralela ADIF Aviso de interrupcin para indicar la finalizacin de una conversin A/D RCIF Aviso de interrupcin para indicar que indica que se recibi un dato en del USART TXIF Aviso de interrupcin para indicar que indica que se envi un dato desde el USART SSPIF Aviso de interrupcin por el puerto serial sncrono CCP1IF Aviso de interrupcin por CCP1 al producirse una captura o comparacin TMR2IF Aviso de interrupcin por un desbordamiento del TMR2 TMR1IF Aviso de interrupcin por un desbordamiento del TMR1 PIR1 (0CH) PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 INICIO El registro PIR1 contiene 8 bits que se utilizan para la indicacin de ocho de las interrupciones de los PIC16F87X. 268 Registro PIR2 BIT Funcin EEIF Aviso de interrupcin por finalizacin de escritura en la EEPROM BCLIF Aviso de interrupcin para indicar colisin de datos en el bus SSP CCP2IF Aviso de interrupcin por CCP2 al producirse una captura o comparacin PIR2 (0DH) --- 0 --- EEIF BCLIF --- --- CCP2IF bit7 bit6 (1) bit5 bit4 bit3 bit2 bit1 bit0
(1) Este bit es reservado y deber mantenerse en 0
INICIO El registro PIR2 contiene 3 bits que se utilizan para la indicacin de tres de las interrupciones de los PIC16F87X. 269 Salvando los registros W y STATUS al atender una interrupcin Hay que tener un especial cuidado cuando se manejan las interrupciones, sobretodo para recuperar el contenido de los registros W y STATUS en el programa principal, ya que de lo contrario se pierde el control del programa. En los microcontroladores de la serie PIC16F87X, encontramos que existen cuatro bancos de la memoria RAM, y si el programa principal est accediendo a uno de ellos, en una interrupcin podramos cambiar el acceso a otro banco de la RAM. El reto est en recuperar los valores de W y STATUS que tena el programa principal antes de la interrupcin. Si observamos los bancos de memoria en los PIC16F870, 871, 872, 876 y 877; se puede ver que los registros ubicados en la parte final de cada banco, se acceden por medio de las direcciones 70h hasta la 7Fh. Por lo tanto lo que tenemos que hacer, es que en una interrupcin se salven W y STATUS en uno de esos registros:
Rut_interr ; Las direcciones de W2 y STATUS2 deben estar entre 70h y 7Fh movwf W2 ; se guarda el valor de w en W2. swapf STATUS,w ; se utiliza esta instruccin, ya que movf afecta al bit Z de STATUS movwf STATUS2 ; Se guarda el STATUS en STATUS2 con los nibbles intercambiados ; Se ejecuta la rutina de interrupcin ; Al final de la interrupcin se escribe lo siguiente swapf STATUS2,w ; se recupera el valor del STATUS con los nibbles en la posicin movwf STATUS ; original, ya que se haba guardado con los nibbles intercambiados swapf W2,f ; se toma el valor de W2 con los nibbles intercambiados swapf W2,w ; se recupera el valor original de w. retfie ; Retorno de la interrupcin
INICIO 270 En el caso de los PIC16F873 y PIC16F874 En los PIC16F873 y 874, no encontramos registros que se acceden en los cuatro bancos, sino en el 0 y 2 en el 1 y 3. Es decir que con el control de RP0, podemos guardar y recuperar W y STATUS. Guardar W y STATUS se hace ms complejo que en los otros PIC16F87X, y se sugiere hacerlo como se presenta a continuacin:
Push btfss STATUS,RP0 ; Chequea si el programa principal seala al banco 0 goto rp0_en_0 bcf STATUS,RP0 ; Si no estaba, selecciona el banco 0 para guardar movwf W2 ; w y STATUS swapf STATUS,w movwf STATUS2 bsf STATUS2,1 ; Ntese que se cambia el bit guardado que corresponde goto rutint ; a RP0, que pas de la posicin 5 a 1 con el swapf rp0_en_0 movwf W2 ; Si el programa principal seala el banco 0 no se swap STATUS,w ; realizan modificaciones movwf STATUS2 rutint ; Rutina de interrupcin
pop swapf STATUS2,w movwf STATUS ; se recupera el status, pero como pudo haber cambiado btfss STATUS,RP0 ; RP0, se chequea para recuperar correctamente a W2 goto recup_w ; en el banco 0 bcf STATUS,RP0 swap W2,f swap W2,w bsf STATUS,RP0 ; se coloca como estaba RP0 en el programa principal retfie recup_w swapf W2,f ; si RP0 era 0, no se hace cambios y se recupera w swapf W2,w retfie INICIO 271 Actividades Ya hemos visto cmo funcionan las interrupciones, y cmo hacer un programa para salvar los registros W y STATUS cuando se atiende una interrupcin. Debes considerar siempre estos programas que se han mostrado anteriormente, por tanto te recomendamos que los escribas, o los copies, y lo guardes en tus archivos personales de tus programas. Por los momentos, no te proponemos alguna otra actividad. Pensamos que comprenders mejor acerca del manejo de interrupciones, a medida que vayas conociendo cada mdulo de los PIC16F87X, los cuales vers, poco a poco en las siguientes secciones. Recuerda que es importante que sepas que bsicamente en el manejo de las interrupciones, cuentas con bits que te habilitan o no cada una de las interrupciones, y que adems puedes acceder a los bits que te avisan cul fue la interrupcin que se gener mientras se ejecutaba el programa principal. INICIO 272 7.5 Las Memorias EEPROM y FLASH En los PIC16F87X, se pueden escribir o leer datos, tanto en la EEPROM, como en la memoria FLASH. Para escribir o leer la EEPROM, bsicamente se ejecutan los mismos pasos que con el PIC16F84, con la diferencia de que en los PIC16F87X hay que colocar en 0 el bit EEPGD (bit 7) del registro EECON1 (direccin 18CH), para seleccionar la EEPROM. Para leer o escribir la memoria FLASH necesitaremos que los registros de direccin y de datos tengan mayor longitud, porque la FLASH es de 14 bits de contenido, y entre 11 y 13 bits de direccin. Por lo tanto se agregarn los registros EEADRH, para los bits ms significativos de la direccin, y EEDATAH, para los bits ms significativos del contenido a grabar en la FLASH. La escritura en la FLASH puede protegerse por reas o totalmente, por medio de los bits de configuracin. Estos bits se acceden en el momento de grabar el programa, al utilizar un programador de microcontroladores. INICIO 273 Registros asociados para la lectura y escritura de la EEPROM y la FLASH En la siguiente tabla se presentan los registros asociados para la lectura y escritura de las memorias EEPROM y la FLASH. Direccin Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR y BOR Otros Resets 0BH (todos los bancos) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u 10DH EEADR Registro Direccin EEPROM y la FLASH xxxx xxxx uuuu uuuu 10FH EEADRH ---- ---- ---- Direccin Alta de la FLASH xxxx xxxx uuuu uuuu 10CH EEDATA Registro de Dato de la EEPROM y la FLASH xxxx xxxx uuuu uuuu 10EH EEDATAH ---- ---- Dato Alto de la FLASH xxxx xxxx uuuu uuuu 18CH EECON1 EEPGD ---- ---- ---- WRERR WREN WR RD x--- x000 x--- u000 18DH EECON2 Registro de control de la EEPROM y la FLASH 8DH PIE2 ---- 0 ---- EEIE BCLIE ---- ---- CCP2IE -r-0 0--0 -r-0 0--0 0DH PIR2 ---- 0 ---- EEIF BCLIF ---- ---- CCP2IF -r-0 0--0 -r-0 0--0 INICIO 274 Explicacin de los registros relacionados con la EEPROM Para acceder a las direcciones de la EEPROM en los PIC16F87X, se deber utilizar los registros: EEADR, EEDATA, EECON1 y EECON2. Las direcciones son: 10Ch y 10Dh en el banco 2, y 18Ch y 18Dh en el banco 3 respectivamente. EEADR: Es el registro de 8 bits que tiene la direccin del dato de la EEPROM. EEDATA: Es el registro de 8 bits en el cual se escribe o se lee el valor del dato a guardar en la EEPROM en la direccin que est en el registro EEADR. EECON1: Este registro contiene los bits de control de las operaciones en la EEPROM: RD, Bit 0 (Lectura). Se escribir 1 cuando se va a realizar un ciclo de lectura de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0. WR, Bit 1 (Escritura). Se enviar 1 cuando se va a realizar un ciclo de escritura de la EEPROM, al terminar se colocar en cero. No admite la escritura de 0. WREN, Bit 2 (Habilitacin de escritura). Si se escribe 1, se permitir la escritura de la EEPROM. Si se coloca 0, no permitir la escritura en la EEPROM. WRERR, Bit 3 (Indicador de error). Se lee un 1 si hubo error en la escritura debido a una inicializacin del PIC. Un 0 indicar que la operacin se hizo correctamente. EEPGD, Bit 7 (Acceso a EEPROM o FLASH). Un 1 indicar que la operacin se relaciona con la FLASH, un 0 indicar que la operacin se relaciona con la EEPROM. EECON2: En este registro se coloca una secuencia clave para evitar grabaciones accidentales.
INICIO 275 Escribir un dato en la EEPROM El registro EECON2 se utiliza para colocar el cdigo de control en la escritura de datos de la EEPROM y evitar una grabacin accidental de la misma. Para ello, despus de habilitar la escritura de la EEPROM al poner en 1 el bit WREN de EECON1, se deber escribir en EECON2 el cdigo 55h y luego el cdigo 0AAh; finalmente, para grabar el dato que est en el registro EEDATA en la direccin marcada por el registro EEADR que fija la direccin de la EEPROM, se deber escribir un 1 en el bit WR del registro ECON1. Un programa propuesto que realiza la escritura de un byte en la EEPROM es el que se presenta a continuacin: BCF STATUS, RP0 ; En el banco 2 estn los registros EEADR y EEDATA BSF STATUS, RP1 ; MOVF DIRECCION,W ; En DIRECCION est la posicin donde se guardar MOVWF EEADR ; el dato en la EEPROM MOVF DATO,W ; En DATO est el valor que ir a la EEPROM MOVWF EEDATA ; BSF STATUS, RP0 ; Selecciona banco 3 de la RAM BCF INTCON, GIE ; Deshabilita interrupciones al escribir EEPROM BCF EECON1, EEPGD ; Selecciona acceso a la EEPROM BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura . BSF EECON1, WREN ; Habilita escritura en la EEPROM MOVLW 55h ; MOVWF EECON2 ; Escribe cdigo 55h en EECON2 MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental- MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2 BSF EECON1,WR ; Comienza la grabacin del dato BSF INTCON,GIE ; Habilitacin global de interrupciones INICIO 276 Lectura de un dato en la EEPROM Durante la seccin del programa que escribe en la EEPROM se recomienda deshabilitar las interrupciones para que el proceso de escritura se realice correctamente. Despus de iniciarse el proceso de escritura de la EEPROM, se podr habilitar las interrupciones por medio de la instruccin BSF INTCON, GIE. En la escritura de la EEPROM el bit WR de EECON1 se colocar en 0 automticamente. T podrs determinar cundo termina el ciclo de escritura al leer un 1 en el bit EEIF del registro EECON1. Despus de esto se deber colocar el bit WREN en 0 para prevenir un borrado accidental de la EEPROM. Para leer un dato en la EEPROM se podr utilizar la seccin de programa que se muestra a continuacin:
BCF STATUS, RP0 ; Selecciona banco 2 para EEADR BSF STATUS, RP1 : MOVLW DIR_LECT ; Direccin de lectura en W MOVWF EEADR ; Direccin de lectura en EEADR BSF STATUS, RP0 ; Selecciona banco 3 para EECON1 BCF EECON1, EEPGD ; Selecciona acceso a la EEPROM BSF EECON1, RD ; Lectura de la EEPROM BCF STATUS, RP0 ; Selecciona banco 2 para EEDATA MOVF EEDATA, W ; Coloca dato ledo de EEPROM en W Una buena prctica para escribir un dato en la EEPROM, consiste en verificar si ese dato ha sido grabado correctamente mediante la lectura del dato escrito y comparacin con l mismo por medio de una resta y al evaluar el bit Z del registro STATUS. INICIO 277 Escribir un dato en la FLASH Para escribir un dato en la FLASH, la direccin de acceso no debe estar protegida. Por otro lado, despus del proceso de escritura, el microcontrolador no lee las siguientes dos instrucciones, y ste se inhibe durante la operacin de escritura. A continuacin se presenta una seccin de programa para escribir un dato en la FLASH.
BCF STATUS, RP0 ; En el banco 2 estn los registros EEADR, EEADRH, BSF STATUS, RP1 ; EEDATA y EEDATAH MOVF DIRECCIONH,W ; En DIRECCIONH est la posicin ms significativa donde MOVWF EEADRH ; se guardar el dato en la FLASH MOVF DIRECCIONL,W ; En DIRECCIONL est la posicin menos significativa donde MOVWF EEADR ; se guardar el dato en la FLASH MOVF DATOH,W ; En DATOH est el valor ms significativo del dato MOVWF EEDATAH ; MOVF DATOL,W ; En DATOL est el valor menos significativo del dato MOVWF EEDATA BSF STATUS, RP0 ; Selecciona banco 3 de la RAM BCF INTCON, GIE ; Deshabilita interrupciones al escribir en la FLASH BSF EECON1, EEPGD ; Selecciona acceso a la FLASH BCF EECON1, EEIF ; Se borra el bit indicador de finalizacin de escritura . BSF EECON1, WREN ; Habilita escritura en la EEPROM MOVLW 55h ; MOVWF EECON2 ; Escribe cdigo 55h en EECON2 MOVLW 0AAh ; (Cdigos de proteccin para no grabar accidental- MOVWF EECON2 ; mente un dato) Escribe cdigo AAH en EECON2 BSF EECON1,WR ; Comienza la grabacin del dato NOP ; El microcontrolador ignora estas dos instrucciones y contina NOP ; despus de terminar el proceso de grabacin BSF INTCON,GIE ; Habilitacin global de interrupciones BCF EECON1, WREN ; Se deshabilita la escritura para prevenir un borrado accidental
INICIO 278 Lectura de un dato en la FLASH Una seccin de programa para leer un dato de la FLASH, es la que se muestra a continuacin:
BCF STATUS, RP0 ; Selecciona banco 2 para EEADR BSF STATUS, RP1 : MOVLW DIR_LECTH ; Direccin ms significativa de lectura en W MOVWF EEADRH ; DIR_LECTH en EEADRH MOVLW DIR_LECTL ; Direccin menos significativa de lectura en W MOVWF EEADR ; DIR_LECTL en EEADR BSF STATUS, RP0 ; Selecciona banco 3 para EECON1 BSF EECON1, EEPGD ; Selecciona acceso a la FLASH BSF EECON1, RD ; Lectura de la FLASH NOP ; Despus de esta instruccin, la memoria de programa NOP ; es leda en los siguientes dos ciclos BCF STATUS, RP0 ; Selecciona banco 2 para EEDATA MOVF EEDATA, W ; Coloca dato bajo ledo de la FLASH en W MOVWF DATOL ; Parte menos significativa del dato en DATOL MOVF EEDATAH,W ; Coloca dato alto ledo de la FLASH en W MOVWF DATOH ; Parte ms significativa del dato en DATOH
Al igual que en el caso de la EEPROM, se considera buena prctica leer los datos, depus de que estos sean grabados.
INICIO 279 Proteccin de la FLASH La memoria FLASH puede ser protegida totalmente o por secciones, tanto para la lectura como para la escritura. Para ello, antes del proceso de grabacin o lectura, hay que acceder a los bits CP1, CP0 y WRT de la palabra de configuracin del microcontrolador. Si el bit WRT vale 1 se podr escribir en la memoria FLASH del microcontrolador, si vale 0 no se podr escribir. A continuacin se presenta cmo se protege la escritura de la FLASH segn los valores de CP1 y CP0 y el modelo del microcontrolador. Modelo PIC CP1 CP0 Direccin inicial de proteccin Direccin final de proteccin PIC16F870/871/872 0 0 TODO PROTEGIDO PIC16F873/874 0 0 0000H 0FFFH PIC16F873/874 0 1 0800H 0FFFH PIC16F873/874 1 0 0F00H 0FFFH PIC16F876/877 0 0 0000H 1FFFH PIC16F876/877 0 1 1000H 1FFFH PIC16F876/877 1 0 1F00H 1FFFH Todos los modelos 1 1 NO PROTEGIDO INICIO 280 Actividades Hemos visto cmo puedes guardar y leer datos de la EEPROM, por supuesto que las lneas de programa mostradas anteriormente necesitan ser completadas para que pueda trabajar bien en un programa. La primera actividad propuesta para esta seccin, es que puedas introducir un dato de 8 bits, a travs del puerto B, lo guardes en la EEPROM. Despus apagues el dispositivo, y puedas leer el dato que habas guardado en ese puerto. Para ello debers colocar un interruptor de control en una lnea del puerto C, de manera que en un momento dado el puerto B trabaje como entrada, lea el dato y lo guarde en una posicin de la EEPROM, y en la otra posicin de esa lnea del puerto C, el puerto B trabaje como salida y aparezca el dato desde la posicin donde guardaste el dato anteriormente. La segunda actividad propuesta es hacer un contador de dos dgitos 7 segmentos, que tenga un pulsador para la cuenta ascendente, otro para la cuenta descendente y uno ms para almacenar el valor de la cuenta en la EEPROM, de manera que al encender el dispositivo, el valor que aparezca en pantalla, sea el que se almacen en la EEPROM, y desde all se seguir el conteo.
INICIO 281 7.6 El Puerto A, el Puerto E y el Convertidor A/D INICIO En vista de que los microcontroladores de la serie PIC16F87X tienen muy diversas aplicaciones, los terminales de los puertos pueden poseer varias funciones de manera multiplexada. Por otro lado, los dispositivos de 28 terminales tienen 22 lneas de entrada-salida (PORTA, PORTB y PORC) y los microcontroladores de 40 terminales tienen 33 lneas E/S (PORTA, PORTB, PORTC, PORTD y PORTE). Recuerda que cada terminal de un puerto, si est configurado como E/S digital, se puede programar como entrada o salida, al colocar el bit asociado del registro TRIS en 1 0 respectivamente. El puerto A (PORTA) dispone de 6 terminales. La funcin que puede realizar cada terminal se resume en la siguiente tabla: Cada terminal se puede configurar como entrada o salida de manera individual mediante el registro TRISA, ubicado en la direccin 85h de la RAM, tal como se hace con el PIC16F84A. Para configurar una funcin relacionada con el convertidor analgico a digital, se deber acceder a los registros ADCON0 y ADCON1 (direcciones 1FH y 9FH respectivamente).
RA5/AN4/SS# RA4/TOCKI RA3/AN3/Vref RA2/AN2 RA1/AN1 RA0/AN0 E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL ENTRADA ANALGICA 4 ENTRADA ANALGICA 3 ENTRADA ANALGICA 2 ENTRADA ANALGICA 1 ENTRADA ANALGICA 0 MODO ESCLAVO EN COMUNICACIN SERIAL SNCRONA ENTRADA DE RELOJ DEL TMRO VOLTAJE DE REFERENCIA A/D C 282 Registros asociados a PORTA INICIO La siguiente tabla muestra los registros asociados al puerto A y la ubicacin de los mismos en la memoria RAM. Las lneas PCFG0 PCFG3 del registro ADCON1 configuran las lneas del puerto A y el puerto E para que trabajen como entradas analgicas o digitales (los PIC16F870, 872, 873 y 876 no tienen puerto E). Debemos observar que los bits de estos registros son puestos a 0 despus de un RESET, un POR (inicializacin por encendido) o un BOR (inicializacin por baja de Vdd). Esto significa, como se ver ms adelante, que la configuracin inicial de las lneas de los puertos A y E estarn como entradas analgicas. Si se desea que todas ellas trabajen en forma digital, deber escribirse el valor 011x en los cuatro bits menos significativos del registro ADCON1. 0--- 0000 0--- 0000 PCFG0 PCFG1 PCFG2 PCFG3 --- --- --- ADFM ADCON1 9Fh 0000 00-0 --11 1111 --0u 0000 Otros Resets 0000 00-0 --11 1111 --0x 0000 Valor en POR y BOR CHS2 RA5 Bit 5 ADCS0 --- --- Bit 6 ADCS1 --- --- Bit 7 ADCON0 TRISA PORTA Registro ADON --- GO/ DONE# CHS0 CHS1 1Fh 85h RA0 RA1 RA2 RA3 RA4 05h Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin Registro de Configuracin de PORTA 283 El Puerto E y las entradas analgicas AN5, AN6 y AN7 Los microcontroladores PIC16F871, 874 y 877 tienen tres entradas analgicas adicionales, las cuales se encuentran en el puerto E (PORTE, direccin 09H). En la tabla se indica que cada lnea del puerto E, puede trabajar como Entrada/Salida Digital, como entrada analgica o como control del puerto paralelo. En esta seccin, slo veremos las dos primeras funciones, y cuando se estudie el puerto paralelo, se ver la tercera funcin. En la direccin 89H se encuentra TRISE, que es el que configura las lneas digitales del puerto E y la interfaz paralela (Bits 4 a 7). La configuracin como entrada analgica o E/S digital, se hace por medio del registro ADCON1. Direccin Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en POR y BOR Otros Resets 89h TRISE IBF OBF IBOV PSP MODE --- 0000 -111 0000 -111 Registro de Configuracin de PORTE INICIO Lectura en el modo PSP (RD) Entrada Analgica 5 E/S DIGITAL RE0/RD#/AN5 Escritura en el modo PSP (WR) Entrada Analgica 6 E/S DIGITAL RE1/WR#/AN6 Seleccin de Chip en el modo PSP (CS) Entrada Analgica 7 E/S DIGITAL RE2/CS#/AN7 c c 284 El Convertidor Analgico a Digital Los microcontroladores PIC16F87X poseen un convertidor analgico digital de 10 bits de resolucin y cinco canales de entrada en los modelos de 28 terminales (puerto A) y ocho canales en los que tienen 40 terminales (puertos A y E). Este convertidor puede aceptar slo seales positivas comprendidas entre V ref + y V ref - . La resolucin que tiene cada bit que procede de la conversin es funcin de la tensin de referencia segn la siguiente ecuacin:
Resolucin = (V ref + - V ref - )/1024bits
En el caso de que la tensin de referencia positiva (V ref + ) sea igual a 5 voltios y la negativa sea 0V, la resolucin ser de 4,8mV/bit. La tensin de referencia determina los lmites mximo y mnimo de la tensin analgica que puede leer el microcontrolador, y puede seleccionarse externamente por medio de RA3 (V ref + ) y RA2 (V ref - ) o emplearse la fuente de alimentacin del microcontrolador (Vdd y Vss). El convertidor analgico digital es el nico dispositivo que puede seleccionarse para que est activo en el modo de reposo, para ello, los pulsos del convertidor debern conectarse al oscilador RC interno. Los cinco primeros canales de entradas analgicas del PIC16F87X estn en el puerto A. Por lo tanto se deben configurar dichas lneas para expresar aqullas que se utilizarn como entradas analgicas. El convertidor analgico a digital utiliza la tcnica de aproximaciones sucesivas y requiere una tensin mayor a 2V y menor a Vdd Vss como voltaje de referencia. INICIO 285 Descripcin del funcionamiento del AD/C Para que funcione el convertidor analgico a digital (AD/C), se necesita configurarlo inicialmente. Esto significa que hay que definir las lneas que se utilizarn como entradas analgicas, cules van a ser las tensiones de referencia a emplear, la velocidad de conversin del AD/C, cul oscilador se va a emplear, cmo se escribir el valor digital en los registros ADRESH y ADRESL, y la habilitacin o no de la interrupcin por convertidor. Despus de esto, en el programa se seleccionar cada canal a convertir seguido de la orden de conversin. En principio, el AD/C utiliza la tcnica de aproximaciones sucesivas y est controlado por un oscilador. Estos pulsos pueden ser una seal proveniente del oscilador de cristal, dividida entre 2, 8 32, o el oscilador RC interno del microcontrolador. Si se selecciona esta ltima opcin, se podrn hacer conversiones durante el modo de reposo. Es importante tomar en cuenta que el tiempo del AD/C para cada bit, no debe ser menor de 1,6Seg, para que las conversiones se hagan correctamente. En el caso de utilizar el oscilador RC, este tiempo es de aproximadamente 4Seg. La seal a convertir se selecciona por medio del multiplexer analgico, luego va al circuito de muestreo y retencin y despus al convertidor A/D. El tiempo total de lectura est dado por el tiempo de adquisicin mas el tiempo que emplea el convertidor. Un dato importante es conocer el tiempo de lectura de cada seal, para el empleo de circuitos de control. En la siguiente pgina se muestra el clculo del tiempo de lectura y la frecuencia de muestreo para la seal correspondiente a un canal. INICIO 286 Tiempo de lectura del convertidor A/D El tiempo de lectura para la seal de cada canal, est dado por el tiempo de adquisicin mas el tiempo de conversin del convertidor A/D. El tiempo de adquisicin est dado por la siguiente ecuacin: t adq = t amp + t cc + t cT Donde: t amp es el tiempo de establecimiento del amplificador, 2Seg. t cc es el tiempo de carga del condensador del circuito de muestreo y retencin (sample & hold), 16,5Seg. t cT es el tiempo debido al coeficiente de temperatura: t cT = (T-25C)0,05Seg El tiempo de conversin est dado por 12t AD , donde t AD es el tiempo de conversin de cada bit. El tiempo de lectura mnimo a 25C est dado para t AD = 1,6Seg: t lect = 2Seg + 16,5Seg + 0 + 12x1,6Seg = 37,7Seg La mxima velocidad de muestreo se dar para 40Seg, dando un margen de 2Seg para la espera del convertidor y la realizacin de instrucciones de lectura y ordenamiento, es decir que estar en el orden de las 25K muestras por segundo. INICIO 287 Configuracin del Convertidor A/D En resumen, los pasos necesarios para configurar el convertidor A/D son: Determinar las lneas que se utilizarn como entradas analgicas. Seleccionar las tensiones de referencia. Seleccionar el oscilador del convertidor. Seleccionar el modo de escritura en los registros ADRESH-L del convertidor A/D. Activar la interrupcin para el convertidor A/D.
INICIO 288 Seleccin de las entradas analgicas y las de referencia Para seleccionar las lneas que se utilizarn como entradas analgicas y las tensiones de referencia, se selecciona el cdigo apropiado de PCFG3-0 en el registro ADCON1, para ello se busca en la siguiente tabla la opcin ms conveniente: Notas: 1: Estos canales no son disponibles en los PIC16F870, 872, 873 y 876. 2: Esta columna indica el nmero de canales analgicos y el nmero de entradas de referencia. INICIO 289 El oscilador del convertidor A/D ADCS1 - ADCS0 Frecuencia 00 fosc/2 01 fosc/8 10 fosc/32 11 Osilador RC interno Para seleccionar el oscilador, se debe acceder a los bits ADCS1 y ADCS0 del registro ADCON0. En la siguiente tabla podrs escoger la opcin adecuada: Debe tomarse en cuenta que el tiempo de conversin de cada bit debe ser mayor o igual a 1,6Seg. La frecuencia mxima del cristal segn los valores de ADCS1-ADCS0 se muestra a continuacin: Nota 1: El tiempo tpico de conversin, al utilizar el oscilador interno, es aproximadamente 4Seg, aunque ste puede estar comprendido entre 2 y 6Seg. INICIO 290 Seleccin de la escritura en los registros ADRESH y ADRESL En los registros ADRESH y ADRESL se escribe el resultado de la conversin analgica a digital. Por medio del bit ACFM (bit7) que est en el registro ADCON1 (direccin 9FH). Un 1 en el bit ACFM alnea la lectura hacia la derecha, y un 0 lo alnea hacia la izquierda. INICIO 291 Configuracin de los registros de interrupciones para el convertidor A/D El tiempo de conversin puede variar segn la frecuencia del oscilador del convertidor A/D y la temperatura. Al estar lista la conversin analgica de un dato digital, se activan las lneas ADON a 0 del registro ADCON0 y se coloca en 1 la lnea ADIF del registro PIR1. Si las interrupciones estn habilitadas por medio de un 1 en el bit GIE del registro INTCON y la interrupcin del convertidor A/D est habilitada por medio de un 1 en la lnea ADIE del registro PIE1, al finalizar la conversin del dato analgico a digital, provocar una interrupcin en el microcontrolador y se cargar el vector de interrupcin al contador de programa (direccin 4H). Para atender la rutina de interrupcin debida al convertidor A/D, bastar con leer el bit ADIF del registro PIR1. INICIO PIE1 (8CH) PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 c c PIR1 (0CH) PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 c c 292 Manejo del Convertidor A/D En la siguiente figura se muestra un esquema de las conexiones internas del convertidor analgico a digital. Podemos observar que las entradas analgicas van a un multiplexer analgico, y la seleccin del canal a convertir se realiza por medio de los bits CHS2, CHS1 y CHS0 del registro ADCON0. Por otro lado, vemos que es posible sacrificar las entradas AN3 y AN2, para colocar las tensiones de referencia externas, y con ello mejorar la exactitud en las lecturas del convertidor A/D. Nota 1: No disponible en los PIC16F870, 872, 873 y 876 INICIO 293 Ejemplo de un programa que configura al convertidor A/D INICIO De acuerdo a lo que hemos visto hasta ahora, presentamos a continuacin un programa que configura al convertidor A/D, a partir de los siguientes criterios: N canales de entrada = 4, tensin de referencia = 2,5V (referida a tierra), Fosc = 20MHz, tiempo de lectura = 40Seg, lectura alineada a la derecha.
CONFIGAD BCF RP1 ; Selecciona el banco 1 de la RAM BSF RP0 MOVLW 3F ; Configuracin de las lneas del puerto A como entradas MOVWF TRISA MOVLW B10000011 ; Configura: RA0, RA1, RA2 y RA4 como entradas analgicas; RA3 ser MOVWF ADCON1 ; la entrada de Vref y los 10 bits de lectura del A/D se alnean a la derecha BSF PIE1,ADIE ; Habilita la interrupcin para el AD/C BCF RP1 ; Selecciona el banco 0 de la RAM MOVLW B10000001 ; MOVWF ADCON0 ; Se configura el oscilador de 20MHz para dividir por 32 y enciende el ADC
El convertidor A/D queda configurado. Para hacer lecturas de cada canal, se deber seleccionar los canales por medio de los bits CHS2, CHS1 y CHS0 del registro ADCON0, y colocar en 1 el bit Go/Done del mismo registro ADCON0. 294 Actividades INICIO Para una mejor comprensin del manejo del convertidor analgico a digital, te proponemos las siguientes actividades: Hacer un programa y montar un circuito con un microcontrolador PIC, que lea el canal 0, y coloque el valor binario en los 8 bits del puerto B, y en 2 bits del puerto C. Hacer un programa y montar un circuito que haga las veces de voltmetro digital, en donde se muestre la lectura de un canal a seleccionar y se haga la conversin a BCD, y luego a 7 segmentos, para presentarlo en un indicador de tres dgitos y medio (0,000 a 1,998), para ello la tensin de referencia deber ser de 2V. 295 7.7 El Puerto B INICIO 0000 000x 0000 000x RBIF INTF TOIF RBIE INTE TOIE PEIE GIE INTCON 0Bh, 8Bh, 10Bh,18Bh 1111 1111 1111 1111 uuuu uuuu Otros Resets 1111 1111 1111 1111 xxxx xxxx Valor en POR y BOR TOCS RB5 Bit 5 INTEDEG RB6 Bit 6 RBPU # RB7 Bit 7 OPTION_REG TRISB PORTB Registro PS0 PS1 PS2 PSA TOSE 81h,181h 86h,186h RB0 RB1 RB2 RB3 RB4 06h,106h Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin Registro de Configuracin de PORTB El puerto B dispone de 8 lneas bidireccionales que se utilizan para entradas o salidas digitales. Cada lnea se puede programar como salida o entrada al colocar en 0 o en 1 respectivamente el bit asociado en el registro TRISB. Dos de las lneas de este puerto se utilizan en el momento de grabar la memoria de programa del microcontrolador. Estas dos entras son: RB6/PGC (Program Clock) y RB7/PGD (Program Data) para ms detalles, ver el anexo 7. El terminal RB0 se puede emplear como entrada de interrupcin externa. Por otro lado, es posible hacer la conexin de cada terminal RBn a una resistencia interna asociada a Vdd (Pull-up), al colocar un 0 en el bit RBPU# del registro OPTION REG. Por otro lado, si seleccionas a RB0 como entrada de interrupcin, podrs escoger el tipo de transicin a la cual se activar sta. Un 0 en el bit INTEDEG del registro OPTION_REG, har que la interrupcin en el microcontrolador sea por medio de una transicin de bajada y un 1, por una transicin de subida. En la siguiente tabla se resume los registros asociados a PORTB. 296 7.8 El Puerto C y los Temporizadores INICIO RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/ SDA RC3/SCK/ SCL RC2/CCP1 RC1/T10SC1/ CCP2 RC0/T1OSC0/ T1CKI E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL RECEPCIN USART TRANSMIS. USART SALIDA DATOS SPI ENTRADA DATOS SPI RELOJ SPI ENTRADA CAPTURA 1 ENTR. TMR1 ENTR. CAPT2 ENTRADA TMR1
DATOS TRANS SINCRONA RELOJ TRANS SINCRONA ENTRADA DATOS I2C RELOJ I2C SAL COMP1 SAL PWM1 SAL COMP2 SAL PWM2 SALIDA TMR1 Debemos tomar en cuenta que los PIC16F870/871/872 slo tienen un mdulo de comparacin, captura y PWM. Por otro lado, los PIC16F870/871 no poseen el mdulo SPI y el PIC16F872 no tiene el mdulo de comunicacin USART. Por lo tanto es conveniente tomar en consideracin esto al programar el puerto C. El puerto C dispone de 8 lneas bidireccionales, que estn multiplexadas con otras funciones relacionadas con los temporizadores TMR1 y TMR2, la transmisin-recepcin serial, la captura, la comparacin y la modulacin de ancho de pulsos. Los PIC16F87x tienen tres temporizadores TMR0, TMR1 y TMR2. El funcionamiento de TMR0 es bsicamente igual al de los PIC16C54 y PIC16F84A. TMR1 es un temporizador con 16 bits de capacidad y TMR2 contiene 8 bits con pre y post escalamiento. En la siguiente tabla se muestra las funciones de los terminales del puerto C. 297 El Temporizador TMR1 INICIO TMR1 es un temporizador con preescalamiento de conteo ascendente, con una capacidad de 16 bits. Esto significa que se necesitan dos registros para cargar un valor entre 0000H y 0FFFFH: TMR1H (direccin 0FH) y TMR1L (direccin 0EH). Al igual que con TMR0 en el PIC16F84A, al haber un desbordamiento en la cuenta, puede generar una interrupcin por medio del bit TMR1IF del registro PIR1. La habilitacin de esta interrupcin se hace por medio del bit TMR1IE del registro PIE1. Los pulsos de conteo de TMR1 pueden provenir del oscilador del microcontrolador (f osc /4) o externamente a travs de los terminales RC0 o RC1. El registro de control de TMR1 es el T1CON y se ubica en la posicin 10H. El diagrama de bloques de TMR1 es el que se muestra en la siguiente figura: 298 Registro de control del TMR1: T1CON INICIO BIT Funcin TMR1ON Un 1 en este bit enciende el TMR1 TMR1CS Seleccin de pulsos del TMR1: 0 f osc /4; 1 Entrada externa (RC0, RC1) TISYNC# Sincronizacin con externa con oscilador interno: 0 Sincronizado; 1 No sincronizado T1OSCEN Habilitacin de circuito oscilador. Si T1OSCEN es 1, Al colocar un cristal de valor inferior a 200KHz entre RC0 (T1OSC0) y RC1 (T1OSC1) generar la base de tiempo del TMR1. Si TOSCEN vale 0 TMR1 funcionar como contador de eventos de RC0 T1CKPS0 Bits del preescalador. Relacin de frecuencia segn T1CKPS1 - T1CKPS0: T1CKPS1 0-0 1:1; 0-1 1:2; 1-0 1:4; 1-1 1:8 T1CON (10CH) ---- ---- T1CKPS1 T1CKPS0 T1OSCEN TISYNC# TMR1CS TMR1ON bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 En la figura anterior hemos visto cmo se controla el TMR1 por medio de los bits del registro T1CON. A continuacin se describe el funcionamiento de cada uno de estos bits. 299 Algo ms sobre TMR1 INICIO El TMR1 es colocado automticamente en 0 cuando en la cuenta hay un desbordamiento al pasar de 0FFFFh. Otra forma de hacer 0 a TMR1 automticamente, es por medio de los mdulos CCPs (Comparacin, captura y modulacin de ancho de pulso). Para ello, alguno de los mdulos CCP1, CCP2 o ambos se deben configurar como comparadores. Se debe tener cuidado al leer o escribir en TMR1 mientras ste se est incrementando, ya que podra suceder que haya un desbordamiento de uno de los 8 bits, y el valor cambie para uno de los registros. Para evitar esto, se recomienda que, durante una operacin de lectura o escritura, se detenga a TMR1. En el caso de que ste no se pueda detener, ya que lleva la cuenta del tiempo real del programa, se recomienda hacer la lectura de la siguiente forma: LEETMR1 MOVF TMR1H, W ; Lee el byte de mayor peso de TMR1 a W MOVWF TEMPH ; El valor va a un registro temporal TEMPH MOVF TMR1L, W ; Lee el byte de menor peso de TMR1 MOVF TEMPL ; El valor va a TEMPL MOVF TMR1H, W ; S vuelve a leer el byte de mayor peso SUBWF TEMPH, W ; Se restan ambas lecturas BTFSC STATUS, Z ; Si el resultado es cero, no hubo cambio en TMR1H mientras se lea GOTO CONTINUA ; Por lo tanto, el programa contina GOTO LEETMR1; ; Sino, se vuelve a leer TMR1 CONTINUA ; Contina con el programa principal Al escribir un valor en TMR1, se deber tambin tener cuidado de que no haya un incremento en TMR1H mientras se ejecuta la operacin. Para evitar esto se podra iniciar la escritura borrando inicialmente a TMR1L. 300 Actividades INICIO Hemos visto la operacin del temporizador 1, y que ste tiene una resolucin de 16 bits. Por otro lado, vimos una seccin de programa que permite hacer la lectura del TMR1 sin necesidad de detenerlo. Te proponemos que hagas un circuito y programa de un reloj digital, que tenga como base de tiempo a la frecuencia del oscilador del PIC y el temporizador TMR1. 301 El Temporizador TMR2 INICIO El temporizador TMR2 es un contador ascendente de 8 bits, que se puede leer y escribir, y tambin puede realizar funciones con el mdulo de comunicacin serial SSP y los mdulos de captura y comparacin. TMR2 se ubica en la posicin 11H de la memoria RAM, utiliza la seal f osc /4, la cual pasa por un pre-escalador, y luego su salida pasa por un post-escalador. El registro de control de TMR2 es T2CON. A continuacin se muestra el diagrama de bloques de TMR2. El encendido del TMR2 se hace al colocar un 1 en el bit TMR2ON del registro T2CON. La salida de TMR2 puede seleccionarse por software, para que en el puerto de comunicacin serial trabaje como generador de baudios. El bit TMR2IF del registro PIR1 se coloca en 1 al haber un desbordamiento del post-escalador de TMR2 y puede ser utilizado como interrupcin al habilitarla por medio del bit TMR2IE del registro PIE1. El registro PR2 (direccin 92H) se utiliza para fijar un valor de conteo mximo del TMR2 cuando se trabaja en modulacin de ancho de pulsos (PWM). 302 Registro de control del TMR2: T2CON T2SCKPS1 - T2CKPS0 Relacin del predivisor 00 1:1 01 1:4 1x 1:16 INICIO A continuacin se describe el funcionamiento de cada uno de los bits del registro T2CON. T2CON (12CH) ---- - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2SCKPS1 T2SCKPS0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Los bits T2SCKPS1 y T2CKPS0 sirven para seleccionar la frecuencia del pre-escalador segn la siguiente tabla: Los bits TOUTPS3 hasta TOUTPS0 sirven para seleccionar la frecuencia del post-escalador segn la siguiente tabla: funcionamiento de cada uno de los bits. TOUTPS3 - TOUTPS0 Relacin del postdivisor 0000 1:1 0001 1:2 0010 1:3 ..... 1:Bn + 1 1110 1:15 1111 1:16 El bit TMR2ON se utiliza para encender con un 1 al TMR2. Un 0 deshabilitar al TMR2. 303 7.9 El Puerto C y los Mdulos de Captura, Comparacin y PWM INICIO Los PIC16F870-872 disponen de un mdulo CCP1, mientras que los otros PIC de las serie 16F87x tienen dos mdulos CCP: CCP1 y CCP2, los cuales son prcticamente iguales. Las funciones que realizan los mdulos CCP son las que se muestran a continuacin: Modo Captura. Dos registros de un mdulo CCP capturan el valor de TMR1 cuando ocurre un evento especial en el terminal RC2/CCP1 o en el terminal RC1/CCP2. Modo Comparacin. Se compara el valor de TMR1 con el de los dos registros de un CCP, y cuando coinciden ocurre un evento en el terminal RC2/CCP1 o en RC1/CCP2. Modo Modulacin de Ancho de Pulsos (PWM). Se mantiene un nivel alto en la salida RC2/CCP1 o en RC1/CCP2, segn se determina en el mdulo CCP correspondiente. CCP1 utiliza los registros CCPR1H y CCPR1L (posiciones 15H y 16H), y para la configuracin se utiliza el registro CCP1CON (17H). Para CCP2 estn CCPR2H, CCPR2L y CCP2CON. En la siguiente tabla se muestran los terminales involucrados del puerto C: SALIDA TMR1 ENTRADA TMR1
E/S DIGITAL RC0/T1OSC0/ T1CKI SAL COMP2 SAL PWM2 ENTR. TMR1 ENTR. CAPT2 E/S DIGITAL RC1/T10SC1/ CCP2 SAL COMP1 SAL PWM1 RELOJ I2C ENTRADA DATOS I2C RELOJ TRANS SINCRONA DATOS TRANS SINCRONA ENTRADA CAPTURA 1 RELOJ SPI ENTRADA DATOS SPI SALIDA DATOS SPI TRANSMIS. USART RECEPCIN USART E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT c c c 304 El Registro CCP1CON INICIO En el registro CCP1CON se utilizan 4 bits para configurar la funcin del mdulo CCP1, los cuales son CCP1M3-CCP1M0. Por otro lado, los bits CCP1X y CCP1Y slo se utilizan en el modo PWM y representan los bits menos significativos del valor de un ciclo de trabajo. Los 8 bits ms significativos del ciclo de trabajo, se encuentran en el registro CCPR1L. A continuacin se presenta la disposicin de los bits de CCP1CON y en la tabla se describe el modo de trabajo de CCP1, segn los valores de CCP1M3 CCP1M0. CCP1M3-CCP1M0 Funcin 0000 Mdulo CCP1 desconectado 0100 Modo captura con cada flanco descendente en RC2/CCP1 0101 Modo captura con cada flanco ascendente en RC2/CCP1 0110 Modo captura con cada 4 flancos ascendentes en RC2/CCP1 0111 Modo captura con cada 16 flancos ascendentes en RC2/CCP1 1000 Modo comparacin que activa el terminal RC2/CCP1 al coincidir valores 1001 Modo comparacin que desactiva el terminal RC2/CCP1 al coincidir valores 1010 Modo comparacin que genera una interrupcin (no afecta al terminal RC2/CCP1) 1011 Modo comparacin que pone a 0 TMR1 y provoca interrupciones peridicas 11xx Modo PWM CCP1CON (17H) ---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 305 El Registro CCP2CON INICIO Al igual que CCP1CON, en el registro CCP2CON se utilizan 4 bits para configurar la funcin del mdulo CCP2, los cuales son CCP2M3-CCP2M0; los bits CCP2X y CCP2Y slo se utilizan en el modo PWM y representan los bits menos significativos del valor de un ciclo de trabajo. Los 8 bits ms significativos de ese ciclo de trabajo se encuentran en el registro CCPR2L. A continuacin se presenta la disposicin de los bits de CCP2CON y el modo de trabajo de CCP2 segn los valores de CCP2M3 CCP2M0. CCP1M3-CCP1M0 Funcin 0000 Mdulo CCP2 desconectado 0100 Modo captura con cada flanco descendente en RC1/CCP2 0101 Modo captura con cada flanco ascendente en RC1/CCP2 0110 Modo captura con cada 4 flancos ascendentes en RC1/CCP2 0111 Modo captura con cada 16 flancos ascendentes en RC1/CCP2 1000 Modo comparacin que activa el terminal RC1/CCP2 al coincidir valores 1001 Modo comparacin que desactiva el terminal RC1/CCP2 al coincidir valores 1010 Modo comparacin que genera una interrupcin (no afecta al terminal RC1/CCP2) 1011 Modo comparacin que pone a 0 TMR1 y provoca interrupciones peridicas 11xx Modo PWM CCP2CON (1DH) ---- ---- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 306 Modo Captura INICIO En este modo, si ocurre un evento en los terminales RC2/CCP1 o RC1/CCP2, el valor del temporizador se carga a los registros CCPR1H-L o CCPR2H-L respectivamente. Esto podra utilizarse para la medicin de intervalos de tiempo entre pulsos o para la medicin de la duracin de un pulso. Sin estos mdulos, las mediciones de intervalos de tiempo habran que hacerla con un temporizador al detectar una interrupcin externa, el problema est en que la lectura no ser precisa debido a que el temporizador sigue contando mientras se ejecuta la rutina de interrupcin que va a leer su contenido. En el modo de captura es importante que el TMR1 est configurado como temporizador o como contador sincrnico para que la transferencia se haga correctamente. Como se vio en las tablas de los registros CCP1CON y CCP2CON, los eventos pueden darse como: una deteccin de una transicin de subida, una deteccin de una transicin de bajada, una deteccin de 4 pulsos de transicin ascendente o una deteccin de 16 pulsos de transicin ascendente. La seleccin se hace por medio de los bits CCP1M3-0 CCP2M3-0, segn el mdulo que se vaya a utilizar. La resolucin en la medicin del tiempo de captura y el perodo mximo estn dados por el ancho de los pulsos que activan al TMR1. Por ejemplo si selecciona a f OSC /4 como entrada del TMR1, el escalamiento es 1:1, y la frecuencia f OSC es igual a 20MHz, entonces la resolucin de la medicin del intervalo ser igual a 200nSeg. El perodo mximo en el cual se podr hacer la captura, ser igual a 13,107mSeg. Por qu? 307 Esquema del Modo Captura INICIO En el momento de ocurrir una captura, se activa el indicador CCP1IF del registro PIR1 o el bit CCP2IF del registro PIR2, segn el evento que se registra. La interrupcin se realizar si estn activos el bit GIE del registro INTCON y el bit CCP1IE o CCP2IE de los registros PIE1 o PIE2. Esta interrupcin puede ser utilizada para leer el contenido de CCPR1H-L o CCPR2H-L, ya que si ocurre un nuevo evento, entonces se carga el valor de TMR1 despus de que este nuevo evento ocurra. En la siguiente figura se puede observar el diagrama de bloques de cmo funcionan los PIC16F87X en el modo de captura para el mdulo CCP1. 308 Inicializacin en el modo Captura INICIO A continuacin se presenta la seccin de un programa para la inicializacin del mdulo CCP1, para que ste trabaje en el modo Captura.
CLRF CCP1CON ; El mdulo CCP es apagado CLRF TMR1L ; Borra byte de menor peso del temporizador 1 CLRF TMR1H ; Borra byte de mayor peso del temporizador 1 CLRF INTCON ; Deshabilita interrupciones y borra TOIF BSF STATUS, RP0 ; Selecciona Banco 1 BSF TRISC, CCP1 ; Configura CCP como terminal de entrada CLRF PIE1 ; Deshabilita interrupciones BCF STATUS, RP0 ; Selecciona Banco 0 CLRF PIR1 ; Borra avisos de interrupciones MOVLW 0x06 ; Configura modo de captura, cada 4 transiciones ascendente MOVWF CCP1CON ; BSF T1CON, TMR1ON ; Arranca el temporizador 1 ; Al estar la interrupcin de CCP1 deshabilitada se evala ; el bit CCP1IF continuamente CAPTURA BTFSS PIR1, CCP1IF GOTO CAPTURA ; Ocurre la captura BCF PIR1, CCP1IF ; Este bit debe borrarse antes de la prxima comparacin 309 Modo Comparacin INICIO En este modo se compara continuamente los valores de los registros CCPR1H-L o CCPR2H-L con el de TMR1H-L. En el caso de haber coincidencia, ocurre un evento segn se haya programado en los registros CCP1CON y CCP2CON. Estos eventos pueden ser: Colocar un 1 en el terminal RC2/CCP1 o RC1/CCP2; colocar un 0 en uno de esos terminales; activar una interrupcin por medio de los bits CCP1IF de PIR1 o CCP2IF de PIR2, sin afectar a los terminales mencionados; o poner en 0 al TMR1. En este ltimo caso, si la comparacin ocurre con CCPR1H-L, puede activar una interrupcin mediante el bit CCP1IF, y si la comparacin ocurre con CCPR2H-L, entonces activa una conversin del mdulo convertidor analgico a digital. Al trabajar el mdulo CCP en el modo comparacin, el mdulo TMR1 deber trabajar en modo temporizador o como contador sincrnico para que se haga la comparacin correctamente. Al haber en TMR1H-L un valor igual al de CCPR1H-L o CCPR2H-L, se coloca en 1 el bit CCP1IF del registro PIR1 o el indicador CCP2IF del registro PIR2, segn la igualdad que se registre. La interrupcin se realizar si estn activos el bit GIE del registro INTCON y el bit CCP1IE o CCP2IE de los registros PIE1 o PIE2. Esta interrupcin puede ser utilizada para disparar con precisin algn tiristor que controle la velocidad de un motor de corriente alterna. Al igual que en el modo de captura, la precisin del disparo y el tiempo en que ste ocurre, est dada por la frecuencia del oscilador que enva los pulsos a TMR1. 310 Modo Comparacin INICIO En la siguiente figura se muestra el esquema de funcionamiento en el modo Comparacin para el mdulo CCP1. 311 Inicializacin en el modo Comparacin INICIO La siguiente seccin de programa presenta la configuracin del mdulo CCP1 para trabajar en el modo Comparacin.
CLRF CCP1CON ; El mdulo CCP es apagado CLRF TMR1L ; Borra byte de menor peso del temporizador 1 CLRF TMR1H ; Borra byte de mayor peso del temporizador 1 CLRF INTCON ; Deshabilita interrupciones y borra TOIF BSF STATUS, RP0 ; Selecciona Banco 1 BSF TRISC, CCP1 ; Configura CCP como terminal de entrada CLRF PIE1 ; Deshabilita interrupciones BCF STATUS, RP0 ; Selecciona Banco 0 CLRF PIR1 ; Borra avisos de interrupciones MOVLW 0x08 ; Configura modo comparacin, establece terminal MOVWF CCP1CON ; para la comparacin BSF T1CON, TMR1ON ; Arranca el temporizador 1 ; Al estar la interrupcin de CCP1 deshabilitada se evala ; el bit CCP1IF continuamente COMPARA BTFSS PIR1, CCP1IF GOTO COMPARA ; Ocurre la comparacin BCF PIR1, CCP1IF ; Este bit debe borrarse antes de la prxima comparacin 312 Modo Modulacin de Ancho de Pulsos (PWM) INICIO En este modo se obtienen pulsos lgicos cuyo ancho en el nivel 1 tiene una duracin programable con respecto a un perodo fijo. La relacin entre el tiempo que dura el nivel 1 y el perodo total, se denomina ciclo de trabajo. Los PWMs tienen aplicaciones en convertidores digitales a analgicos (D/A), control de velocidad de motores DC, disparos de Transistores de potencia en el manejo de motores AC y disparos de rels en el control de temperatura, entre otras. El promedio del valor DC de salida en un PWM es igual al ciclo de trabajo multiplicado por el valor de la tensin de la fuente de alimentacin. La siguiente explicacin del funcionamiento del mdulo PWM de CCP1 aplica tambin al mdulo CCP2 para los PIC16F873-77. El valor alto que se ha de mantener en el terminal RC2/CCP1 est determinado por un tiempo de 10 bits de resolucin, donde los 8 bits ms significativos del valor que dura el 1 se escribe en el registro CCPR1L y los otros dos bits se escriben en CCP1X-Y del registro CCP1CON. Los 8 bits ms significativos del perodo total, estn determinados por el valor que est en el registro PR2. Para ello el TMR2 (8 bits ms significativos) y los dos bits de un contador que est conectado entre el preescalador y TMR2, al comenzar a contar, colocan a R2/CCP1 en 1. Cuando el valor del temporizador coincide con el valor que CCPR1L transfiri a CCPR1H, la salida RC2/CCP1 se hace 0, y ste se mantiene hasta que los bits ms significativos del temporizador coincidan con el valor de PR2. Cuando esto ocurre, se reinicia TMR2, se vuelve a establecer en 1 RC2/CCP1, exceptuando si el ciclo de trabajo es 0. El valor de CCPR1L se carga a CCPR1H, de esta manera es posible escribir en cualquier momento el valor en CCPR1L, ya que la comparacin con ese valor se efectuar despus de reiniciarse TMR2. 313 Duracin del ciclo en el PWM INICIO En el modo PWM, el bit RC2/CCP1 deber programarse como salida mediante el registro TRISC. El valor del perodo que entra al contador menos significativo que est antes de TMR2 es igual a Tosc multiplicado por la relacin del preescalador. De esta manera, el perodo del ciclo es:
T CICLO = (PR2 + 1) X 4 X T OSC X preescalador de TMR2
Para el mdulo CCP1, el ancho del pulso estar dado por la siguiente ecuacin:
T1 = (CCPR1L,CCP1X,CCP1Y) X Tosc X preescalador de TMR2
La resolucin del PWM ser mejor cuando mayor es el valor de PR2. Para obtener una precisin de 10bits, PR2 deber valer 255, ya que de esta manera el valor a escribir en CCPR1L, y los bits CCP1X y CCP1Y corresponden a 10 bits. La misma explicacin dada hasta ahora se aplica para el CCP2 para los microcontroladores que tienen dos mdulos CCP.
314 Diagramas de bloques del PWM INICIO A continuacin se presenta el diagrama de bloques del modulador de ancho de pulsos para el mdulo CCP1. 315 Configuracin del PWM INICIO La siguiente seccin de programa presenta la configuracin del PWM.
CLRF CCP1CON ; El mdulo CCP es apagado CLRF TMR2 ; Borra contenido del temporizador 2 MOVLW 0x7F ; MOVWF PR2 ; MOVLW 0x1F ; MOVWF CCPR1L ; Configura ciclo de trabajo al 25% del perodo de PWM CLRF INTCON ; Deshabilita interrupciones y borra TOIF BSF STATUS, RP0 ; Selecciona Banco 1 BSF TRiSC, PWM1 ; terminal RC2/PWM1 como terminal de salida CLRF PIE1 ; Deshabilita interrupciones BCF STATUS, RP0 ; Selecciona Banco 0 CLRF PIR1 ; Borra avisos de interrupciones MOVLW 0x2C ; Configura modo PWM, 2 bits de bajo peso del ciclo MOVWF CCP1CON ; de trabajo = 10 BSF T2CON, TMR2ON ; Arranca el temporizador 2 ; Al estar la interrupcin de CCP1 deshabilitada se evala ; el bit CCP1IF continuamente PER_PWM BTFSS PIR1, TMR2IF GOTO PER_PWM ; Se actualiza este perodo del PWM y sigue siguiente ciclo BCF PIR1, TMR2IF ; Este bit debe borrarse antes de la prxima comparacin 316 Actividades INICIO Las actividades a realizar en esta seccin correspondern a las funciones del mdulo de captura, comparacin y modulacin de anchos de pulso. Con respecto al modo captura, te proponemos que hagas un programa y un circuito capaz de medir el tiempo que tarda en hacer una revolucin un motor. Para ello debers colocar una marca al eje del motor y un sistema de emisin y recepcin infrarroja o magntica, de manera que cada vez que se detecte esa marca, se medir el tiempo transcurrido entre una y otra aparicin de la lectura. Por medio de este mtodo, podrs calcular las revoluciones por minuto del motor. Para la parte de comparacin, te proponemos mejorar la precisin del reloj digital propuesto en la actividad con el temporizador 1. En este caso, la propuesta es cargar automticamente un valor al temporizador, por medio de los registros CCPR1H y CCPR1L, de manera que el TMR1 se inicialice automticamente. Esto te permitir contar con un contador de tiempo fiel, al cual no tendrs que cargar un valor cada vez que se ponga en 0. Para ello podramos fijar que la inicializacin del temporizador se efecte cada 10 mSeg, y utilices este valor como base para el contador de tiempo. En cuanto a la modulacin de ancho de pulsos, te proponemos hacer un convertidor digital a analgico que tenga una precisin de 10 bits. Para ello colocars una resistencia y un condensador como filtro pasa bajo a la salida del modulador de ancho de pulsos, de manera que promedie la seal de salida. El valor DC a la salida del circuito RC ser igual a la relacin entre el tiempo en que dura el 1 a la salida del PWM y el perodo total. Debers en este caso calcular los valores de R y C para que el rizado sea mnimo. 317 7.10 El Puerto C y el Mdulo de Comunicacin Serial Sncrona La comunicacin serial es una manera muy utilizada para la transferencia de datos entre equipos digitales, esto se debe a la cantidad reducida de lneas que utiliza. Los PIC16F87X, con excepcin de los PIC16F870 y PIC16F871, tienen un mdulo MSSP (Master Synchronous Serial Port) el cual proporciona una interfaz entre el microcontrolador y otros dispositivos electrnicos tales como: otros microcontroladores, memorias seriales, pantallas de cristal lquido, convertidores A/D, etc. Para ello disponen de los terminales: RC3/SDO (Datos de salida), RC4/SDI (Datos de entrada) y RC5/SCK (seal de sincronizacin o reloj). El mdulo serial, entre otras cosas, puede trabajar en uno de los siguientes modos de comunicacin: SPI (Serial Peripheral Interface) e I2C (Inter Integrated Circuit), los cuales son muy utilizados actualmente. INICIO En la figura anexa se presenta el diagrama de bloques del mdulo MSSP. El funcionamiento de este mdulo est basado en el registro de desplazamiento SSPSR, el cual transmite y recibe los datos en serie, por medio de las lneas SDO y SDI respectivamente. La sincronizacin de SSPSR se ejecuta mediante la seal SCK. La carga y recepcin de estos datos se realiza por medio del registro SSPBUF, el cual tiene conexin con el bus interno del microcontrolador. La seleccin del tipo de transicin y el control del desplazamiento de datos del registro SSPSR, se hace por medio de otros registros internos del PIC16F87X. 318 La comunicacin SPI La comunicacin en el modo SPI (Serial Peripheral Interface) permite la transferencia de datos de 8 bits en serie, los cuales se transmiten y reciben en forma sncrona y simultneamente. El microcontrolador en este tipo de transmisin puede trabajar como maestro o como esclavo. En el caso de trabajar como esclavo, adems de utilizar los terminales SDO, SDI y SCK, utilizar una lnea adicional de seleccin de esclavo, la cual se ubica en el terminal RA5/SS# y que deber ser puesta a nivel 0. Para que un dispositivo trabaje como maestro, se deber configurar la lnea RC5/SCK como salida. Cuando se trabaja en modo esclavo, las lneas RC5/SCK y RA5/SS# se debern configurar como entradas; esta ltima se colocar a 0V. Para ambos casos, la lnea RC3/SDO se configurar como salida y la lnea RC4/SDI se configurar como entrada. La transferencia de informacin entre el maestro y el esclavo se suele hacer de la siguiente manera: Escritura: El maestro enva la direccin, luego el comando de escritura y despus el dato. Lectura: El maestro enva la direccin, luego el comando de lectura y despus el esclavo enva el dato.
INICIO 319 Formas de onda en modo Maestro En la figura siguiente se presentan las formas de ondas para la comunicacin en el modo SPI. Ntese las diversas combinaciones que se pueden obtener con la seal de sincronizacin SCK, segn los valores de los bits CKP y CKE, los cuales se ubican en los registros SSPCON y SSPSTAT respectivamente. Tambin se observa cundo un dato en la entrada SDI se tomar como vlido segn el valor del bit SMP, ubicado en el registro SSPSTAT. Esto es importante para la compatibilidad en la comunicacin con otros dispositivos seriales. Finalmente, podemos ver la lnea SSPIF del registro PIR1, la cual se utilizar para interrumpir al programa principal cuando un dato se haya transmitido o recibido. INICIO 320 Formas de onda en modo Esclavo
Similarmente podemos observar a continuacin las formas do onda en modo esclavo. Para CKE=0 INICIO Para CKE=1 321 Registros asociados
En el modo SPI los registros asociados son los que se presentan en la siguiente tabla. Para mayor detalles de los registros SSPCON y SSPSTAT, nos referiremos a las pginas siguientes en donde se presenta el funcionamiento de cada bit. INICIO 322 Registro SSPSTAT Registro de Estatus del MSSP
SMP: Modo de muestreo. Maestro: 1 muestreo al final del dato de salida. 0 muestreo a la mitad del dato de salida. Esclavo: Debe ponerse en 0. CKE: Seleccin de transicin de la seal se sincronizacin. Si CKP=0: 1 La transmisin ocurre desde el estado de activacin hasta el de reposo de la seal de sincronizacin. 0 La transicin ocurre desde el estado de reposo hasta el de activacin de la seal de sincronizacin. Si CKP=1: 1 El dato es transmitido en la transicin de bajada de SCK. 0 El dato es transmitido en la transicin de subidad de SCK. BF: Registro SSPBUF lleno. 1 Recepcin terminada. SSPBUF est lleno. 0 No ha finalizado la recepcin. SSPBUF est vaco. INICIO c 323 Registro SSPCON Registro de control del MSSP
WCOL: Deteccin de colisin de bits. 1 Hay colisin; 0 No hay colisin. SSPOV: Indicador de desbordamiento en la recepcin. 1 Se recibi dato sin haber ledo SSPBUF; 0 No hay desbordamiento. SSPEN: Habilitacin del puerto serial. Los terminales del puerto serial deben ser configurados apropiadamente como entradas y salidas. 1 Puerto serial habilitado. 0 Terminales configurados como E/S. CKP: Seleccin de polaridad de la seal de sincronizacin (SCK). 1 Estado de reposo de SCK = 1; 0 Estado de reposo de SCK = 0. SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial SSPM0: sncrono, ver la tabla de la pgina siguiente. INICIO 324 Bits SSPM3-SSPM0 INICIO Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupcin activada y direccin de 10bits 1111 Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupcin activada y direccin de 7bits 1110 Modo maestro I2C controlado por firmware 1011 Modo maestro I2C con sincronizacin = Fosc/(4(SSPAD+1)) 1000 Modo esclavo I2C con direccin de 10 bits 0111 Modo esclavo I2C con direccin de 7 bits 0110 Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo) 0101 Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0) 0100 Modo maestro SPI con sincronizacin igual a la salida de TMR2/2 0011 Modo maestro SPI con sincronizacin a Fosc/64 0010 Modo maestro SPI con sincronizacin a Fosc/16 0001 Modo maestro SPI con sincronizacin a Fosc/4 0000 Modo de trabajo SSPM3-SSPM0 c 325 Programa ejemplo INICIO Configuracin y transmisin y recepcin en Modo maestro CLRF STATUS ; Seleccin del banco 0 CLRF SSPSTAT, CKE ; SMP = 0, CKE = 0, bits de STATUS en 0 MOVLW 0x31 ; Activa puerto SPI, modo maestro y CLK/16 MOVWF SSPCON ; Los datos se transmiten en transicin de bajada ; Los datos se leen en la mitad del pulso (SMP = 0) BSF STATUS, RP0 ; Seleccin del banco 1 BSF PIE, SSPIE ; Habilitacin de la interrupcin SSP BCF STATUS, RP0 ; Seleccin del banco 0 BSF INTCON, GIE ; Habilitacin global de interrupciones MOVLW DATOTX ; Se coloca el dato a ser transmitido MOVWF SSPBUF ; Comienza la transmisin
; Lectura de un dato MOVF SPBUF,W ; Dato pasa a W MOVWF DATORX ; Se guarda dato en la RAM MOVF TRANSM,W ; El dato a transmitir va a W MOVWF SPBUF ; Se carga SPBUF y se transmite el ; dato automticamente 326 Ejercicio: Transmitir un dato en modo SPI INICIO Configurar el PIC16F87x que vayas a utilizar (con excepcin de los PIC16F870 y 871), para que transmita un dato de 8 bits a un registro de desplazamiento 74xx164. Para ello debers buscar las caractersticas de este dispositivo, de manera de hacer compatible la transmisin de datos.
74XX164 SI Clock
PIC16F87X
SDO SCK
327 7.11 El Puerto C y la Comunicacin I 2 C Este protocolo de comunicacin fue desarrollado por Philips en la dcada de 1980. Utiliza dos lneas para la transferencia de informacin entre varios elementos; stas son: La SDA, la cual se encarga de la transferencia de datos en forma bidireccional, y la lnea SCL la cual es generada por un dispositivo maestro hacia los esclavos, y lleva los pulsos de sincronizacin. La interconexin entre dispositivos es la que se muestra en la figura siguiente, en donde puede haber en cada caso, ms de un dispositivo maestro y no se necesita que todos los dispositivos tengan la misma tecnologa digital. Los dispositivos involucrados en la comunicacin I 2 C se conectan formando un AND cableado con las lneas SDA y SCL, ya que las salidas de cada uno es del tipo drenador abierto o colector abierto (open drain or open collector). De all que sea necesario colocar resistencias a una de las alimentaciones en las lneas SDA y SCL. Esta configuracin, a la vez evita que ocurra fallas, en el caso de haber colisin de datos cuando dos dispositivos traten de enviar seales al mismo tiempo. Observa las conexiones de varios elementos y las resistencias Rp en la figura siguiente. INICIO NMOS VDD1 328 Funcionamiento del protocolo I 2 C INICIO Cuando el bus est libre, las lneas SDA y SCL se encuentran en 1, es decir, los transistores de salida se encuentran en estado abierto. Cuando comienza una transmisin, el dispositivo maestro enva una seal 0 en la salida SDA, luego la salida SCL se coloca en 0 y despus se enva el conjunto de 8 bits en modo serial por la lnea SDA, los cuales corresponden a 7 bits de la direccin del esclavo con el cual se va a comunicar y un bit de R/W, segn la operacin que se va a realizar (lectura o escritura); simultneamente se envan los pulsos de sincronizacin. Los valores de los bits de la lnea SDA se considerarn vlidos, en los momentos en que la seal de sincronizacin est en 1. Despus de enviada la direccin, se enva el bit de parada, el cual corresponde a un 1. Entonces el dispositivo esclavo enva una seal de reconcimiento, que corresponde a un 0, lo cual indica que se ha recibido la informacin. A continuacin, dependiendo de si la operacin es escritura o lectura, se enviar el dato serial del maestro al esclavo o viceversa. Observa las formas de ondas en la figura anexa. En las figuras de la pgina siguiente, se observa con mayor detalle, el proceso de comunicacin serial I 2 C en los PIC16F87X, en los que se detallan las seales de estado de este microcontrolador. (RC4) (RC3) 329 Formas de ondas en la transmisin y recepcin en el protocolo I 2 C Formas de onda para la escritura de datos al esclavo: INICIO Formas de onda para la lectura de datos desde el esclavo: 330 Colisin de datos Existe la posibilidad de que en un bus I 2 C dos dispositivos maestros puedan generar una transmisin simultneamente. Para resolver este problema los dispositivos maestros leen el valor en la lnea SDA y lo compara con el valor enviado. En el caso de que enve un 1 y lee un 0, querr decir que otro maestro tiene dominio del bus y por tanto el primero tendr que ceder e inhibir su salida SDA. Podra suceder que en este conflicto, el maestro que toma el control est enviando informacin al maestro que cedi el bus. En este caso el maestro que cedi el bus deber pasarse a la condicin de esclavo. La figura siguiente muestra en un diagrama de tiempo de cmo un primer maestro cede el bus al segundo maestro, ya que el tiempo en 0 del segundo se mantiene por ms tiempo que el del primero.
INICIO 331 Diagrama de bloques del mdulo I 2 C en los PIC16F87X Los PIC16F87X, con excepcin de los PIC16F870 y 871, cuentan con un mdulo de comunicacin serial que puede configurarse con el protocolo I 2 C. Este mdulo genera todas las secuencias necesarias para este protocolo, con un mnimo de programacin. La configuracin se puede realizar para que trabaje tanto en modo maestro, como esclavo. INICIO 332 Registros asociados al I2C La siguiente tabla muestra los registros asociados al puerto I 2 C. En cada uno de los registros se podrn encontrar la funcin de cada bit. INICIO 0000 0000 0000 0000 A0 A1 A2 A3 A4 A5 A6 A7 SSPADD 93h 0000 0000 0000 0000 TC0 TC1 TC2 TC3 TC4 TC5 TC6 TC7 TRISC 87h 0000 0000 0000 0000 RC0 RC1 RC2 RC3/SCl RC4/SDA RC5 RC6 RC7 PORTC 07h 333 Registro SSPSTAT (Registro de Estatus del MSSP)
INICIO SMP: Modo de muestreo. 1 Control de transicin deshabilitado para velocidad estndar (100KHz). 0 Control de transicin habilitado para alta velocidad (400KHz). CKE: Seleccin de transicin de la seal se sincronizacin. 1 Compatibilidad con SMBUS. 0 Compatibilidad con I 2 C. D/A: Dato/Direccin 1 ltimo byte fue un dato. 0 ltimo byte fue una direccin. P Bit de parada. 1 Deteccin de bit de parada al final. 0 No se detect bit de parada. S Bit de arranque. 1 Deteccin de bit de arranque al final. 0 No se detecto el arranque. R/W Bit de informacin de lectura y escritura. Modo esclavo: 1 Lectura. 0 Escritura. Modo maestro: 1 Hay una transmisin en proceos. 0 No hay transmisin. UA Actualizacin de la direccin. 1 Debe actualizarse la direccin. 0 La direccin no se necesita actualizar. BF Registro SPBUF lleno. Recepcin: 1 Recepcin completa, SPBUF lleno. 0 Recepcin incompleta, SPBUF vaco. Transmisin: 1 Transmisin en proceso, SPBUF lleno. 0 Transmisin finalizada. 334 Registro SSPCON (Registro de control del MSSP)
WCOL: Deteccin de colisin de bits. 1 Hay colisin; 0 No hay colisin. SSPOV: Indicador de desbordamiento en la recepcin. 1 Se recibi dato sin haber ledo SPBUF; 0 No hay desbordamiento. SSPEN: Habilitacin del puerto serial. Los terminales del puerto serial deben ser configurados apropiadamente como entradas y salidas. 1 Puerto serial habilitado, configura a SDA y SCL. 0 Terminales configurados como E/S. CKP: Seleccin de polaridad de la seal de sincronizacin (SCL, slo en modo maestro). 1 Habilita sincronizacin (reloj); 0 Estado de reposo de SCL = 0. SSPM3- Modo de trabajo del MSSP. Para el modo de trabajo del puerto serial SSPM0: sncrono, ver la tabla de la pgina siguiente. INICIO 335 Bits SSPM3-SSPM0 INICIO Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupcin activada y direccin de 10bits 1111 Modo maestro I2C controlado por firmware, con bits de arranque y parada, interrupcin activada y direccin de 7bits 1110 Modo maestro I2C controlado por firmware 1011 Modo maestro I2C con sincronizacin = Fosc/(4(SSPADD+1)) 1000 Modo esclavo I2C con direccin de 10 bits 0111 Modo esclavo I2C con direccin de 7 bits 0110 Modo esclavo SPI con sincronizacin igual a SCK (SS# no est activo) 0101 Modo esclavo SPI con sincronizacin igual a SCK (SS# = 0) 0100 Modo maestro SPI con sincronizacin igual a la salida de TMR2/2 0011 Modo maestro SPI con sincronizacin a Fosc/64 0010 Modo maestro SPI con sincronizacin a Fosc/16 0001 Modo maestro SPI con sincronizacin a Fosc/4 0000 Modo de trabajo SSPM3-SSPM0 c 336 Registro SSPCON2 (Registro de control 2 del MSSP)
GCEN: Habilitacin de llamada general (slo en modo esclavo). 1 Habilita interrupcin al detectar direccin 0000H; 0 Deshabilitado. ACKSTAT: Bit de reconocimiento de estatus (Slo en modo maestro). 1 No se recibi reconocimiento del esclavo; 0 Si hubo reconocimiento. ACKDT: Bit de reconocimiento de dato (Slo en modo maestro). 1 No reconocido. 0 Reconocido. ACKEN: Reconocimiento de habilitacin de secuencia (Slo en modo maestro). 1 Reconoce secuencia en SDA y SCL y transmite bit de reconocimiento = 0 0 Secuencia de reconocimiento en reposo. RCEN Bit de habilitacin de recepcin (Slo en modo maestro). 1 Habilita modo de recepcin; 0 Recepcin en reposo. PEN: Habilitacin de la condicin de parada (Slo en modo maestro). 1 Habilita condicin de parada en SDA y SCL. 0Condicin de parada en reposo. RSEN: Condicin de arranque repetido (Slo en modo maestro). 1 Inicia condicin repetida de arranque en SDA y SCL. 0 Arranque en reposo. SEN: Habilitacin de condicin de arranque (Slo en modo maestro). 1 Inicia condicin de arranque en SDA y SCL. 0 Condicin de arranque en reposo. INICIO 337 Configuracin del puerto I 2 C A continuacin se presenta una seccin de un programa que configura al puerto I 2 C en el modo maestro. movlw b00101000 ; Carga a w el valor de la configuracin clrf STATUS ; Seleccin del banco 0 movwf SPCON1 ; Configuracin en modo maestro Para configurar la frecuencia de transmisin a 400KHz, asumiendo que la frecuencia del oscilador del microcontrolador es 16MHz, recurrimos a la ecuacin: ftrsm = fosc/(4(SSPADD+1)) movlw b00001001 ; Carga a w el valor de configuracin bsf STATUS,RP0 ; Seleccin del banco 1 movwf SSPADD ; Configuracin de la frecuencia de transmisin a 400KHz La configuracin del control de la transicin y fase de la sincronizacin se hace por medio del registro SSPSTAT. movlw b00000000 ; Carga a W el valor de la configuracin del registro SSPTAT movwf SSPSTAT Finalmente, se deben programar las lneas SCL y SDA como entradas, para que stas trabajen en el modo I2C. movlw b00000110 ; Carga a W el valor de la configuracin del puerto C movwf TRISC ; Configura a SCL y SDA como entradas INICIO 338 Implementacin y control del puerto I 2 C Otro aspecto que debemos tomar en cuenta, es si se va a configurar las interrupciones en el caso de que ocurran eventos tales como si hay un dato en SPBUF (bit SSPIE en el registro PIE1) y si hay una colisin al tratar de enviar un dato (bit BCLIE en el registro PIE2). Una vez configurado el puerto I 2 C, entonces vendra la parte de implementacin y control. Para ello se deber seguir los siguientes pasos: 1) Arranque (Start). 2) Continuacin (Restart). 3) Parada (Stop). 4) Lectura (recepcin). 5) Reconocimiento (Acknowlege, despus de una lectura). ACK (Reconocimiento) NACK (No reconocimiento) 6) Escritura. Hasta aqu te hemos dado una introduccin relacionada con el puerto I 2 C. Si deseas saber ms detallada sobre este tema, te recomendamos que leas la nota de aplicacin AN735,
INICIO 339 Actividad Para esta seccin, te proponemos que ubiques componentes que se comuniquen en el modo I 2 C y desarrolles programas que establezcan la comunicacin con esos dispositivos. Si por alguna razn no te es posible ubicarlos, entonces te proponemos que hagas la comunicacin entre dos microcontroladores PIC, de manera que transfieran datos entre uno y otro... Utiliza tu imaginacin. INICIO 340 7.12 El Puerto C y el USART INICIO Un USART es un Transmisor y Receptor Serial Asncrono o Sncrono Universal. ste es un dispositivo de suma importancia para la comunicacin con una diversidad de equipos electrnicos, entre los cuales destacan: Computadores Personales, monitores, programadores, controles industriales, MODEM, etc. Los PICs de la serie 16F87X, con excepcin del PIC16F872, tienen un mdulo USART que puede trabajar en modo bidireccional asncrono (full duplex) o en modo sncrono unidireccional (half duplex). Veamos en la siguiente tabla, los terminales del puerto C involucrados con este mdulo. En una transmisin sincrnica el terminal RC7/RX/DT se utiliza para la transferencia de datos en forma serial (DT) y en el terminal R6/TX/CK estn los pulsos de sincronizacin (CK). En modo sncrono, el PIC podr trabajar en los modos maestro o esclavo. En una transmisin asncrona, el terminal RC7/RX se utiliza para la recepcin de datos (RX), mientras que el terminal RC6/TX se emplea para la transmisin de datos (TX). SALIDA TMR1 ENTRADA TMR1
E/S DIGITAL RC0/T1OSC0 /T1CKI SAL COMP2 SAL PMW2 ENTR. TMR1 ENTR. CAPT2 E/S DIGITAL RC1/T10SC 1/CCP2 SAL COMP1 SAL PMW1 RELOJ I2C ENTRADA DATOS I2C RELOJ TRANS SINCRONA DATOS TRANS SINCRONA ENTRADA CAPTURA 1 RELOJ SPI ENTRADA DATOS SPI SALIDA DATOS SCPI TRANSMIS. USART RECEPCIN USART E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL RC2/CCP1 RC3/SCK/ SCL RC4/SDI/ SDA RC5/SDO RC6/TX/CK RC7/RX/DT c c 341 Transmisin Asncrona INICIO En la siguiente figura se muestra un esquema de dos equipos que se comunican de manera serial asincrnica. La comunicacin serial asncrona es muy utilizada en una gran variedad de aplicaciones, tanto en equipos de computacin, como en equipos industriales. Su ventaja radica en que slo necesita de dos o tres cables para interconectar dos equipos, y por medio de ellos transmitir mensajes. Adems de esto, debido a que la comunicacin se realiza en forma serial, se adapta muy bien a sistemas de transmisin inalmbrica. Al USART tambin se le suele llamar SCI por las siglas Serial Comunications Interface, y para el protocolo de transmisin de datos, es muy utilizada la norma RS-232-C. La configuracin del USART se hace mediante los registros: TXSTA (direccin 98h), RCSTA (direccin 18h) y SPBRG (direccin 99h), los cuales corresponden al control del transmisor, el control del receptor y el generador de baudios respectivamente. RS- 232C Tx Rx Gnd Rx Tx Gnd PIC 1 PIC 2 342 Diagrama de bloques de la transmisin del USART INICIO En la siguiente figura se muestra el diagrama de funcionamiento de la seccin de transmisin serial del USART que se encuentra en los PIC16F87X. En una transmisin serial asncrona, para enviar un dato de 8 bits, ste se coloca en el registro TXREG; ese dato se transfiere al registro de desplazamiento TSR, el cual har que los datos salgan por el terminal de salida RC6/TX/CK. El dato a enviar, podr tener un bit adicional, el cual se utiliza normalmente para colocar la paridad de los datos transmitidos, segn se habilite o no el bit 8 por medio de TX9. Cuando se desea hacer la transmisin se coloca en 1 el bit TXEN (habilitacin de transmisin) y con ello, el oscilador del generador de velocidad de transmisin enva los pulsos para que se produzca el desplazamiento de los datos del registro TSR y salgan por el terminal RC6/TX/CK. El bit TXIF, el cual se puede utilizar para interrumpir el programa principal para colocar un nuevo dato en TXREG, se activa cuando un dato se transfiere de TXREG a TSR al iniciarse una nueva transmisin, entonces TXREG est listo para recibir un nuevo dato. 343 Bits de configuracin de la transmisin del USART INICIO De acuerdo a la explicacin anterior, podemos nombrar los bits que configuran al transmisor del USART ubicados en el registro TXSTA.
CSRC: Seleccin de la fuente del oscilador. 1 Modo Maestro (oscilador interno). 0 Modo esclavo (Oscilador externo) TX9: Habilitacin del bit 9 de transmisin. 1 Transmisin de 9 bits. 0 Transmisin de 8 bits. TXEN: Habilitacin de la transmisin. 1 Transmisin habilitada. 0 Transmisin inhabilitada. SYNC: Seleccin del modo de operacin del USART. 1 Modo sncrono. 0 Modo asncrono. BRGH: Velocidad de transmisin: 1 Velocidad alta. 0 Velocidad baja. TRMT: Estado del registro de transmisin: 1 Registro vaco (transmiti los datos). 0 Registro no vaco. TX9D: Bit 9 del dato a transmitir. Usualmente se utiliza para el bit de paridad.
344 Formas de onda en la transmisin asncrona Otra manera de observar el funcionamiento de esta interfaz serial, la podemos analizar de acuerdo al diagrama de las formas de onda involucradas. Vemos que la seal BRG es una oscilacin libre, la cual determinar la velocidad de transmisin. En un segmento de transmisin, podemos ver que el envo comienza con un bit de arranque (start bit) que comienza con valor 0, luego se enva el dato de 8 9 bits y finaliza con un bit de parada (stop bit) el cual es de valor 1. Un dato se puede escribir en el registro TXREG despus de haberse transmitido el bit de parada (stop bit) de un dato previo, es decir, que mientras se est transmitiendo un dato, por medio del registro TSR, se puede cargar otro en el registro TXREG. El bit TXIF del registro PIR1 es el que nos indicar cundo se puede cargar un dato a transmitir en el registro TXREG. El bit TRMT indicar si el registro TSR est vaco. INICIO 345 Diagrama de bloques de la recepcin del USART INICIO Conociendo el funcionamiento de un dispositivo de transmisin serial asncrona, ser ms fcil comprender el receptor serial. En principio, el receptor serial deber ser un dispositivo que lea los datos enviados por el transmisor serial. En la siguiente figura se muestra el diagrama de funcionamiento de la seccin de recepcin serial del USART que se encuentra en los PIC16F87X. Los datos entran por el terminal RC7/RX/DT, y de all pasan al registro RSR cuando el bit CREN est en 1. El circuito de control de datos de entrada y el generador de baudios, se encargan de transferir el dato al registro RSR. Al llenarse el registro RSR, se activa el bit RCIF del registro PIR1, el cual se puede utilizar como interrupcin, y se transfiere el dato a una memoria FIFO con dos datos de capacidad, la cual se podr leer por medio del PIC16F87X al acceder al registro RCREG. 346 Bits de configuracin de la recepcin del USART INICIO Veamos a continuacin la descripcin de los bits de configuracin del registro RCSTA:
SPEN: Habilitacin del puerto serial. 1 Puerto serial habilitado. 0 Puerto serial deshabilitado. RX9: Habilitacin del bit 9 de Recepcin. 1 Recepcin de 9bits. 0 Recepcin de 8 bits. SREN: Configuracin de la recepcin sencilla en modo sncrono maestro. 1 Habilita la recepcin sencilla. 0 Deshabilita la recepcin sencilla. CREN: Configura la recepcin continua. 1 Habilita la recepcin continua. 0 Deshabilita la recepcin continua. ADDEN: Habilitacin de la deteccin de direccin: 1 Activa la deteccin de direccin e interrupcin. 0 Inhibe la deteccin de direccin y el bit 9 puede ser utilizado. FERR: Error de trama: 1 Hay error de trama. 0 No hay error de trama. OERR: Error de desbordamiento 1 Hay error de desbordamiento. 0 No hay error de desbordamiento. RX9D: Bit 9 del dato Recibido. Usualmente se utiliza para el bit de paridad.
347 Formas de onda en la transmisin asncrona Otra manera de observar el funcionamiento del receptor serial, la podemos analizar de acuerdo al diagrama de las formas de ondas involucradas. En la figura se muestra una recepcin de tres datos simultneos. Cada vez que se activa el bit de parada, se transfiere un dato a la FIFO, que es leda como el registro RCREG, y se activa el bit RCIF de PIR1, que puede utilizarse para interrumpir al programa principal del microcontrolador. Si la lectura del registro RCREG no se realiza, y se llena la FIFO, Se colocar el bit OERR en 1, para indicar que hay un desbordamiento, y que podran perderse datos. INICIO 348 Velocidad de transmisin La cantidad de datos que se pueden enviar por unidad de tiempo depende de la velocidad de transmisin. A mayor velocidad, podremos transferir ms rpidamente los datos de un dispositivo a otro, pero esto podra llevar algunos inconvenientes, tales como la incompatibilidad de velocidad con el otro equipo, una mayor probabilidad de error, una menor distancia de transmisin y una mayor dedicacin del microcontrolador al manejo de los datos enviados y recibidos. El compromiso est en poder transmitir a la mayor velocidad posible, sin que ocurra algn inconveniente de importancia, lo cual amerita un estudio de mayor profundidad. En los PIC16F87X, la velocidad de transmisin se puede obtener en base al oscilador interno del microcontrolador o algn oscilador externo. Adems se cuenta con el registro SPBRG, el cual fija la relacin de velocidad de transmisin en funcin de la frecuencia del oscilador y el bit BRGH del registro TXSTA. A continuacin se presenta esta relacin:
Velocidad de transmisin (Baudios o Bits/Seg) = f osc /K(X + 1)
Donde: X es el valor cargado en el registro SPBRG K = 64 si BRGH = 0, y K = 16 si BRGH = 1
En las tablas de la siguiente pgina, podemos obtener las velocidades de transmisin estandarizadas para la norma RS-232-C, en funcin de la frecuencia del oscilador y el valor del registro SPBRG y el bit BRGH. INICIO 349 Determinar la velocidad de transmisin En el caso de que BGRH=1, obtenemos la siguiente tabla: En el caso de que BGRH=0, obtenemos la siguiente tabla: INICIO 350 Pasos para configurar al mdulo de transmisin serial asncrono Para configurar el mdulo USART para una transmisin serial asncrona, se deber seguir los siguientes pasos: Configurar R6/TX/CK como salida y R7/RX/DT como entrada por medio de TRISC. Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH. Colocar SYNC = 0, para indicar que la transmisin es asncrona. Colocar SPEN = 1, para habilitar al puerto serial. Colocar los bits GIE y TXIE en 1 si se va a habilitar las interrupciones del transmisor y el receptor. Si el dato es de 9 bits, hacer TX9 = 1. Se activa la transmisin con TXEN = 1, TXIF se colocar en 1, ya que TXREG se encuentra vaco. Se carga en TXREG el dato a transmitir, y comienza la transmisin. Al comenzar la transmisin, si TSR estaba vaco, ste se cargar con el contenido de TXREG, por tanto se podr colocar otro dato a enviar en TXREG. Para saber si se puede cargar ese dato, bastar con evaluar el bit TXIF. INICIO 351 Bits utilizados para la transmisin asncrona A continuacin se presentan los bits utilizados para configurar la transmisin asncrona en el USART. INICIO En la siguiente pgina se muestra un programa ejemplo para seguir los pasos mencionados anteriormente. 352 Pasos para configurar al mdulo de recepcin serial asncrono Para configurar el mdulo USART para una recepcin serial asncrona, en el caso en el que no se haya configurado el bloque transmisor, se deber seguir los siguientes pasos: Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH. Colocar SYNC = 0, para indicar que la transmisin es asncrona. Colocar SPEN = 1, para habilitar al puerto serial. Colocar los bits GIE y RCIE en 1 si se va a habilitar las interrupciones del transmisor y el receptor. Si el dato es de 9 bits, hacer RX9 = 1. Habilitar la recepcin al hacer CREN = 1 El mdulo de recepcin serial quedar configurado. Cuando un dato se recibe, el bit de aviso RCIF se colocar en 1, y si el bit RCIE est habilitado, habr una interrupcin. En ese momento se podr leer el registro RCSTA obtener el noveno bit (RX9D) y determinar si hubo algn error en la recepcin (bits FERR y OERR). Para leer un prximo dato, estos dos bits debern ser borrados al colocar en 1 el bit CREN. Si no se encuentra errores, se leer el dato en el registro RCREG. INICIO 353 Bits utilizados para la recepcin asncrona A continuacin se presentan los bits utilizados para configurar la recepcin asncrona en el USART. INICIO En la siguiente pgina se muestra un programa ejemplo para seguir los pasos mencionados anteriormente. 354 Programa de configuracin del USART en modo asncrono ; Configuracin del USART para transmisin y recepcin serial asncrona BCF STATUS, RP1 BSF STATUS, RP0 ; Seleccin del banco 1 para configurar TRISC MOVLW b10xxxxxx ; Palabra de configuracin del puerto C MOVWR TRISC ; Configura las lneas RC7 como entrada y RC6 como salida MOVLW BAUDIOS ; Establece la velocidad de transmisin, el valor de MOVWF SPBRG ; BAUDIOS se calcula segn la tablas de SPBRG MOVLW 0x40 ; Transmisin de 8 bits, modo baja velocidad MOVWF TXTA ; Modo asincrnico, habilitacin del USART BSF PIE1,TXIE ; Habilita interrupcin del transmisor BSF PIE1,RCIE ; Habilita interrupcin del receptor BCF STATUS,RP0 ; Seleccin del banco 0 MOVLW 0x90 ; Recepcin de 8 bits, receptor habilitado, MOVWF RCSTA ; Puerto serial habilitado INICIO 355 Configuracin para la recepcin de una direccin La deteccin de direcciones en un mdulo de comunicacin serial tiene aplicaciones en sistemas en donde varios equipos se conectan juntos. Para configurar el mdulo USART para la recepcin de una direccin, se siguen prcticamente los mismos pasos que en la recepcin de un dato, con la diferencia de que en el caso de detectar una direccin, se deber habilitar el bit ADDEN del registro RCSTA: Se fija la velocidad de transmisin al cargar el valor adecuado en SBREG y BGRH. Colocar SYNC = 0, para indicar que la transmisin es asncrona. Colocar SPEN = 1, para habilitar al puerto serial. Colocar los bits GIE y RCIE en 1 si se va a habilitar las interrupciones del transmisor y el receptor. Si el dato es de 9 bits, hacer RX9 = 1. Colocar en 1 el bit ADDEN para habilitar la lectura de la direccin. Habilitar la recepcin al hacer CREN = 1 El mdulo de recepcin serial quedar configurado. Cuando una direccin se recibe, el bit de aviso RCIF se colocar en 1, y si el bit RCIE est habilitado, habr una interrupcin. En ese momento se podr leer el registro RCSTA obtener el noveno bit (RX9D) y determinar si hubo algn error en la recepcin (bits FERR y OERR). Para leer un prximo dato, estos dos bits debern ser borrados al colocar un 1 en CREN. Si se obtuvo la direccin al leer el registro RCREG, se deber borrar el bit ADDEN, para la lectura de datos. INICIO 356 Algunos formatos de utilizados en la transmisin asncrona Quizs las interfaces ms comunes de comunicacin serial que utilizan el USART, son la RS-232 y la RS-485. La mayora de los computadores personales tiene uno o ms puertos que utilizan la interfaz RS-232, la cual sirve para comunicarte con otro dispositivo, tales como un ratn, un mdem o un programador de PICs. En el caso de la interfaz RS-485, sta es muy utilizada en la industria, y permite comunicar un dispositivo maestro con varios esclavos por medio de un par trenzado. Entre las caractersticas del RS-232, se puede mencionar que utiliza comnmente dos lneas de seal y la referencia o tierra. Las abreviaciones utilizadas para estas lneas son: GND que es la referencia, TXD que es la salida a transmitir y RXD que es la entrada a recibir. Existen tambin otras lneas que pueden ser utilizadas en algunos casos para el protocolo. Sin embargo, lo comn es que se utilicen slo estas tres lneas. Los conectores ms comunes utilizados para las interfaces RS-232 son los de 9 terminales y un poco menos los de 25 terminales. En la parte posterior de tu computador podrs observar si tienes una interfaz de 9 terminales machos, similar a la que se presenta en la siguiente figura:
A pesar de las nueve lneas que se presentan en el conector, bastara con utilizar solamente tres. En la figura de la siguiente pgina se muestra un esquema de la conexin de dos elementos con la interfaz RS-232. INICIO 357 Conexin RS-232 La figura muestra las lneas de transmisin y recepcin, ya que se sobreentiende que stas estn referidas a tierra (GND) y representa el sistema ms sencillo de transmisin bidireccional RS-232. INICIO Por lo general, una tensin positiva (mayor que +3Vdc) representa un 0 y una negativa (menor que -3Vdc) representa un 1. Los elementos que se representan por medio de un rectngulo a trazos, se les conoce con el nombre de Transceiver, y se utiliza para convertir los niveles lgicos de 0 a 5V en los niveles de voltaje RS-232. Un ejemplo de esta interfaz es el circuito integrado SN75155. La comunicacin RS232 podra ser sencilla, ya que el USART transmite y recibe datos en el formato de bytes. Esta transmisin se podr hacer ms compleja, si se incluye la paridad, las seales de protocolo y el estado de break, el cual consiste en una salida cero que se mantiene por un perodo en el orden de 100mS a 500mS. INTERFAZ o TRANSCEIVER 2 3 358 Asignacin de terminales en un conector RS-232 N Terminal Nombre DTE-DCE Funcin 1 DCD Detector de portadora de dato 2 RD Recepcin de datos 3 TD Transmisin de datos 4 DTR Terminal listo 5 SG Tierra de seales 6 DSR Dato listo en el DCE 7 RTS Responde para enviar 8 CTS Borrar envo 9 RI Indicador de llamada INICIO De estos terminales, los que se utilizan con ms frecuencia son: RD, TD y SG; es decir: recepcin de datos, transmisin de datos y tierra de seales. Debemos recordar que en el equipo de comunicacin, el tipo de conector es hembra y el terminal 2 corresponde al de transmisin de datos y el 3 al de recepcin de datos. 5 4 3 2 1 9 8 7 6 A continuacin, en la siguiente tabla, se presenta la asignacin de cada terminal en la mayora de los conectores macho RS-232-C de 9 pines que emplean terminales o computadores. Adems se muestran las abreviaciones y los nombres de cada terminal, y el sentido de flujo de datos entre un DTE (computador o terminal) y DCE (equipo de comunicacin). 359 Utilizacin y configuracin del puerto RS-232-C de tu PC INICIO Para hacer utilizacin del puerto serial de tu computador personal, podrs entrar en el modo Hiperterminal. Para ello debers acceder a: Inicio, Programas, Accesorios, Comunicaciones y luego a Hyper Terminal. Aparecer entonces la siguiente ventana: En ella debers hacer doble clic en Hypertrm 360 Utilizando tu PC en modo Hyper Terminal INICIO Al acceder al Hyper Terminal, debers hacer la configuracin. Aparecer la ventana que est a la izquierda, en ella podrs escoger algn icono y colocar un nombre como por ejemplo Puerto Serial 1. Luego tendrs que hacer clic en Aceptar. Despus aparecer la ventana que est a la derecha, en la cual podrs seleccionar el puerto serial que utilizars. Al hacer esto, aparecer un cuadro para configurar el puerto serial, en el cual debers seleccionar los parmetros adecuados para la comunicacin con tu microcontrolador. 361 Configuracin del puerto RS-232-C INICIO En la siguiente ventana introducirs los parmetros del puerto de comunicacin serial de tu computadora, y debers seleccionar los valores que sean compatibles con el del puerto USART del PIC16F87X que t irs a programar. Despus de configurar el puerto serial, tendrs lista tu PC para utilizar su puerto serial. Lo que escribas desde el teclado, ser enviado por el terminal TX del puerto serial, y los caracteres que veas en pantalla, sern aqullos que entran por el terminal RX del mismo puerto. Es importante que utilices la interfaz que convierta las seales del PIC a los niveles establecidos por la norma RS-232C. Al final de este aparte te proponemos una actividad en la que debers utilizar el puerto RS-232C. 362 Conexin RS-485 La interfaz RS-485 utiliza seales de transmisin en modo diferencial, de esta manera hay dos seales de voltaje que indican su valor por su diferencia de potencial relativa. Las salidas del RS-485 pueden ser tres estados, lo cual permite la conexin de varios dispositivos para transmitir o recibir con el mismo par de seales. Los dispositivos se configuran en un arreglo de un maestro y varios esclavos, y la transmisin puede hacerse mediante un par de cables o dos pares de cables. La figura muestra el esquema de conexin en una transmisin con dos pares de cables en donde las lneas son conectadas a varios dispositivos. INICIO 363 Implementacin RS-485 El software para la interfaz RS-485 puede ser significativamente ms complejo que el de la interfaz RS-232. Se requiere un protocolo de comunicacin para arbitrar el bus, y no exista colisin de datos al tratar de transmitir dos dispositivos a la vez. Los buses RS-485 se suelen implementar con un maestro y varios esclavos. El maestro es el nico dispositivo que inicia la comunicacin en el bus, para as evitar problemas de colisiones. Esta comunicacin se comienza al enviar una direccin y un comando, entonces el esclavo que est siendo seleccionado responder. Cada esclavo deber tener una direccin diferente, y debe entender el formato de los datos que se le envan. Adicionalmente cada dispositivo debe controlar la habilitacin de la seal de salida en su transceiver. Debido a que en el bus se conectan varios dispositivos esclavos, el USART debe utilizar el modo de deteccin de direcciones, al habilitar el bit ADDEN del registro RCSTA. Esto permitir que en una transmisin, los esclavos no seleccionados previamente ignoren los bits de datos recibidos. Si en una transmisin, el maestro coloca en 1 el bit ADDEN, se indica que se est transmitiendo una direccin a ellos. En el momento de detectar el bit ADDEN, cada esclavo har la comparacin de la direccin recibida con la que ellos tienen establecidas, y en el caso de coincidir, ese esclavo sabr que los datos y comandos siguientes correspondern a l. Esto reducir y facilitar el software de comunicacin entre varios dispositivos conectados en un mismo par de lneas. Para ms detalles, debers conocer los formatos de cada protocolo, para que puedas programar el USART en tu PIC. Algunos de los protocolos industriales que utilizan la interfaz RS485 son: el ASCII ANSI X3 28-2.5-A4, el BSAP y el MODBUS, entre otros. INICIO 364 Transmisin Sncrona en modo maestro La transmisin sncrona con el USART se realiza en modo Half Duplex, es decir, la transmisin y la recepcin no ocurren al mismo tiempo. Al transmitir un dato, la recepcin se inhibe y viceversa, ya que stas se hacen por una misma lnea. La otra lnea es utilizada para sincronizar los datos, es decir, saldrn los niveles del oscilador si el transmisor es maestro o los recibir si es un dispositivo esclavo. La ventaja de la transmisin sncrona, es que sta es ms sencilla y no requiere de una lgica complicada. Para configurar el mdulo USART en la comunicacin serial sncrona en modo maestro se colocarn en 1 los bits SYNC (modo sncrono) y CSRC (oscilador interno) del registro TXSTA. Al habilitar el bit SPEN del registro RCSTA, se configuran los terminales RC6/TX/CK como el que produce la seal de sincronizacin o reloj, y el terminal RC7/RX/DT se utilizar como la lnea que enva y recibe datos. La transmisin serial sncrona ocurre de manera similar a la asncrona. La gran diferencia est en que la seal del oscilador de sincronizacin, la cual es producida por el generador de baudios, se transmite simultneamente con la seal de datos. Para configurar el mdulo USART para la transmisin sncrona en modo maestro, se deber hacer pasos similares para la configuracin en modo asncrono. La nica diferecncia ser que hay que hacer 1 los bits SYNC y CSRC del registro TXSTA. En la siguiente pgina se muestran los bits involucrados en la transmisin serial sncrona en modo maestro y las formas de ondas.
INICIO 365 Bits y formas de ondas relacionados con la transmisin sncrona INICIO 366 Comunicacin Sncrona en modo esclavo La transmisin sncrona en modo esclavo se diferencia de la del modo maestro en que, en modo esclavo el oscilador que produce la sincronizacin de datos es externo al dispositivo. Para especificar que el dispositivo trabaja en modo esclavo, se deber colocar el bit CSRC = 0, el cual est en el registro TXSTA. En el caso de la recepcin sncrona en modo esclavo, se siguen los mismos pasos que en modo maestro. Debido a que la sincronizacin en modo esclavo es externa, el dispositivo podr trabajar en modo reposo. En este caso habr diferencias en la configuracin con respecto al modo maestro. INICIO 367 Registros asociados en la comunicacin sncrona en modo esclavo INICIO 368 Programa de configuracin del USART en modo sncrono ; Configuracin de la transmisin serial sncrona
BCF STATUS,RP1 BSF STATUS,RP0 ; Seleccin del Banco 1 MOVLW BAUDIOS ; Establece la velocidad de transmisin MOVWF SPBRG MOVLW 0xB0 ; Transmisin de 8 bits, modo baja velocidad MOVWF TXTA ; Modo sincrnico, habilitacin del USART BSF PIE1,TXIE ; Habilita interrupcin del transmisor BSF PIE1,RCIE ; Habilita interrupcin del receptor BCF STATUS,RP0 ; Seleccin del banco 0 MOVLW 0x90 ; Recepcin de 8 bits, receptor habilitado, MOVWF RCSTA ; Puerto serial habilitado INICIO 369 Actividades Ya hemos visto el funcionamiento del puerto universal sincrnico-asincrnico (USART). En principio, te habamos mencionado la importancia de este puerto para realizar la comunicacin con otros equipos, entre ellos, el computador. La actividad que se propone, es la de que hagas un programa y montes un circuito que sea capaz de leer una seal analgica, la convierta a digital y la enve al puerto RS-232 de tu computadora. Claro est, que debers utilizar una interfaz que convierta la seal de 0 a 5V que maneja tu microcontrolador, en la de 12V a -12V que se emplea en el estndar RS-232-C. Para ello, te proponemos que emplees el dispositivo de la figura anexa, o uno similar. Por otro lado, debers adquirir un cable para la conexin RS-232, el cual podrs comprar en una tienda de electrnica o computacin. INICIO SN75155 Recepcin RS232C Transmisin RS232C RC7/RX del PIC -12V +12V RC6/TX del PIC 370 Registros asociados al Puerto C INICIO 0000 0000 0000 0000 BF R/W UA S P D/A CKE SMP SSPSTAT 94h 0000 0000 0000 0000 SSPADD 93h 0000 0000 0000 0000 SEN RSEN PEN RCEN ACKEN ACKDT ACKSTAT GCEN SSPCON2 91h 0000 0000 0000 0000 SSPM0 SSPM1 SSPM2 SSPM3 CKP SSPEN SSPOV WCOL SSPCON 14h uuuu uuuu xxxx xxxx SSPBUF 13h 0000 0000 0000 0000 RCREG 1Ah 0000 0000 0000 0000 SPBRG 99h 0000 0000 0000 0000 TXREG 19h 0000 -010 0000 -010 TX9D TRMT BRGH --- SYNC TXEN TX9 CSRC TXTA 98h 0000 000x 0000 000x RX9D OERR FERR ADDEN CREN SREN RX9 SPEN RCSTA 18h --00 0000 --00 0000 CCP2M0 CCP2M1 CCP2M2 CCP2M3 CCP2Y CCP2X --- --- CCP2CON
1Dh uuuu uuuu xxxx xxxx CCPR2H 1Ch uuuu uuuu xxxx xxxx CCPR2L 1Bh --00 0000 --00 0000 CCP1M0 CCP1M1 CCP1M2 CCP1M3 CCP1Y CCP1X --- --- CCP1CON 17h uuuu uuuu xxxx xxxx CCPR1H 16h uuuu uuuu xxxx xxxx CCPR1L 15h 1111 1111 1111 1111 uuuu uuuu Otros Resets 1111 1111 1111 1111 xxxx xxxx Valor en POR y BOR TOCS RC5 Bit 5 INTDG RC6 Bit 6 RBPU# RC7 Bit 7 OPTION_REG TRISC PORTC Registro PS0 PS1 PS2 PSA TOSE 81h, 181h 87h RC0 RC1 RC2 RC3 RC4 07h Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin Registro de Configuracin de PORTC
Registro 1 de Captura, Comparacin y PWM menos significativo Registro 1 de Captura, Comparacin y PWM ms significativo
Registro 2 de Captura, Comparacin y PWM menos significativo Registro 2 de Captura, Comparacin y PWM ms significativo
Registro de datos a transmitir del USART Registro de generacin de la velocidad de transmisin (Baudios) Registro de datos recibidos del USART Registro de datos transmitidos y recibidos del puerto serial sincrnico
Registro de Direcciones del puerto serial sincrnico en modo I 2 C 371 7.13 El Puerto D, el Puerto E y la Interfaz Paralela RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL E/S DIGITAL Bit 7 PSP Bit 6 PSP Bit 5 PSP Bit 4 PSP Bit 3 PSP Bit 2 PSP Bit 1 PSP Bit 0 PSP INICIO Los PIC16F870/872/873/876 no tienen los puertos D y E, as que la tabla aplica solamente a los PIC16F871, PIC16F874 y PIC16F877. El puerto D slo lo tienen los dispositivos de 40 terminales o ms. Dispone de 8 lneas bidireccionales multiplexadas y, las que se usan como entradas, tienen un disparador de Schmitt. El puerto D o PORTD, se ubica en la direccin 08h, mientras que TRISD se encuentra en la 88h. El puerto D puede utilizarse como puerto paralelo esclavo de 8 lneas (PSP). Para que trabaje de esta manera, se deber colocar el bit PSMODE en 1. Este bit se ubica en la posicin 4 del registro TRISE. Las lneas de control del puerto paralelo PSP, las cuales son RD, WR y CS se encuentran en el puerto E En la siguiente tabla, podemos observar la funcin de cada terminal del puerto D. 372 Diagrama de bloques del Puerto Paralelo INICIO El puerto paralelo opera con palabras de 8 bits cuando el bit de control PSPMODE, ubicado en TRISE, se coloque en 1. En el caso de que el puerto trabaje en modo esclavo, se podr leer o escribir de manera asncrona por medio de los terminales RE0/RD y RE1/WR respectivamente. La interfaz paralela puede hacer del microcontrolador, un dispositivo de comunicacin con microprocesadores de 8bits. Para ello se debern configurar los bits RE2/CS, RE1/WR y RE0/RD como entradas de control que se conectaran a la seleccin del dispositivo (CS), la lectura RD y la escritura WR. Los datos se conectarn a las lneas del puerto D, que al ser bidireccionales, no tendr efecto el registro TRISD en el puerto D. En la siguiente figura se presenta el diagrama de bloques del puerto paralelo. Al analizar este diagrama, se podr comprender el funcionamiento de las lneas del puerto D y las lneas de control que se encuentran en el puerto E. 373 Formas de onda para la escritura de datos INICIO La escritura en el puerto PSP ocurre al colocar en 0 las lneas CS y WR. Cuando estas lneas pasan a 1, el bit IBF, el cual indica que el registro de entrada est lleno, y est ubicado en el registro TRISE se establece en el perodo Q4 del siguiente ciclo del oscilador del microcontrolador. La seal estar escrita cuando aparece el pulso Q2 de ese ciclo. El bit de aviso de interrupcin PSPIF, ubicado en PIR1, se establecer tambin en el perodo Q4 y se podr utilizar para interrumpir al microcontrolador. Este bit se borrar al leer el dato en el puerto D en el programa del microcontrolador. El bit de desbordamiento, IBOV, ubicado en TRISE, se colocar en 1, si una nueva escritura se hace en el registro del PSP antes de haberse ledo el dato que estaba en ese registro. En la siguiente figura se presentan las formas de onda para la escritura de datos en el PSP. 374 Formas de onda para la lectura de datos INICIO La lectura del PSP ocurre cuando se detecta un 0 en cada una de las lneas CS y RD. El bit que indica que el registro de salida est lleno (OBF), ubicado en el registro TRISE, se coloca en cero inmediatamente, para indicar que el puerto D est a la espera de ser ledo por el bus externo. Al colocar el bit CS o RD en 1, el bit de interrupcin PSPIF se coloca en 1 en el perodo Q4 del ciclo del oscilador del microcontrolador, para indicar que la lectura ha sido realizada. En la siguiente figura se presentan las formas de onda para la lectura de datos. 375 Registros asociados al Puerto Paralelo INICIO La ventaja de utilizar al puerto paralelo como elemento controlado por otro dispositivo externo, es que nos permite hacer transferencias de datos de un dispositivo a otro de manera ms rpida e independiente, y para ello se utilizaran las interrupciones. En la siguiente tabla se encuentran los bits asociados al puerto paralelo. 376 Registros Asociados a PORTD INICIO 0000 -111 1111 1111 uuuu uuuu Otros Resets 0000 -111 1111 1111 xxxx xxxx Valor en POR y BOR IBOV RD5 Bit 5 OBF RD6 Bit 6 IBF RD7 Bit 7 TRISE TRISD PORTD Registro PSP MODE 89h 88h RD0 RD1 RD2 RD3 RD4 08h Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin Registro de Configuracin de PORTD Registro de Configuracin de PORTE 377 El Puerto E INICIO El puerto E o PORTE ocupa la direccin 09h, dispone de 3 lneas bidireccionales, multiplexadas con otras funciones relacionadas con el control del puerto paralelo esclavo (PSP) y las entradas del Convertidor Analgico a Digital. Los PIC16F870/872/873/876 no tienen los puerto D y E, as que la tabla aplica solamente a los PIC16F871, PIC16F874 y PIC16F877. La configuracin del puerto E se realiza por medio del registro TRISE. Lectura en el modo PSP (RD) Entrada Analgica 5 E/S DIGITAL RE0/RD#/AN5 Escritura en el modo PSP (WR) Entrada Analgica 6 E/S DIGITAL RE1/WR#/AN6 Seleccin de Chip en el modo PSP (CS) Entrada Analgica 7 E/S DIGITAL RE2/CS#/AN7 0000 -111 Otros Resets 0000 -111 Valor en POR y BOR IBOV Bit 5 OBF Bit 6 IBF Bit 7 TRISE Registro --- PSP MODE 89h Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Direccin Configuracin de las Entradas/Salida Digitales 378 Actividades INICIO Con este aparte finalizamos la descripcin de los mdulos de los PIC16F87X. La primera actividad propuesta, relacionada con el puerto paralelo, ser la de conectar dos microcontroladores entre s por medio del puerto paralelo. Debers enviar datos desde uno a otro, mediante un programa que t mismo elaborars. Recuerda utilizar las lneas de control RD, WR y CS, para el control del flujo de datos. Otra actividad que podrs realizar, es la de transferir datos desde el puerto paralelo de tu computadora. Para ello, debers buscar informacin de cmo se conectan las lneas de este puerto. 379 7.14 Palabra de Configuracin La palabra de configuracin es una posicin reservada en la memoria de programa, que se ubica en la posicin 2007h, y slo se puede acceder a ella en el momento de la grabacin del PIC. Los bits de esta palabra determinarn algunas caractersticas de funcionamiento del microcontrolador. B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 CP1 CP0 - Debug WRT CP0 LVP BODEN CP1 CP0 PWRTE# WDTE FOSC1 FOSC0 Los bits FOSC0, FOSC1, WDTE y PWRTE# se configuran de la misma manera que en los PIC16F84A y PIC16C54 (repasar). CP1 y CP0 se utilizan para proteger secciones de la memoria de programa, y stas dependen de los modelos del PIC que se va a utilizar. Para ms detalles, vase la tabla de la pgina siguiente. BODEN. Habilitacin de inicializacin por cada de tensin. 1 Habilitada, 0 Deshabiltada. LVP. Habilitacin para programar en bajo voltaje. 1 RB3 habilitada, 0 RB3 funciona como E/S digital y la programacin se realizar por alto voltaje. CPD. Proteccin de la memoria EEPROM de datos. 1 No protegida, 0 Protegida WRT. Habilitacin para la escritura de la memoria de programa FLASH. 1 Se podr escribir en la parte no protegida de la FLASH, 0 No se permitir la escritura. Debug. Modo de depuracin del circuito. 1 Desactivado. RB7 y RB6 actuarn como lneas de E/S. 0 Activado. RB7 y RB6 actan en modo de depuracin. La depuracin se podr hacer desde el MPLAB.
INICIO 380 Proteccin de la memoria de programa de los PIC16F87X Modelo PIC CP1 CP0 Direccin inicial de proteccin Direccin final de proteccin PIC16F870/871/872 0 0 TODO PROTEGIDO PIC16F873/874 0 0 0000H 0FFFH PIC16F873/874 0 1 0800H 0FFFH PIC16F873/874 1 0 0F00H 0FFFH PIC16F876/877 0 0 0000H 1FFFH PIC16F876/877 0 1 1000H 1FFFH PIC16F876/877 1 0 1F00H 1FFFH Todos los modelos 1 1 NO PROTEGIDO INICIO Conclusin E Hemos hablado acerca de lo que puedes hacer con los microcontroladores PIC y has visto la descripcin de algunos de ellos, desde el ms bsico, el PIC16C54, hasta los de la gama media de la serie PIC16F87X. Entre ellos podrs considerar sus potencialidades a la hora de hacer algn diseo. E Has aprendido las instrucciones del lenguaje ensamblador y la forma en que puedes desarrollar programas y grabarlos para realizar varias aplicaciones. E Has visto cmo trabajan los mdulos de circuitos incluidos en los diferentes microcontroladores y cmo acceder a sus registros de configuracin. Pudiste observar tambin la importancia de estos mdulos para el desarrollo de interfaces con el mundo exterior. E En el anexo 5 te presentamos algunos circuitos, notas de aplicacin y direcciones de Internet, los cuales te ayudarn a ampliar los conocimientos sobre los microcontroladores PIC. E Tu estudio siguiente lo podrs hacer en los microcontroladores PIC18FXXX, lenguaje C, y los procesadores de seal dsPIC o TMS320. E Finalmente, te deseamos el mejor de los xitos, y si encuentras alguna sugerencia para mejorar y promocionar este material, podrs escribir un correo electrnico a la direccin: calvarezluz@cantv.net INICIO ANEXOS E ANEXO 1. GLOSARIO E ANEXO 2. EXPLICACIN DETALLADA DE LAS INSTRUCCIONES E ANEXO 3. DIRECTIVAS DEL LENGUAJE ENSAMBLADOR E ANEXO 4. REGISTROS Y BITS DE FUNCIONES ESPECIALES E ANEXO 5. INTERFACES Y PROYECTOS CON MICROCONTROLADORES PIC E ANEXO 6. ACTUALIZACIN DEL PICSTART PLUS E ANEXO 7. GRABACIN DE UN PROGRAMA EN LOS PIC16F87X INICIO 383 INICIO 384 Smbolo matemtico que indica mayor o igual que.
Smbolo matemtico que indica menor o igual que.
<> Los valores que estn encerrados en estos smbolos, indican bits que estn asignados a un registro.
El valor que est debajo de una lnea continua, indica que est negado o invertido lgicamente. INICIO 385 Acceso: Entrada de datos a un lugar de memoria o puerto.
Actuador: Elemento de accin final en un sistema de control.
A/DC: Convertidor Analgico a digital.
ADD: Instruccin que ejecuta la operacin suma o adicin.
Analgico: Se dice a aquella seal o funcin que vara de forma continua en el tiempo.
AND: Instruccin que ejecuta la operacin lgica AND, la cual tiene como resultado 0, cuando cualquiera de sus entradas es 0.
INICIO 386 Aritmtica: Operacin matemtica, normalmente se refiere a una instruccin que ejecuta una suma, resta, incremento o decremento. Arquitectura: Estructura interna de un microcontrolador donde se ubica sus elementos y la interconexin entre ellos. ASCII: Se refiere a un formato internacional de caracteres, en los que un cdigo binario corresponde a una letra, nmero o signo utilizado en un idioma. Tambin corresponde a un protocolo de comunicacin entre varios dispositivos. El protocolo ASCII ANSI X3 28-2.5-A4, corresponde a una norma de comunicacin industrial en los que varios dispositivos se conectan a un par de cables. Asincrnico: Que no est sincronizado con otra seal. Atmel: Fabricante de semiconductores. INICIO 387 B (b): Posicin de un bit en un registro.
Bajo consumo: Que absorbe poca potencia.
Bsica: Se refiere a la gama de los microcontroladores con palabras de instruccin de 12 bits.
Bidireccional: Que puede transferir datos en las dos direcciones.
Bit: Es la mnima unidad de informacin. Puede valer 0 1.
Booleano: Se refiere a la lgica o los elementos digitales.
Boole: Matemtico que desarroll el lgebra que lleva su nombre y los postulados de lgica que se usa como base para la elaboracin de funciones digitales. INICIO 388 Borrado: Accin de colocar los datos con valor 0. En el caso de las memorias EPROM, EEPROM y FLASH, la accin de borrar significa colocar todos los datos en 1.
BSAP: Se refiere a las siglas Bristol Synchronous Asynchronous Protocol. Es un protocolo utilizado para el control y supervisin de sistemas de control.
Bus: Lneas que agrupan direccin, datos o seales de control.
Byte: Octeto o agrupacin de 8 bits. INICIO 389
C: Lenguaje de programacin de alto nivel. Es muy utilizado para compilar programas a lenguaje de mquina. CAN: Protocolo de comunicacin serial utilizado en la industria. Call: Instruccin que consiste en llamar a una rutina o subprograma. Capacitor: Condensador elctrico. Carry o C: Es el bit 0 del registro STATUS, que indica cundo en una operacin de suma se lleva un acarreo, o en una resta se lleva un dbito. Cero: Valor nulo. C ext : Condensador externo. Chip: Circuito integrado. Ciclo: Perodo en el cual transcurre una instruccin.
CLEAR: Instruccin de borrado o puesta a cero de un dato.
INICIO 390 CLK: Reloj o seal de oscilacin que define la frecuencia de trabajo del microcontrolador.
CMOS: Tecnologa digital de bajo consumo, basada en el uso de transistores MOS complementarios (Complementary Metal Oxide Semiconductor).
CLKOUT: Seal de salida del reloj o CLK.
Comparador: Elemento que lee dos magnitudes y las compara.
Complemento: Obtencin del valor opuesto.
Configuracin: Efecto de establecer unas condiciones que definen algunas funciones permanentes de un dispositivo.
Contador: Registro que efecta la accin de contar.
Control: Organizacin de determinada informacin.
CPU: Central Processor Unit Unidad central de Procesamiento. Microprocesador. INICIO 391 D/AC: Convertidor Digital a Analgico.
Dallas: Fabricante de Semiconductores
Dato: Cualquier valor que puede leerse o escribirse en un registro o memoria o puerto
Decimal Carry: Acarreo decimal referido a un nibble. Corresponde al bit 1 del registro STATUS. Cuando en una operacin suma (o resta) se excede el valor 1111, se activa el Decimal Carry.
Decremento: Disminucin en una unidad el valor de un dato especfico.
Deshabilitar: Inhabilitar o inhibir las funciones de un elemento. INICIO 392 Direccin: Valor numrico o etiqueta en donde se puede ubicar un determinado dato o instruccin en una posicin de memoria.
Disparador de Schmitt: Elemento que incorpora a su entrada un detector de histresis, es decir que compara con dos valores, segn si la seal a detectar tiene pendiente positiva o negativa.
DRT: Temporizador interno que retarda la inicializacin del microcontrolador en aproximadamente 18 mseg. INICIO 393 EEPROM: Memoria para lectura solamente, a la que se le puede grabar con pulsos elctricos. Esta memoria se puede usar para guardar datos, que deben mantenerse, aun al quitar la alimentacin de la memoria.
Ejecucin: Accin de realizar la instruccin o instrucciones de un programa.
Embedded: Elemento dentro de otro, normalmente se refiere al microcontrolador como un sistema dentro de un chip
Emulador: Elemento que imita al microcontrolador, y que posee los mismos terminales que ste, y una conexin a la computadora. ste se inserta en el conector destinado al microcontrolador en un prototipo, y mediante la computadora se puede observar y corregir el programa que est en el sistema diseado INICIO 394 Entrada: Terminal de conexin cuya seal se dirige hacia un dispositivo.
Entrada-Salida: Terminales de conexin al microcontrolador que pueden emplearse como entrada o salida.
EPROM: Eraseble Programable Read Only Memory Memoria de slo lectura, que puede ser borrada con luz ultravioleta, y luego puede ser regrabada.
Escalamiento: Efecto de cambiar de escala a un valor.
Escribir: Almacenar un dato en una memoria, registro o puerto.
Escritura: Almacenamiento de un dato en una memoria, registro o puerto.
EXOR: Instruccin que ejecuta la funcin lgica o exclusivo. Esta instruccin definida para dos entradas tiene como resultado 0, si las dos entradas son iguales. Tiene como resultado 1 si las dos entradas son diferentes. INICIO 395 F: Apuntador de direcciones de los registros de la memoria de datos. FIFO: De las siglas First In First Out (Primero entrado, primero salido. Se refiere a las memorias cuyos datos van a una pila, y el dato que se lee es el que entr de primero. Flash: Memoria de programa que puede borrar grupos de datos por medio de pulsos elctricos. F OSC : Frecuencia del oscilador del microcontrolador (reloj). FSR: Registro apuntador de direcciones de la memoria de datos. Gama: Grupo. GOTO: Instruccin utilizada para cambiar la direccin de ejecucin del programa. y INICIO 396 e Handbook: Manual del fabricante. Harvard: Arquitectura que consiste en separar la memoria de programa de la de datos. Hitachi: Fabricante japons de semiconductores. Hz: Unidad de frecuencia que indica Hertz o ciclo por segundo. I2C I 2 C: Protocolo de comunicacin serial desarrollado por Philips. Este protocolo permite comunicar varios dispositivos utilizando nicamente dos lneas y el comn. I/O: Entrada/Salida. Incremento: Aumenta en una unidad el valor de un dato especfico. IND: Registro de acceso indirecto, cuya direccin est dada por el registro FSR. INICIO 397 Inicializacin: Accin y efecto de dar valores iniciales a un dispositivo.
Instruccin: Accin que se desea que ejecute una lnea de un programa.
INTCON: Registro de control de interrupciones
Intel: Fabricante estadounidense de microprocesadores y otros semiconductores.
Interfaz: Punto de enlace entre dos medios. Normalmente se aplica a las entradas y salidas de una computadora con el medio.
Interrupcin: Detencin momentnea de un programa, debido al llamado de un elemento que necesita ser atendido por medio de una rutina.
IOR: Instruccin que ejecuta la funcin lgica OR (inclusivo).
INICIO 398 y K: Prefijo que significa 1000. Letra que se utiliza para designar a una constante.
K: Unidad de resistencia elctrica equivalente a 1000 ohmios.
LCD: Pantalla de cristal lquido (Liquid Crystal Display).
Lectura: Obtencin de un dato de una memoria, registro o puerto.
Leer: Accin y efecto de obtener un dato desde una memoria, registro o puerto.
Literal: Valor constante o etiqueta.
Lgica: Que se relaciona con el lgebra de Boole o elementos digitales. Slo toma dos valores: 0 1.
LSB: Bit menos significativo o de menor peso. (Least Significant bit).
INICIO 399 MCLR: Entrada de inicializacin del dispositivo. Se activa con 0. Este terminal tambin tiene la funcion Vpp, que es la tensin de programacin els microcontrolador. MCS: Micro-Computer System. Se refiere a un sistema realizado con microcomputador e interfaces. MCU: Microcontroller Unit. Se refiere a un microcontrolador. Media: Se refiere a la gama de los microcontroladores que tienen palabras de instruccin de 14 bits. Memoria Memory: Elemento capaz de almacenar informacin (datos o programas). Programming: Grabacin o programacin de una memoria. MHz: Unidad de frecuencia equivalente a un milln de Hertz. Microchip: Fabricante estadounidense de semiconductores. Microcomputadora: Computadora pequea, antes se refera as a un microcontrolador. Microcontrolador: Dispositivo que est compuesto de un microprocesador, memorias, puertos, temporizadores y algunos otros elementos,que ejecuta una o ms funciones especficas de acuerdo a su programacin y conexin.
INICIO 400 Microprocesador: Elemento que consta de una unidad de control, registros y unidad de lgica y aritmtica, capaz de realizar funciones de procesamiento y cmputo. MIPS: Millones de instrucciones por segundo, esto da una idea de la velocidad de procesamiento de un microprocesador o microcontrolador. MODBUS: Protocolo industrial utilizado para el control de procesos. MODEM: Se refiere al trmino Modulador Demodulador, y es un dispositivo que se emplea para transmitir y recibir seales por medio de la modulacin y demodulacin de la misma. Motorola: Fabricante estadounidense de semiconductores y equipos de comunicacin. MOVE: Instruccin que transfiere un dato de un lugar a otro. MPLAB: Software de ambiente de desarrollo para los PIC. MSb: Bit ms significativo o de mayor peso. (More Significant bit). mseg o ms: Unidad de tiempo que representa una milsima de segundo. Mux: Multi-seleccionador o multiplexer, elemento que conmuta varias seales. INICIO 401
National Semiconductor: Fabricante estadounidense de semiconductores.
NEC: Fabricante japons de semiconductores.
Nibbles: Agrupacin de 4 bits.
NMOS: Tecnologa digital basada en transistores MOSFET canal N.
NOP: Instruccin que no ejecuta ninguna operacin.
nSeg: Unidad de tiempo que representa una milmillonsima parte de segundo.
INICIO 402 OPTION: Registro que configura el escalamiento del TMRO o el WDT.
OR: Funcin lgica cuyo resultado es 1, cuando cualquiera de sus entradas es 1.
Oscilador: Circuito capaz de producir una seal cclica a una frecuencia estable.
OSC1/CLKIN: Es una de las conexiones para un cristal resonador, que fije la frecuencia de oscilacin. En el caso de no utilizar un cristal resonador, ese terminal se podr conectar a la entrada de un oscilador externo.
OSC2/CLKOUT: Es la otra conexin para un cristal resonador. En modo RC, sta es la salida de oscilacin que tiene un valor de de la frecuencia de OSC1, y determina el tiempo de duracin de un ciclo de instruccin. OTP: Dispositivo programable una sola vez.
INICIO 403 PA: Puerto A (PORTA).
Paralelo: Se aplica a un conjunto de datos que se envan o reciben en forma simultnea por un medio de transmisin que utiliza un grupo de lneas.
PB: Puerto B. (PORTB).
PC: Contador de programa. Puerto C (PORTC).
PD: PD Bit 5 del registro STATUS que indica que el dispositivo est en el modo SLEEP o Reposo. Puerto D (PORTD).
Perro Guardin: Watchdog, trmino con el que se le designa al temporizador que hace la inicializacin del microcontrolador, cuando detecta una condicin anormal.
Philips: Fabricante de semiconductores. Entre otras cosas es una empresa considerada un gigante en productos electrnicos.
INICIO 404 PIC: Peripheral Interface Controller Sigla que identifica a los microcontroladores de Microchip.
PICSTART PLUS: Programador para cualquier microcontrolador PIC.
Pila: Stack, registros donde se guardan las direcciones de retorno de rutinas.
POR: Power on reset, circuito de inicializacin por encendido.
PORT: Nombre con el que se designa a cada puerto, el cual es una interfaz o registro de conexin externa del microcontrolador.
Programa: Secuencia y efecto de escribir instrucciones que realizan una funcin especfica.
Programador: Dispositivo que graba un programa en el microcontrolador. Persona que desarrolla un programa. INICIO 405 PROM: Programble Read Only Memory Memoria programable slo para lectura. PS: Bit que se encuentra en el registro OPTION, y que est relacionado con el escalamiento. El bit PSA (Bit 3 de OPTION), es el bit de asignacin al escalamiento, y los bits PS0 - PS2 (Bits 0 al 2 de OPTION) estn relacionado con el valor del escalamiento. Puerto: Interfaz o registro de conexin externa a un microcontrolador. Puerto Serial: Interfaz que transmite o recibe datos en una sola lnea. Los datos se envan de manera secuencial en grupos de varios bits y adems se incluyen bits de control. Pull up: Conexin a la fuente de alimentacin positiva. Se refiere normalmente a las resistencias que se conectan al voltaje de alimentacin (V DD ). PWM: Pulse With Modulator Modulador de ancho de pulsos. INICIO 406 RA0 RA4: Terminal de conexin del puerto A, el sufijo indica el bit que corresponde a ese puerto. RAM: Random Access Memory Memoria para escritura y lectura. RB0 RB7: Terminal de conexin del puerto B, el sufijo indica el bit que corresponde a ese puerto. RC: Resistencia - Condensador. Terminal de conexin del puerto C, el sufijo indica el bit que corresponde a ese puerto. Registro: Elemento electrnico que almacena un dato. Reloj: Seal producida por un oscilador que se utiliza como referencia del tiempo. Reset: Inicializacin. Efecto de dar condiciones iniciales a algo
INICIO 407 Resistencia: Elemento elctrico que se opone parcialmente al paso de la corriente elctrica.
Resonante: Que tiene una frecuencia natural de oscilacin.
RET, RETURN: Instruccin de retorno. Se aplica cuando una rutina finaliza.
R EXT : Resistencia externa.
RISC: Conjunto reducido de instrucciones (Reduced Instruction Set). Se utiliza en microprocesadores de alta velocidad.
Rodar: Desplazar los bits de un registro.
ROM: Read Only Memory Memoria slo para lectura.
Rotacin: Accin y efecto de desplazar los bits de un registro.
Rutina: Subprograma que se ejecuta en forma separada al programa principal.
INICIO 408 Salida: Terminal de conexin cuya seal es generada por un dispositivo.
Salto: Cambio de direccin de la memoria de programa en forma no secuencial.
Sensor: Elemento que detecta una variable fsica y la convierte en seal elctrica.
Serial: Se aplica a los datos que entran o salen uno por uno o bit por bit en una sola lnea de transmisin.
SGS-THOMSON: Fabricante europeo de semiconductores.
Siemens: Fabricante europeo de semiconductores.
INICIO 409 Sincrnico: Que ocurre a la par de otra seal gua.
Sleep: Dormir. Se emplea para decir que un dispositivo est en reposo, y por tanto disminuye el consumo de potencia.
Stack: Pila de registros donde se almacenan las direcciones de retorno de las rutinas.
STATUS: Registro donde se guarda los bits de control de un microprocesador.
SUB: Instruccin que ejecuta la resta de dos valores.
Subrutina: Subprograma de una rutina.
SWAP: Instruccin que intercambia la posicin de los nibles (agrupacin de 4 bits) de un registro.
INICIO 410 INICIO Tecnologa Se refiere al tipo de semiconductor utilizado en los dispositivos Dgital: lgicos. Destacan: TTL, CMOS, NMOS, ECL, PMOS, etc.
Temporizador: Timer, elemento que contabiliza el tiempo.
Terminal: Conexin fsica de un elemento.
Texas Fabricante estadounidense de semiconductores. Son muy Instruments: conocidos los DSPs que fabrica esta compaa.
Tiempo Tiempo por el cual no se ejecutar una accin alguna, hasta que de espera: ste se acabe.
Timer: Temporizador, elemento que contabiliza el tiempo.
TMRO: Temporizador 0. Contiene una longitud de 8 bits.
TO: Tiempo de espera (time out). TO corresponde al bit 4 del registro STATUS, e indica si la ejecucin del programa de un microcontrolador, ha sido interrumpido por el WDT.
411 TOCKI: Es el terminal que corresponde a la base de tiempo del temporizador 0 (TMR0). Debe colocarse a Vss o VDD en el caso de no utilizarse, para reducir el consumo de energa.
TOCS: Bit 5 del registro OPTION, que se utiliza como seleccin de la fuente del temporizador 0. TOSE: Bit 4 del registro OPTION, que se utiliza como seleccin de la transicin de la fuente del temporizador 0. Toshiba: Fabricante japons de semiconductores. Transferencia: Mover un dato de un registro, memoria o puerto a otra posicin. Tres estados: Son salidas de dispositivos lgicos que tienen, adems de los estados 0 y 1, un tercer estado que es el de alta impedancia o desconexin. Esto es til para la transferencia de datos de forma bidireccional. TRIS: Registro de programacin de los puertos del microcontrolador.
INICIO 412 y USART: Transmisor y receptor universal sincrnico o asincrnico.
V DD : Terminal que se conecta al voltaje de alimentacin positiva en circuitos MOS. En el caso de los microcontroladores PIC, la tensin a aplicar en este terminal deber estar comprendida entre 3V y 6V.
Verify Specification: Verificacin de especificacin.
V SS : Terminal que se conecta al voltaje de referencia o nulo (0V) en circuitos electrnicos MOS.
Vpp: Tensin de programacin
INICIO 413 a W: Registro de trabajo de los microcontroladores PIC.
Watchdog: Perro guardin, trmino con el que se le designa al temporizador que hace la inicializacin del microcontrolador, cuando detecta una condicin anormal.
WDT: Temporizador perro guardin o Watchdog timer.
XOR: Instruccin que ejecuta la funcin lgica o exclusivo, la cual consiste en obtener un 0 si las dos entradas son iguales, y un 1 si stas son diferentes.
Z: Bit 2 del registro STATUS que se activa cuando un resultado es igual a cero.
Zero: Cero o valor nulo.
INICIO 414 INICIO 415 Conjunto de instrucciones de los PIC16C5X, PIC16F5X y 12C5X (Gama Bsica): Cdigo En- Operadores samblador Descripcin Notas Bits STATUS afectados Cdigo de Operacin Msb Lsb Ciclos ADDWF f,d Suma W con f 1 0001 11df ffff C, DC, Z 1,2,4 ANDWF f,d AND de W con f 1 0001 01df ffff Z 2,4 CLRF f Borra f 1 0000 011f ffff Z 4 CLRW - Borra W 1 0000 0100 0000 Z COMF f,d Complementa f 1 0010 01df ffff Z DECF f,d Decremento f 1 0000 11df ffff Z 2,4 DECFSZ f,d Decrementa f, salta si es 0 1(2) 0010 11df ffff 2,4 INCF f,d Incremento f 1 0010 10df ffff Z 2,4 INCFSZ f,d Incremento f, salta si es 0 1(2) 0011 11df ffff 2,4 IORWF f,d OR inclusivo de W con f 1 0001 00df ffff Z 2,4 MOVF f,d Mueve f 1 0010 00df ffff Z 2,4 MOVWF f Mueve W a f 1 0000 001f ffff 1,4 NOP - No operacin 1 0000 0000 0000 RLF f,d Rotacin izqu. a travs del Carry 1 0011 01df ffff C 2,4 RRF f,d Rotacin der. a travs del Carry 1 0011 00df ffff C 2,4 SUBWF f,d Resta W de f 1 0000 10df ffff C,DC,Z 1,2,4 SWAPF f,d Intercambia nibles de f 1 0011 10df ffff 2,4 XORWF f,d OR exclusivo de W con f 1 0001 10df ffff Z 2,4 OPERACIONES ORIENTADAS A BYTES INICIO 416 OPERACIONES ORIENTADAS A BITS DE REGISTROS Cdigo Ensamblador Operadores Descripcin Notas Bits de STATUS afectados Cdigo de Operacin Msb Lsb Ciclos BCF f,b Borra bit de f 1 0100 bbbf ffff 2,4 BSF f,b Pone un 1 a bit de f 1 0101 bbbf ffff 2,4 BTFSC f,b Salta si bit de f es 0 1(2) 0110 bbbf ffff BTFSS f,b Salta si bit de f es 1 1(2) 0111 bbbf ffff OPERACIONES CON LITERAL Y CONTROL ANDLW K AND de K con W 1 1110 kkkk kkkk Z CALL K Llamar a subrutina 2 1001 kkkk kkkk 1 CLRWDT K Borra temporizador WDT 1 0000 0000 0100 TOPD GOTO K Salto incondicional 2 101k kkkk kkkk IORLW K OR inclusivo de k con W 1 1101 kkkk kkkk Z MOVLW K Mover valor k hacia W 1 1100 kkkk kkkk OPTION K Mover valor k a OPTION 1 0000 0000 0010 RETLW K Retornar, asignar valor k a W 2 1000 kkkk kkkk SLEEP - Habilita modo de bajo consum. 1 0000 0000 0011 TO, PD TRIS f Mover valor de W a TRIS 1 0000 0000 0fff 3 XORLW k EXOR DE k con W 1 1111 kkkk kkkk Z INICIO 417 Conjunto de instrucciones de los PIC16CXXX, 16FXXX, 12C6XX, 12F6XX Y 14CXXX (Gama media). Cdigo Ensamblador Operadores Descripcin Notas Bits de STATUS afectados Cdigo de Operacin Msb Lsb Ciclos ADDWF f,d Suma W con f 1 00 0001 11df ffff C, DC, Z 1,2,4 ANDWF f,d AND de W con f 1 00 0001 01df ffff Z 2,4 CLRF f Borra f 1 00 0000 011f ffff Z 4 CLRW - Borra W 1 00 0000 0100 0000 Z COMF f,d Complementa f 1 00 0010 01df ffff Z DECF f,d Decremento f 1 00 0000 11df ffff Z 2,4 DECFSZ f,d Decrementa f, salta si es 0 1(2) 00 0010 11df ffff 2,4 INCF f,d Incremento f 1 00 0010 10df ffff Z 2,4 INCFSZ f,d Incremento f, salta si es 0 1(2) 00 0011 11df ffff 2,4 IORWF f,d OR inclusivo de W con f 1 00 0001 00df ffff Z 2,4 MOVF f,d Mueve f 1 00 0010 00df ffff Z 2,4 MOVWF f Mueve W a f 1 00 0000 001f ffff 1,4 NOP - No operacin 1 00 0000 0000 0000 RLF f,d Rotacin izq. a travs del Carry 1 00 0011 01df ffff C 2,4 RRF f,d Rotacin der. a travs del Carry 1 00 0011 00df ffff C 2,4 SUBWF f,d Resta W de f 1 00 0000 10df ffff C,DC,Z 1,2,4 SWAPF f,d Intercambia nibles de f 1 00 0011 10df ffff 2,4 XORWF f,d OR exclusivo de W con f 1 00 0001 10df ffff Z 2,4
OPERAECIONES ORIENTADAS A BYTES INICIO 418 OPERACIONES ORIENTADAS A BITS DE REGISTROS Cdigo Ensamblador Operadores Descripcin Notas Bits de STATUS afectados Cdigo de Operacin Msb Lsb Ciclos BCF f,b Borra bit de f 1 01 00bb bfff ffff 1,2 BSF f,b Pone un 1 a bit de f 1 01 01bb bfff ffff 1,2 BTFSC f,b Salta si bit de f es 0 1(2) 01 10bb bfff ffff 3 BTFSS f,b Salta si bit de f es 1 1(2) 01 11bb bfff ffff 3 OPERACIONES CON LITERAL Y CONTROL ADDLW K Suma K con W 1 11 111x kkkk kkkk C,DC,Z ANDLW K AND de K con W 1 11 1001 kkkk kkkk Z CALL K Llamar a subrutina 2 10 0kkk kkkk kkkk GOTO K Salto incondicional 2 10 1kkk kkkk kkkk IORLW K OR inclusivo de k con W 1 11 1000 kkkk kkkk Z MOVLW K Mover valor k hacia W 1 11 00xx kkkk kkkk RETRE - Retorno de interrupcin 2 00 0000 0000 1001 RETLW K Retornar, asignar valor k a W 2 11 01xx kkkk kkkk SLEEP - Habilita modo de bajo consum. 1 00 0000 0110 0011 TO, PD SUBLW K Restar W del valor K 1 11 110k kkkk kkkk C,DC,Z XORLW k EXOR de k con W 1 11 1010 kkkk kkkk Z INICIO 419 ADDLW Suma valor literal con W Nota: Esta instruccin no est incluida en los PIC de la gama bsica Cdigo Ensamblador: (Etiqueta) ADDLW K Operadores: 0 K 255 Operacin: (W) + (K) (W) Bits de estado que se afectan: C, DC, Z Descripcin: Se suma el contenido del registro W con el valor K El resultado se coloca en W.
Ejemplo: ADDLW 0 x 15 Antes de la Instruccin W = 0x10 Despus de la Instruccin W = 0x25 INICIO 420 ADDWF Suma W y f Cdigo Ensamblador: (Etiqueta) ADDWF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d (0,1) Operacin: (W) + (f) (dest) Bits de estado que se afectan: C, DC, Z Descripcin: Suma los contenidos de los registros W y f Si d es 0, el resultado se coloca en W, si d es 1, se coloca en f
Ejemplo: ADDWF FSR, 0 Antes de la Instruccin W = 0x17 FSR = 0xC2 Despus de la Instruccin W = 0xD9 FSR = 0xC2 INICIO 421 Cdigo Ensamblador: (Etiqueta) ANDLW k Operadores: 0 K 255 Operacin: (W). AND.(K) (W) Bits de estado que se afectan: Z Descripcin: Se realiza la funcin lgica AND entre los bits del registro W y el valor K. El resultado se coloca en W.
Ejemplo: ANDLW 0x5F Antes de la Instruccin W = 0xA3 Despus de la Instruccin W = 0x03
And del valor literal con W ANDLW INICIO 422 ANDWF AND W con f Cdigo Ensamblador: (Etiqueta) ANDWF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d (0,1) Operacin: (W).AND. (f) (dest) Bits de estado que se afectan: Z Descripcin: Se ejecuta la funcin lgica AND entre los bits del registro W y los bits del registro f Si d es 0, el resultado se coloca en W, si d es 1, se coloca en f
Ejemplo: ANDWF FSR, 1 Antes de la Instruccin W = 0x17 FSR = 0xC2 Despus de la Instruccin W = 0x17 FSR = 0x02 INICIO 423 BCF Borra bit en f Cdigo Ensamblador: (Etiqueta) BCF f,b Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) 0 b 7 Operacin: 0 (f<b>) Bits de estado que se afectan: Ninguno Descripcin: Se coloca en 0 bit b en registro f
Ejemplo: BCF FLAG_REG, 7 Antes de la Instruccin FLAG_REG = =0xC7 Despus de la Instruccin FLAG_REG = 0x47 INICIO 424 BSF Establece en 1 bit en f Cdigo Ensamblador: (Etiqueta) BSF f,b Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) 0 b 7 Operacin: 1 (f<b>) Bits de estado que se afectan: Ninguno Descripcin: Se coloca en 1 bit b del registro f
Ejemplo: BSF FLAG_REG, 7 Antes de la Instruccin FLAG_REG = =0x0A Despus de la Instruccin FLAG_REG = 0x8A INICIO 425 Cdigo Ensamblador: (Etiqueta) BTFSC f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) 0 b 7 Operacin: Salta si (f<b>) = 0 Bits de estado que se afectan: Ninguno Descripcin: Si bit b en el registro f es 0, entonces se salta la siguiente instruccin, la cual se haba preparado para ejecutar, pero se descarta y se ejecuta un NOP, lo cual hace que la instruccin dure dos ciclos. Si bit b en f es 1, entonces la instruccin actual se ejecuta en un ciclo, luego se ejecuta la siguiente instruccin Prueba bit en f, salta si es cero BTFSC Ejemplo: AQU BTFSC FLAG, 1 FALSO GOTO COD_PROCESO CIERTO Antes de la Instruccin PC = direccin (AQU) Despus de la Instruccin Si FLAG<1> = 0, PC = direccin (CIERTO); Ejecucin en dos ciclos Si FLAG<1> = 1, PC = direccin (FALSO); Ejecucin en un ciclo INICIO 426 Cdigo Ensamblador: (Etiqueta) BTFSS f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) 0 b 7 Operacin: Salta si (f<b>) = 1 Bits de estado que se afectan: Ninguno Descripcin: Si bit b en el registro f es 1, entonces se salta la siguiente instruccin, la cual se haba preparado para ejecutar, pero se descarta y se ejecuta un NOP, lo cual hace que la instruccin dure dos ciclos. Si bit b en f es 0, entonces la instruccin actual se ejecuta en un ciclo, luego se ejecuta la siguiente instruccin
BTFSS Prueba bit en f, salta si es 1 Ejemplo: AQU BTFSS FLAG, 1 FALSO GOTO COD_PROCESO CIERTO Antes de la Instruccin PC = direccin (AQU) Despus de la Instruccin Si FLAG<1> = 0, PC = direccin (FALSO); Ejecucin en un ciclo Si FLAG<1> = 1, PC = direccin (CIERTO); Ejecucin en dos ciclos
INICIO 427 CALL Llamar a subrutina Cdigo Ensamblador: (Etiqueta) CALL K Operadores: 0 K 255 Operacin: (PC) +1 Tope de la pila (Stack); K PC<7:0>; (STATUS <6:5>) PC <10:9>; 0 PC <8> Bits de estado que se afectan: Ninguno Descripcin: Llama a subrutina. Primero la direccin de retorno (PC+1) se coloca en la pila (Stack). Los bits 8 de K se colocan en los bits <7:0> del PC. Los bits <10:9> del PC toman los valores de los bits <6:5> del STATUS. El bit 8 del PC es colocado en 0. Esta instruccin dura dos ciclos.
Ejemplo: AQU CALL ALLA
Antes de la Instruccin PC = direccin (AQU) Despus de la Instruccin PC = direccin (ALLA) TOS = direccin (AQU + 1) INICIO 428 CLRF Borra f Cdigo Ensamblador: (Etiqueta) CLRF f Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) Operacin: 00h (f); 1 Z Bits de estado que se afectan: Z Descripcin: El contenido del registro f es borrado y el bit Z es puesto en 1 Ejemplo: CLRF FLAG_REG Antes de la Instruccin FLAG_REG = =0x5A Despus de la Instruccin FLAG_REG = 0x00 z = 1 INICIO 429 Cdigo Ensamblador: (Etiqueta) CLRW Operadores: Ninguno Operacin: 00h (W); 1 Z Bits de estado que se afectan: Z Descripcin: El registro W es borrado y el bit Z es puesto en 1.
Ejemplo: CLRW Antes de la Instruccin W = 0x5A Despus de la Instruccin W = 0x00 z = 1 INICIO 430 Cdigo Ensamblador: (Etiqueta) CLRWDT Operadores: Ninguno Operacin: 00h WDT; 0 Escalamiento WDT (si es asignado a ste); 1 TO; 1 PD Bits de estado que se afectan: TO, PD Descripcin: Borra el registro WDT y tambin al escalamiento, si ste es asignado al WDT y no al temporizador Timer0. Los bits de estado TO y PD se ponen en 1
Ejemplo: CLRWDT Antes de la Instruccin Contador WDT = ? Despus de la Instruccin Contador WDT = 0x00 Escalamiento de WDT = 0 TO = 1 PD = 1 CLRWDT Borra temporizador perro guardin (WDT) INICIO 431 Cdigo Ensamblador: (Etiqueta) COMF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) - 1 (dest) Bits de estado que se afectan: Z Descripcin: Se complementa el contenido del registro f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f.
Ejemplo: COMF REG1, 0 Antes de la Instruccin REG1 = 0x13 Despus de la Instruccin REG1 = 0x13 W = 0xEC Complementa f INICIO 432 Cdigo Ensamblador: (Etiqueta) DECF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) - 1 (dest) Bits de estado que se afectan: Z Descripcin: Decrementa el contenido del registro f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f.
Ejemplo: DECF CNT, 1 Antes de la Instruccin CNT = 0x01 Z = 0 Despus de la Instruccin CNT = 0x00 Z = 1
Decremento de f INICIO 433 Cdigo Ensamblador: (Etiqueta) DECFSZ f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) - 1 d; salta si el resultado = 0 Bits de estado que se afectan: Ninguno Descripcin: Decrementa el contenido del registro f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f. Si el resultado es 0, entones se salta la siguiente instruccin, la cual se haba preparado para ejecutar, pero se descartta y se ejecuta un NOP, lo cual hace que la instruccin dure dos ciclos. Si el resultado es diferente de cero, en un ciclo, y luego entonces la instruccin actual se ejecuta se ejecuta la siguiente instruccin.
Decremento de f, salta si es 0 Ejemplo: AQUI DECFSZ CNT, 1 GOTO LAZO CONTI = = Antes de la Instruccin PC = direccin (AQU) Despus de la Instruccin CNT = CNT - 1; Si CNT = 0, PC = direccin (CONTI); Ejecucin en dos ciclos Si CNT 0, PC = direccin (AQU+1); Ejecucin en un ciclo
INICIO 434 Cdigo Ensamblador: (Etiqueta) GOTO k Operadores gama bsica: 0 k 512 Operadores gama media: 0 k 2047 Operacin gama bsica: k PC <8:0> (STATUS <6:5> PC <10:9> Operacin gama media: k PC <10:0> (PCLATCH <4:3>) PC <12:11> Bits de estado que se afectan: Ninguno Descripcin: Salto incondicional. Los 9 bits de k se colocan en los bits <8:0> del PC. Los bits <10:9> del PC toman los valores de los bits <6:5> del registro STATUS. Esta instruccin dura dos ciclos
Ejemplo: GOTO ALLA
Despus de la Instruccin PC = direccin (ALLA)
Salto Incondicional INICIO 435 Cdigo Ensamblador: (Etiqueta) INCF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) + 1 (dest) Bits de estado que se afectan: Z Descripcin: Se incrementa el contenido de f Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f
Ejemplo: INCF CNT, 1
Antes de la Instruccin CNT = 0xFF Z = 0 Despus de la Instruccin CNT = 0x00 Z = 1 Incremento de f INICIO 436 Cdigo Ensamblador: (Etiqueta) INCFSZ f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) + 1 (dest), salta si el resultado = 0 Bits de estado afectados: Ninguno Descripcin: Incrementa el contenido del registro f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f. Si el resultado es 0, entones se salta la siguiente instruccin, la cual se haba preparado para ejecutar, pero se descarta y se ejecuta un NOP, lo cual hace que la instruccin dure dos ciclos. Si el resultado es diferente de cero, entonces la instruccin actual se ejecuta en un ciclo, y luego se ejecuta la siguiente instruccin.
Ejemplo: AQUI INCFSZ CNT, 1 GOTO LAZO CONTI = = Antes de la Instruccin PC = direccin (AQU) Despus de la Instruccin CNT = CNT - 1; Si CNT = 0, PC = direccin (CONTI); Ejecucin en dos ciclos Si CNT 0, PC = direccin (AQU+1); Ejecucin en un ciclo
Incremento de f salta si es 0 INICIO 437 Cdigo Ensamblador: (Etiqueta) IORLW k Operadores: 0 K 255 Operacin: (W).OR.(K) (W); Bits de estado que se afectan: Z Descripcin: Se ejecuta la funcin lgica OR (inclusivo) entre los bits del registro W y los bits del valor literal k. El resultado se coloca en W. Ejemplo: IORLWF 0x35 Antes de la Instruccin W = 0x9A Despus de la Instruccin W = 0xBF Z = 0 OR Inclusivo de valor literal con W INICIO 438 Cdigo Ensamblador: (Etiqueta) IORWF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (W).OR.(F) (dest), Bits de estado que se afectan: Z Descripcin: Se ejecuta la funcin lgica OR (inclusivo) entre los bits del registro W y los bits del registro f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f. Ejemplo: IORWF RESULT, 0 Antes de la Instruccin RESULT = 0x13 W = 0x91 Despus de la Instruccin RESULT = 0x13 W = 0xBF Z = 0
OR Inclusivo de W con f IORWF INICIO 439 MOVF Mueve f Cdigo Ensamblador: (Etiqueta) MOVF f,d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d 0,1 Operacin: (f) (dest) Bits de estado que se afectan: Z Descripcin: El valor de f se mueve hacia d. Si d es 0, el valor se coloca en W, si d es 1, el valor se coloca en f. Esta instruccin es til para saber si el contenido de f es cero, ya que se afecta al bit Z.
Ejemplo: MOVF FSR, 0
Despus de la Instruccin W = Valor en el registro FSR INICIO 440 Cdigo Ensamblador: (Etiqueta) MOVLW k Operadores: 0 K 255 Operacin: K (W); Bits de estado que se afectan: Ninguno Descripcin: Se carga el valor de k en el registro W.
Ejemplo: MOVLW 0x5A Despus de la Instruccin W = 0x5A MOVLW Mueve valor literal a W INICIO 441 Cdigo Ensamblador: (Etiqueta) MOVWF f Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) Operacin: (W) (f) Bits de estado que se afectan: Ninguno Descripcin: Mueve el dato desde W a f
Ejemplo: MOVWF TEMP_REG
Antes de la Instruccin TEMP_REG = 0xFF W = 0x4F
Despus de la Instruccin TEMP_REG = 0x4F W = 0x4F
MOVWF Mueve W a f INICIO 442 Cdigo Ensamblador: (Etiqueta) NOP Operadores: Ninguno Operacin: No operacin Bits de estado que se afectan: Ninguno Descripcin: No hay operacin. Simplemente se ejecuta un ciclo, sin afectar nada.
Ejemplo: NOP NOP No operacin NO INICIO 443 Nota: Esta instruccin no se recomienda utilizar en los PIC de la gama media. Cdigo Ensamblador: (Etiqueta) OPTION Operadores: Ninguno) Operacin: (W) OPTION Bits de estado que se afectan: Ninguno Descripcin: El contenido de W es cargado al Registro OPTION.
Ejemplo: OPTION
Antes de la Instruccin W = 0x07 Despus de la Instruccin OPTION = 0x07
OPTION Carga el registro OPTION INICIO 444 RETFIE Retorno de Interrupcin Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica Cdigo Ensamblador: (Etiqueta) RETFIE Operadores: Ninguno) Operacin: TOS PC Bits de estado que se afectan: 1 GIE Descripcin: Retorno de una Interrupcin. El valor del tope de la pila (TOS) es cargado en el contador de programa (PC). Las interrupciones se habilitan al poner en 1 el bit de habilitacin global de interrupciones (GIE). Este bit se encuentra ubicado en el registro INTCON (bit 7). Esta instruccin dura dos ciclos. Ejemplo: RETFIE
Despus de la Instruccin PIC = TOS GIE = 1
INICIO 445 Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica
Cdigo Ensamblador: (Etiqueta) RETURN Operadores: Ninguno) Operacin: TOS PC Bits de estado que se afectan: Ninguno Descripcin: Retorno de una subrutina. El valor del tope de la pila (TOS) es cargado en el contador de programa (PC). Esta instruccin dura dos ciclos.
Ejemplo: RETURN
Despus de la Instruccin PC = TOS
RETURN Retorno de Interrupcin INICIO 446 RETLW Retorno con valor literal en W Cdigo Ensamblador: (Etiqueta) RETLW K Operadores: 0 K 255 Operacin: K (W) TOS PC Bits de estado afectados: Ninguno Descripcin: El registro W se carga con el valor del literal k. El contador de programa PC se carga con el tope de la pila (STACK, direccin de retorno). Esta instruccin es til para convertir valores por medio de una tabla de equivalencia, vase ejemplo. Esta instruccin dura dos ciclos. Ejemplo: CALL TABLA ;W contiene tabla de valores de la ;conversin. Despus de ejecutar la ;rutina, W tendr el valor convertido
TABLA ADDWF PCL ;W = desplazamiento RETLW k0 ;Comienza tabla RETLW k1
RETLW kn ;Final de la tabla Antes de la Instruccin W = 0x07 Despus de la Instruccin W = valor de k7
INICIO 447 Cdigo Ensamblador: (Etiqueta) RLF f, d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d [0,1] Operacin: Ver descripcin abajo Bits de estado que se afectan: C Descripcin: Los bits de f son rodeados (desplazados) en un bit hacia la izquierda, pasando por el bit Carry. El bit 0 de f, forma el valor anterior del bit 7 de f. Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f. Ejemplo: RLF REG1, 0
Antes de la Instruccin REG1 = 1110 0110 C = 0 Despus de la Instruccin REG1 = 1110 0110 W = 1100 1100 C = 1
RLF Rodar f a la Izquierda a travs del Carry INICIO 448 Cdigo Ensamblador: (Etiqueta) RRF f, d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d [0,1] Operacin: Ver descripcin abajo Bits de estado que se afectan: C Descripcin: Los bits de f son rodeados (desplazados) en un bit hacia la derecha, pasando por el bit Carry. El bit 7 de f, toma el valor anterior del bit Carry, y el bit Carry toma el valor anterior del bit 0 de f Si d es 0, el resultado se coloca en W, si d es 1, el resultado se coloca en f.
Ejemplo: RRF REG1, 0 Antes de la Instruccin REG1 = 1110 0110 C = 0 Despus de la Instruccin REG1 = 1110 0110 W = 0111 0011 C = 0
RRF Rodar f a la Derecha a travs del Carry INICIO 449 Cdigo Ensamblador: (Etiqueta) SLEEP Operadores: Ninguno Operacin: 00h WDT 0 Escalamiento del WDT; 1 TO 0 PD Bits de estado que se afectan: TO, PD Descripcin: Se coloca en 1 el bit TO del registro de estado. Los bits de estado de: potencia baja. El WDT y el escalamiento se colocan en 0. El procesador se coloca en estado de reposo (SLEEP), el oscilador se detiene y el consumo es mnimo. Ejemplo: SLEEP
SLEEP Entra en el modo de reposo INICIO 450 Nota: Esta instruccin no est incluida en los PIC de la Gama Bsica
Cdigo Ensamblador: (Etiqueta) SUBLW K Operadores: 0 K 255 Operacin: K - (W) (W) Bits de estado que se afectan: C, DC, Z Descripcin: Se resta el contenido de W con el de los 8 bits de k (en complemento a 2). El resultado se coloca en W Ejemplo 1: SUBLW 0x02 Antes de la Instruccin W = 1 C = ? Despus de la Instruccin W = 1 C = 1; el resultado es positivo Ejemplo 2: Antes de la Instruccin W = 2 C = ? Despus de la Instruccin W = 0 C = 1; el resultado es 0 Ejemplo 3: Antes de la Instruccin W = 3 C = ? Despus de la Instruccin W = FF C = 0; el resultado es negativo
Resta W de Valor Literal INICIO 451 Cdigo Ensamblador: (Etiqueta) SUBWF f, d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d [0,1] Operacin: (f) - (W) (dest) Bits de estado que se afectan: C, DC, Z Descripcin: Se resta el contenido de W con el del registro f (en complemento a 2). Si d es 0, el resultado se coloca en W Si d es 1, el resultado se coloca en f Ejemplo 1: SUBWF REG, 1 Antes de la Instruccin REG1 = 3, W = 2, C = ? Despus de la Instruccin REG1 = 1, W = 2, C = 1; el resultado es positivo Ejemplo 2: Antes de la Instruccin REG1 = 2, W = 2, C = ? Despus de la Instruccin REG1 = 0, W = 2, C = 1; el resultado es 0 Ejemplo 3: Antes de la Instruccin REG1 = 1, W = 2, C = ? Despus de la Instruccin REG1 = FF, W = 2, C = 1; el resultado es negativo
Resta W de f INICIO 452 Cdigo Ensamblador: (Etiqueta) SWAPF f, d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d [0,1] Operacin: (f<3:0>) (dest<7:4>) (f<7:4>) (dest<3:0>) Bits de estado que se afectan: Ninguno Descripcin: Los nibles (grupo de 4 bits) superiores e inferiores de f son intercambiados Si d es 0, el resultado se coloca en W Si d es 1, el resultado se coloca en f. Ejemplo: SWAPF REG1, 0
Antes de la Instruccin REG1 = 0xA5 Despus de la Instruccin REG1 = 0xA5 W = 0x5A
Intercambio de Nibles in f INICIO 453 Nota: Esta instruccin no se recomienda utilizar en los PIC de la gama media. Cdigo Ensamblador: (Etiqueta) TRIS f Operadores: f = 5, 6 7 Operacin: (W) TRIS registro f Bits de estado que se afectan: Ninguno Descripcin: El registro TRIS f (f = 5, 6, 7) toma el valor del contenido de W. El registro TRIS es el de programacin de los puertos como entrada o salida
Ejemplo: TRIS PORTA
Antes de la Instruccin W = 0xA5 Despus de la Instruccin TRISA = 0xA5
Carga valor al registro TRIS con W INICIO 454 Cdigo Ensamblador: (Etiqueta) XORLW K Operadores: 0 K 255 Operacin: (W).XOR.K (W) Bits de estado que se afectan: Z Descripcin: Se ejecuta la operacin lgica OR Exclusivo entre el contenido W y el valor literal k. El resultado se guarda en W.
Ejemplo: XORLW 0xAF Antes de la Instruccin W = 0xB5 Despus de la Instruccin W = 0x1a
OR Exclusivo valor literal con W INICIO 455 Cdigo Ensamblador: (Etiqueta) XORWF f, d Operadores: 0 f 31 (Gama bsica) 0 f 127 (Gama media) d [0,1] Operacin: (W).XOR.(f) (dest) Bits de estado que se afectan: Z Descripcin: Se ejecuta la operacin lgica OR Exclusivo del contenido con el contenido del registro f. Si d es 0, el resultado se coloca en W Si d es 1, el resultado se coloca en f. Ejemplo: XORWF REG1, 0
Antes de la Instruccin REG = 0xAF (B10101111) W = 0xB5 (B10110101) Despus de la Instruccin REG = 0x1A (B00011010) W = 0xB5 (B10110101)
OR Exclusivo de W con f INICIO 456 INICIO 457 El lenguaje ensamblador provee una plataforma para desarrollar los cdigos de los programas en los microcontroladores. En este anexo se expondr una explicacin acerca de las opciones de comandos y las directivas que ofrece este lenguaje. En el momento en el que te dispones a ensamblar un programa editado, en el MPLAB tendrs acceso a una ventana, tal como la que se muestra en la siguiente pgina. All podrs establecer una serie de comandos de opcin para que tengas la posibilidad de generar o no diferentes archivos que provendrn de tu archivo editado o archivo fuente, el cual deber tener un nombre y la extensin .asm. Por ejemplo, si el archivo que editaste tiene como nombre miprog.asm, entonces podrs generar los siguientes archivos: miprog.lst, el cual te muestra una lista de los cdigos y smbolos generados. miprog.err, el cual te muestra una lista de los errores. miprog.hex. Este archivo es el que contiene los cdigos del programa en hexadecimal y es el que vas a grabar en el microcontrolador. miprog.cod. Este archivo te muestra los smbolos y la depuracin. miprog.hxl o .hxh, el cual separa los bytes del archivo hexadecimal. INICIO 458 Opciones de las lneas de comando Para ensamblar un programa en el MPLAB seleccionas Project en el me principal y luego Build Node, tendrs acceso a la ventana con las opciones de las lneas de comando, tal como se muestra en la figura de abajo. En la siguiente pgina se explica el significado de estos comandos que se establecern los archivos generados. INICIO 459 Opcin Por defecto Descripcin /a INHX8M Establece el formato del archivo .hex /c On Habilita/deshabilita la sensitividad del caso /d Ninguno Define smbolo: /dDebug /dMax=5 /dString=abc /e On Habilita/Deshabilita la generacin del archivo de error /l On Habilita/Deshabilita la generacin del archivo de listado /m On Habilita/Deshabilita la expansin macro /o On Habilita/Deshabilita la generacin del archivo .obj /p Ninguno Selecciona el tipo de microcontrolador /q Off Habilita/Deshabilita el modo de salida de pantalla /r Hexadecimal Selecciona el tipo de formato numrico /t 8 Coloca el nmero de espacios por Tabulacin /w 0 Selecciona los mensajes: 0 = todos, 1 = errores y advertencias 2 = solamente errores /x Off Habilita/Deshabilita la generacin de la tabla de referencia Descripcin de las opciones INICIO 460 Te recordamos que las directivas del lenguaje ensamblador son comandos que aparecen en el lenguaje que t editas, pero que no se convierten en cdigos del programa del microcontrolador. Ellas se utilizan para controlar la compilacin del programa que vas a utilizar en el microcontrolador, es decir, dnde vas a colocar las direcciones de los datos segn su nombre, en cul lnea comenzar una parte del programa, dnde termina el programa, cules son las entradas y salidas, y otras especificaciones ms. Las directivas del ensamblador se clasifican en: Directivas de Control, que colocan secciones condicionales en el cdigo ensamblado. Directivas de Datos, que asignan nombres a posiciones de memoria. Directivas de Listado, que controlan el archivo de listado (.lst). Directivas de macro, que controlan un grupo de comandos. A continuacin te mostraremos una tabla de las directivas que puedes utilizar en el lenguaje ensamblador. INICIO 461 Directiva Descripcin Sintaxis Ejemplo _ _BADRAM Especifica localidades invlidas en la RAM _ _badram <exp> _ _badram 87-89,91 CBLOCK
ENDC Define un bloque de constantes, la directiva ENDC debe colocarse al final cblock[<exp>] <etiq> <,etiq> endc cblock 0x20 nomb1, nomb2... endc _ _CONFIG Especifica bits de configuracin. Ver p 4-3 _ _config<exp> _ _config HFFFF CONSTANT Declara constante de smbolo constant <etiq> constant long=125 DATA Crea Datos numricos y de texto <etiq> data <exp> data 1, 2, externa DB Declara datos de un Byte <etiq> db <exp> db t, 0xd, e, 3 DE Define datos en EEPROM <etiq> de <exp> de miprog, 0 #DEFINE Define etiqueta de sustitucin de texto #define<nomb> [<tex>] #define long 20 DT Define tabla <etiq> dt <exp> dt val1, val2 DW Declara datos de una palabra <etiq> dw <exp> dw 27, W27, W29 ELSE Comienza alternativa despus de un IF IF es un si condicional, ELSE = sino else else dw frio END Finaliza bloque de programa end end INICIO 462 Directiva Descripcin Sintaxis Ejemplo ENDC Finaliza un bloque de constantes endc endc ;ver CBLOCK ENDIF Finaliza un bloque condicional IF endif endif ;ver IF ENDM Finaliza la definicin de una macro endm endm ;ver MACRO ENDW Finaliza un lazo condicional While Loop endw endw ;ver WHILE EQU Define una constante <etiq> equ <exp> portb equ 0x5 ERROR Crea un mensaje de error error <texto> error fuera escala ERRORLEVEL Especifica los tipos de mensajes de error en los archivos .lst y .err errorlevel 0|1|2<+|-><num> errorlevel 1, -212 EXITM Sale de una macro exitm exitm ;ver MACRO EXPAND Escribe las macros en el archivo .lst expand expand FILL Llena memoria <etiq> fill <exp> fill 0x100, 5 _ _IDLOCS Especifica localizaciones ID _ _idlocs <exp> idlocs 1234 INICIO 463 Directiva Descripcin Sintaxis Ejemplo IF
ELSE
ENDIF Comienza un bloque condicional. Se pregunta por una condicin, si sta es cierta se ejecuta la accin, sino se ejecuta la lnea siguiente. Si en esa lnea aparece ELSE entonces se asigna la accin que le sigue. El bloque IF se cierra con ENDIF if <exp> <instruc> <else <exp>> <instruc> endif if temper > 100 dw caliente else dw frio endif IFDEF
IFNDEF Se ejecuta si los smbolos se han definido
Se ejecuta si los smbolos no se han definido ifdef <etiq> <instruc> endif ifndef cierto dw no_cierto endif #INCLUDE Incluye un archivo fuente adicional. Ver p2- 15 include <arch> include p16f84.inc LIST Lista opciones. Ver tabla de opciones A3-3 list |<lista>| list p=16c71,r=dec LOCAL Declara variable como macro local. Ver macro local <etiq> local MACRO
ENDM Declara definicin de macro. Una macro son un conjunto de instrucciones que pueden ser insertadas como cdigo fuente. <etiq> macro <instruc> endm leer macro d1, d2 movlw d1... endm _ _MAXRAM Especifica mxima direccin de la RAM _ _maxram<exp> _ _maxram 0x0bf MESSG Crea un mensaje definido por el usuario messg <text> messg error 1 NOEXPAND Elimina macros del archivo .lst noexpand noexpand INICIO 464 Directiva Descripcin Sintaxis Ejemplo NOLIST Elimina lista de salida nolist nolist ORG Especifica direccin de origen <etiq> org <exp> org 50 ;ver p2-18 PAGE Inserta salto de pgina en la lista page page PROCESSOR Especifica el tipo de microcontrolador processor<tipo> processor 16f84 RADIX Especifica la base numrica a utilizar radix<base num> radix dec ;(hex, oct) RES Reserva memoria <etiq>res <num> menres res 64 SET Define una variable en el ensamblador <label> set<exp> long set 0x12; SPACE Inserta lneas vacas en el archivo .list space <exp> space 3 SUBTITLE Especifica subttulo del programa subtitle <texto> subtitle lazo TITLE Especifica ttulo del programa title <texto> title comienzo #UNDEFINE Borra una etiqueta de sustitucin #undefine <etiq> #undefine long VARIABLE Declara variable de smbolo variable <etiq>=>exp> variable grablong=64 constant parclong=512 WHILE
ENDW Hace un lazo si una condicin es cierta while <exp> while i<contador i+=1 endw INICIO 465 INICIO 466 PIC16C54 y 56 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh 10h 1Fh REGISTROS DE PROPSITOS GENERALES MEMORIA DE DATOS DE LOS PIC16C54 Y 56 INICIO 467 PIC16C55 MEMORIA DE DATOS DEL PIC16C55 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh 10h 1Fh REGISTROS DE PROPSITOS GENERALES PORTC INICIO 468 PIC16C57 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 08h 0Fh REGISTROS DE PROPSITOS GENERALES PORTC 00 01 10 11 REGISTROS DE PROPSITOS GENERALES 10h 1Fh FSR<6:5> Direccin de registro REGISTROS DE PROPSITOS GENERALES 30h 3Fh REGISTROS DE PROPSITOS GENERALES 50h 5Fh REGISTROS DE PROPSITOS GENERALES 70h 7Fh 20h 40h 60h Este Mapa de Direcciones retoma a las direcciones del Banco 0 2Fh 4Fh 6Fh Banco 0 Banco 1 Banco 2 Banco 3 INICIO 469 PIC16C58 INDF (1)
TMRO PCL STATUS FSR PORTA PORTB 00h 01h 02h 03h 04h 05h 06h 07h 0Fh REGISTROS DE PROPSITOS GENERALES 00 01 10 11 REGISTROS DE PROPSITOS GENERALES 10h 1Fh FSR<6:5> Direccin de registro REGISTROS DE PROPSITOS GENERALES 30h 3Fh REGISTROS DE PROPSITOS GENERALES 50h 5Fh REGISTROS DE PROPSITOS GENERALES 70h 7Fh 20h 40h 60h Este Mapa de Direcciones retoma a las direcciones del Banco 0 2Fh 4Fh 6Fh Banco 0 Banco 1 Banco 2 Banco 3 INICIO 470 Registros de funciones especiales y bits de los PIC16C5X Valor despus Valor despus Direcc Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 de encender WDT y MCLR N/A Tris Registros de control de Entrada y Salida (TRISA,TRISB, TRISC) 1111 1111 1111 1111 N/A OPTION - - TOCS TOSE PSA PS2 PS1 PS0 --11 1111 --11 1111 00h INDF Registro de la mem. de datos, su direccin est en el registro FSR xxxx xxxx uuuu uuuu 01h TMRO Temporizador contador de tiempo real de 8 bits xxxx xxxx uuuu uuuu 02h
PCL 8 bits de bajo orden del Contador de Programa (PCL) 1111 1111 1111 1111 03h STATUS PA2 PA1 PA0 TO PD Z DC C 0001 1xxx 04H FSR Apuntador de la memoria de datos para acceso indirecto 1xxx xxxx 05h PORTA - - - - RA3 RA2 RA1 RA0 ---- xxxx ---- uuuu 06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu 07H PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu INICIO 471 PIC16F84 Banco 0 Banco 1 INICIO 472 INICIO 473 BANCO 0 PIC16F87X INICIO 474 BANCO 1 PIC16F87X INICIO 475 BANCOS 2 y 3 PIC16F87X INICIO 476 INICIO 477 Algunas Interfaces INICIO En las siguientes figuras se mostrarn algunos circuitos que podrs emplear como interfaces de entrada y salida, para que ellos acten con los microcontroladores. En s, no se dan detalles del funcionamiento; sin embargo, con tus conocimientos de electrnica, esperamos que sepas interpretar cmo trabajan. El hecho de que estas interfaces se presenten aqu, de ninguna manera significa que sean las nicas soluciones para poder conectar tu microcontrolador al mundo exterior. Simplemente los presentamos, para darte una idea de cmo convertir seales de 0 a 5v, las cuales generan los microcontroladores, en rdenes que pueden manejar elementos que trabajen a tensiones diferentes. Por otro lado, tambin podrs observar cmo seales de tensiones diferentes a la de los niveles lgicos, puedan ser adaptadas para que la lean los microcontroladores. En la siguiente parte, se presenta una lista de proyectos propuestos, y al lado se presenta el nmero de nota de aplicacin que puedes consultar para que los puedas desarrollar. Las notas de aplicacin fueron obtenidas del sitio www.microchip.com, por lo tanto las encontrars en ingls. Otros sitios web que podrs consultar, los podrs acceder mediante algn motor de bsqueda al colocar palabras claves, tales como: microcontroladores, pic, proyectos, entre otras. (p.e. en www.google.com). De todas formas, al final de este anexo te presentamos alguanas direcciones en espaol que t podrs acceder donde se describen algunos proyectos en espaol. 478 Encendido de un diodo emisor de luz (LED) INICIO Encendido con un 1 lgico Encendido con un 0 lgico Terminal del Puerto Terminal del Puerto 479 Lectura de interruptores o pulsadores
INICIO 480 Control de la Lnea de Corriente Alterna INICIO Rel NC C NA 0 a 5V 481 Control de la Lnea de Corriente Alterna 1 INICIO 0 a 5V 0 a 5V 482 Control de la Lnea de Corriente Alterna 2 INICIO 0 a 5V 483 Control de la Lnea de Corriente Alterna 3 INICIO 0 a 5V 484 Detector de Cruces por Cero 0 a 5V 0 a 5V INICIO 485 Encendido de un Indicador de 7 Segmentos nodo Comn (Display) INICIO Salida de los terminales de un Puerto. Los segmentos encendern con un 0 lgico. El nodo se conectar a una tensin positiva Vdd.
Segmento a Segmento b Segmento c Segmento d Segmento e Segmento f Segmento g 0 a 5V 486 Encendido de un Indicador 7 Segmentos de varios dgitos INICIO Dgito 0 Dgito 1 Dgito 2 Dgito 3
Segmento a Segmento b Segmento c Segmento d Segmento e Segmento f Segmento g 0 a 5V 0 a 5V 487 MATRIZ DE LEDS INICIO Valores de cada Columna Seleccin de columna 0 a 5V 0 a 5V 488 Lectura de un teclado matricial INICIO 0 a 5V Entradas 0 a 5V Salidas Rb3 Rb2 Rb1 Rb0 Ra0 Ra1 Ra2 Ra1 S1 S2 S5 S6 S9 S10 S13 S14 S3 S4 S7 S8 S11 S12 S15 S16 R1 10k R2 10k R3 10k R4 10k 489 Aplicacin de un reloj con bajo consumo en el modo Reposo INICIO 490 Interruptor Analgico INICIO 0 a 5V 491 Notas de Aplicacin PIC16C5X y PIC16F84 AN712 Detector Autobaudio RS-232 para dispositivos PIC16C5X. AN619 Interfaces para un PIC16C5X con las memorias 93XX76 y 93XX86. AN657 Decodificador de un control remoto Infrarrojo con un PIC16C5X. AN526 Rutinas de utilidad matemtica para los PIC16C5x/PIC16Cxx. AN541 Utilizacin de un PIC16C5x como un perifrico inteligente IIC. AN530 Interfaz para un PIC16C5X con la EEPROM serial 93CX6. AN563 Utilizacin de los microcontroladores PIC16C5x como manejadores de LCD. AN592 Contador de frecuencia con un PIC16C5x. AN515 Comunicacin con un bus IIC por medio de un PIC16C5X. TB050 Lectura de varios puntos de temperatura con sensores TC74 y un PIC16C5x. AN558 Uso de los dispositivos 24XX65 y 24XX32 con los cdigos del PIC16C54. AN567 Interfaz para un PIC16C54 con una EEPROM serial 24LCXXB. AN590 Diseo de un reloj con pantalla de leds e interruptores con el PIC16C54. AN648 Interfaz del microcontrolador PIC16C54 con una EEPROM serial SPI. AN577 Resultados EMI del PIC16C54A. AN661 Decodificador Hopping para un codificador KeeLoq por medio de un PIC16C56 AN715 Medida de sincronizacin usando un PIC16F84A y un ADXL202. AN689 Asistente de ingeniero por medio de un PIC16F84A. INICIO 492 Notas de Aplicacin PIC16F87X AN686 Circuitos Supervisores. AN246 Manejo de las entradas analgicas de un Convertidor SAR A/D. AN236 Automatizacin del hogar X-10 usando el PIC16F877A. AN826 Conceptos para el oscilador de cristal en un rfPIC y un PICmicro. TB052 Monitorizacin de temperatura multizona. TB051 Medicin de temperatura. AN670 Conversin coma flotante a ASCII. AN777 Multitarea para el PIC16F877 con el Salvo RTOS. AN732 Implementacin de un cargador boot para el PIC16F87X. AN693 Entendiendo las especificaciones de un convertidor A/D. AN656 Programador para calibracin de parmetros. AN582 Reloj de tiempo real de baja potencia. TB028 Tcnica para calcular el da de la semana. TB033 Uso del PIC16F877 para desarrollar cdigos del PIC16CXXX. AN709 Consideraciones de diseo a nivel de sistema. TB026 Clculo de chequeo de la memoria de programa con el PIC16F87X. TB025 Carga de archivos HEX al PIC16F87X. TB029 Manejador complementario de LEDs. AN690 Autodeteccin de memoria de IC.
INICIO 493 Notas de Aplicacin PIC16F87X
TB004 Calibracin automtica del tiempo de espera del WDT. TB008 Tcnicas para fuentes de alimentacin sin transformador. AN597 Implementacin a frecuencias ultrasnicas. AN587 Interfaz de un microcontrolador PIC a un mdulo LCD. AN607 Detector de fallas de la alimentacin. AN660 Rutinas de coma flotante. AN595 Mejora de la Susceptibilidad de una aplicacin. AN591 Bus de escritorio de la Apple. AN594 Uso de los mdulos CCP. AN655 Conversin D/A por medio de un PWM y una red R-2R. AN667 Cargador inteligente de bateras con interfaz SMBus. AN617 Rutinas de coma flotante. AN893 Control de un motor DC con escobillas por medio del PIC16F684. AN892 Monitor de seguridad contra falla e interruptor de frecuencia con un PIC16F684. AN889 Control VF de motores de induccin trifsicos por medio del PIC16F7X7. AN880 Referencia rpida de cdigos de conversin entre un 8051 y un PIC. AN879 Uso de un PIC de bajo consumo para un mdulo reloj despertador. AN258 Programador de microcontroladores con interfaz USB de bajo costo. AN774 Comunicacin asncrona con el mdulo USART. AN212 Sensor inteligente de nodo CAN utilizando el MCP2510 y el PIC16F876.
INICIO 494 Notas de Aplicacin Otros PIC AN239 Nodo esclavo LIN para PIC16 y PIC18. AN240 Nodo esclavo LIN en un PIC16C433. AN237 Implementacin de un nodo esclavo LIN en un PIC16F73. AN851 Transferencia de datos a la FLASH para dispositivos PIC16 y PIC18. AN844 Interfaces simplificadas para termocuplas en microcontroladores PIC. AN847 Control de motor en aeromodelismo. AN821 Encriptacin avanzada estndar por medio de un PIC16XXX. TB053 Generacin de alto voltaje por medio de los PIC16C781/782. AN756 Uso de un MCP2120 para comunicaciones por infrarrojo. AN758 Uso de un MCP2150 para aadir una conectividad inalmbrica IrDA. TB045 Rutinas de codificacin de recepcin Manchester para dispositivos Keeloq. AN744 Decodificador Keeloq modular con PIC de la gama media en lenguaje C. AN746 Interfaz de los potencimetros digitales MCP41XXX/42XXX con microcontroladores PIC. AN747 Comunicacin con protocolo para los potencimetros digitales MCP42XXX. AN217 Programador para los KeeLoQ HCS30X, HCS200. AN742 Decodificador Hopping modular con microcontroladores PIC de la gama media. TB043 Rutinas de verificacin CRC para KeeLoq. AN823 Diseo analgico en el mundo digital por medio de controladores de seales mezcladas. AN220 Medidor de vatios-hora por medio de un PIC16C923 y un CS5460. AN735 Utilizacin del mdulo MSSP para comunicaciones I2C.
INICIO 495 Notas de Aplicacin Otros PIC AN734 Utilizaci{on del mdulo SSP en modo esclavo para la comunicacin I2C. AN216 Controlador de convertidor DC/DC con un microcontrolador PIC. AN214 Compatibilidad de un transductor inteligente IEEE 1451.2 con un PIC. AN731 Incrustacin de un microcontrolador PIC en el Internet. AN730 Chequeo y generacin CRC. TB016 Implementacin de un ICSP con un PIC16F8X. TB013 Implementacin de un ICSP con un PIC16CXXX. AN585 Sistema operativo en tiempo real para un PIC16/17. AN724 Utilizacin de un PIC para conectar a Internet va PPP. AN656 Uso de parmetros de calibracin para la programacin serial en los PIC. AN703 Conexin de un PIC con el convertidor serial de 12 bits MCP320X. AN580 Utilizacin del temporizador 1 en modo de reloj asncrono. AN578 Uso del mdulo SSP en el ambiente multimaestro IIC. AN579 Utilizacin del puerto paralelo de 8 bits. AN714 Implementacin de sistema de seguridad inalmbrico con Keeloq y un PIC. AN716 Migracin de diseos desde el PIC16C74A/74B hacia el PIC18C442 AN719 Interfaz del convertidor analgico a digital MCP3201 con un microcontrolador PIC. TB028 Tcnica para calcular el da de la semana. AN701 Eliminador de batera en modo de conmutacin basado en un PIC16C72A. AN700 Convertidor Delta-Sigma por medio de un mdulo de comparacin analgica.
INICIO 496 Notas de Aplicacin Otros PIC PICREF-3 Medidor de vatios hora. PICREF-2 Cargador de bateras inteligente. PICREF-5 Cargador de bateras nivel 3 del SMBus para el PIC16C73A. TB020 Emulacin del PIC12C67X con el PIC16C72. AN672 Decodificador de cdigo Hopping con PIC del la gama media. TB004 Calibracin automtica del perodo de espera del temporizador WDT. TB008 Fuente de alimentacin sin transformadores. AN668 Interfaz de un PIC16C92x a una EEPROM serial SPI. AN514 Tcnicas de interrupcin por Software. AN654 El PWM, una solucin de software mediante los PIC16CXXX. TB010 Un convertidor A/D de 4 canales de 8bits a un PIC17C4X. AN546 Utilizacin del Convertidor Analgico a Digital. AN597 Implementacin en el rango ultrasnico. AN615 Diseo de un reloj econmico mediante tcnicas de baja potencia. AN511 Reemplazo de PLD. AN589 Desarrollo de un programador basado en un PC para el PIC16C84. TB011 Utilizacin de la SRAM con un PIC16CXX. AN588 Gua de diseo de osciladores para los PIC16/17. AN607 Determinacin de fallas de encendido. AN663 Decodificador sencillo de cdigo Hopping con Keeloq. INICIO 497 Notas de Aplicacin Otros PIC
AN529 Manejador de LED y teclado 4x4 por muestreo. AN606 Utilizacin de diseos de baja potencia con PIC16/17. AN566 Utilizacin del las interrupciones del puerto B como interrupciones externas. AN576 Tcnicas para deshabilitar interrupciones globales. AN616 Procesamiento digital de seales con el PIC16C74. AN662 Decodificador de Cdigo Hopping con KeeLoq por medio de aprendizaje seguro. Fact 2 Convertidor A/D del PIC16C7X. AN552 Implementacin de un despertador con teclado. AN520 Comparaciones entre microcontroladores de 8 bits. AN556 Implementacin de una tabla de lectura. AN522 Consideraciones durante el encendido. AN595 Mejoramiento de la susceptibilidad en una aplicacin a ESD. AN649 Caracterssticas del reloj del PIC16C924. AN531 Posicionador remoto inteligente. AN575 Rutinas de coma flotante compatibles con la norma IEEE 754. AN658 Fundamentos de los LCD con los PIC16C92X. AN613 Uso de las EEPROMs seriales de la serie 93 con el puerto SPI. AN513 Conversin Analgica a Digital. AN600 Control de flujo de aire con lgica difusa. AN527 Software administrador de la pila (Stack). INICIO 498 Notas de Aplicacin Otros PIC AN528 Implementacin de un despertador con teclado. AN557 Voltmetro digital de cuatro canales con teclado y pantalla. AN560 Uso de las EEPROM seriales 93LC56 y 93LC66. AN535 Lgica a utilizar con EEPROM seriales. AN655 Conversin D/A por medio del PWM y una red R-2R para generar ondas seno y DTMFL. AN643 Modulacin de Cdigo de Pulso Diferencial Adaptable. AN647 Interfaz entre un PIC16C64/74 con una EEPROM Serial. Fact 3 Cuidado y alimentacin del PIC16C74. AN584 Soporte de PICMASTER en Microsoft Windows(TM) DDE. AN521 Intefaz con lneas de potencia AC. AN554 Implementacin de Software del bus of IC maestro. AN611 Medicin de Resistencia y Capacitancia cou un PIC 16C622. AN667 Cargador de batera inteligente con la interfaz SMBus. AN555 Implementacin de Software para el puerto serial asncrono. AN519 Desarrollo de un ratn serial. Fact 1 Gua de diseo de osciladores para los PIC. INICIO 499 http://www.comunidadelectronicos.com/sitios2.htm http://www.siste.com.ar/enlacesarchivos/Micros.htm http://www.sagitron.es http://www.todorobot.com.ar http://www.todopic.com.ar/ http://robotia.com.ar/rb/links/links.htm http://www.abcdatos.com/tutoriales/electronicayelectricidad/electronica/microcon troladorespic.html http://perso.wanadoo.es/juanramon.villodas/favorite.htm http://www.micropic.arrakis.es/marcos.htm http://www.miguelo.com.ar/mchip/index.html http://www.conket.com/modules.php?name=Topics http://www.geocities.com/micramtechnologies/seteando.htm http://www.hackemate.com.ar/mirrors/karpoff/manuales/topcite/archivos/hitechPI C.htm http://boards1.melodysoft.com/app?ID=creatronica.microcontroladores&DOC=1 21 http://www.geocities.com/alva_cesar/rutas.htm
Lista de algunos sitios web relacionados con PIC INICIO 500 INICIO 501 Equipo requerido para la actualizacin del PICSTART PLUS A medida que van fabricando nuevos modelos de microcontroladores, ser necesario que t actualices el MPLAB IDE y el programador PICSTART PLUS, para que puedas utilizarlos en los nuevos componentes ofrecidos. La versin nueva del MPLAB IDE, la puedes bajar en www.microchip.com. El equipo requerido para actualizar al PICSTART PLUS, es el siguiente: Programador PICSTART PLUS, el cual debe estar encendido y conectado al computador con el puerto serial. ltima versin del Software MPLAB IDE. Microcontrolador PIC17C44 (de 25MHz o ms veloz) borrado. Archivo actualizado psf######.hex (donde ###### es el nmero de la ltima versin). ste se encuentra en el software de instalacin del MPLAB IDE. Un destornillador de estras.
Sin embargo, a partir del ao 2004, los PIC17C44 ya no tienen la capacidad suficiente para aceptar esta actualizacin. Para ello, necesitars adquirir un mdulo UK003010, y seguir las instrucciones para realizar la actualizacin del PICSTART PLUS. Para ms detalles consulta en alguna de las direcciones siguientes: http://www.sagitron.es o http://www.microchip.com.
Otro detalle, si tu PICSTART PLUS ya contiene el mdulo UK003010, ya sea porque es nuevo (versin R20 o superior), o porque ya instalaste dicho mdulo, no necesitars seguir los pasos de actualizacin que se presentan en las siguientes pginas, simplemente descargars la actualizacin desde tu computador.
INICIO 502 Procedimiento para la actualizacin del PICSTART PLUS Seleccionar en el MPLAB al microcontrolador PIC17C44. Habilitar al programador PICSTART PLUS. Seleccionar en los bits de configuracin lo siguiente: Oscillator: XT. Processor Mode: Microcontroller. Watchdog timer: TMR. Seleccione en el men: File, Import y luego escoja el archivo de actualizacin ######.hex. Inserte al PIC17C44 borrado en el scalo del programador. Verifique que el dispositivo est borrado. Seleccione el botn Program para transferir el archivo al PIC17C44. Al terminar la transferencia, extraiga al PIC17C44. Salga del MPLAB, desconecte la fuente y la conexin serial del computador al programador... (Contina en la pgina siguiente). INICIO 503 Procedimiento para la actualizacin del PICSTART PLUS (continuacin) Extraiga la tapa posterior del programador. Saque con cuidado al microcontrolador que est en el programador y gurdelo, servir para otras actualizaciones. Inserte cuidadosamente al PIC17C44 recin programado. El terminal 1 del PIC debe estar hacia el conector serial. Coloque la tapa posterior del programador y atornllela con cuidado, sin aplicar un torque excesivo. Vuelva a conectar el programador PICSTART PLUS a la fuente y al puerto serial del computador. Arranque al MPLAB IDE y habilite al programador. Podrs verificar que se ha actualizado la versin del programador al habilitarlo. Igualmente podrs verificar la versin del MPLAB IDE en Help, About MPLAB IDE. Tu programador PICSTART PLUS est actualizado.
INICIO 504 INICIO 505 Grabacin de un programa en un PIC16F87X La grabacin de un microcontrolador PIC16F87X se realiza en forma serial, y para ello se puede hacer aplicando una tensin baja al terminal MCLR#/Vpp (5V) o con una tensin alta aplicada a ese terminal (13V 5%). Para programar en ambos casos se utilizan la lnea RB6/PGC para colocar los pulsos de sincronizacin o seal de reloj, y la lnea RB7/PGD para colocar los bits datos en serie. En el caso de optarse por la programacin de tensin baja, entonces se deber colocar el terminal RB3/PGM en nivel alto. A continuacin te presentamos los planos y las instrucciones para que hagas un programador de los PIC16F84 y los de la serie PIC16F87X. Los programas para este programador los podrs bajar en Internet en la direccin: http://www.todorobot.com.ar. INICIO 506 Diagrama del circuito programador INICIO 507 El PicProg Descripcin:
El PicProg le permite Programar, Verificar y Borrar todos los modelos anteriormente detallados. El archivo Hexadecimal (.hex) a grabar debe ser formato Intel INHX8M. ste es el formato estndar generado por la herramienta de desarrollo MPLAB que puede descargarse gratis en el sitio de Microchip.
Para ir al sitio web donde est el software de instalacin del PicProg haz clic aqu.
INICIO 508 Instrucciones para el PicProg Programar El PicProg verifica antes y despus de grabar cada direccin. De esta forma se evita grabar el mismo dato ya grabado, prolongando la vida til de la Flash Memory. Y luego realiza la verificacin posterior al grabado para asegurarse que el dato ha sido grabado adecuadamente.
Verificar Como se dijo en el punto anterior, el PicProg realiza una verificacin al grabar cada direccin, por lo tanto no es necesario ejecutar este procedimiento luego de cada programacin. Esta funcin es ms bien til cuando no se est seguro de cual es el programa que ha sido o tiene cargado un determinado micro.
Borrar Esta funcin es solamente necesaria cuando el PIC ha sido programado con cdigo de proteccin (CP). En estos caso la nica forma de regrabar el micro es efectuando un borrado general. Est funcin borra la memoria de programa y la de datos.
Poner el PIC en Modo RUN Esta funcin haced qued la lnea MCLR/VPP pase a 5v y por lo tanto el PIC salgo del modo Reset para pasar al modo de ejecucin normal. Est funcionalidad solo es til cuando se est usando la modalidad In-Circuit o bien se est trabajando en un diseo usando el PIC instalado en el Programador.
INICIO 509 Programacin Paso por paso 1) Seleccionar el puerto LPT a usar mediante el men desplegable correspondiente. Si por algn motivo no se pudiese detectar el Hardware del programador, aparecer un mensaje en rojo indicando el error y se bloquearn todos los controles hasta tanto no se resuelva el problema. Generalmente la direccin 0x378 corresponde al LPT1 y 0x278 al LPT2. Pero en contados casos, puede darse que el LPT1 tenga la direccin 0x3BC, en cuyo caso el LPT2 asume la direccin 0x378. 2) Seleccionar el modelo de Microcontrolador que se desea programar. Esta funcin puede dejarse tambin en Autodetectar para permitir que el PicProg lo detecte automticamente. 3) Ingresar el archivo Hexadecimal (.hex) que contiene el programa a descargar al PIC. Puede usarse el botn BUSCAR para encontrar el archivo a grabar o bien escribirlo directamente en la ventana. 4) Pulsar el botn CONFIGURAR para establecer la configuracin deseada para el PIC (Watchdog, Power Up Timer, etc). Todas las configuraciones estn por defecto seteadas para detectar estos parmetros directamente desde el archivo hexadecimal (.hex), para que esto funcione se debieron haber colocado previamente en el cdigo fuente a fin de que el compilador genere el cdigo necesario en el archivo hexadecimal. En ese caso este punto puede ser salteado y pasar directamente al punto siguiente. 5) Pulsar el botn PROGRAMAR para iniciar la descarga hacia el PIC. Aparecer una ventana pidiendo confirmacin de los parmetros que se usarn en la programacin y, una vez aceptado, si todo ha funcionado correctamente, aparecer una ventana indicando la finalizacin del proceso. INICIO 510 Algunas sugerencias IMPORTANTE: Antes de insertar o extraer un micro del zcalo de programacin, se debe tener la precaucin de retirar la alimentacin del programador, debido a que no se ha previsto ningn circuito de aislamiento y podra resultar daado el chip o el puerto paralelo de la PC. Asimismo es aconsejable no alimentar el programador hasta tanto el programa PicProg no haya sido ejecutado y se encuentre activo en pantalla.