INTRODUCCIN En 1980 aproximadamente, los fabricantes de circuitos integrados iniciaron la difusin de un nuevo circuito para control, medicin e instrumentacin al que llamaron microcomputador en un slo chip, o de manera ms exacta MICROCONTROLADOR. Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro trabajo, en nuestra casa y en nuestra vida en general. Se pueden encontrar en el ratn y teclados de las computadoras, en los telfonos, en los hornos microondas y en los televisores de nuestro hogar. Pero la invasin acaba de comenzar y el nacimiento del siglo XXI ser testigo de la conquista masiva de estas diminutas computadoras, que controlarn la mayor parte de los aparatos que fabricamos y usamos. Las extensas reas de aplicacin de estos microcontroladores exigirn un gigantesco trabajo de diseo y fabricacin. Aprender a manejar y aplicar microcontroladores slo se consigue desarrollando prcticamente diseos reales.
QU ES UN MICROCONTROLADOR? Un microcontrolador es un circuito integrado que contiene toda la estructura (arquitectura) de un microcomputador, o sea CPU, RAM, ROM y circuitos de entrada y salida. Son componentes que integran en un nico dispositivo todos los circuitos necesarios para realizar un completo sistema digital programable, incluyendo convertidores anlogo digital, temporizadores, contadores y un sistema para permitir la comunicacin en forma serial o en paralelo.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 3
QU ES UN PIC? Es un microcontrolador creado por la empresa MICROCHIP TECHNOLOGY INC. conocido como Circuito Integrado Programable (Programmable Integrated Circuits=PIC), son componentes sumamente tiles en los Sistemas de Desarrollo en la Electrnica de Control y en la Electrnica Robtica. Los PIC se presentan externamente como los normales circuitos integrados TTL o CMOS, pero internamente disponen de todos los dispositivos tpicos de un sistema microprocesador es decir: Una CPU (Central Processor Unit es decir, unidad central de procesamiento) cuyo objeto es el de interpretar las instrucciones de programa. Una memoria PROM ( Programable Read Only Memory es decir, memoria programable de solo lectura) en la cual son memorizadas en manera permanente las instrucciones del programa a seguir. Una memoria RAM (Random Access Memory es decir, memoria de acceso casual) utilizada para memorizar las variables utilizadas en el programa. Una serie de LINEAS DE I/O para manejar dispositivos externos o recibir impulsos de sensores, pulsantes, etc. Una serie de dispositivos auxiliares para el funcionamiento tales como generadores de reloj, bus, contadores, etc. La presencia de todos estos dispositivos en un espacio extremadamente reducido, le da al proyectista enormes ventajas derivadas del uso de un sistema a microprocesador, debido a que estos hace poco tiempo se construan con circuitos tradicionales.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 4
Los PIC son disponibles en una amplia gama de modelos para adaptarse mejor a las exigencias de los proyectos, diferencindose por l numero de lneas I/O y por la dotacin de dispositivos. Se parte de los modelos ms pequeos identificados con la sigla PIC12Cxx dotados de solo 8 pines, hasta llegar a modelos ms grandes con una sigla PIC17Cxx dotados de 40 pines.
QU ES UN SISTEMA DE DESARROLLO? Un sistema de desarrollo esta formado por el conjunto de herramientas, tanto de tipo hardware como software, que se necesitan para desarrollar un diseo con microcontroladores. Se puede comenzar con un sistema de desarrollo mnimo con las herramientas imprescindibles e irlo ampliando hasta configurar un equipo ms profesional. Uno de los mayores atractivos de los microcontroladores PIC es la inmensa oferta de herramientas de desarrollo disponible a todos los niveles.
CARACTERSTICAS DE LOS PIC 1. La arquitectura del procesador sigue el modelo Harvard, En esta arquitectura, el CPU se conecta de forma independiente y con buses distintos con la memoria de instrucciones y con la de datos. La arquitectura Harvard permite al CPU acceder simultneamente a las dos memorias. Adems, propicia numerosas ventajas al funcionamiento del sistema como se irn describiendo. 2. Se aplica la tcnica de segmentacin ("pipe-line") en la ejecucin de las instrucciones. La segmentacin permite al procesador realizar al mismo tiempo la ejecucin de una instruccin y la bsqueda del cdigo de la siguiente. De esta forma se puede ejecutar cada instruccin en un ciclo (un ciclo de instruccin equivale a cuatro ciclos de reloj). La segmentacin
Circuitos Integrados Programables Juan Antonio Barrios Huzar 5 permite al procesador ejecutar cada instruccin en un ciclo de instruccin equivalente a cuatro ciclos de reloj. En cada ciclo se realiza la bsqueda de una instruccin y la ejecucin de la anterior. Las instrucciones de salto ocupan dos ciclos al no conocer la direccin de la siguiente instruccin hasta que no se haya completado la de bifurcacin. 3. El formato de todas las instrucciones tiene la misma longitud. Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las de la gama media tienen 14 bits y ms las de la gama alta. Esta caracterstica es muy ventajosa en la optimizacin de la memoria de instrucciones y facilita enormemente la construccin de ensambladores y compiladores. 4. Procesador RISC (Computador de Juego de Instrucciones Reducido). Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media y casi 60 los de la alta. 5. Todas las instrucciones son ortogonales. Cualquier instruccin puede manejar cualquier elemento de la arquitectura como fuente o como destino. 6. Arquitectura basada en un banco de registros. Esto significa que todos los objetos del sistema (puertos de E/S, temporizadores, posiciones de memoria, etc.) estn implementados fsicamente como registros. 7. Diversidad de modelos de microcontroladores con prestaciones y recursos diferentes. La gran variedad de modelos de microcontroladores PIC permite que el usuario pueda seleccionar el ms conveniente para su proyecto. 8. Herramientas de soporte potentes y econmicas. La empresa Microchip y otras que utilizan los PIC ponen a disposicin de los usuarios numerosas herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los simuladores software, los emuladores en tiempo real, ensambladores, Compiladores C, Intrpretes y Compiladores BASIC, etc.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 6
Los microcontroladores de Microchip combinan un alto desempeo a un bajo costo, en un empaquetado pequeo; ofreciendo la mejor relacin precio/rendimiento en la industria. Mas de 200 millones de estos productos se distribuyen cada ao para satisfacer los consumibles: perifricos de computadora, automatizacin de oficinas, sistemas de control automotriz, aplicaciones en seguridad y telecomunicaciones. La combinacin de los microcontroladores de 8- bit, con las tecnologas de EEPROM, memoria FLASH, memoria ROM y la industria, hacen de Microchip un lder proveedor en el desarrollo de herramientas para ajustarse mejor a las necesidades reales. El alto nivel de integracin reduce notablemente la cantidad de componentes externos y los costos de desarrollo, mejora el desempeo del sistema, reduce la interferencia electromagntica, minimiza el consumo de potencia y agiliza el tiempo de realizacin. Los microcontroladores cuentan adems con un set de instrucciones compatible, y una gran variedad de perifricos y un amplio rango de empaquetados y rangos de voltaje, todo esto para ajustarse mejor a las demandas en los sistemas actuales. La arquitectura RISC (Reduced Instuction Set Computer) de 8-bit de los microcontroladores PIC se ha vuelto estndar alrededor del mundo. Todos los microcontroladores PIC emplean una arquitectura RISC modificada y un poderoso set de instrucciones que reduce dramticamente los ciclos de ejecucin y el costo. Combinando las caractersticas RISC con una arquitectura Harvard de bus- dual, los microcontroladores PIC de 8-bit de Microchip son mas rpidos y flexibles y es el ncleo de la arquitectura mas popular para los nuevos diseos de microcontroladores. Disminuyendo, a su vez, la migracin entre las familias de productos debido al simple set de instrucciones.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 7 VENTAJAS Las instrucciones de 12-,14-, y 16-bit de ancho son compatibles con los dispositivos siguientes-posteriores, para maximizar la eficiencia en el procesamiento y el funcionamiento. Las instrucciones y los datos son transferidos en buses separados permitiendo el procesamiento simultneo. sta arquitectura de dos estados permite que una instruccin se este ejecutando mientras la siguiente se esta cargando. Instrucciones de palabras de un ancho sencillo, incrementando la eficiencia del software y reduciendo los requerimientos de memoria para el programa. Instrucciones sencillas, rpidas y fciles de aprender. Compatibilidad entre los dispositivos, lo que permite realizar el cdigo para un dispositivo y poder utilizarlo para otro mejorado (superior). Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones grandes requieren numerosos y potentes. Siguiendo esta filosofa, Microchip construye diversos modelos de microcontroladores orientados a cubrir, de forma, las necesidades de cada proyecto. As, hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros complejos y ms costosos para las de mucha envergadura. Entre los fabricantes de microcontroladores hay dos tendencias para resolver las demandas de los usuarios: 1. MICROCONTROLADORES DE ARQUITECTURA CERRADA Cada modelo se construye con un determinado CPU, cierta capacidad de memoria de datos, cierto tipo y capacidad de memoria de instrucciones, un nmero de E/S y un conjunto de recursos auxiliares muy concreto. El modelo no admite variaciones ni ampliaciones. La aplicacin a la que se destina debe encontrar en su estructura todo lo que precisa y, en caso contrario, hay que desecharlo. Microchip ha elegido principalmente este modelo de arquitectura.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 8
2. MICROCONTROLADORES DE ARQUITECTURA ABIERTA Estos microcontroladores se caracterizan porque, adems de disponer de una estructura interna determinada, pueden emplear sus lneas de E/S para sacar al exterior los buses de datos, direcciones y control, con lo que se posibilita la ampliacin de la memoria y las E/S con circuitos integrados externos. Microchip dispone de modelos PIC con arquitectura abierta, sin embargo, esta alternativa se escapa de la idea de un microcontrolador incrustado y se asemeja a la solucin que emplean los clsicos microprocesadores. En nuestra opinin, los verdaderos microcontroladores responden a la arquitectura cerrada y permiten resolver una aplicacin con un solo circuito integrado y a precio muy reducido. La mayora de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de instrucciones, lneas de E/S, y diversas funciones auxiliares como temporizadores, comunicacin serie y otras. La capacidad y el tipo de las memorias, el nmero de lneas de E/S y el de temporizadores, as como circuitos auxiliares, son parmetros que dependen exclusivamente de la aplicacin y varan mucho de unas situaciones a otras. Microchip oferta tres gamas de microcontroladores de 8 bits. Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las memorias, el nmero de lneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones estn construidas alrededor de una arquitectura comn, un repertorio mnimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen del voltaje de alimentacin.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 9 Junto con los microcontroladores, Microchip ha creado una serie de herramientas de ayuda al desarrollo del hardware y software de los proyectos de aplicacin, que son vlidas para la mayora de sus modelos y que se citan a continuacin. 1 Ensamblador MPASM. 2 Simulador software MPSlM. No soporta los modelos PICI7CXX. 3 Compilador de lenguaje C, MP-C. 4 Programador universal PRO MATE. 5 Emulador universal PIC MASTER. 6 Entorno de Desarrollo Integrado MPLAB 7 Herramienta econmica de desarrollo PICSTART PIC16C5X FAMILIA BASE La familia 16C5X se consolido como la base en el desarrollo de nuevas tecnologas ofreciendo la solucin costeable mas efectiva. Estos microcontroladores cuentan con un conjunto de instrucciones de 12-bit de ancho y se ofrecen en empaquetados de 18, 20 y 22 pines. En opciones de empaquetado SOIC o SSOP. Con bajo voltaje de operacin hasta de 2 volt, hacen de esta familia un elemento ideal para ser operado por aplicaciones a bateras. PIC16C5XX FAMILIA DE RANGO MEDIO La familia de rango medio ofrece un amplio rango de opciones, desde empaquetados de 18 hasta 44 pines, as como un alto nivel de integracin de perifricos. Esta familia cuenta con un conjunto de instrucciones de 14-bit de ancho y la capacidad de manejar interrupciones. PIC 17CXX FAMILIA DE RANGO ALTO Esta familia de alto rendimiento ofrece la mas alta velocidad de ejecucin de todos los microcontroladores de 8-bit de la industria. Utilizando una arquitectura de
Circuitos Integrados Programables Juan Antonio Barrios Huzar 10 instrucciones de 16-bit , mejora el conjunto de instrucciones y las capacidades de interrupcin.
EL PICSTAR El PICSTART Lite es una herramienta que nos ayuda a programar de manera rpida las aplicaciones desarrolladas para los microcontroladores de la familia PIC16C5X y mejorados, como tambin el PIC16C61, PIC16C71 y el microcontrolador PIC16C84. El programador PICSTART Lite es un dispositivo basado en una interfaz de DOS (modo de TEXTO) el cual puede ser manejado por cualquier IBM o PC compatible. En el manual que ser provisto en esta parte del proyecto, constara entonces con la informacin sobre las familias de microcontroladores (arquitectura y operacin, tipos y formatos de las instrucciones, interrupciones y timers) y la manera de programarlos (rutinas y subrutinas, llamadas y saltos, direccionamientos y pilas, E/S y prioridades). El PICSTART Lite cuenta con una interfaz propia y el software para su manejo, se requerir nicamente el conectarla a una computadora que cumpla con los requerimientos mnimos y el software necesario, a travs de la cual se realizara la programacin. El primer paso en un diseo basado en microcontrolador habindose ya seleccionado el controlador adecuado de acuerdo a las caractersticas del mismo y las necesidades del problema consiste en escribir el cdigo fuente del programa en el lenguaje seleccionado (en este caso lenguaje ensamblador). Posteriormente viene la compilacin y ensamblado del programa, siguiendo la depuracin y simulacin del mismo. Para todo ello es necesario seguir una cierta metodologa en la creacin de nuestros programas respetando:
Circuitos Integrados Programables Juan Antonio Barrios Huzar 11
A) CAMPOS PARA ETIQUETAS La mayora de los ensambladores establecen un lmite al tamao de las etiquetas del programa as como los caracteres que se pueden usar en ellas. B) CAMPOS DE INSTRUCCIONES Es el espacio dedicado a escribir las directivas del programa. C) CAMPOS DE DATOS Contiene los datos u operandos para las instrucciones, que pueden ser registros y/o constantes; aunque algunas instrucciones no llevan datos existen otras que llevan varios separados por comas. D) CAMPOS DE COMENTARIOS Los comentarios son uno de los trabajos mas importantes que el programador debe desarrollar a la hora de escribir el cdigo ya que describen la tarea que estn tratando de realizar las instrucciones, as como las directivas propias del programa y las extensiones que deben seguir los archivos. El PICSTAR Lite se basa en la compatibilidad de los pines en los dispositivos microcontroladores; esto es dispositivos que tienen el mismo tipo de empaquetado, localizacin de los pines VDD , VSS y MCLR. Esto nos permite operar diferentes dispositivos en el mismo socket. Los dispositivos compatibles requieren solamente cambios menores en el software para permitir una operacin apropiada en el socket de aplicacin. No todos los dispositivos con el mismo tamao de empaquetado son compatibles en los pines; por ejemplo el PIC16C62 es compatible con el PIC16C63 pero no lo es con el PIC16C55.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 12
La compatibilidad con los pines no quiere decir que el dispositivo ofrece las mismas caractersticas. Como por ejemplo, el PIC16C54 es compatible en sus pines con el PIC16C71, pero no tiene un convertidor A/D o interrupciones.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 13
Circuitos Integrados Programables Juan Antonio Barrios Huzar 14
PIC 16F84 El " PIC 16F84 " es un MICROCONTROLADOR con memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no se requiere de borrado con luz ultravioleta como las versiones EPROM sino, permite reprogramarlo nuevamente si ser borrado con anterioridad. El PIC 16C84 es un microcontrolador de la familia MICROCHIP, totalmente compatible con el PIC 16F84. Su principal caracterstica es que posee memoria "EEPROM" en lugar de memoria Flash, pero su manejo es igual. Con respecto al PIC16F84, este microcontrolador presenta dos diferencias: La memoria de datos tiene menor tamao, aqu se tienen 32 registros de propsito general (el mapa de memoria de datos llega hasta 2Fh). En el momento de programar el microcontrolador, el fusible de seleccin del temporizador de arranque (Power Up Timer) trabaja de forma inversa, es decir, si en el PIC 16F84 se selecciona la opcin "Low" para activarlo, en el PIC 16C84 se debe seleccionar "High". Este microcontrolador ha sido reemplazado de forma gradual por el PIC 16F84, por lo tanto, los diseos que lo utilicen como elemento de control deben ser actualizados. Aunque, como se ve, es un proceso casi transparente. Este microcontrolador se basa en la Arquitectura Harvard, en la cual el programa y los datos se pueden trabajar desde memorias separadas, lo que posibilita que las instrucciones y los datos posean longitudes diferentes. Esta misma estructura es la que permite la superposicin de los ciclos de bsqueda y
Circuitos Integrados Programables Juan Antonio Barrios Huzar 15 ejecucin de las instrucciones, lo cual se ve reflejado en una mayor velocidad del microcontrolador. En la figura siguiente se muestra el esquema a bloques simplificado de la arquitectura interna del PIC16F84.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 16 MEMORIA DE PROGRAMA Las posiciones de memoria presentes en el REGITER FILE son direccionables directamente en una longitud de memoria que va de 00H a 2FH para un total de 48 byte, denominada pagina 0. Un segundo segmento de direccionamiento denominado pagina 1 va de 80H a AFH. Para acceder a este segundo espacio es necesario recurrir a los dos bit auxiliares RP0 y RP1. Las primeras 12 posiciones de la pagina 0 (de 00H a 0BH) y de la pagina 1 ( de 80H a 8BH ) son aquellas reservadas a las funciones especiales de funcionamiento del PIC y como dijimos, no pueden ser utilizadas para otros fines. Las 36 posiciones de la pagina 0 direccionables de 0CH a 2FH pueden ser utilizadas libremente por nuestros programas para memorizar variables, contadores, etc.
MEMORIA EEPROM Es una memoria de 1 Kbyte de longitud con palabra de 14 bits. Como es del tipo FLASH se puede programar y borrar elctricamente, en otras palabras, se puede programar o borrar sin necesidad de un borrador de luz ultravioleta, lo que facilita el desarrollo de programas y la experimentacin. Como el PIC 16F84 tiene un contador de programa de 13 bits, tiene una capacidad de direccionamiento de 8K x 14, pero solamente tiene implementado el primer 1K x 14 (000h hasta 03FFh). Si se direccionan posiciones de memoria superiores a 3FFh se causar un solapamiento o desborde con el espacio del primer 1K.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 17
VECTOR DE RESET Cuando ocurre un reset o se enciende el microcontrolador, el contador de programa se pone en ceros (000h). Por esta razn, en la primera direccin del programa se debe escribir todo lo relacionado con la iniciacin del mismo.
VECTOR DE INTERRUPCION Cuando el microcontrolador recibe una seal de interrupcin el contador de programa apunta a la direccin 04h de la memoria de programa, por eso all se debe escribir toda la programacin necesaria para atender dicha interrupcin.
REGISTROS (Memoria RAM) El PIC 16F84 puede direccionar 128 posiciones de memoria RAM, pero solamente tiene implementado fsicamente los primeros 80 (0 a 4Fh). De estos los primeros 12 son registros que cumplen un propsito especial en el control del microcontrolador y los 68 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se esta ejecutando. Los registros estn organizados como dos bancos (paginas) de 128 posiciones de 8 bits cada una (128 x 8); todas las posiciones se pueden accesar directa o indirectamente (estas ultimas a travs del registro FSR). Para seleccionar que pagina de registro se trabaja en un momento determinado se utiliza el bit RP0 del registro STATUS.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 18
PINES Y FUNCIONES
Los PUERTOS son el puente entre el microcontrolador y el mundo exterior. Son lneas digitales que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. El PIC 16F84 tiene dos puertos. El puerto A con 5 lneas y el puerto B con 8 lneas. Cada pin se puede configurar como entrada o como salida independiente programado por un par de registros diseados para tal fin. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 19
PUERTO A RA0 = Pin de Entrada/Salida (TTL). RA1 = Pin de Entrada/Salida (TTL). RA2 = Pin de Entrada/Salida (TTL). RA3 = Pin de Entrada/Salida (TTL). RA4/TOCKI = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0, cuando este pin se configura como salida es de tipo Open Drain (ST), cuando funciona como salida se debe conectar a Vcc (+5V) a travs de una resistencia. PUERTO B RB0/INT = Pin de Entrada/Salida o entrada de interrupcin externa. (TTL/ST). RB1 = Pin de Entrada/Salida (TTL). RB2 = Pin de Entrada/Salida (TTL). RB3 = Pin de Entrada/Salida (TTL). RB4 = Pin de Entrada/Salida con Interrupcin por cambio de Flanco (TTL). RB5 = Pin de Entrada/Salida con Interrupcin por cambio de Flanco (TTL). RB6 = Pin de Entrada/Salida con Interrupcin por cambio de Flanco (TTL/ST). RB7 = Pin de Entrada/Salida con Interrupcin por cambio de Flanco (TTL/ST). PINES ADICIONALES MCLR = Pin de Reset del Microcontrolador (Master Clear). Se activa (el pic se resetea) cuando tiene un "0" lgico en su entrada. Vss = Ground o Tierra VDD = Fuente Positiva (+5V)
Circuitos Integrados Programables Juan Antonio Barrios Huzar 20 OSC2/CLKOUT = Entrada del Oscilador del Cristal. Se conecta al Cristal o Resonador en modo XT (Oscilador de Cristal). En modo RC (Resistencia- Condensador), este pin acta como salida el cual tiene 1/4 de la frecuencia que entra por el pin OCS1/CLKIN. OCS1/CLKIN = Entrada del Oscilador del Cristal / Entrada de reloj de una Fuente Externa. El Puerto B tiene Internamente unas resistencias de pull-up conectadas a sus pines (sirven para fijar el pin a un nivel de cinco voltios), su uso puede ser habilitado o deshabilitado bajo control del programa. Todas las resistencias de pull-up conectan o desconectan a la vez. La resistencia de pull-up es desconectada automticamente en un pin si este se programa como salida. El pin RB0/INT se puede configurar por software para que funcione como interrupcin externa. El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/salida como se mencionaba anteriormente o como entrada del temporizador/contador. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger, ST), esto quiere decir que puede reconocer seales un poco distorsionadas y llevarlas a niveles lgicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto, por lo tanto se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel lgico de cinco voltios). Como salida, la lgica es inversa: un "0" escrito al pin del puerto entrega en el pin un "1" lgico. Adems como salida no puede manejar cargas como fuente, slo en el modo sumidero. Como este dispositivo es de tecnologa CMOS, todos los pines deben estar conectado a alguna parte, nunca dejarlos al aire por que se puede daar el integrado. Los pines que no se estn usando se deben conectar la fuente de alimentacin +5V con una resistencia de < 5 Kilo Ohmio. La mxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 21 El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operacin, la frecuencia y de las cargas que tengan sus pines. Por Ejemplo: Para un reloj de 4 MHz el consumo es de aproximadamente de 2mA; aunque este se puede reducir a 40 microamperios cuando est en el modo sleep (en este modo el micro se detiene y disminuye el consumo de potencia). Se sale de este estado cuando se produce alguna condicin especial que veremos mas adelante. EL OSCILADOR EXTERNO Todo Microcontrolador requiere un circuito externo que le indique la velocidad a la que debe trabajar. Este circuito, que se conoce con el nombre de oscilador o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PIC 16F84 puede utilizar cuatro tipos de oscilador diferentes. Estos tipos son: RC. Oscilador con resistencia y condensador. XT. Cristal de cuarzo. HS. Cristal de alta velocidad. LP. Cristal para baja frecuencia y bajo consumo de potencia. En el momento de programar o "quemar" el microcontrolador se debe especificar que tipo de oscilador se usa. Esto se hace a travs de unos fusibles llamados "fusibles de configuracin". En la mayora de las practicas que realizaremos se sugiere el cristal de 4 MHz, por que garantiza una mayor precisin y un buen arranque del microcontrolador. Internamente esta frecuencia esta dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instruccin se realiza en un microsegundo (1 S). El cristal debe ir acompaado de dos condensadores y se conecta como se muestra en la figura siguiente.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 22
Dependiendo de la aplicacin, se pueden utilizar cristales de otras frecuencias; por ejemplo se usa el cristal de 3.579545 MHz por que es muy econmico, el de 32.768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas. El lmite de velocidad de estos microcontroladores es de 10 MHz. Si no se requiere mucha precisin en el oscilador y se requiere economizar dinero, se puede utilizar una resistencia y un condensador, como se muestra a continuacin:
Nota: Cuando el oscilador del dispositivo esta en modo RC, no maneje el pin OSC1 con un reloj externo por que puede daar el dispositivo. La frecuencia del oscilador dividida por cuatro est disponible en el pin OSC2/CLKOUT, y puede ser usada para chequear propsitos o para sincronizar otra lgica. 16 15 16 15
Circuitos Integrados Programables Juan Antonio Barrios Huzar 23 RESET En los microcontroladores se requiere un pin de reset para reiniciar el funcionamiento del sistema cuando sea necesario, ya sea por una falla que se presente o por que as se halla diseado el sistema. El pin de reset en los PIC es llamado "Master Clear". El PIC 16F84 admite diferentes tipos de reset: Al encendido (Power On Reset) Pulso en el pin Master Clear durante operacin normal Pulso en el pin Master Clear durante el modo de bajo consumo (modo sleep) El rebase del conteo del circuito de vigilancia (watchdog) durante operacin normal. El rebase del conteo del circuito de vigilancia (watchdog) durante el modo de bajo consumo (sleep) El reset al encendido se consigue gracias a dos temporizadores. El primero de ellos es el OST (Oscillator Star-Up Timer: Temporizador de encendido del oscilador), orientado a mantener el microcontrolador en reset hasta que el oscilador de cristal es estable. El segundo es el PWRT (Power-Up Timer: Temporizador de encendido), que provee un retardo fijo de 72 mS (nominal) en el encendido nicamente, diseado para mantener el dispositivo en reset mientras la fuente se estabiliza. Para utilizar estos temporizadores, solo basta con conectar el pin Master Clear a la fuente de alimentacin evitndose utilizar las tradicionales redes RC externas en el pin de reset. El reset por Master Clear se consigue llevando momentneamente este pin a un estado lgico bajo, mientras que el watchdog WDT produce un reset cuando su temporizador rebasa la cuenta, o sea que pasa de 0FFh a 00H. Cuando se quiere tener control sobre el reset del sistema se puede conectar un botn como se muestra en la siguiente figura
Circuitos Integrados Programables Juan Antonio Barrios Huzar 24
Reset por Brown-Out: Un brown-out es una condicin en donde la alimentacin del dispositivo (Vdd) baja a un valor mnimo, pero no a cero y luego se normaliza. El dispositivo debe resetearse en caso de presentarse un brown-out. Para resetear un PIC 16F84 cuando un brown-out ocurre se debe construir un circuito de proteccin externo como el de la siguiente figura: Circuito de Proteccin # 1.
Este circuito entrar en un reset activo cuando VDD baja por debajo de Vz + 0.7, en donde Vz = Voltaje del Zener. Circuito de Proteccin # 2.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 25 Este circuito es ms econmico, aunque menos eficaz. El transistor Q1 pasar a un estado de corte cuando VDD est por debajo de un cierto nivel tal que: VDD * (R1 / (R1 + R2)) = 0.7 V
REGISTROS (MEMORIA RAM) El PIC 16F84 puede direccionar 128 posiciones de memoria RAM, pero solamente tiene implementado fsicamente los primeros 80 (0 a 4Fh). De estos los primeros 12 son registros que cumplen un propsito especial en el control del microcontrolador y los 68 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se esta ejecutando. Los registros estn organizados como dos bancos (paginas) de 128 posiciones de 8 bits cada una (128 x 8); todas las posiciones se pueden accesar directa o indirectamente (estas ultimas a travs del registro FSR). Para seleccionar que pagina de registro se trabaja en un momento determinado se utiliza el bit RP0 del registro STATUS. 00h o INDO: Registro para el direccionamiento indirecto de datos. Este no es un registro disponible fsicamente; utiliza el contenido del FSR y el bit RP0 del registro STATUS para seleccionar indirectamente la memoria de datos o RAM del usuario; la instruccin determinara que se debe sealar con el registro sealado. 01h o TMR0: Temporizador/contador de 8 bits. Este se puede incrementar con una seal externa aplicada al pin RA4/TOCKI o de a cuerdo a una seal interna proveniente del reloj de instrucciones del microcontrolador. La rata o tasa de incremento del registro se puede determinar por medio de un preescalador, localizado en el registro
Circuitos Integrados Programables Juan Antonio Barrios Huzar 26 OPTION. Los anteriores microcontroladores no contaban con la generacin de una interrupcin cuando se rebasaba la cuenta (el paso de 0FFh a 00h). 02h o PCL: CONTADOR DE PROGRAMA. Se utiliza para direccionar las palabras de 14 bits del programa del usuario que se encuentra almacenado en la memoria ROM; este contador tiene un tamao de 13 bits. Sobre el byte bajo, se puede escribir o leer a voluntad directamente, mientras que en el byte alto, no. El byte alto se maneja mediante el registro PCLATH (0Ah). A diferencia de los PIC de primera generacin el 16F84 ante una condicin de reset inicia el contador de programa con todos sus bits en "cero". Durante la ejecucin normal del programa, y dado que todas las instrucciones ocupan solo una posicin de memoria, el contador se incrementa con cada instruccin, a menos que se trate de alguna instruccin de salto. 03h o STATUS: REGISTRO DE ESTADO. Contiene el estado Aritmtico de la ALU, la causa de reset y los bits de preseleccin de pagina para la memoria de datos. En la siguiente figura se muestran los bits correspondientes a este registro. REGISTRO STATUS IRP bit 7 RP1 bit 6 RP0 bit 5 T0 bit 4 PD bit 3 Z bit 2 DC bit 1 C bit 0 IRP Selector de pgina para direccionamiento indirecto. Este bit no se utiliza efectivamente en el PIC 16F84, por lo que se puede utilizar como un bit de propsito general. RP1,0 Selectores de pgina para un seleccionamiento directo. Solamente RP0 se utiliza en el PIC 16F84. RP1 se puede utilizar como un bit de propsito general. T0 Time Out o bit de finalizacin del temporizador. Se coloca en 0 cuando el circuito de vigilancia Watchdog finaliza la temporizacin PD Power Down o bit de bajo consumo. Se coloca en 0 por la instruccin sleep. Z Zero o bit de cero. Se coloca en 1 cuando el resultado de una operacin aritmtica o lgica es cero.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 27 DC Digit Carry o bit de acarreo de dgito. En operaciones aritmticas se activa cuando hay un acarreo entre el bit 3 y 4, es decir cuando hay acarreo entre el nible de menor y de mayor peso. C Carry o bit de acarreo. En instrucciones aritmticas se activa cuando se presenta acarreo desde el bit ms significativo del resultado.
Los bits 5 y 6 (RP0 y RP1) son los bits de seleccin de pagina (Bank 0 y Bank 1), para el direccionamiento directo de la memoria de datos; solamente RP0 se usa en los PIC 16F84. RP1 se puede utilizar como un bit de propsito general de lectura/escritura. Los bits TO y PD no se pueden modificar por un proceso de escritura; ellos muestran la condicin por la cual se ocasiono el ultimo reset. 04h o FSR: REGISTRO SELECTOR DE REGISTROS. En asocio con el registro IND0, se utiliza para seleccionar indirectamente los otros registros disponibles. Mientras que los antecesores del PIC 16F84 solo posean 5 bits activos, en este microcontrolador se poseen solo 8 bits. Si en el programa no se utilizan llamadas indirectas, este registro se puede utilizar como un registro de propsito general. 05h o PORTA: PUERTO DE ENTRADA/SALIDA DE 5 BITS (RA0~ RA4). Este puerto al igual que todos sus similares en los PIC, puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines de este puerto esta localizado en la pagina 1 (Banco 1), en la posicin 85h y se llama TRISA. 06h o PORTB: PUERTO DE ENTRADA/SALIDA DE 8 BITS (RB0~RB7). Al igual que en todos los PIC, este puede leerse o escribirse como si se tratara de un registro cualquiera; algunos de sus pines tienen funciones alternas en la generacin de interrupciones. El registro de control para la configuracin de la funcin de sus pines se localiza en la pagina 1 (Banco 1), en la direccin 86h y se llama TRISB.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 28
08h o EEDATA: REGISTRO DE DATOS DE LA EEPROM. Este registro contiene el dato que se va a escribir en la memoria EEPROM de datos o el que se ley de sta. 09h o EEADR: REGISTRO DE DIRECCION DE LA EEPROM. Aqu se mantiene la direccin de la EEPROM de datos que se van a trabajar, bien sea para una operacin de lectura o para una de escritura 0Ah o PCLATH: REGISTRO PARA LA PARTE ALTA DE LA DIRECCION. Este registro contiene la parte alta del contador de programa y no se puede acceder directamente. 0Bh o INTCON: REGISTRO PARA EL CONTROL DE INTERRUPCIONES. Es el encargado del manejo de las interrupciones y contiene los bits que se muestran en la siguiente figura. REGISTRO INTCON GIE Bit 7 EEIE bit 6 TOIE bit 5 INTE bit 4 RBIE bit 3 TOIF bit 2 INTF bit 1 RBIF bit 0 GIE Global Interrup Enable o Habilitador general de interrupciones. 0: Deshabilita todas las interrupciones 1: Habilita las interrupciones EEIE EEPROM Write Interrup Enable o Habilitacin de interrupcin por escritura de la EEPROM. 0: La deshabilita 1: La habilita T0IE TMR0 Interrup Enable o Habilitacin de interrupcin del temporizador TMR0. 0: La deshabilita 1: La habilita INTE INT Interrup Enable o Habilitacin de la interrupcin INT. 0: La deshabilita 1: La habilita
Circuitos Integrados Programables Juan Antonio Barrios Huzar 29 RBIE RBIF Interrup Enable o Habilitacin de la interrupcin RBIF. 0: La deshabilita 1: La habilita TOIF TMR0 Overflow Interrup Flag o Bandera de la interrupcin por desbordamiento del TMR0. Se coloca en 1 cuando el TMR0 pasa de 0FFh a 00h; sta debe ser puesta a 0 por programa. INTF INT Interrup Flag o Bandera de interrupcin INT. Se coloca en 1 cuando la interrupcin INT ocurre; sta debe ser puesta cero por programa. RBIF RB Port Change Interrup Flag o Bandera de interrupcin por cambio en el puerto B. Se coloca en 1 cuando una de las entradas (RB4 a RB7) cambia; sta debe ser puesta a 0 por programa
81h u OPTION: REGISTRO DE CONFIGURACION MULTIPLE. Posee varios bits para configurar el preescalador, la interrupcin externa, el timer y las caractersticas del Puerto B. Los bits que contiene y las funciones que realiza este registro se muestran en la siguiente figura. REGISTRO OPTION RBPU bit 7 INTEDG bit 6 GRTS bit 5 RTE bit 4 PSA bit 3 PS2 bit 2 PS1 bit 1 PS0 bit 0 RBPU Portb Pull-up Enable o Habilitacin de pull-up del puerto B. 0: Habilita las pull-ups internas 1: Las deshabilita INTEDG INT Interrup Edge Select o Selector de flanco de la interrupcin INT. 0: Flanco de bajada 1: Flanco de subida RTS TMR0 Signal Source o Fuente de seal del TMR0. 0: Ciclo de instrucciones interno (Temporizador) 1: Transicin en el pin RA4/TOCKI (Contador) RTE TMR0 Signal Edge o Flanco de la seal del TMR0 0: Incremento de transicin de bajo a alto 1: Incremento en transicin PSA Preescaler Assignment o Asignacin del preescalador 0: TMR0 (Contador / Temporizador) 1: WDT (Circuito de vigilancia) PS2, 1, 0 Preescaler Value o Valores del preescalador.
El preescalador es compartido entre el TMR0 y el WDT; su asignacin es mutuamente excluyente ya que solamente puede uno de ellos ser preescalado a la vez. 85h o TRISA: REGISTRO DE CONFIGURACION DEL PUERTO A. Es el registro de control para el puerto A. Un "cero" en el bit correspondiente al pin lo configura como salida, mientras que un "uno" lo hace como entrada. 86h o TRISB: REGISTRO DE CONFIGURACION DEL PUERTO B. Es el registro de control para el puerto B. Un "cero" en el bit correspondiente al pin lo configura como salida, mientras que un "uno" lo hace como entrada. 88h o EECON1: REGISTRO DE PARA EL CONTROL DE LA MEMORIA EEPROM DE DATOS. Este es el registro de control para la memoria de datos y solo destina cinco bits para ello, los ms bajos; los tres bits superiores permanecen sin implementar. En la siguiente figura se muestran las funciones de estos bits.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 31 REGISTRO EECON1 U bit 7 U bit 6 U bit 5 EEIF bit 4 WRERR bit 3 WREN bit 2 WR bit 1 RD bit 0 U Unimplemented. No implementados. EEIF EEPROM Write Completion Interrup Flag o Bandera de finalizacin de la escritura. Se coloca en "1" cuando finaliza con xito la escritura de la EEPROM de datos; se debe colocar en "0" por programa. El bit de habilitacin correspondiente es el EEIE, localizado en el registro INTCON. WRERR Write Error Flag o Bandera de error de escritura. Si se coloca en "1" cuando la operacin de escritura termina prematuramente, debido a cualquier condicin de reset. WREN Write Enable o habilitacin de escritura. Si se coloca en "0" no permite las operaciones de escritura; en "1" las habilita. WR Write Control o Control de escritura. Al colocarse en "1" inicia un ciclo de escritura. Este bit slo es puesto a "0" por hardware, una vez la escritura termina. RD Read Control o Control de lectura. Al colocarse en "1" se inicia una lectura de la EEPROM de datos, la cual toma un ciclo de reloj de instrucciones. Este bit slo se limpia (colocar en "0") por hardware, al finalizar la lectura de la posicin de la EEPROM.
89h o EECON2: REGISTRO AUXILIAR PARA EL CONTROL DE LA MEMORIA EEPROM DE DATOS. Este registro no es implementado fsicamente por el microcontrolador, pero que es necesario en las operaciones de escritura en la EEPROM de datos; ante cualquier intento de lectura se tendrn "ceros". 0Ch a 4Fh: REGISTRO DE PROPOSITO GENERAL. Estas 68 posiciones estn implementadas en la memoria RAM esttica, la cual conforma el rea de trabajo del usuario; a ellas tambin se accede cuando en la pagina 1 (Banco 1) se direccionan las posiciones 8Ch a CFh. Esto se ha diseado as para evitar un excesivo cambio de paginas en el manejo de la RAM del usuario, agilizando los procesos que se estn llevando a cabo y descomplicando la labor del programador.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 32
REGISTRO DE TRABAJO W. Este es el registro de trabajo principal, se comporta de manera similar al acumulador en los microprocesadores. Este registro participa en casi todo el programa y por consiguiente en la mayora de las instrucciones. PILA (STACK). Estos registros no forman parte de ningn banco de memoria y no permiten el acceso por parte del usuario. Se usan para guardar el valor del contador de programa cuando se hace un llamado a una subrutina (CALL ), o cuando se atiende una interrupcin; luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de programa recupera su valor leyndolo nuevamente desde la pila. El PIC 16F84 tiene una pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subrutina sin tener problema alguno.
CARACTERISTICAS ESPECIALES Algunos elementos que forman parte de los PIC no se encuentran en microcontroladores de otros fabricantes, o simplemente representan alguna ventaja o facilidad a la hora de hacer un diseo. A continuacin una corta descripcin de las ms significativas. CIRCUITO DE VIGILANCIA (Watchdog Timer) Su funcin es restablecer el programa cuando ste se ha perdido por fallas en la programacin o por alguna razn externa. Es muy til cuando se trabaja en ambientes con mucha interferencia o ruido electromagntico. Esta conformado por un oscilador RC que se encuentra dentro del microprocesador. Este oscilador corre de manera independiente al oscilador principal. Cuando se habilita su funcionamiento, dicho circuito hace que el microcontrolador sufra un reset cada
Circuitos Integrados Programables Juan Antonio Barrios Huzar 33 determinado tiempo (que se puede programar entre 18 mS y 2 segundos). Este reset lo puede evitar el usuario mediante una instruccin especial del microcontrolador (CLRWT: Borra el contenido del watchdog), la cual se debe ejecutar antes de que termine el periodo nominal de dicho temporizador. De esta manera si el programa se ha salido de su flujo normal, por algn ruido o interferencia externa, el sistema se reiniciar (cuando se acabe el tiempo programado y no se haya borrado el contador) y el programa puede restablecerse para continuar con su funcionamiento normal. En las primeras practicas no se utiliza el circuito de vigilancia para facilitar el trabajo; por eso, en el momento de programar el microcontrolador se debe seleccionar en los fusibles de configuracin "watchdog timer OFF". Mas adelante veremos algunos ejemplos que ilustran su funcionamiento y la manera de utilizarlos TEMPORIZADOR DE ENCENDIDO (Power-up Timer) Este proporciona un reset al microcontrolador en el momento de conectar la fuente de alimentacin, lo que garantiza un arranque correcto del sistema. En el momento de grabar el microcontrolador se debe habilitar el fusible de configuracin "Power-up Timer", para ello se debe seleccionar "ON". Su tiempo de retardo es de 72 milisegundos. MODO DE BAJO CONSUMO (Sleep) Esta caracterstica permite que el microcontrolador entre en un estado pasivo donde consume muy poca potencia. Cuando se entra en este modo el oscilador principal se detiene, pero el temporizador del circuito de vigilancia (watchdog) se reinicia y empieza su conteo nuevamente. Se entra en ese estado por la ejecucin de una instruccin especial (llamada SLEEP) y se sale de l cuando el microcontrolador sufre un reset por un pulso en el pin MCLR, por que el watchdog hace que se reinicie el sistema o por que ocurre una interrupcin al sistema.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 34 INTERRUPCIONES Este microcontrolador incluye el manejo de interrupciones, lo cual representa grandes ventajas. El PIC16F84 posee cuatro formas de interrupcin que son: Interrupcin externa en el pin RB0/INT Finalizacin del temporizador/contador TMR0 Finalizacin de escritura en la EEPROM de datos Cambio de estado en los pines RB4 a RB7 El registro 0Bh o INTCON contiene las banderas de las interrupciones INT, cambio en el puerto B y finalizacin del conteo del TMR0, al igual que el control para habilitar o deshabilitar cada una de las fuentes de interrupcin, incluida la de escritura de la memoria EEPROM. Slo la bandera de finalizacin de la escritura reside en el registro 88h o EECON1. Si el bit GIE (Global Interrup Enable) se coloca en 0, deshabilita todas las interrupciones. Cuando una interrupcin es atendida, el bit GIE se coloca en 0 automticamente pare evitar interferencias con otras interrupciones que se pudieran presentar, la direccin de retorno se coloca en la pila y el PIC se carga con la direccin 04h. Una vez en la rutina de servicio, la fuente de interrupcin se puede determinar examinando las banderas de interrupcin. La bandera respectiva se debe colocar, por software, en cero antes de regresar de la interrupcin, para evitar que se vuelva a detectar nuevamente la misma interrupcin. La instruccin RETFIE permite al usuario retornar de la interrupcin, a la vez que habilita de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse presente que solamente el contador de programa es puesto en la pila al atenderse la interrupcin; por lo tanto, es conveniente que el programador tenga cuidado con el registro de estados y el de trabajo, ya que se pueden introducir resultados inesperados si dentro de ella se modifican.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 35 Interrupcin Externa. Acta sobre el pin RB0/INT y se puede configurar para activarse con el flanco de subida o el de bajada, de acuerdo al bit INTEDG (Interrup Edge Select Bit, localizado en el registro OPTION). Cuando se presenta un flanco valido en el pin INT, la bandera INTF (INTCON) se coloca en uno. La interrupcin se puede deshabilitar colocando el bit de control INTE (INTCON) en cero. Cuando se atiende la interrupcin, a travs de la rutina de servicio, INTF se debe colocar en cero antes de regresar al programa principal. La interrupcin puede reactivar al microcontrolador despus de la instruccin SLEEP, si previamente el bit INTE fue habilitado. Interrupcin por finalizacin de la temporizacin. La superacin del conteo mximo (0FFh) en el TMR0 colocara el bit TOIF (INTCON) en uno. El bit de control respectivo es TOIE (INTCON). Interrupcin por cambio en el puerto RB. Un cambio en los pines del puerto B (RB4 a RB7) colocar en uno el bit RBIF (INTCON). El bit de control respectivo es RBIE (INTCON). Interrupcin por finalizacin de escritura. Cuando la escritura de un dato en la EEPROM finaliza, se coloca en 1 el bit EEIF (EECON1). El bit de control respectivo es EEIE (INTCON). MEMORIA DE DATOS DE LA EEPROM El PIC 16F84 tiene una memoria EEPROM de datos de 64 posiciones (00h a 3Fh), de 8 bits cada una. Este bloque de memoria no se encuentra mapeado en ningn banco, el acceso a esas posiciones se consigue a travs de dos registros de la RAM: El registro EEADR (posicin 09), que debe contener la direccin de la posicin de la EEPROM a ser accesada. El registro EEDATA (posicin 08), que contiene el dato de 8 bits que se va a escribir o el que se obtuvo de la ultima lectura.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 36
Adicionalmente, existen dos registros de control: el EECON1 (88h), que posee cinco bits que manejan las operaciones de lectura/escritura y el EECON2 (89h), que aunque no es un registro fsico, es necesario para realizar las operaciones de escritura. La lectura toma un ciclo de reloj de instrucciones, mientras que las escritura, por ser controlada por un temporizador incorporado, tiene un tiempo nominal de 10 milisegundos, este tiempo puede variar con la temperatura y el voltaje. Cuando se va a realizar una operacin de escritura, automticamente se hace primero la operacin de borrado. El numero tpico de ciclos de borrado/escritura de la EEPROM de datos es de 1.000.000. FUSIBLES DE CONFIGURACIN El PIC 16F84 posee cuatro fusibles, cada uno de los cuales es un bit. Estos fusibles se pueden programas para seleccionar varias configuraciones del dispositivo: tipo de oscilador, proteccin de cdigo, habilitacin del circuito de vigilancia y el temporizador al encendido. Los bits se localizan en la posicin de memoria 2007h, posicin a la cual el usuario slo tiene acceso durante la programacin del microcontrolador. Cuando se programa la proteccin del cdigo, el contenido de cada posicin de la memoria no se puede leer completamente, de tal manera que el cdigo del programa no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del programa se protegen contra la reprogramacin. Una vez protegido el cdigo, el fusible de proteccin solo puede ser borrado (puesto a 1) si se borra toda la memoria del programa y la de datos. LAS PULL-UPS INTERNAS Cada uno de los pines del puerto B tiene un elemento dbil pull-up interno (250 uA tpico); este elemento es automticamente desconectado cuando el pin se
Circuitos Integrados Programables Juan Antonio Barrios Huzar 37 configura como salida. Adicionalmente, el bit RBPU (OPTION) controla todos estos elementos, los cuales estn deshabilitados frente a una condicin de reset. Estos elementos pull-up son especialmente tiles cuando el microcontrolador va a colocarse en el modo de bajo consumo, ya que ayudan a no tener las entradas flotantes, significado una reduccin en el consumo de corriente.
EL CONJUNTO DE INSTRUCCIONES Estas se clasifican en orientadas a registros, orientadas a bit y operaciones literales y de control. Cada instruccin es una palabra de 14 bits, dividida en un cdigo de operacin (el cul especifica la orden a ejecutar) y uno o ms operandos sobre los que se acta TABLA DE NEMNICOS DE LA FAMILIA PIC16X84 MNEMNICO DESCRIPCIN CDIGO OP FLAGS AFECTADOS NOTAS Instrucciones Orientadas a Registros ADDWF f,d ANDWF f,d CLRF f CLRW COMF f,d DECF f,d DECFSZ f,d INCF f,d INCFSZ f,d IORWF f,d MOVF f,d MOVWF f NOP RLF f,d RRF f,d SUBWF f,d (W)+(f) (destino) (W) AND (f) (destino) 00 (f) 00 (W) Complemento de f [(#f)(des)] (f)-1 destino (f)-1dest. y si res. es 0 salta (f)+1 destino (f)+1dest. y si res. es 0 salta (W) OR (f) destino Mueve f destino (W) (f) No operacin Rota f a la izq a travs del carry destino Rota f a la dcha a travs del cary destino (f)(W) (destino) 00 0111 dfff ffff 00 0101 dfff ffff 00 0001 1fff ffff 00000100000011 00 1001 dfff ffff 00 0011 dfff ffff 00 1011 dfff ffff 00 1010 dfff ffff 00 1111 dfff ffff 00 0100 dfff ffff 00 1000 dfff ffff 00 0000 1fff ffff 0000000xx0 0000 00 1101 dfff ffff 00 1100 dfff ffff 00 0010 dfff ffff C, DC, Z Z Z Z Z Z Ninguno Z Ninguno Z Z Ninguno Ninguno C C C,DC,Z 1,2 1,2 2 1,2 1,2 1,2,3 1,2 1,2,3 1,2 1,2
1,2 1,2 1,2 1,2 1,2
Circuitos Integrados Programables Juan Antonio Barrios Huzar 38 SWAPF f,d XORWF f,d Intercambia los nibbles de f destino (W) XOR (f) (destino) 00 1110 dfff ffff 00 0110 dfff ffff Ninguno Z Instrucciones orientadas a Bit BCF f,b BSF f,b BTFSC f,b BTFSS f,b Pone a 0 el bit b del registro f Pone a 1 el bit b del registro f Skip si el bit b del reg. f es 0 Skip si el bit b del reg. f es 1 01 00bb bfff ffff 01 01bb bfff ffff 01 10bb bfff ffff 01 11bb bfff ffff Ninguno Ninguno Ninguno Ninguno 1,2 1,2 3 3 Instrucciones con literales y de control ADDLW K ANDLW K CALL K CLRWDT GOTO K IORLW K MOVLW K RETFIE RETLW K RETURN SLEEP SUBLW K XORLW K (W)+ K (W) (W) AND K (W) Llamada a subrutina Clear del temporizador del WD Go To direccin (W) OR K (W) K (W) Retorno de una interrupcin Retorno con un literal en W Retorno de una subrutina Modo Standby K (W) W (W) XOR K (W) 11 111x kkkk kkkk 111001kkkk kkkk 10 0kkkkkkkkkkk 00 00000100100 10 kkkkkkkkkkk 111000 kkkk kkkk 1100xx kkkk kkkk 00000000001001 1101xx kkkk kkkk 00000000001000 00000001100011 11110x kkkk kkkk 11 1010kkkk kkkk C,DC,Z Z
Ninguno Z Ninguno Ninguno Ninguno Ninguno C,DC,Z Z
Notas. 1. Al modificar un registro de E/S con una operacin sobre l mismo (por ejemplo MOVF PORTB,1), el valor utilizado es el que se halle presente en los pines del PORTB. Por ejemplo, si el biestable tiene un "1" para una patilla configurada como entrada y se pone a nivel bajo desde el exterior, el dato se volver a escribir como "0". 2. Si se ejecuta esta instruccin sobre el TMR0 y d=1, ser borrado el divisor de frecuencia (preescaler), si est asignado al TMR0.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 39 3. Si se modifica el Contador de Programa (PC) o una condicin de prueba es verdadera, la instruccin requiere dos ciclos mquina. El segundo ciclo se ejecuta como un NOP ADDLW ADDLW ADD Literal to W Operacin (W) + k ----> (W) Sintaxis [Etiqueta] ADDLW k Operadores Cod.Oper. 0001 11df ffff Palabras 1 Ciclos 1 Cdigo de Operacin 11 111x kkkk kkkk Descripcin Suma el contenido del registro W al literal k, y almacena el resultado en W. Si se produce acerreo el flag C se pone a "1" Nota.- Esta instruccin no existe en el PIC 16C5X
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X X X
C Se pone a 1 si se produce un Acarreo desde el bit de mayor peso DC Se pone a 1 si se genera un Acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: ADDLW 0x15 Si antes de la instruccin: W = 10h = 0001 0000 b Al ejecutarse la instruccin
Circuitos Integrados Programables Juan Antonio Barrios Huzar 40 W = 10 h + 15 h = 25 h W = 0001 0000 b + 0001 0101 b = 0010 0101 b
ADDWF ADDWF ADD W to F Operacin (W) + (f) ----> (destino) Sintaxis [Etiqueta] ADDWF f,d Operadores d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 0111 dfff ffff Descripcin Suma el contenido del registro W al contenido del registro f, y almacena el resultado en W si d = 0, y en el registro f si d = 1.Si se produce acerreo el flag C se pone a "1"
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X X X
C Se pone a 1 si se produce un Acarreo desde el bit de mayor peso DC Se pone a 1 si se genera un Acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: ADDWF FSR,0 Si antes de la instruccin. W = 17 h y FSR = C2 h como d=0 Al ejecutarse: W = 17 h+ C2 h = D9 h FSR = C2 h
Circuitos Integrados Programables Juan Antonio Barrios Huzar 41 ANDLW ANDLW AND Literal and W Operacin (W).AND. (k) ----> (W) Sintaxis [Etiqueta] ANDLW k Operadores k Palabras 1 Ciclos 1 Cdigo de Operacin 11 1001 kkkk kkkk Descripcin Efecta la operacin AND lgico entre el contenido del registro W y el literal k, y almacena el resultado en W.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - - Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: ANDLW 0x5F Si antes de la instruccin. W = A3 h Al ejecutarse: W = 0101 1111 b AND 1010 0011 b = 0000 0011 B = 03 h
ANDWF ANDWF AND W wind F Operacin (W) AND (f) ----> (destino)
Circuitos Integrados Programables Juan Antonio Barrios Huzar 42 Sintaxis [Etiqueta] ANDWF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 0101 dfff ffff Descripcin Efecta la operacin AND lgico entre el contenido del registro W y el contenido del registro f, y almacena el resultado en W si d = 0, y en f si d = 1.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - - Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: ANDWF FSR,1 Si antes de la instruccin. W = 17 h = 0001 0111 b y FSR = C2 h = 1100 0010 h Al ejecutarse: W = 17 h = 0001 0111 b FSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02 h
BCF BCF Bit Clear F Operacin 0 --> (f<b>) Sintaxis [Etiqueta] BCF f,b Operadores 0
Circuitos Integrados Programables Juan Antonio Barrios Huzar 43
Palabras 1 Ciclos 1 Cdigo de Operacin 01 00bb bfff ffff Descripcin Pone a cero el bit nmero b del registro f
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: BCF FLAG_REG, 7 Si antes de la instruccin el registro FLAG_REG = C7 h = 1100 0111 b Al ejecutarse la instruccin, el registro queda con el valor: FLAG_REG = 47b = 0100 0111 b
BSF BSF Bit Set F Operacin 1 --> (f<b>) Sintaxis [Etiqueta] BSF f,b Operadores
Palabras 1 Ciclos 1 Cdigo de Operacin 01 11bb bfff ffff Descripcin Pone a 1 el bit b del registro f
Circuitos Integrados Programables Juan Antonio Barrios Huzar 44 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: BSF FLAG_REG, 7 Si antes de la instruccin el registro tiene el valor. FLAG_REG = 0A h = 0000 1010 b Al ejecutarse la instruccin, el registro queda con el valor: FLAG_REG = 8A h = 1000 1010 b
BTFSC BTFSC Bit Test, Skip if Clear Operacin skip if (f<b>) = 0 Sintaxis [Etiqueta] BTFSC f,b Operadores 0
Palabras 1 Ciclos 1 (2) Cdigo de operacin 01 10bb bfff ffff Descripcin Si el bit nmero b del registro f es cero, la instruccin que sigue a sta se ignora y se trata como un NOP (skip). En este caso, y slo en este caso, la instruccin BTFSC precisa dos ciclos para ejecutarse.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
Circuitos Integrados Programables Juan Antonio Barrios Huzar 45 EJEMPLO: HERE BTFSC FLAG,1 FALSE GOTO PROCESS_CODE TRUE . Si antes de la instruccin. PC = direccin HERE Al ejecutarse: if FLAG<1> = 0, PC = direccin TRUE if FLAG<1> = 1, PC = direccin FALSE
BTFSS BTFSS Bit Test, Skip if Set Operacin skip if (f<b>) = 1 Sintaxis [Etiqueta] BTFSS f,b Operadores 0
Palabras 1 Ciclos 1 (2) Cdigo de Operacin 01 11bb bfff ffff Descripcin Si el bit nmero b del registro f est a 1, la instruccin que sigue a sta se ignora y se trata como un NOP (skip). En este caso, y slo en este caso, la instruccin BTFSS precisa dos ciclos para ejecutarse.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
Circuitos Integrados Programables Juan Antonio Barrios Huzar 46 EJEMPLO: HERE BTFSS FLAG,1 FALSE GOTO PROCESS_CODE TRUE . Si antes de la instruccin. PC = direccin HERE Al ejecutarse: if FLAG<1> = 0, PC = direccin FALSE if FLAG<1> = 1, PC = direccin TRUE
CALL CALL Subrutine Call Operandos 0 = k = 2047 Sintaxis [Etiqueta] CALL k Operacin (PC)+1 ---> Top of Stack k ---> PC <10:0>; PCLATCH (<4:3>) ---> PC (<12,11>) Palabras 1 Ciclos 2 Cdigo de Operacin 10 0kkk kkkk kkkk Descripcin Salvaguarda la direccin de vuelta en la Pila y despus llama a la subrutina situada en la direccin cargada en el PC. El modo de clculo de la direccin efectiva difiere segn la familia PIC utilizada. Tambin hay que posicionar PA2, PA1 y PA0 (PIC 16C5X) o el registro PCLATCH (En los dems PIC) antes de ejecutarse la instruccin. Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
Circuitos Integrados Programables Juan Antonio Barrios Huzar 47 EJEMPLO: HERE CALL THERE Si antes de la instruccin. PC = direccin HERE Al ejecutarse: PC = direccin (THERE) TOS = direccin (HERE +1)
CLRF CLRF Clear f Operacin 00h --> f 1 ---> Z Sintaxis [Etiqueta] CLRF f Operadores Palabras 1 Ciclos 1 Cdigo de Operacin 00 0001 1fff ffff Descripcin Se borra el contenido del registro f y el flag Z se activa
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - 1 - -
Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: CLRF REG Si antes de la instruccin. REG = 5A h Al ejecutarse: REG = 00 h flag Z = 1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 48 CLRW CLRW Clear W Operacin 00h -->(W) 1 ---> Z Sintaxis [Etiqueta] CLRW Operadores No tiene Palabras 1 Ciclos 1 Cdigo de Operacin 00 0001 0000 0011 Descripcin El registro de trabajo W se carga con 00h. El flag Z se pone a 1
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - 1 - - Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: CLRW Si antes de la instruccin. W= 5Ah Al ejecutarse: W = 00 flag Z = 1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 49 Palabras 1 Ciclos 1 Cdigo de Operacin 00 0000 0110 0100 Descripcin Se borra tanto el registro WDT (Watchdog) como su preescaler. Los bits T0# y PD# del registro de estado se ponen a "1".
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - 1 1 - - -
T0# Se pone a 1 cuando se ejecuta la instruccin CLRWDT o SLEEP. Se pone a 0 si el temporizador Watchdog se desborda PD# Se pone a 1 cuando se ejecuta la instruccin CLRWDT o SLEEP EJEMPLO: CLRWDT Si antes de ejecutarse la instruccin WDT = ? Al ejecutarse: WDT = 00 h Preescaler WDT = 0 bit de estado T0 = 1 bit de estado PD = 1
COMF COMF Complement f Operacin (f#) -----> (dest) Sintaxis [Etiqueta] COMF f,d Operadores d [0,1]
Circuitos Integrados Programables Juan Antonio Barrios Huzar 50 Palabras 1 Ciclos 1 Cdigo de Operacin 00 1001 dfff ffff Descripcin Hace el complemento del contenido del registro f bit a bit. El resultado se almacena en el registro f si d=1 y en el registro W si d=0, en este caso f no vara.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: COMF REG1,0 Si antes de la instruccin. REG1 = 13 h como d= 0 Al ejecutarse: REG1 = 13 h = 0001 0011 b W = EC h = 1110 1100 b flag Z = 0
DECF DECF Decrement f Operacin (f)-1 --> (dest) Sintaxis [Etiqueta] DECF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 0011 dfff ffff
Circuitos Integrados Programables Juan Antonio Barrios Huzar 51 Descripcin Se decrementa el contenido del registro f en una unidad. El resultado se almacena en f si d=1 y en W si d=0, en este caso f no vara. Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: DECF CNT,1 Si antes de la instruccin. CNT = 01 h Z = 0 Al ejecutarse: CNT = 00 h bit Z = 1
DECFSZ DECFSZ Decrement f , Skip if 0 Operacin (f) -1 --> (dest) ; skip if result =0 Sintaxis [Etiqueta] DECFSZ f,d Operadores 0 d [0.1] Palabras 1 Ciclos 1 (2) Cdigo de Operacin 00 1011 dfff ffff Descripcin Decrementa el contenido del registro f en una unidad, el resultado se almacena en f si d=1 y en W si d=0, en este caso, f no vara. Si el resultado es cero, se ignora la siguiente instruccin y, en ese caso la instruccin tiene una duracin de dos ciclos.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 52 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: HERE DECFSZ CNT,1 GOTO LOOP CONTINUE . . . Si antes de la instruccin. PC = direccin HERE Al ejecutarse: CNT = CNT -1 Si CNT = 0 entonces PC = direccin CONTINUE Si CNT no = 0 entonces PC = direccin HERE + 1
GOTO GOTO Unconditional Branch Operacin K --> PC <10:0> (PCLATH <4:3>) ---> (PC <12:11>) Sintaxis [Etiqueta] GOTO k Operadores Palabras 1 Ciclos 2 Cdigo de Operacin 10 1kkkk kkkk kkkk Descripcin Salto incondicional, normalmente se utiliza para llamar a la subrutina situada en la direccin que se carga en PC. El modo de clculo de la instruccin carga de bit 0 al 10 de la constante k en el PC y los bits 3 y 4 del registro PCLATH en los 11 y 12 del PC
Circuitos Integrados Programables Juan Antonio Barrios Huzar 53 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: GOTO THERE Al ejecutarse: PC = direccin THERE
INCF INCF Increment f Operacin (f) + 1 --> (dest) Sintaxis [Etiqueta] INCF f,d Operadores 0 d [0,1] (f) + 1 ---> (dest) Palabras 1 Ciclos 1 Cdigo de Operacin 00 1010 dfff ffff Descripcin Se incrementa en una unidad el contenido del registro f, si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en W, en este caso el resultado de f no vara.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
Z Se pone a 1 si el resultado de la operacin es cero al haber desbordamiento EJEMPLO: INCF CNT,1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 54 Si antes de la instruccin: CNT = FF h flag Z = 0 Al ejecutarse: FF h +1 h = 00 h CNT = 00 flag Z = 1
INCFSZ INCFSZ Increment f, SKIP if 0 Operacin (f) +1 --> (dest) , skip if result = 0 Sintaxis [Etiqueta] <INCFSZ f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 (2) Cdigo de Operacin 00 1111 Dfff ffff Descripcin Incrementa el contenido del registro f en una unidad, el resultado se almacena de nuevo en f si d=1, y en W si d=0, en este caso, f no vara. Si el resultado es cero, se ignora la siguiente instruccin y, en ese caso la instruccin tiene una duracin de dos ciclos.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: HERE INCFSZ CNT,1 GOTO LOP CONTINUE
Circuitos Integrados Programables Juan Antonio Barrios Huzar 55 Si antes de la instruccin. PC = direccin HERE Al ejecutarse: CNT = CNT+1 Si CNT = 0 Entonces PC = direccin CONTINUE Si CNT no = 0 Entonces PC = direccin HERE + 1
IORLW IORLW Inclusive OR Literal with W Operacin (W).OR.k ---> (W) Sintaxis [Etiqueta] IORLW k Operadores Palabras 1 Ciclos 1 Cdigo de Operacin 11 1000 Kkkk kkkk Descripcin Se realiza la operacin lgica OR entre el registro W y el literal k. El resultado se almacena en el registro W.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - - Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: IORLW 0x35 Si antes de la instruccin. W = 9A h Al ejecutarse: W = 1001 1010 b + 0011 0101 b = 1011 1111 b = BF h
Circuitos Integrados Programables Juan Antonio Barrios Huzar 56 IORWF IORWF Inclusive OR W with f Operacin (W) .OR.(f)--> (dest) Sintaxis [Etiqueta] IORWF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 0100 Dfff ffff Descripcin Efecta la operacin lgica OR entre el contenido del registro W y el contenido del registro f, y almacena el resultado en f si d=1 y en W si d=0.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: IORWF RESUL,0 Si antes de la instruccin. RESUL = 13 h = 0001 0011 b W = 91 h = 1001 0001 b Al ejecutarse: RESUL= 0001 0011 b OR 1001 0001 b = 1001 0011 b = 93 h
MOVLW MOVLW Move literal to W Operacin k --> (W) Sintaxis [Etiqueta] MOVLW k
Circuitos Integrados Programables Juan Antonio Barrios Huzar 57 Operadores 0 Palabras 1 Ciclos 1 Cdigo de Operacin 11 00xx Kkkk kkkk Descripcin El registro W se carga con el valor de 8 bits del literal k
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
EJEMPLO: MOVLW 0x5A Al ejecutarse: W = 5A h
MOVF MOVF Move f Operacin (f) --> (dest) Sintaxis [Etiqueta] MOVF f,d Operadores d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 10000 Dfff ffff Descripcin El contenido del registro f se carga en el registro destino dependiendo del valor de d. Si d=0 el destino es el registro W, si d=1 el destino es el propio registro f . Esta instruccin permite verificar dicho registro ya que el flag Z queda afectado.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 58 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - -
Z Se pone a 1 si el resultado de la operacin es cero EJEMPLO: MOVF FSR,0 Al ejecutarse: W = al valor del FSR
MOVWF MOVWF Move W to f Operacin (W)--> (f) Sintaxis [Etiqueta] MOVWF f Operadores 0 Palabras 1 Ciclos 1 Cdigo de Operacin 00 0000 1fff ffff Descripcin Mueve el contenido del registro W al registro f
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: MOVWF OPTION Si antes de la instruccin. OPTION = FF h W = 4F h Al ejecutarse: OPTION = 4F h W = 4F h
Circuitos Integrados Programables Juan Antonio Barrios Huzar 59 NOP NOP No operation Operacin no operacin Sintaxis [Etiqueta] NOP Operadores No tiene Palabras 1 Ciclos 1 Cdigo de Operacin 00 0000 0xx0 0000 Descripcin No realiza operacin alguna. En realidad, se consume un ciclo de instruccin sin hacer nada.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: NOP
RETFIE RETFIE Return from Interrupt Operacin TOS --> PC 1 --> GIE Sintaxis [Etiqueta] RETFIE Operadores No tiene Palabras 1 Ciclos 2 Cdigo de Operacin 00 0000 0000 1001
Circuitos Integrados Programables Juan Antonio Barrios Huzar 60 Descripcin Carga el PC con el valor que se encuentra en la parte alta de la Pila, asegurando as la vuelta de la interrupcin. Pone a 1 el bit GIE, con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: RETFIE Al ejecutarse: PC = TOS GIE = 1
RETLW RETLW Retur with Literal in W Operacin k --> (W); TOS ---> PC Sintaxis [Etiqueta] RETLW k Operadores 0 < K < 255 Palabras 1 Ciclos 2 Cdigo de Operacin 11 01xx Kkkk kkkk Descripcin Carga el registro W con el literal k, y despus carga el PC con el valor que se encuentra en la parte superior de la PILA, efectuando as un retorno de subrutina. Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
Circuitos Integrados Programables Juan Antonio Barrios Huzar 61 EJEMPLO: CALL TABLA ;W contiene tabla . ; el valor offset . ;W nuevo valor de tabla TABLA: ADDWF PC ;W = offset RETLW k1 ; Nueva Tabla RETLW k2 . . . RETLW kn ;Fin de tabla Antes de ejecutarse la instruccin W = 07 h Al ejecutarse la instruccin W = Toma el valor de k7
RETURN RETURN Return from Subroutine Operacin TOS ---> PC Sintaxis [Etiqueta] RETURN Operadores No tiene Palabras 1 Ciclos 2 Cdigo de Operacin 00 0000 0000 1000 Descripcin Carga el PC con el valor que se encuentra en la parte superior de la PILA, efectuando as un retorno de subrutina
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
Circuitos Integrados Programables Juan Antonio Barrios Huzar 62
RLF RLF Rotate Left f through Carry Operacin
Sintaxis [Etiqueta] RLF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 1101 Dfff ffff Descripcin Rotacin de un bit a la izquierda del contenido del registro f, pasando por el bit de acarreo C. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en W.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - X
EJEMPLO: RLF REG1,0 Si antes de la instruccin. REG1 = 1110 0110 b flag C = 0 Como d= 0 el resultado queda en W Al ejecutarse: REG1 = 1110 0110 b W = 1100 1100 b flag C = 1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 63
RRF RRF Rotate Right f through Carry Operacin
Sintaxis [Etiqueta] RRF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 1100 dfff ffff Descripcin Rotacin de un bit a la derecha del contenido del registro f, pasando por el bit de acarreo C. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en W
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - X
EJEMPLO: RRF REG1,0 Si antes de la instruccin. REG1 = 1110 0110 b flag C = 1 Como d= 0 el resultado queda en W Al ejecutarse: REG1 = 1110 0110 b W = 0111 0011 b flag C = 0
Circuitos Integrados Programables Juan Antonio Barrios Huzar 64
SLEEP SLEEP Sleep Operacin 00h ---> WDT 0 ---> WDT prescaler 1 ---> TO# 0 --> PD# Sintaxis [Etiqueta] SLEEP Operadores No tiene Palabras 1 Ciclos 1 Cdigo de Operacin 00 0000 0110 0011 Descripcin Pone al circuito en modo Sleep (bajo consumo) con parada del oscilador. Pone a 0 el flag PD# (Power Down) y el flag TO# (Timer Out) se pone a 1. Se puede salir de este estado por: 1. Activacin de MCLR para provocar un Reset 2. Desbordamiento del Watchdog si qued operativo en el modo reposo 3. Generacin de una interrupcin que no sea TMR0 ya que sta se desactiva con la instruccin SLEEP.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z# DC C - - - 1 0 - - -
TO Se pone a 1 al ejecutar la instruccin SLEEP o CLRWDT PD Se pone a 0 al ejecutar la instruccin SLEEP EJEMPLO: SLEEP
Circuitos Integrados Programables Juan Antonio Barrios Huzar 65
SUBLW SUBLW Subtract W from Literal Operacin k - (W) ---> (W) Sintaxis [Etiqueta] SUBLW k Operadores Palabras 1 Ciclos 1 Cdigo de Operacin 11 110x Kkkk Kkkk Descripcin Resta en complemento a dos del contenido del literal k el contenido del registro W, y almacena el resultado en W.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X X X
Z Se pone a 1 si el resultado de la operacin es cero DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior C Se pone a 1 si se genera un acarreo del bit de mayor peso EJEMPLO: SUBLW 0x 02 Si antes de la instruccin. W = 01 h flag C = ? Al ejecutarse: W = 01 flag C = 1 ; el resultado es positivo Si antes de la instruccin. W = 02 h flag C = ? flag Z = ?
Circuitos Integrados Programables Juan Antonio Barrios Huzar 66 Al ejecutarse: W = 00 h flag C = 1 ; el resultado es cero flag Z = 1 Si antes de la instruccin. W = 03 h flag C = ? Al ejecutarse: W = FF h flag C = 0 ; el resultado es negativo
SUBWF SUBWF Subtract W from f Operacin (f) - (W) ---> (dest) Sintaxis [Etiqueta] SUBW f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1 Cdigo de Operacin 00 0010 Dfff Ffff Descripcin Resta en complemento a dos el contenido del registro f menos el contenido del registro W almacena el resultado en W si d=0 y en f si d=1.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X X X
Z Se pone a 1 si el resultado de la operacin es cero DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior C Se pone a 1 si se genera un acarreo del bit de mayor peso EJEMPLO: SUBWF REG1,1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 67 a) Si antes de la instruccin. REG1 = 03 h W = 02 h flag C = ? Al ejecutarse REG1 = 01h W = 02 h flag C = 1 ; el resultado es positivo b) Si antes de la instruccin. REG1 = 02 h W = 02 h flag C = ? Al ejecutarse REG1 = 00h W = 02 h flag C = 1 ; el resultado es cero falz Z = 1 ; el resultado es cero c) Si antes de la instruccin. REG1 = 01 h W = 02 h bit C = ? Al ejecutarse REG1 = 00h W = FF h flag C = 0 ; el resultado es negativo falz Z = 1 ; el resultado es cero
SWAPF SWAPF Swap Nibbles in f Operacin (f<3:0>) ---> (dest <7:4>) (f<7:4>) ---> (dest <3:0>) Sintaxis [Etiqueta] SWAPF f,d Operadores 0 d [0,1] Palabras 1 Ciclos 1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 68 Cdigo de Operacin 00 1110 dfff ffff Descripcin Los cuatro bits de ms peso del registro f se intercambian con los 4 bits de menos peso del mismo registro. Si d=0 el resultado se almacena en W, si d=1 el resultado se almacena en f.
Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - - - -
EJEMPLO: SWAPF REG1,0 Si antes de la instruccin. REG1 = A5 h = 1010 0101 h Como d=0 el resultado se almacenar en W Al ejecutarse la instruccin: REG1 = A5 h = 1010 0101 b W = 5A h = 0101 1010 b
XORLW XORLW Exclusive OR Literal With k Operacin (W).XOR.k ---> (W) Sintaxis [Etiqueta] XORLW k Operadores 0 Palabras 1 Ciclos 1 Cdigo de Operacin 11 1010 kkkk kkkk Descripcin Realiza la funcin OR-Exclusiva entre el contenido del registro W y la constante k de 8 bits. El resultado se almacena en W
Circuitos Integrados Programables Juan Antonio Barrios Huzar 69 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - - Z Se pone a 1 si el resultado de la ltima operacin es cero EJEMPLO: XORLW 0xAF Si antes de la instruccin. W = 1011 0101 b = B5 h
h
XORWF XORWF Exclusive OR With f Operacin (W).XOR.(f) ---> (des) Sintaxis [Etiqueta] XORWF f,d Operadores d [0,1] Palabras 1 Ciclos 1 Descripcin Realiza la funcin OR-Exclusiva entre el contenido del registro W y el contenido del registro f, y almacena el resultado en f si d=1 y en W si f=0 Registro de STATUS PA2 PA1 PA0 TO# PD# Z DC C - - - - - X - - EJEMPLO: XORWF REG1,1 Si antes de la instruccin. REG1 = AF h = 1010 1111 b W = B5 h = 1011 0101 b Como d=1, el resultado se almacena en REG1 Al ejecutarse: REG1 = 1010 1111 W = B5 h
Circuitos Integrados Programables Juan Antonio Barrios Huzar 70
SIMULADOR / ENSAMBLADOR El MPLAB es un "Entorno de Desarrollo Integrado" (Integrated Development Environment, IDE) que corre en "Windows", mediante el cual se puede desarrollar aplicaciones para los microcontroladores de las familias PIC 16/17. Con el MPLAB usted puede escribir, depurar y optimizar los programas de sus diseos con PIC 16/17. El MPLAB incluye un editor de texto, un simulador y un organizador de proyectos. Por otra parte, tambin soporta al emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el PICSTAR- Plus. Con el Mplab Usted puede: Depurar sus programas fuentes. Detectar errores automticamente en sus programas fuente para editarlos. Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los registros internos. Observar el flujo del programa con el simulador MPLAB-SIM seguirlo en tiempo real utilizando el emulador PICMASTER. Realizar medidas de tiempo utilizando un cronometro. Mirar variables en las ventanas de observacin. Encontrar respuestas rpidas a sus preguntas, utilizando la ayuda en lnea del MPLAB. REQUERIMIENTOS MINIMOS DE HARDWARE Y DE SOFTWARE. PC con procesador 386 o superior. 4 MB de memoria RAM 8 MB libres de disco duro.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 71 Monitor VGA. Windows 3.11 de Microsoft o una versin posterior. Puerto serial 1 o 2 con conector RS232 libre
PASOS PARA PROGRAMAR EL PIC - Iniciar el Programa: Despus de haber bajado e instalado el software, haga doble click en el icono correspondiente a MPLB . - Definir el tipo de microcontrolador a usar (para el simulador): En el men "Options", seleccione "Development mode...", ahora despliegue en el men "MAPLAB-SIM Simulator" y seleccione el tipo de procesador a utilizar (que en nuestro caso es el 16F84), y finalmente oprima "Reset".
- Habilitar las herramientas para el simulador: En el men "Tools", seleccione "Verify PICMASTER..." y a continuacin siga las instrucciones correspondientes en los mens emergentes, y ya esta!.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 72 - PASOS PARA REALIZAR UN PROYECTO Para realizar un proyecto y estar preparados para la simulacin de un programa deben seguirse los siguientes pasos: Partimos de que el usuario ya tenga el programa guardado en el disco duro o disquete el cual desea ensamblar y abierto bajo el MPLAB. 1. En el men "Project", seleccione la opcin "New Project...", en la ventana emergente de New Project agregue el nombre del proyecto con extensin .pjt (deber ser el mismo del archivo .asm) y oprima OK. En la siguiente ventana Edit Project, seleccione el nombre del achivo .hex ubicado en Project Files y haga click en Node Properties, seleccione las propiedades requeridas y de clic en OK. D clic en la opcin Add Node y seleccione el archivo .asm requerido para despus dar un clic en aceptar. D un clic en OK para salir de la ventana de proyectos. 2. Realizar la construccin de todo el proyecto: En el men "Project", seleccione "Make Project". 3. Salvar el proyecto, en el men "Project" presione "Save Project". 4. En esta etapa se realiza en forma automtica el ensamble de nuestro programa fuente y el vaciado de ste en memoria de simulacin. El proceso de ensamble generar un archivo de errores en caso de que estos existan, si es as deben corregirse directamente sobre el archivo fuente, hacer las correcciones necesarias, salvar (guardar el programa) y reconstruir el proyecto (Ctrl+F10). "En esta etapa del proceso ya se tiene el entorno listo para la simulacin del programa o la programacin del PIC. - PASOS PARA PROGRAMAR UN PIC
Circuitos Integrados Programables Juan Antonio Barrios Huzar 73 Para programar un PIC partimos de que el usuario ya tenga conectado el PICSTAR Plus tanto a la corriente como a la PC y el proyecto hecho y abierto o activo en el programa MPLAB. 1. D un clic en el men Picstar Plus. 2. D un clic en la opcin Enable Programmer para comunicar la PC con el PICSAR Plus. 3. Si la comunicacin se realiza correctamente, modifique la configuracin de bits segn se requiera; si la comunicacin no se realiz correctamente, verifique todas las conexiones y empiece de nuevo. 4. D un clic en Program y espere a que se programe el PIC. 5. D un clic en close. En ste punto el PIC est programado y listo para integrarse al circuito deseado.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 74
Circuitos Integrados Programables Juan Antonio Barrios Huzar 75
PRCTICA 1
Nombre Encendido controlado de un led con PIC Objetivo El alumno aplicar los elementos mnimos necesarios para controlar el encendido y el apagado de un led por medio de un switch. Los elementos que se manejaran son: Directivas, Acceso a registros de configuracin, Acceso a Puertos, Retardos, Llamadas a subrutinas, Elaboracin de un proyecto dentro del entorno del MPLAB, Fusibles de programacin, Programacin de PIC e Implementacin. Material Requerido 1 Tarjeta para prototipos (protoboard) 1 Switch N. A. 1 Resistencia de 100 , w 1 Resistencia de 10 K, w 1 Resistencia de 470 . w 1 Capacitor electroltico de 1 F 2 Capacitores cermicos de 22 pF 1 Led 1 Oscilador o Crystal de 4 Mhz. 1 PIC 16F84 Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el programador PICSTART Plus). Fuente regulada de 5Vcc. Desarrollo de la prctica 1 Analizar en el grupo o por equipos el programa y el circuito propuestos. 2 Implementar el circuito propuesto en la figura 1
Circuitos Integrados Programables Juan Antonio Barrios Huzar 76 3 Realizar en el editor de MPLAB o cualquier editor de texto el programa propuesto con extensin.asm 4 Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo, solo que con extensin.pjt Las propiedades del nodo sern INHX8M y radix decimal. 5 Conectar el programador a su eliminador y a la PC. 6 Verificar que exista comunicacin entre la PC y el programador. 7 Insertar el PIC en el programador. 8 Programar el PIC con las siguientes caractersticas: OSC XT WDT OFF PWRTE ON C. P. OFF 9 Cerrar la ventana de programacin de PICs 10 Grabar el proyecto si as lo desea. 11 Cerrar el proyecto. 12 Quitar el PIC del programador e integrarlo al circuito propuesto. 13 Aplicar voltaje al circuito (5 Vcc.) y oprimir el switch N. A. para verificar su funcionamiento. Actividades Sugeridas Los alumnos realizarn por equipos o en forma individual un circuito y el cdigo en ensamblador de Microchip necesarios para cumplir con el objetivo de la prctica 2.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 77
Figura 1
CDIGO PARA LA PRCTICA 1
; ESTA PRACTICA CONSISTE EN ENCENDER Y APAGAR UN LED DESPUES DE ;PRESIONAR Y SOLTAR EL SWITCH O PULSADOR ;================================================================ ; FUSIBLES DE PROGRAMACION: ; OSC: XT ; WDT: OFF ; PWRTE: ON ; C. P. OFF ;================================================================ LIST P=PIC16F84 #INCLUDE <P16F84.INC> status equ 0x03 ;Registro del estado Aritmtico de la ALU Porta equ 0x05 ;Puerto A Portb equ 0x06 ;Puerto B trisa equ 0x85 ;Registro de configuracin del Puerto A trisb equ 0x86 ;Registro de configuracin del Puerto B CONTA equ 0x0C #define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1 #define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0 Org 0 ;Posicin 0 de la Memoria de Programa (apuntador) INICIO BANK1 ;Seleccion del Banco 1 bsf trisb,0 ;Bit 0 de trisb en "1" RB0 = IN bcf trisa,0 ;El bit 0 del registro trisa es puesto a 0 (0 = Salida) RA0 = Out BANK0 ;seleccion del Banco 0 bsf Porta,0 ;Bit 0 del Puerto A en "1" (Lgico), Led = OFF
Circuitos Integrados Programables Juan Antonio Barrios Huzar 78 ESPERA btfsc Portb,0 ;Lee el interruptor y espera a que sea "0". (Presionaron el Interruptor?) goto ESPERA ;no, va a la etiqueta "ESPERA" call RETARDO ;si, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) SOLTAR btfss Portb,0 ;Espera a que se suelte el pulsador. Soltaron el Pulsador? goto SOLTAR ;no, va a la Etiqueta "SOLTAR" bcf Porta,0 ;Bit 0 de Puerto A en "0" (Lgico). Enciende el LED call RETARDO ;SI, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) ;************************************************************************************************ ;En esta parte del Programa ya el Led est encendido y adems el Switch pulsador ;esta normalmente abierto (Posicin Inicial). ;************************************************************************************************ ESPERA1 btfsc Portb,0 ;Lee el interruptor y espera a que presionen (esperar que sea "0", para apagar el LED) goto ESPERA1 ;No lo han presionado, va a la Etiqueta "ESPERA1". call RETARDO ;Si lo presionaron, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) bsf Porta,0 ;Carga a Porta con "1", apaga el LED SOLTAR1 btfss Portb,0 ;Espera a que se suelte el pulsador. goto SOLTAR1 ;No lo han soltado, va a la Etiqueta "SOLTAR1" call RETARDO ;SI, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) goto ESPERA ;Finalmente encendieron y apagaron el Led, ahora va a ;la Etiqueta "ESPERA" para iniciar nuevamente el proceso. ;************************************************************************************************ ;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS ;REBOTES QUE GENERA EL SWITCH AL SER PRESIONADO CONFUNDAN AL ;MICROCONTROLADOR.Total tiempo de Retardo 772 uS ( Micro Segundos) ;************************************************************************************************ RETARDO clrf CONTA ;CONTA = 0 INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0? (255 -> 0) goto INCREM ;Va a la Etiqueta INCREM return ;Retorna del llamado end ;Fin del Programa.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 79 PRCTICA 2
Nombre Encendido controlado de dos leds con PIC Objetivo Con base en lo aprendido en la prctica 1 el alumno disear un circuito y un programa para controlar el encendido y el apagado de dos leds, cada uno con su propio switch. La seal para el encendido o apagado de los leds se mandar por los bits 0 y 1 del puerto A. La seal del switch para apagar o encender los leds se recibir en los bits 0 y 1 del puerto B. Material Requerido 1 Tarjeta para prototipos (protoboard) 2 Switch N. A. 1 Resistencia de 100 , w 1 Resistencia de 10 K, w 2 Resistencia de 470 . w 1 Capacitor electroltico de 1 F 2 Capacitores cermicos de 22 pF 2 Led 1 Oscilador o Crystal de 4 Mhz. 1 PIC 16F84 Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el programador PICSTART Plus). Fuente regulada de 5Vcc. Desarrollo de la prctica 1 Implementar el circuito realizado por los alumnos o en su caso el propuesto en la figura 2 2 Realizar en el editor de MPLAB o cualquier editor de texto el
Circuitos Integrados Programables Juan Antonio Barrios Huzar 80 cdigo en ensamblador de Microchip realizado por los alumnos, o bien, el programa propuesto con extensin .asm 3 Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo, solo que con extensin .pjt Las propiedades del nodo sern INHX8M y radix decimal. 4 Conectar el programador a su eliminador y a la PC. 5 Verificar que exista comunicacin entre la PC y el programador. 6 Insertar el PIC en el programador. 7 Programar el PIC con las siguientes caractersticas: OSC XT WDT OFF PWRTE ON C. P. OFF 8 Cerrar la ventana de programacin de PICs 9 Grabar el proyecto si as lo desea. 10 Cerrar el proyecto. 11 Quitar el PIC del programador e integrarlo al circuito propuesto. 12 Aplicar voltaje al circuito (5 Vcc.) y oprimir los switch N. A. para verificar su funcionamiento.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 81 Figura 2
CDIGO PARA LA PRCTICA 2
;ESTA PRACTICA CONSISTE EN ENCENDER Y APAGAR DOS LED DESPUES DE PRESIONAR Y SOLTAR EL PULSADOR CORRESPONDIENTE A CADA UNO. ;================================================================ ; FUSIBLES DE PROGRAMACION: ; OSC: XT ; WDT: OFF ; PWRTE: ON ; C. P. OFF ;================================================================ LIST P=PIC16F84 #INCLUDE <P16F84.INC> status equ 0x03 ;Registro del estado Aritmtico de la ALU Porta equ 0x05 ;Puerto A Portb equ 0x06 ;Puerto B trisa equ 0x85 ;Registro de configuracin del Puerto A trisb equ 0x86 ;Registro de configuracin del Puerto B CONTA equ 0x0C ;Registro auxiliar para el RETARDO #define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1 #define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0 Org 0 ;Posicin 0 de la Memoria de Programa (apuntador) INICIO BANK1 ;Seleccion del Banco 1 movlw 0x03 ;w = 0x03 movwf trisb ;El contenido de w es copiado a trisb clrf trisa ;trisa = 0, Todo el Puerto RA = Salida BANK0 ;seleccion del Banco 0
Circuitos Integrados Programables Juan Antonio Barrios Huzar 82 movlw 0x03 ;w = 0x03 movwf Porta ;Porta= w, Bit 0 y 1 del Puerto A en "1" (Lgico), Led1 y Led2 = OFF ESPERA btfss Portb,0 ;El Sw1 est abierto? goto SOLTAR1 ;no (Presionaron el Sw1), va a la Etiqueta SOLTAR1 btfss Portb,1 ;Si, el Sw2 est abierto? goto SOLTAR2 ;no (Presionaron el Sw2), va a la Etiqueta SOLTAR2 goto ESPERA ;si, va a la etiqueta "ESPERA" a esperar a que presionen algn Sw. SOLTAR1 call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) WAIT1 btfss Portb,0 ;Espera a que se suelte el Sw1. Soltaron el Pulsador? goto WAIT1 ;no, va a la Etiqueta "SOLTAR1" btfss Porta,0 ;El RA0 = 1? goto OFF1 ;no, est en 0, va a OFF1 bcf Porta,0 ;si, Enciende el LED call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) goto ESPERA ;Despues de actualizar los estados, regresa nuevamente a ESPERA OFF1 bsf Porta,0 ;Apaga el LED call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) goto ESPERA ;Despues de actualizar los estados, regresa nuevamente a ESPERA SOLTAR2 call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) WAIT2 btfss Portb,1 ;Espera a que se suelte el Sw2. Soltaron el Pulsador? goto WAIT2 ;no, va a la Etiqueta "SOLTAR2" btfss Porta,1 ;Si, el RA1 = 1? goto OFF2 ;no, est en 0, va a OFF2 bcf Porta,1 ;si, Enciende el LED call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) goto ESPERA ;Despues de actualizar los estados, regresa nuevamente a ESPERA OFF2 bsf Porta,1 ;Apaga el LED call RETARDO ;Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) goto ESPERA ;Despues de actualizar los estados, regresa nuevamente a ESPERA ;************************************************************************************************ ;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS REBOTES QUE GENERA EL SWICHT AL SER PRESIONADO CONFUNDAN AL MICROCONTROLADOR. Total tiempo de Retardo 772 uS ( Micro Segundos) ;************************************************************************************************ RETARDO clrf CONTA ;CONTA = 0 INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0 (255 -> 0) goto INCREM ;Va a la Etiqueta INCREM return ;Retorna del llamado end ;Fin del Programa.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 83
PRCTICA 3
Nombre Nmeros binarios con leds Objetivo Realizar un circuito y el cdigo en ensamblador de Microchip para que se muestre en 4 leds los nmeros binarios del 0 al 15 dependiendo de la cantidad de pulsaciones que se le den a un switch n. a. ubicado en RB0/INT; el bit menos significativo estar en RA0, el siguiente en RA1, el siguiente en RA2, y el mas significativo en RA3. Los ceros sern representados por los leds encendidos y los unos por los leds apagados. Con lo anterior el alumno identificar algunas de las diferentes instrucciones para manipular el microcontrolador, as como el acceso a los registros de configuracin de los puertos, llamadas a subrutina, retardos y acceso al registro de estado aritmtico de la ALU del PIC. Material Requerido 1 Tarjeta para prototipos (protoboard) 1 Switch N. A. 1 Resistencia de 100 , w 1 Resistencia de 10 K, w 4 Resistencia de 470 . w 1 Capacitor electroltico de 1 F 2 Capacitores cermicos de 22 pF 4 Led 1 Oscilador o Crystal de 4 Mhz. 1 PIC 16F84 Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la
Circuitos Integrados Programables Juan Antonio Barrios Huzar 84 comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el programador PICSTART Plus). Fuente regulada de 5Vcc. Desarrollo de la prctica 1 Analizar en el grupo o por equipos el programa y el circuito propuestos. 2 Implementar el circuito propuesto en la figura 3 3 Realizar en el editor de MPLAB o cualquier editor de texto el programa propuesto con extensin .asm 4 Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo, solo que con extensin .pjt Las propiedades del nodo sern INHX8M y radix decimal. 5 Conectar el programador a su eliminador y a la PC. 6 Verificar que exista comunicacin entre la PC y el programador. 7 Insertar el PIC en el programador. 8 Programar el PIC con las siguientes caractersticas: OSC XT WDT OFF PWRTE ON C. P. OFF 9 Cerrar la ventana de programacin de PICs 10 Grabar el proyecto si as lo desea. 11 Cerrar el proyecto. 12 Quitar el PIC del programador e integrarlo al circuito propuesto.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 85 13 Aplicar voltaje al circuito (5 Vcc.) y oprimir el switch N. A. para verificar su funcionamiento (recuerde que los unos sern representados por los leds apagados y los ceros por los leds encendidos). Actividades Sugeridas Los alumnos modificarn el cdigo para que los unos se representen con los leds encendidos y los ceros con leds apagados. Modificar el cdigo y el hardware para que la salida de los nmeros binarios se d en el puerto B en lugar del puerto A.
Figura 3
Circuitos Integrados Programables Juan Antonio Barrios Huzar 86 CDIGO PARA LA PRCTICA 3
;ESTA PRACTICA CONSISTE EN VISUALIZAR EN CUATRO LEDS LOS ;NUMEROS EQUIVALENTES EN BINARIO DEPENDIENDO DE LA CANTIDAD DE ;PULSACIONES DEL SWITCH PULSADOR. ;================================================================ ; FUSIBLES DE PROGRAMACION: ; OSC: XT ; WDT: OFF ; PWRTE: ON ; C.P. OFF ;================================================================ LIST P=PIC16F84 #INCLUDE <P16F84.INC> status equ 0x03 ;Registro del estado Aritmtico de la ALU Porta equ 0x05 ;Puerto A Portb equ 0x06 ;Puerto B trisa equ 0x85 ;Registro de configuracin del Puerto A trisb equ 0x86 ;Registro de configuracin del Puerto B CONTA equ 0x0C ;Registro auxiliar para el RETARDO CONTA2 equ 0x0D ;Registro auxiliar para el RETARDO #define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1 #define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0 Org 0 ;Posicin 0 de la Memoria de Programa (apuntador) INICIO BANK1 ;Seleccion del Banco 1 clrf trisa ;trisa = 0, todo el puerto A como salida bsf trisb,0 ;Bit 0 del puerto B = 1, RB1 = IN BANK0 ;Seleccion del Banco 0 clrf Porta ;Puerto A = 0 TEST btfsc Portb,0 ;Presionaron? goto TEST ;No, va a TEST SOLTAR call RETARDO ;Si, Llama la rutina de RETARDO (Para efectos del rebote que genera el interruptor) WAIT btfss Portb,0 ;Soltaron el Interruptor? goto WAIT ;no, va a la Etiqueta "WAIT" incf Porta,1 ;Si, Incrementa al Puerto A en 1 y lo guarda en l mismo. movlw .16 ;w = 16 xorwf Porta,0 ;exor entre w y Porta btfss status,2 ;Numero = 16? goto TEST ;No, va a TEST clrf Porta ;Si. Limpia el Puerto A goto TEST ;y va a TEST para iniciar el proceso otra vez. ;************************************************************************************************ ;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS REBOTES QUE GENERA EL SWICHT AL SER PRESIONADO CONFUNDAN AL MICROCONTROLADOR. Total tiempo de Retardo 1.55 mS ( Mili Segundos) ;************************************************************************************************ RETARDO movlw .2 ;Carga a w con el decimal 2 movwf CONTA2 ;CONTA2 = w
Circuitos Integrados Programables Juan Antonio Barrios Huzar 87 RESET clrf CONTA ;CONTA = 0 INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0? (255 -> 0) goto INCREM ;Va a la Etiqueta INCREM decfsz CONTA2,1 ;Decrementa a CONTA2, salta si = 0 goto RESET ;Va a reset return ;Retorna del llamado end ;Fin del Programa.
PRCTICA 4
Nombre Secuenciador de luces Objetivo Aplicar un circuito Resistivo-Capacitivo (RC) para dar la entrada de seal de reloj en lugar de un oscilador o cristal de cuarzo. Material Requerido 1 Tarjeta para prototipos (protoboard) 1 Switch N. A. 1 Resistencia de 1 K, w 1 Resistencia de 12 K, w 1 Resistencia de 330 . w 1 Capacitores cermicos de 0.001 F. 8 Leds. 1 PIC 16F84. Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el
Circuitos Integrados Programables Juan Antonio Barrios Huzar 88 programador PICSTART Plus). Fuente regulada de 5Vcc. Desarrollo de la prctica 1 Analizar en el grupo o por equipos el programa y el circuito propuestos. 2 Implementar el circuito propuesto en la figura 4 3 Realizar en el editor de MPLAB o cualquier editor de texto el programa propuesto con extensin .asm 4 Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo, solo que con extensin .pjt Las propiedades del nodo sern INHX8M y radix decimal. 5 Conectar el programador a su eliminador y a la PC. 6 Verificar que exista comunicacin entre la PC y el programador. 7 Insertar el PIC en el programador. 8 Programar el PIC con las siguientes caractersticas: OSC RC WDT OFF PWRTE ON C. P. OFF 9 Cerrar la ventana de programacin de PICs 10 Grabar el proyecto si as lo desea. 11 Cerrar el proyecto. 12 Quitar el PIC del programador e integrarlo al circuito propuesto. 13 Aplicar voltaje al circuito (5 Vcc.)
Circuitos Integrados Programables Juan Antonio Barrios Huzar 89 14 Verificar su funcionamiento. Actividades Sugeridas Los alumnos realizarn los cambios necesarios al software para cambiar la velocidad del encendido de los leds. Los alumnos realizaran los cambios necesarios al hardware para cambiar la velocidad del circuito. Encontrar la relacin entre resistencia y capacitor (del circuito temporizador RC) para la frecuencia de funcionamiento.
Figura 4
CDIGO PARA LA PRCTICA 4
TRISA EQU 85h TRISB EQU 86h PORTA EQU 05h PORTB EQU 06h STATUS EQU 03h cuenta EQU 15h cuenta2 EQU 16h LUZ EQU 17h
list p=16f84
Circuitos Integrados Programables Juan Antonio Barrios Huzar 90 ORG 00h ; vector de reset goto INICIO INICIO movlw 00 bsf STATUS,5 ;registro de configuracion movwf TRISB ; puerto b como salidas bcf STATUS,5 ;puerto comienza movlw 01h movwf LUZ aqui rlf LUZ,0 movwf PORTB movwf LUZ call retardo btfss LUZ,7 goto aqui ahi rrf LUZ,0 movwf PORTB movwf LUZ call retardo btfss LUZ,0 goto ahi goto comienza
retardo movlw 99h ;modificando este dato aumenta o movwf cuenta ;disminuye la velocidad... retar1 decfsz cuenta,1 goto retar1 movlw 99h ;o modificando este otro movwf cuenta2 retard decfsz cuenta2,1 goto retard return
end
Circuitos Integrados Programables Juan Antonio Barrios Huzar 91
PRCTICA 5
Nombre Nmeros Hexadecimales Objetivo Utilizar tablas que manden salidas predefinidas por medio de numeracin hexadecimal para activar dispositivos externos, en este caso, las salidas predefinidas activaran los segmentos necesarios para visualizar los dgitos hexadecimales en un display de 7 segmentos de ctodo comn dependiendo de las pulsaciones de un switch, iniciando en el cero hasta llegar a la F, para volver empezar en el cero. Material Requerido 1 Tarjeta para prototipos (protoboard) 1 Switch N. A. 1 Resistencia de 10 K, w 7 Resistencia de 470 . w 1 Capacitor electroltico de 1 F 2 Capacitores cermicos de 22 pF 1 Display de 7 segmentos de ctodo comn 1 Oscilador o Crystal de 4 Mhz. 1 PIC 16F84 Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el programador PICSTART Plus). Fuente regulada de 5Vcc. Desarrollo de la prctica 1. Analizar en el grupo o por equipos el programa y el circuito propuestos.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 92 2. Implementar el circuito propuesto en la figura 5 3. Realizar en el editor de MPLAB o cualquier editor de texto el programa propuesto con extensin .asm 4. Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo, solo que con extensin .pjt Las propiedades del nodo sern INHX8M y radix decimal. 5. Conectar el programador a su eliminador y a la PC. 6. Verificar que exista comunicacin entre la PC y el programador. 7. Insertar el PIC en el programador. 8. Programar el PIC con las siguientes caractersticas: OSC XT WDT OFF PWRTE ON C. P. OFF 9. Cerrar la ventana de programacin de PICs 10. Grabar el proyecto si as lo desea. 11. Cerrar el proyecto. 12. Quitar el PIC del programador e integrarlo al circuito propuesto. 13. Aplicar voltaje al circuito (5 Vcc.) 14. Oprimir el switch N. A. para verificar su funcionamiento. Actividades Sugeridas Modificar el cdigo y el hardware para poder utilizar un display de siete segmentos de ctodo comn.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 93 Figura 5
CDIGO PARA LA PRCTICA 5
;ESTA PRACTICA CONSISTE EN VISUALIZAR EN UN DISPLAY DE SIETE ;SEGMENTOS DE ANODO COMUN LOS NUMEROS HEXADECIMALES ;DEPENDIENDO DE LA CANTIDAD DE PULSACIONES DEL SWICH HACIENDO ;USO DE LA INTERRUPCION POR EL PUERTO RBO Y ADEMAS SIN EL USO DEL ;DECODIFICADOR A SIETE SEGMENTOS (7447). ;================================================================ ; FUSIBLES DE PROGRAMACION: ; OSC: XT ; WDT: OFF ; PWRTE: ON ; CP0: OFF ;================================================================ LIST P=PIC16F84 #INCLUDE <P16F84.INC> pcl equ 0x02 ;Contador de programa status equ 0x03 ;Registro del estado Aritmtico de la ALU Porta equ 0x05 ;Puerto A Portb equ 0x06 ;Puerto B
Circuitos Integrados Programables Juan Antonio Barrios Huzar 94 Optionr equ 0x81 ;Registro de Configuracin multiple trisa equ 0x85 ;Registro de configuracin del Puerto A trisb equ 0x86 ;Registro de configuracin del Puerto B Intcon equ 0x0B ;Registro para el control de Interrupciones CONTA equ 0x0C ;Registro auxiliar para el RETARDO DIGITO equ 0x0D ;Registro auxiliar que lleva el conteo del digito a visualizar #define BANK1 bsf status,5 ;Macro para abreviar el BANCO 1 #define BANK0 bcf status,5 ;Macro para abreviar el BANCO 0 Org 0 ;Posicin 0 de la Memoria de Programa (apuntador) goto INICIO ;Va a la etiqueta INICIO ;************************************************************************************************ ;EN ESTA PARTE DEL PROGRAMA SE ATIENDE LA INTERRUPCION QUE EN ;NUESTRO CASO ES POR BAJO ACTIVO EN EL PIN RB0/INT ;************************************************************************************************ Org 4 ;Vector de Interrupcin, cuando sucede la interrupcin ;el programa se direcciona a Org 4 btfss Intcon,1 ;Fu Interrupcin? retfie ;no, retorne y habilite interrupciones globales (Gie = 1) movlw 15 ;si, carga a w = 15 xorwf DIGITO,0 ;exor entre w y DIGITO (Para determinar que el Conteo slo va hasta F) btfss status,2 ;DIGITO es 15? goto UP ;NO, va a UP clrf DIGITO ;SI, DIGITO = 0 goto VISUAL ;va a VISUAL UP incf DIGITO,1 ;Incrementa al registro DIGITO VISUAL call TABLA ;Llama la TABLA movwf Portb ;el contenido de w lo pasa al Puerto B para visualizar el digito correspondiente ;************************************************************************************************ ;ESTA PARTE ES OPCIONAL, SE DEJA A VOLUNTAD DEL USUARIO Y SE ;COLOCA POR SEGURIDAD
SOLTAR call RETARDO ;llama la rutina de retardo para evitar rebotes btfss Portb,0 ;Soltaron el interruptor? goto SOLTAR ;NO, va a SOLTAR ;************************************************************************************************ bcf Intcon,1 ;SI, borra la bandera de Interrupcin por cambio en el RB0/INT retfie ;Retorna y habilita las interrupciones globales (GIE = 1)
;--------------------------------------------------------------------------------------------------------------- ;Si el usuario no desea utilizar la instruccin "RETFIE", tambin se puede ;reemplazar por las dos siguientes lineas que equivalen a lo mismo: ; bsf Intcon,7 ;Habilita Interrupciones globales (Gie =1) ; return ;retorna del llamado ;---------------------------------------------------------------------------------------------------------------- ;************************************************************************************************ ; INICIO DEL PROGRAMA ; CONFIGURACION DE PUERTOS E INICIO DE VARIABLES
Circuitos Integrados Programables Juan Antonio Barrios Huzar 95 ;************************************************************************************************ INICIO BANK1 ;Seleccion del Banco 1 movlw 0x01 ;w = 0x01 movwf trisb ;Bit 0 de trisb en "1" RB0 = IN; RB1-RB7 = 0 clrf trisa ;trisa = 0, Todo el Puerto RA = Salida (Aunque no lo Utilizamos) BANK0 ;seleccion del Banco 0 clrf DIGITO ;DIGITO = 0 call TABLA movwf Portb ;Porta= w, Visualizar el digito 0 ;************************************************************************************************ ; PROGRAMACION DE LA INTERRUPCION ;************************************************************************************************ BANK1 ;Seleccion del Banco 1 movlw 0x80 ;w = 0x80 movwf Optionr ;Optionr = w BANK0 ;Seleccion del Banco 0 movlw 0x90 ;w = 0x90 movwf Intcon ;Intcon = w WAIT sleep ;Dormir (Esta instruccin permite que el microcontrolador ;entre en un estado pasivo donde consume muy poca potencia. goto WAIT ;Va a Wait ;************************************************************************************************ ; TABLA PARA DISPLAY DE ANODO COMUN ;************************************************************************************************ TABLA movf DIGITO,0 ;Mueve el contenido de DIGITO a w addwf pcl,1 ;suma a pcl el contenido de w retlw 0x80 ;Cuando el digito es 0 (Retorno Literal con el valor en w) retlw 0xF2 ;Cuando el digito es 1 (Retorno Literal con el valor en w) retlw 0x48 ;Cuando el digito es 2 (Retorno Literal con el valor en w) retlw 0x60 ;Cuando el digito es 3 (Retorno Literal con el valor en w) retlw 0x32 ;Cuando el digito es 4 (Retorno Literal con el valor en w) retlw 0x24 ;Cuando el digito es 5 (Retorno Literal con el valor en w) retlw 0x04 ;Cuando el digito es 6 (Retorno Literal con el valor en w) retlw 0xF0 ;Cuando el digito es 7 (Retorno Literal con el valor en w) retlw 0x00 ;Cuando el digito es 8 (Retorno Literal con el valor en w) retlw 0x20 ;Cuando el digito es 9 (Retorno Literal con el valor en w) retlw 0x10 ;Cuando el digito es A (Retorno Literal con el valor en w) retlw 0x06 ;Cuando el digito es B (Retorno Literal con el valor en w) retlw 0x8C ;Cuando el digito es C (Retorno Literal con el valor en w) retlw 0x42 ;Cuando el digito es D (Retorno Literal con el valor en w) retlw 0x0C ;Cuando el digito es E (Retorno Literal con el valor en w) retlw 0x1C ;Cuando el digito es F (Retorno Literal con el valor en w) ;************************************************************************************************ ;ESTA RUTINA GENERA UN TIEMPO PRUDENTE PARA EVITAR QUE LOS REBOTES QUE GENERA ;EL SWICHT AL SER PRESIONADO CONFUNDAN AL MICROCONTROLADOR. ;Total tiempo de Retardo 772 uS ( Micro Segundos) ;************************************************************************************************ RETARDO clrf CONTA ;CONTA = 0
Circuitos Integrados Programables Juan Antonio Barrios Huzar 96 INCREM incfsz CONTA,1 ;Incrementa a CONTA y salta si = 0? (255 -> 0) goto INCREM ;Va a la Etiqueta INCREM return ;Retorna del llamado end ;Fin del Programa.
PRCTICA 6
Nombre Accesando a un LCD desde un teclado de computadora Objetivos Compilar varios archivos .asm y . h que sern llamados desde el programa principal. Conocer las funciones bsicas de los pins del socket de un teclado de computadora. Conocer las funciones bsicas de los pins de un lcd. Imprimir caracteres en un LCD mandados desde un teclado. Material Requerido 1 Tarjeta para prototipos (protoboard) 1 Resistencia variable de 10 K 1 Resistencia de 1 K, W 1 Capacitor electroltico de 1 F 2 Capacitores cermicos de 22 pF 1 LCD (2 x 16) 1 Teclado de computadora 1 Oscilador o Crystal de 10 Mhz. 1 PIC 16C84 Cables para la conexin Equipo necesario PC con el software MPLAB integrado ( en nuestro caso con un puerto serie con entrada RS232 libre para la comunicacin con el programador de PICs) Programador de PICs (en nuestro caso utilizamos el programador PICSTART Plus). Fuente regulada de 5Vcc.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 97 Desarrollo de la prctica 1. Analizar en el grupo o por equipos los programas y el circuito propuestos. 2. Implementar el circuito propuesto en la figura 6 3. Realizar en el editor de MPLAB o cualquier editor de texto los programas propuestos con la extensin indicada (.asm o .h) 4. Realizar en el MPLAB un proyecto con las siguientes caractersticas: El nombre del proyecto deber ser el mismo del archivo principal, solo que con extensin .pjt Las propiedades del nodo sern INHX8M y radix decimal. 5 Conectar el programador a su eliminador y a la PC. 6 Verificar que exista comunicacin entre la PC y el programador. 7 Insertar el PIC en el programador. 8 Programar el PIC con las siguientes caractersticas: OSC XT WDT OFF PWRTE ON C. P. OFF 9 Cerrar la ventana de programacin de PICs 10 Grabar el proyecto si as lo desea. 11 Cerrar el proyecto. 12 Quitar el PIC del programador e integrarlo al circuito propuesto. 13 Aplicar voltaje al circuito (5 Vcc.) 14 Verificar su funcionamiento mandando informacin desde el teclado.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 98 Actividades Sugeridas Al implementar la prctica, se notar que el carcter que se oprime desde el teclado se imprime en el LCD 2 veces (cuando se oprime la tecla y cuando se suelta). La actividad sugerida es quitar el efecto de rebote para que el carcter enviado solo se imprima una vez. Realizar una investigacin sobre el manejo de los LCD.
Circuitos Integrados Programables Juan Antonio Barrios Huzar 99 include "lcdint.h"
include "wait.mac" include "LCDintk.asm" include "lm032lhi.asm" include "convertk.asm" ; ;**************************************************************** ; Power up routine ; This is the program entry point. I/O line status is ; set for port A here. ;****************************************************************
Powerup bsf STATUS, RP0 movlw b'00010000' movwf TRISA ; set all port A except pa4 as output movlw b'00000001' movwf TRISB ;set all port B except pb0, to o/p movlw b'10010111' movwf OPTION_REG
bcf STATUS,RP0 movlw b'00011111' movwf PORTA ; all output lines high clrf PORTB
movlw Qmin movwf QueueheadFSR movwf Queuetail movlw HIGH HI_TABLE movwf PCLATH call SETUP_INT call DISPLAY_RESET ;now just display any char that comes in ; get data from the queue, display on top line of LCD, convert to actual ; ASCII + shift state endlessloop MOVF Queuetail, W ; SUBWF QueueheadFSR, W ;if head - tail = zero, no byte btfsc STATUS, Z goto endlessloop
if (cycles == 0) messg "WARNING - delay time less than 1 instructions"
nop exitm endif
if (cycles > (255*(256*3 + 6) + 2 + 3)) messg "ERROR : Too long a wait for the WAIT macro at present!!" exitm endif
messg Info - calculated number of cycles = #v(cycles)
if (cycles > ((255*3)+5))
movlw ((cycles-5)/(256*3+6)) call longdelay
Circuitos Integrados Programables Juan Antonio Barrios Huzar 102
ifndef INCLONGDELAY #define INCLONGDELAY endif
exitm endif
if ((cycles > 8 ) && (cycles < (255*3 + 5)))
movlw ((cycles-5)/3) call shortdelay
ifndef INCSHORTDELAY #define INCSHORTDELAY endif
exitm endif
if (cycles < 8) while ( cycles > 1 )
goto $+1 ;two cycle nop
cycles -=2 endw endif
if (cycles > 0)
exitm endif
messg "ERROR - got to end of DELAY.ASM"
radix hex endm
LCDINTK.ASM
;**************************************************************************** ;* * ;* Interrupt and queue routines - mainly keybus interfacing, * ;* * ;* * ;**************************************************************************** ;* This file and the resulting compiled code copyright1993-96 Steve Lawther * ;* Use of any of this code requires Steve Lawther to have a credit *
Circuitos Integrados Programables Juan Antonio Barrios Huzar 103 ;* within the source code. Commercial use of any of this code * ;* requires permission of the author, Steve Lawther * ;* For more details read 'README.TXT' or email 100255.157@compuserve.com * ;**************************************************************************** ; ;interfaced pins:- ; INT - kb to pc Clk INT EQU 0 #define INTpin PORTB, 0 #define DATApin PORTA, 4
; TEMP - temp location for use in interrupts ; W_TEMP - temp store for W ; STATUS_TEMP - temp store for status ; ;*************************************************************************** ;
ORG 0004 ;interrupt vector
PER_INT MOVWF W_TEMP ;store w (could be bank 0 or 1) SWAPF STATUS, W ; MOVWF STATUS_TEMP ; ;don't know if using bank 0 or 1 ; unless explicit here! (not at mo) BTFSS INTCON, INTF ; INT interrupt? GOTO INT_ERROR ; ; The interrupt, therefore the CLK signal - triggered only on TRAILING edge ; The low and high of the clk is 40us each = 100 cycles. ; Wait until pin goes low then read each DATA bit, then check if ; parity is correct - if not, dump byte.
bcf STATUS, RP0 clrf inbyte bcf STATUS, C movlw 8 ;setup loop count of 8 movwf TEMP btfss DATApin ;check if it's a start bit btfsc INTpin ;check if the clock's still there goto END_OF_INT ;it must have been a glitch or PC ; holding off comms wforhighbit btfss INTpin goto wforhighbit wforlowbit btfsc INTpin goto wforlowbit bit1 btfsc DATApin bsf STATUS, C rrf inbyte, F decfsz TEMP, F goto wforhighbit
Circuitos Integrados Programables Juan Antonio Barrios Huzar 104
movlw 2 ;setup loop count of 8 movwf TEMP ; now for the parity and stop bits - just dump wforhighparstp btfss INTpin goto wforhighparstp wforlowparstp btfsc INTpin goto wforlowparstp decfsz TEMP, F goto wforhighparstp
MOVF QueueheadFSR, W ;move queuehead out of FSR temporarily MOVWF TEMP MOVF Queuetail, W ;set FSR to queuetail MOVWF FSR MOVF inbyte, W ;set W to inbyte MOVWF INDF ;and put it in the queue movf TEMP, W movwf QueueheadFSR
INCF Queuetail, W ;get the end of the queue SUBLW Qmax ;check if at queuemax INCF Queuetail,W ;(reload value to w - doesn't affect C) BTFSS STATUS, C ;if so (negative result) MOVLW Qmin ;set to queuemin MOVWF Queuetail SUBWF QueueheadFSR, W ;see if head and tail have met BTFSC STATUS, Z ;if so (Z set) CALL IncQhead ;dump oldest byte ;GOTO END_OF_INT ;clear int flag
;the interrupt is not INT, so clear all interrupts and end
INT_ERROR END_OF_INT movlw b'00010000' movwf INTCON swapf STATUS_TEMP, W movwf STATUS swapf W_TEMP, F swapf W_TEMP, W retfie ; end of interrupt ; ;**************************************************************************** ;INT SETUP will start up the pb0 interrupt
Circuitos Integrados Programables Juan Antonio Barrios Huzar 105 bcf OPTION_REG, INTEDG bcf STATUS, RP0 ;page 0 return
LM032LHI.ASM
; ; This program interfaces to a standard 2 line by 20 character display ; module. The program assembles for 4-bit data interface. LCD_DATA is the port ; which supplies the data and LCD_CTRL the control lines ( E, RS, R_W ) to the ; display. ; This program only handles the data though the high nibble. ; ; FOR DISPLAYS OTHER THAN 20x2 ; Change the following line to match the display line length (Must be an ; even number);
#define LCDLINELEN 20
;**************************************************************************** ;* This file and the resulting compiled code copyright1993-96 Steve Lawther * ;* Use of any of this code requires Steve Lawther to have a credit * ;* within the source code. Commercial use of any of this code * ;* requires the permission of the author, Steve Lawther * ;* For more details read 'README.TXT' or email 100255.157@compuserve.com * ;**************************************************************************** include <lm032l.h> ; include "wait.mac" ; LCD_DATA EQU PORTB LCD_DATA_TRIS EQU TRISB LCD_CTRL EQU PORTB ; LCD Display Commands and Control Signal names. ; #define LCD_E LCD_CTRL,1 ; LCD Enable control line #define LCD_R_W LCD_CTRL,2 ; LCD Read/Write control line #define LCD_RS LCD_CTRL,3 ; LCD Register Select control line ; ; page ; ; Initilize the LCD Display Module ;**************************************************************************** ;* ;* DISPLAY RESET ;* ;****************************************************************************
DISPLAY_RESET ;needs to have full routine to initialize corrupted display
Circuitos Integrados Programables Juan Antonio Barrios Huzar 106 ;first setup lcd port - all outputs ;CAN ONLY AFFECT DATA NIBBLE OF PORT! but as now port a, only other line
BSF STATUS, RP0 ; Bank 1 movlw b'00000001' movwf LCD_DATA_TRIS ;set all except PB0 to output BCF STATUS, RP0 ; Bank 0 CLRF LCD_DATA ;set all port low ;clrf LCDflags ;set to cmd next etc ;have to wait 15ms here clrwdt Wait 15 Millisec, 0 clrwdt ;clear LCD port to all low here!!!!!!!!!!!!!!! MOVLW b'00110000' ; Command for 8-bit interface high nibble MOVWF LCD_DATA ; ie 0011xxxx BSF LCD_E nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz BCF LCD_E ;have to wait 4.1ms here Wait 4100 Microsec, 0 BSF LCD_E ;nibble is already setup nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz BCF LCD_E ;have to wait 100us here Wait 100 Microsec, 0 BSF LCD_E ;nibble is already setup nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz BCF LCD_E ;have to wait 100us here Wait 100 Microsec, 0 MOVLW b'00100000' ; Command for 4-bit interface high nibble MOVWF LCD_DATA ; ie 0010xxxx BSF LCD_E nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz BCF LCD_E clrwdt ;from here interface is 4 bit and busy can be checked ; 001DL NF** MOVLW FUNC_SET ;has to be 0010 10XX CALL SEND_CMD_W ;0000 1DCB MOVLW DISP_OFF ;0000 1000 CALL SEND_CMD_W
;****************************
Circuitos Integrados Programables Juan Antonio Barrios Huzar 107 ;* * ;* INITIALIZE DISPLAY * ;* * ;**************************** INIT_DISPLAY MOVLW DISP_ON_C ; Display On, Cursor On CALL SEND_CMD_W
page ; ; ;******************************************************************* ;* The LCD Module Subroutines * ;******************************************************************* ; ;******************************************************************* ;*SendChar - Sends character to LCD * ;*This routine splits the character into the upper and lower * ;*nibbles and sends them to the LCD, upper nibble first. * ;******************************************************************* ; SEND_CHAR_W MOVWF CHARBUF ;Character to be sent is in W so put in ;local CHARBUF SEND_CHAR CALL BUSY_CHECK ;Wait for LCD to be ready movf CHARBUF, W ANDLW 0x0F0 ;Get upper nibble into upper half port
Circuitos Integrados Programables Juan Antonio Barrios Huzar 108 MOVWF LCD_DATA ;Send data to LCD ;BCF LCD_R_W ;Set LCD to read BSF LCD_RS ;Set LCD to data mode call LCDtglclk ;saving space - sod readability thou ;BSF LCD_E ;toggle E for LCD ;nop ;incase the clk is >8MHz ;;nop ;incase the clk is >16MHz ;BCF LCD_E swapf CHARBUF, w ANDLW 0x0F0 ;Get lower nibble into upper half port MOVWF LCD_DATA ;Send data to LCD BSF LCD_RS ;Set LCD to data mode LCDtglclk BSF LCD_E ;toggle E for LCD nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz BCF LCD_E RETURN
;******************************************************************* ;* SEND_CMD - Sends command to LCD * ;* This routine splits the command into the upper and lower * ;* nibbles and sends them to the LCD, upper nibble first. * ;*******************************************************************
SEND_CMD_W MOVWF CHARBUF ; Character to be sent is in W so put in ;local CHARBUF SEND_CMD CALL BUSY_CHECK ; Wait for LCD to be ready movf CHARBUF, W ANDLW 0x0F0 ; Get upper nibble into lower half port MOVWF LCD_DATA ; Send data to LCD ;BCF LCD_R_W ; Set LCD to read ;BCF LCD_RS ; Set LCD to command mode call LCDtglclk ;saving space - sod readability thou ;BSF LCD_E ; toggle E for LCD ;nop ;incase the clk is >8MHz ;;nop ;incase the clk is >16MHz ;BCF LCD_E swapf CHARBUF,w ANDLW 0x0F0 ; Get lower nibble into lower half port MOVWF LCD_DATA ; Send data to LCD goto LCDtglclk ;saving space - sod readability thou ;BSF LCD_E ; toggle E for LCD ;nop ;incase the clk is >8MHz ;;nop ;incase the clk is >16MHz ;BCF LCD_E ;RETURN
;******************************************************************* ;* This routine checks the busy flag, returns when not busy *
Circuitos Integrados Programables Juan Antonio Barrios Huzar 109 ;******************************************************************* ; BUSY_CHECK BSF STATUS, RP0 ; Select Register page 1 MOVLW 0x0F1 ; Set high nibble + keep INT for input MOVWF LCD_DATA_TRIS BCF STATUS, RP0 ; Select Register page 0 BCF LCD_RS ; Set LCD for Command mode BSF LCD_R_W ; Setup to read busy flag BSF LCD_E ; Set E high nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz movf LCD_DATA, W ; Read upper nibble busy flag, DDRam address BCF LCD_E ; Set E low ;ANDLW 0x0F0 ; Mask out lower nibble ***chng 1/10/96 andlw 0x80 ;MOVWF TEMP nop BSF LCD_E ; Toggle E to get lower nibble nop nop ;incase the clk is >8MHz ;nop ;incase the clk is >16MHz ;swapF LCD_DATA, W ; Read lower nibble DDRam address BCF LCD_E ;ANDLW 0x0F ; Mask out upper nibble ;IORWF TEMP, F ; Combine nibbles xorlw 0x80 btfsc STATUS, Z ;BTFSC TEMP, 7 ; Check busy flag, high = busy GOTO BUSY_CHECK ; If busy, check again BCF LCD_R_W BSF STATUS, RP0 ; Select Register page 1 movlw b'00000001' movwf LCD_DATA_TRIS ; Set for output BCF STATUS, RP0 ; Select Register page 0 RETURN
#include "delay.asm"
CONVERTK.ASM
;**************************************************************************** ; * ; CONVERT data from keyboard code to LCD data * ; * ;**************************************************************************** ;* This file and the resulting compiled code copyright1993-96 Steve Lawther * ;* Use of any of this code requires Steve Lawther to have a credit * ;* within the source code. Commercial use of any of this code * ;* requires the permission of the author, Steve Lawther * ;* For more details read 'README.TXT' or email 100255.157@compuserve.com *
Circuitos Integrados Programables Juan Antonio Barrios Huzar 110 ;****************************************************************************
;*************************************************************************** ; ; GETQCHAR - gets a char from the queue, puts it into CHAR and OUTBYTE ;
GETQCHAR movf INDF, W ;put the byte to send into char movwf CHAR movwf outbyte
IncQhead INCF QueueheadFSR, W ;set to next byte SUBLW Qmax ;check if at queuemax INCF QueueheadFSR, W ;(reload value to w - doesn't affect C) BTFSS STATUS, C ;if so (negative result) MOVLW Qmin ;set to queuemin MOVWF QueueheadFSR ;and store return
;******************************************************************** ;* LCDBYTE - Sends 2 digit hex and char to LCD * ;* This routine splits the character into the upper and lower * ;* hex nibbles, and sends them to the LCD, together with the char * ;* or description * ;********************************************************************
;need to first send DD address to display ;Note that once a byte has been sent to the LCD, time is not a major factor ;as any subequent bytes sent have to wait til LCD not busy (>40us)
LCDBYTE movlw 0x02 addwf LCDDDADDR, W ;move DD address movwf LCDDDADDR ;store the address ;andlw b'00111111' addlw -0x028 ;this is the same as subtract 28 btfss STATUS, C ;if result +ve, correct address now ; in W movf LCDDDADDR, W ;else reload address movwf LCDDDADDR ;store the address again incase of ; addresss wrap-around addlw b'10000000' ;set cmd to addr call SEND_CMD_W ;LCD cursor now in correct position, now send space movlw ENTRY_INC_S ;switch on shifting call SEND_CMD_W ;movlw ' ' ;call SEND_CHAR_W ;now calculate the upper and lower hex digits swapf outbyte, W
Circuitos Integrados Programables Juan Antonio Barrios Huzar 111 andlw b'00001111' addlw -10 ;is it A to F hex btfsc STATUS, C addlw 0x07 ;gap of seven between 9 and A addlw 58 ;set to correct ascii including ; the 10 took off before call SEND_CHAR_W movf outbyte, W andlw b'00001111' addlw -10 ;is it A to F hex btfsc STATUS, C addlw 0x27 ;gap of seven between 9 and a (lower case) addlw 58 ;set to correct ascii including ; the 10 took off before call SEND_CHAR_W ;movlw ',' ;call SEND_CHAR_W ; OK top line done, now to setup for bottom line movf LCDDDADDR, W addlw b'11000000' ;set cmd to addr call SEND_CMD_W movlw ENTRY_INC ;switch off shifting call SEND_CMD_W movf tempone, W ;send the chars to the display call SEND_CHAR_W movf temptwo, W call SEND_CHAR_W movf tempthree, W call SEND_CHAR_W ;movlw ',' ;call SEND_CHAR_W return
;*************************************************************************** ; ; DO_LOOKUP interpretes the char, putting 3 characters into temps 1,2,3 ;
DO_LOOKUP movlw ' ' ;fill first char with spaces movwf tempone ;don't use wait routine until movwf tempthree ;chars gone to the display movf CHAR, W sublw 0x84 btfss STATUS,C goto codebyte
movf CHAR, W call LO_TABLE iorlw b'00000000' ;just to get a zero flag on w = 0
Circuitos Integrados Programables Juan Antonio Barrios Huzar 112 btfsc STATUS, Z return movwf temptwo ;assume it is an ASCII chr ;movwf tempthree andlw b'11110000' ; check if it is 8X or 9Xh xorlw b'10010000' ; check 9Xh first btfss STATUS, Z goto NOTKPNUM ;this routine converts KEYPAD NUMBERS movlw 'K' movwf tempone ;movlw 'P' ;movwf temptwo movlw b'01100000' ;9Xh - 6Xh =3Xh = ASCII char subwf temptwo, F return NOTKPNUM xorlw b'00010000' ; then 8Xh btfss STATUS, Z goto NOTFKEY movlw 'F' movwf tempone movf temptwo, W addlw -0x08A btfss STATUS, C ;skip if number is less than 8A goto Flessthan10 addlw d'48' movwf temptwo ;movlw '1' ;movwf temptwo return
Circuitos Integrados Programables Juan Antonio Barrios Huzar 114 ; The LO scancode convertion table ; ; The PIC is ideal for these convertions as no pre-processing is required if ; you can survive a table 256 locations big. All scancodes requiring ; extra processing have a GOTO in the table instead of a RETLW ; CBLOCK 0x81 SC_keyF1, SC_keyF2 SC_keyF3, SC_keyF4 SC_keyF5, SC_keyF6 SC_keyF7, SC_keyF8 SC_keyF9, SC_keyF10 SC_keyF11, SC_keyF12 ; 81h - 8Ch ENDC CBLOCK 0x90 SC_KP_0, SC_KP_1 SC_KP_2, SC_KP_3 SC_KP_4, SC_KP_5 SC_KP_6, SC_KP_7 SC_KP_8, SC_KP_9 ; 90h - 99h ENDC
Circuitos Integrados Programables Juan Antonio Barrios Huzar 123 decfsz tempone, F goto ldloop1 return
endif
ifdef INCSHORTDELAY
shortdelay movwf tempone sdloop decfsz tempone, F goto sdloop return
endif
LM0321.h
nolist ;****************************************************************************** ; ; This is the custom Header File for LM032L LCD ; PROGRAM: LM032l.H ; Revision: 9-10-95 ; ;****************************************************************************** ;TEMP EQU 0x035 ; Temporary register ;CHAR EQU 0x036 ; Temporary register, Holds value to send to LCD module. ; ; ; LCD Module commands ; ;CLR_DISP - clears all display, and cursor home to addr 0 CLR_DISP EQU 0x001 ; Clear the Display
;RTN_HOME - cursor home and display unshifted, DDRAM unchanged RTN_HOME EQU 0X002
;ENTRY_... - sets entry mode, S = display shift on, INC / DEC cursor move dir ENTRY_DEC EQU 0x004 ; ENTRY_DEC_S EQU 0x005 ; ENTRY_INC EQU 0x006 ; ENTRY_INC_S EQU 0x007 ;
;DISP_... - Display on / off control, C = cursor ON, B = chr pos blink DISP_OFF EQU 0x008 ; Display off DISP_ON EQU 0x00C ; Display on DISP_ON_C EQU 0x00E ; Display on, Cursor on DISP_ON_BC EQU 0x00F ; Display on, Cursor on, Blink cursor
Circuitos Integrados Programables Juan Antonio Barrios Huzar 124 ;SHIFT_... - Cursor & Display shift, S = Display, C = cursor, L = Left, R = Right SHIFT_C_L EQU 0x010 SHIFT_C_R EQU 0x014 SHIFT_S_L EQU 0x018 SHIFT_S_R EQU 0x01C
;FUNC_... - Function set, ( 4 bit, 2 lines, 5 x 7 dots) FUNC_SET EQU 0x028
; CURS_RGT EQU 0x093 DD_RAM_ADDR EQU 0x080 ; Least Significant 7-bit are for address DD_RAM_UL EQU 0x080 ; Upper Left coner of the Display ;