Vous êtes sur la page 1sur 29

1

Microcontroladores PIC
Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro trabajo, en nuestra casa y en nuestra vida, en general. Se pueden encontrar controlando el funcionamiento de los mouses y teclados de los computadores, en los telfonos, en los hornos microondas y los televisores de nuestro hogar. Los microcontroladores hicieron su aparicin a principio de los 80 y se trata de un circuito integrado programable que contiene toda la estructura (arquitectura) de una microcomputadora. Es decir que, dentro de un microcontrolador podemos encontrar: una CPU (Unidad Central de Proceso) Memoria RAM Memoria ROM

Memoria EEPROM (Memoria de lectura y escritura no voltil, es decir, que no se pierden los datos cuando el circuito es desconectado) Puertos de Entrada/Salida (Pines de E/S)

Muchos modelos de microcontroladores incorporan distintos mdulos perifricos, como pueden ser; conversores analgico/digital (A/D), mdulos PWM (control por ancho de pulso), mdulos de comunicaciones seriales o en paralelo, y ms. Todo esto lo podemos encontrar dentro del mismo circuito integrado. Cada vez existen ms productos que incorporan microcontroladores con el fin de aumentar sustancialmente sus prestaciones, reducir su tamao y costo, mejorar su confiabilidad y disminuir el consumo de energa.

Diferencia entre microprocesador y microcontrolador.


El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (CPU), tambin llamada procesador, de un computador. La CPU est formada por la Unidad de Control, que interpreta las instrucciones, y el Camino o BUS de Datos, que las ejecuta. Las patitas de un microprocesador sacan al exterior las lneas de sus buses de direcciones, datos y control, para permitir conectarle con la Memoria y los Mdulos de E/S y configurar un computador implementado por varios circuitos integrados. Se dice que un microprocesador es un sistema abierto porque su configuracin es variable de acuerdo con la aplicacin a la que se destine.

Estructura de un sistema abierto basado en un microprocesador. La disponibilidad de los buses en el exterior permite que se configure a la medida de la aplicacin.

Microcontroladores Pic.Prof. Horacio Prior

2 Si slo se dispusiese de un modelo de microcontrolador, ste debera tener muy potenciados todos sus recursos para poderse adaptar a las exigencias de las diferentes aplicaciones. Esta potenciacin supondra en muchos casos un despilfarro. En la prctica cada fabricante de microcontroladores oferta un elevado nmero de modelos diferentes, desde los ms sencillos hasta los ms poderosos. Es posible seleccionar la capacidad de las memorias, el nmero de lneas de E/S, la cantidad y potencia de los elementos auxiliares, la velocidad de funcionamiento, etc. Por todo ello, un aspecto muy destacado del diseo es la seleccin del microcontrolador a utilizar.

El microcontrolador es un sistema cerrado. Todas las partes del computador estn contenidas en su interior y slo salen al exterior las lneas que gobiernan los perifricos.

Introduccin a los microcontroladores PIC


Existe una gran cantidad de modelos de microcontroladores cuyas caractersticas y prestaciones varan de un modelo a otro. De esta manera los desarrolladores pueden seleccionar el modelo que mejor se ajuste a sus necesidades. Los distintos modelos de microcontroladores se agrupan por familia. Una familia puede estar formada por un conjunto de modelos cuyas caractersticas y prestaciones son bastante similares. Cuando compramos un microcontrolador, la memoria del mismo encuentra vaca y para que funcione es necesario que sea programado, es decir que, el desarrollador debe escribir un programa que contenga todos los procesos que el microcontrolador debe ejecutar. Este programa se escribe en un lenguaje llamado assembler (ensamblador) cuya principal caracterstica es su alta complejidad ya que se trata de un lenguaje de bajo nivel, es decir, que se encuentra ms cercano al lenguaje de la mquina que del Un lenguaje de bajo nivel se lenguaje humano. encuentra mas cercano al Por esto, slo los tcnicos altamente capacitados estn en lenguaje de la mquina que al condiciones de realizar desarrollos electrnicos que lenguaje humano. incluyan microcontroladores. Incluso a stos especialistas les implica un gran esfuerzo intelectual y mucho tiempo de desarrollo.

Estructura de un microcontrolador
Bsicamente, un microcontrolador esta compuesto por los siguientes componentes: Procesador o CPU (del ingls Central Processing Unit o Unidad Central de Proceso). Memoria para el programa tipo ROM. Memoria RAM para contener los datos. Lneas de E/S para comunicarse con el exterior.

Microcontroladores Pic.Prof. Horacio Prior

3 Diversos mdulos para el control de perifricos (temporizadores, Puertas Serie y Paralelo, CAD: Conversores Analgico/Digital, CDA: Conversores Digital/Analgico, etc.).

El procesador o CPU
Es el elemento ms importante del microcontrolador y determina sus principales caractersticas, tanto a nivel hardware como software. La CPU (Central Processing Unit o Unidad Central de Proceso) se encarga la decodificacin y ejecucin del programa. Actualmente, existen 3 tipos de arquitectura de procesadores: CISC (Computadores de Juego de Instrucciones Complejo): Disponen de ms de 80 instrucciones en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecucin. Una ventaja de los procesadores CISC es que ofrecen instrucciones complejas que actan como macros. RISC (Computadores de Juego de Instrucciones Reducido): En estos procesadores el repertorio de instrucciones es muy reducido y las instrucciones son simples y generalmente se ejecutan en un ciclo. La ventaja de stos es que la sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. SISC (Computadores de Juego de Instrucciones Especfico): En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, adems de ser reducido, es "especfico", o sea, las instrucciones se adaptan a las necesidades de la aplicacin prevista.

Los Microcontrolodares PIC, y en particular, el 16F84, cuenta con arquitectura RISC

Memoria ROM
La memoria ROM es una memoria no voltil, es decir, que no se pierden los datos al desconectar el equipo y se destina a contener el programa de instrucciones que gobierna la aplicacin. Los microcontroladores disponen de capacidades de ROM comprendidas entre 512 bytes y 8 k bytes. Existen distintos tipos de memorias ROM, la cual determinar la aplicacin del microcontrolador. ROM con mscara: Es una memoria no voltil de slo lectura cuyo contenido se graba durante la fabricacin del chip. El elevado costo del diseo de la mscara slo hace aconsejable el empleo de los microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades. OTP: El microcontrolador contiene una memoria no voltil de slo lectura "programable una sola vez" por el usuario. OTP (One Time Programmable). Es el usuario quien puede escribir el programa en el chip mediante un sencillo grabador controlado por un programa desde una PC. La versin OTP es recomendable cuando es muy corto el ciclo de diseo del producto, o bien, en la construccin de prototipos y series muy pequeas. Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptacin mediante fusibles para proteger el cdigo contenido. EPROM: Los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabacin se realiza, como en el caso de los OTP, con un grabador gobernado desde un PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cpsulas son de material cermico y son ms caros que los microcontroladores con memoria OTP que estn hechos con material plstico. EEPROM: Se trata de memorias de slo lectura, las cuales se puede escribiri y borrar elctricamente. EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programacin como el borrado, se realizan elctricamente desde el propio grabador y bajo el control programado de un PC. Es muy cmoda y rpida la operacin de grabado y la de borrado. No Microcontroladores Pic.Prof. Horacio Prior

4 disponen de ventana de cristal en la superficie. Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito. Para ello se usan "grabadores en circuito" que confieren una gran flexibilidad y rapidez a la hora de realizar modificaciones en el programa de trabajo. El nmero de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramacin continua. Son muy idneos para la enseanza y la Ingeniera de diseo. Se va extendiendo en los fabricantes la tendencia de incluir una pequea zona de memoria EEPROM en los circuitos programables para guardar y modificar cmodamente una serie de parmetros que adecuan el dispositivo a las condiciones del entorno. Este tipo de memoria es relativamente lenta. FLASH: Se trata de una memoria no voltil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es ms pequea. A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es ms rpida y de mayor densidad que la EEPROM. La alternativa FLASH est recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no voltil. Es ms veloz y tolera ms ciclos de escritura y borrado.

Memoria RAM
La memoria RAM es una memoria voltil, es decir, que se pierden los datos al desconectar el equipo, y se destina a guardar las variables y los datos. Los microcontroladores disponen de capacidades de RAM comprendidas entre 20 y 512 bytes.

Registros y Bits
Un registro es una posicin de memoria en la cual se puede almacenar un dato. Es decir que la memoria esta dividida en pequeas partes llamadas Registros. Dentro de la memoria, cada registro se identifica mediante un nmero, el cual se denomina Direccin de memoria y generalmente est expresado en formato Hexadecimal. El primer registro de una memoria corresponde a la direccin 00H. Dado que identificar a cada registro mediante un nmero hexadecimal puede resultar muy complejo a la hora de disear el programa, existe la posibilidad de asignar un nombre a una direccin de registro. En general, este nombre est directamente relacionado con la funcin que cada registro cumple dentro del sistema. Los registros no solo son utilizados por el programador (usuario) para almacenar los datos que la aplicacin debe procesar, sino que, adems, sirven para controlar todo el funcionamiento del microcontrolador en su conjunto. Esta funcin, la cumple un conjunto de registros que ya vienen Predefinidos desde la fabrica. Es decir, que el fabricante asigna las funciones de configuracin y control del microcontrolador en un grupo de registros y el usuario no puede modificar la funcin que cumple cada uno de stos. Cada Registro est dividido en 8 partes a los cuales se los denomina Bits. Entonces podemos decir que un Registro esta formado por un conjunto de 8 bits.
La palabra BIT proviene de la contraccin de las palabras Binary Digit.

El Bit es la menor unidad de informacin que un sistema digital puede procesar y solo puede contener los valores lgicos 0 y 1. Los sistemas digitales representan la informacin en forma de bits porque sus circuitos slo pueden tener 2 estados: encendido o apagado. Microcontroladores Pic.Prof. Horacio Prior

5 En general podemos decir que: 1 = Encendido = Verdadero = SI = +5V 0 = Apagado = Falso = NO = 0V Cada Bit se identifica por la posicin que ocupa dentro del registro, siendo el primer Bit el nmero 0, que es el que se encuentra en el extremo derecho del registro.

Al igual que los registros, se puede asignar un nombre a cada Bit para facilitar su identificacin. En un registro podemos almacenar una combinacin 8 ceros y unos. Esto nos da una cantidad de 2^8 combinaciones, es decir, 256 posibles combinaciones de ceros y unos. Esto significa que un registro puede procesar valores entre 0 y 255.
Esta caracterstica de procesar nmeros (Dgitos) es lo que da el nombre a la Electrnica Digital. La electrnica digital procesa nmeros formados por combinaciones de ceros y unos. Cualquier seal analgica debe ser digitalizada, es decir, convertida a nmeros, para poder ser procesada en un sistema digital.

Podemos decir que el conjunto de ceros y unos almacenados en un registro se trata de un nmero entre 0 y 255, expresado en sistema Binario, esto es, en base 2. Para interpretar dicho nmero debemos realizar el clculo de conversin de base para poder expresarlo en sistema decimal. El siguiente ejemplo muestra el desarrollo de un clculo de conversin de base de sistema binario (base 2) a sistema decimal (base 10):

Se llama Peso Binario al valor que representa un Bit segn la posicin que ocupa dentro del registro. El Bit que est ubicado ms hacia la derecha del registro, es el Bit menos significativo (LSB, Least Significant Bit) y tiene un peso de 20=1. El Bit del extremo izquierdo del registro es el Bit ms significativo (MSB, Most Significant Bit) y tiene un peso de 27=128.

Los pesos binarios crecen de derecha a izquierda en potencias de 2.

Microcontroladores Pic.Prof. Horacio Prior

Una manera de simplificar el clculo de conversin de binario a decimal, es, directamente sumar los valores de los pesos binarios de los bits cuyo valor sea 1.

El sistema hexadecimal es un sistema en base 16 y consta de 16 dgitos diferentes que son: del 0 al 9 y luego de la letra A a la F, es decir, 10 dgitos numricos y seis caracteres alfabticos. El sistema hexadecimal se usa como forma simplificada de representacin de nmeros binarios y debido a que 16 es una potencia de 2 (2^4=16), resulta muy sencilla la conversin de los nmeros del sistema binario al hexadecimal y viceversa. Mediante el sistema hexadecimal podemos representar un valor numrico de 8 bits utilizando slo 2 dgitos. De sta manera estamos dividiendo el registro de 8 bits en 2 partes de 4 bits cada una llamada Nibble. Al nibble correspondiente a los 4 bits menos significativos, se lo denomina Nibble Bajo y al nibble correspondiente a los 4 bits ms significativos se lo denomina Nibble Alto.

El sistema hexadecimal es utilizado para identificar las direcciones de registros de las memorias en sistemas digitales porque permite representar el valor de un Nibble con slo 1 digito, ya que: Esto permite representar nmeros grandes utilizando unos pocos dgitos. Por ejemplo:

Microcontroladores Pic.Prof. Horacio Prior

7 En la programacin de microcontroladores, es habitual utilizar los 3 sistemas de numeracin (Binario, Decimal y Hexadecimal) dependiendo del proceso que deseamos realizar. Por eso es fundamental tener claros estos conceptos.

Lneas de Entrada/Salida (E/S)


Los microcontroladores cuentan con una serie de pines destinados a entrada y salida de datos o seales digitales. A estos pines se les denomina Puerto. Como mencionamos anteriormente, todo el funcionamiento del microcontrolador est controlado a travs de los registros. Los puertos no son la excepcin, tambin estn controlados por los registros. Por esto, un puerto no puede estar formado por ms de 8 pines; 1 Pin por cada Bit de un registro. Un puerto si puede estar formado por menos de 8 pines. Un microcontrolador puede contener varios puertos dependiendo del modelo. A cada puerto se lo identifica con una letra. Por ejemplo; Puerto A, Puerto B, etc. Para poder utilizar un puerto, primero el mismo debe ser configurado. Cada pin de un puerto puede ser configurado como entrada o salida independientemente del resto de los pines del mismo puerto.

Mdulos Temporizadores Internos (TMRs)


Un temporizador interno (TMR) es un mdulo de hardware incluido en el mismo microcontrolador el cual est especialmente diseado para incrementar automticamente el valor de un registro asociado al TMR cada vez que el mdulo TMR recibe un pulso. A este pulso se lo llama seal de reloj. El mdulo TMR siempre incrementa el valor del registro asociado, nunca decrementa dicho valor. Algunos microcontroladores pueden incluir ms de un mdulo TMR y la seal de reloj de cada uno de stos puede ser de origen interno o externo. Si el origen de la seal de reloj est configurado como externo, el mdulo temporizador puede ser utilizado como un contador de eventos externos, incrementando el TMR con cada pulso recibido mediante el pin correspondiente. Si el origen de la seal de reloj es interno, el TMR incrementa con cada ciclo del oscilador. Esto permite utilizar el temporizador como contador de ciclos de programa, donde, un ciclo corresponde al tiempo de ejecucin de una instruccin, lo cual se puede calcular con la siguiente frmula = ( 1 / ( Frec. Osc. / 4) ). Donde Frec. Osc. es la frecuencia del oscilador utilizado. Dado que la velocidad de ejecucin del microcontrolador corresponde a de la velocidad del cristal utilizado, cada ciclo de programa se ejecuta en un tiempo determinado segn el cristal que estemos utilizando. Por ejemplo; con un cristal de 4Mhz la velocidad real de procesamiento del microcontrolador es de 1 Mhz. Aplicando la frmula = 1 / (4.000.000 / 4) 1 / 1.000.000 0.000001 = 1 uS (microsegundo) Microcontroladores Pic.Prof. Horacio Prior

8 Esto significa que cada ciclo de programa se ejecuta a 1/1.000.000 (1 uS) y dado que cada incremento del TMR corresponde a un ciclo de programa, si contamos los incrementos de un TMR, indirectamente podremos calcular el tiempo transcurrido. El incremento del TMR se realiza de manera automtica y de forma paralela a la ejecucin del resto del programa. Esto significa que el programa no debe controlar el incremento del TMR, lo cual s debe realizarse en las temporizaciones por bucles, en las cuales el microcontrolador se queda esperando a que transcurra un tiempo, y no pueden ejecutarse otras tareas mientras no finalice la temporizacin. Entonces el TMR puede ser utilizado como temporizador mientras el microcontrolador ejecuta otros procesos. Por ejemplo: si diseamos un programa que encienda y apague un led cada 1 segundo, el microcontrolador enciende el led y luego puede ocuparse de esperar a que transcurran los ciclos correspondientes a 1 segundo, luego apaga el led y continua esperando. Pero si el microcontrolador debe realizar alguna otra tarea adems de temporizar, por ejemplo, mostrar valores en dgitos de 7 segmentos, el micro no puede quedarse temporizando por bucles ya que mientras se encuentre temporizando no podr realizar el proceso de muestreo de los datos en los displays, y como resultado tendremos que los displays se apagan mientras el microcontrolador se encuentra temporizando. En este caso, se utiliza un TMR para realizar la temporizacin mientras el microcontrolador se ocupa de mostrar los datos en los displays. En general los microcontroladores cuentan con una interrupcin por desbordamiento del TRM, es decir que, el microcontrolador se interrumpe cuando el TMR0 pasa de 255 (B11111111) a 0 (B00000000) en los temporizadores de 8 bits y cuando pasa de 65535 (B11111111_111111) a 0 (B00000000_00000000) en los temporizadores de 16 bits. Dado que 256 uS es un tiempo relativamente corto (para un TMR de 8 bits a 4 Mhz), existe la posibilidad de preescalar el TMR0 para que el registro asociado al TMR se incremente cada 2, 4, 8,o ms ciclos. De esta manera, estamos multiplicando la cantidad de ciclos que deben ejecutarse para realizar un incremento del TMR. Al prescalador tambin se lo denomina predivisor. Por ejemplo, con un predivisor de 8, cada incremento del TMR se realiza cada 8 ciclos de programa y el desbordamiento del TMR se realizara cada 2048 ciclos (255 incrementos * 8 ciclos). As podemos realizar interrupciones con periodos de tiempo mayores.

Utilizando un Microcontrolador
Como mencionamos anteriormente, el microcontrolador tiene una memoria de programa, donde grabamos las instrucciones necesarias para que el micro realice el trabajo que necesitamos. Cuando compramos un microcontrolador, la memoria de programa viene vaca. Para que un microcontrolador funcione es necesario programarlo. Los microcontroladores se programan en un lenguaje de programacin llamado Ensamblador (en ingls Assembler) cuya principal caracterstica es su altsima complejidad. Los lenguajes de programacin se clasifican segn el Nivel de programacin en: Lenguaje de Alto Nivel: permite que los algoritmos se expresen en un nivel y estilo de escritura fcilmente legible y comprensible por el hombre. En la actualidad se trata de lenguajes de tipo visual. Lenguaje de Bajo Nivel: el usuario se acerca un poco ms al lenguaje de maquina. Permiten un acceso ms amplio al control fsico de la maquina (hardware). Microcontroladores Pic.Prof. Horacio Prior

9 Lenguaje Ensamblador: Podramos considerarlo el lenguaje de ms bajo nivel. El usuario escribe cdigo en el mismo idioma del procesador. Se tiene control total del sistema. Es necesario un conocimiento de la arquitectura mecnica del procesador para realizar una programacin efectiva. El lenguaje de programacin es muy especifico para cada modelo de procesador, incluso puede variar de un modelo a otro de procesador dentro de un mismo fabricante.

Podemos decir que los lenguajes de alto Nivel se asemejan ms al lenguaje humano y que los lenguajes de bajo Nivel se asemejan ms al lenguaje de mquina y en el lenguaje ensamblador el usuario debe programar en el propio idioma del procesador.

El microcontrolador slo entiende de nmeros, es decir que, el cdigo assembler (texto) no puede ser procesado directamente por el microcontrolador. Para poder grabar el programa en el micro, primero debemos convertir el texto del cdigo assembler a nmeros, en general, en formato hexadecimal. A este proceso se le llama Compilacin. Una vez desarrollado el cdigo assembler, debemos compilarlo. Esto se realiza con un software compilador el cual se puede obtener de manera gratuita desde la pgina web del fabricante del microcontrolador. El archivo compilado tiene una extensin .hex. Por ltimo, despus de compilado, el programa est listo para ser grabado al microcontrolador. Esto realiza mediante una placa programadora. A sta placa programadora, comnmente se la llama programador. Existen distintos tipos de programadores los cuales pueden ser para conectar a la PC mediante el puerto Serie (COM) o Paralelo (LPT). Cada programador trabaja en conjunto con un software, mediante el cual se realiza el proceso de lectura y escritura de los microcontroladores. A continuacin se presenta un resumen del proceso de desarrollo del cdigo y grabacin de un microcontrolador: 1) Escribir el cdigo assembler. Se genera un archivo con extensin ASM. 2) Compilar el cdigo assembler. Se genera un archivo con extensin HEX. 3) Grabar (transferir) el programa desde la PC al microcontrolador mediante un programador. De estos 3 pasos, el primero insume el 98 % de tiempo y esfuerzo y es aqu donde Niple le ofrece sus ventajas. Microcontroladores Pic.Prof. Horacio Prior

10

Estructura del PIC 16F84


Inicialmente todos los microcontroladores incorporaron la arquitectura de Von Neumann, la cual se caracteriza por disponer de una sola memoria principal donde se almacenan los datos y las instrucciones. A esta memoria se accede a travs de un sistema de buses nico (direcciones, datos y control).

Los microcontroladores PIC 16F84, al igual que el resto de los microcontroladores de la actualidad, estn diseados con la arquitectura Harvard. La arquitectura Harvard dispone de dos memorias independientes; una que contiene slo instrucciones, y otra donde se almacenan los datos. Ambas memorias cuentan con sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultneamente en ambas memorias.

La arquitectura Harvard dispone de dos memorias independientes para datos y para instrucciones, permitiendo accesos simultneos.

Los microcontroladores PIC responden a la arquitectura Harvard.

Organizacin de la Memoria
En el PIC16F84A existen dos bloques de memoria. Estos son la memoria del programa y la memoria de datos. Cada bloque posee su propio bus, de tal forma que el acceso a cada uno puede producirse durante el mismo ciclo del oscilador. La memoria de datos puede dividirse ms an en la RAM de fines generales y los Registros de Funciones Especiales (SFR). El rea de la memoria de datos contiene tambin los datos de la memoria EEPROM. Esta memoria no est directamente introducida en la memoria de datos, sino que es registrada en forma indirecta. Esto significa que un puntero indirecto de direcciones especifica la direccin de la memoria de datos EEPROM para escribir y leer. Microcontroladores Pic.Prof. Horacio Prior

11 Los 64 bytes de la memoria de datos EEPROM poseen el rango de direcciones de 0h a 3Fh.

Organizacin de la Memoria de Programas


. El PIC16FXX posee un contador de programas de 13 bits capaz de direccionar un espacio de memoria de programas de 8k x 14. Para el Pic16F84A, los primeros 1k x 14 (0000h-03FFh) estn fsicamente implementados como vemos en la figura.

Tal como se muestra, el acceso a una locacin por encima de la direccin fisicamente implementada, causar un plegado. Por ejemplo, las locaciones 20h, 420h, 820h, C20h, 1020h,1420h, 1820h y 1C20h tendrn la misma instruccin. El vector de reset est en 000h y el vector de interrupt en 0004h. Nota: Como puede observar, estamos repitiendo algunos conceptos; esto lo hacemos porque tratamos de ver un tema desde distintos puntos de vista con el objeto de facilitar el aprendizaje.

Organizacin de la Memoria de Datos.


La memoria de datos est repartida en dos reas. El primero es el rea de Registros de Funciones especiales (SFR), mientras que el segundo es el Registro de Fines Generales (GPR). Los registros SFR controlan el funcionamiento del dispositivo. Partes de la memoria de datos estn colocados en bancos. Esto es vlido tanto para el rea de SFR como para el rea GPR. El rea de GPR es apilado para permitir ms que 116 bytes de RAM de uso general. Las reas de apilados del SFR se destinan a los registros que controlan las funciones perifricas. El apilado requiere el uso de bits de control para la seleccin de bancos. Estos bits de control se encuentran en el registro de STATUS. La figura muestra la organizacin del mapa de datos de la memoria. Las instrucciones MOVWF y MOVF permiten mover valores del registro W hasta cualquier locacin en el archivo de registros ( F ) y viceversa. Se puede acceder a la memoria de datos entera en forma directa usando la direccin absoluta de cada registro o en forma indirecta mediante el Registro de Seleccin de Archivos (FSR). El direccionamiento indirecto usa el bit RP0 para acceder a las reas apiladas de la memoria de datos. La memoria de datos est dividida. en dos bancos que contienen los registros de uso general y los registros de funciones especiales. El Banco 0 es seleccionado eliminando el bit RP0 (STATUS<5>). El ajuste del bit RP0 selecciona el Banco 1. Cada Banco se extiende hasta 7Fh (128 bytes). Las primeras doce locaciones de cada Banco estn reservadas para los Registros de Funciones Especiales (SFR). El resto son Registros de Uso general implementados como RAM.

Microcontroladores Pic.Prof. Horacio Prior

12

Microcontroladores Pic.Prof. Horacio Prior

13

Caractersticas tcnicas del PIC 16F84 Voltaje de alimentacin: 5VCC. CPU RISC Circuito Integrado de 18 pines. 13 Pines de configurables como Entrada o Salida. Frecuencia operacin mxima: 10 Mhz. Memoria Flash: 1 Kbytes Memoria de Datos: 68 bytes Memoria de Datos EEPROM: 64 bytes Microcontroladores Pic.Prof. Horacio Prior

14 1 Temporizador interno de 8 bits. 4 Interrupciones.

Como mencionamos anteriormente, para que un microcontrolador funcione es necesario grabarle un programa en su interior. Este programa ser ledo y ejecutado lnea a lnea por la CPU. Para que la CPU funcione, debe contar con un generador de impulsos de reloj externo que sincroniza el funcionamiento de todo el sistema. Como origen de la seal de reloj externa se utiliza un cristal. El microcontrolador ejecuta cada instruccin (1 ciclo de programa) a de la velocidad del cristal utilizado. En general, un ciclo de programa corresponde a una lnea de cdigo assembler. Por ejemplo, si utilizamos un cristal de 4 Mhz, el microcontrolador estar ejecutando el cdigo a una velocidad de 1 Mhz. Es decir que, ejecutar 1.000.000 de lneas de cdigo del programa por segundo. Por lo tanto, cada lnea de cdigo se ejecutar en 1 microsegundo (1/1.000.000 Seg.). Lo microcontroladores de la lnea 16F6xx pueden ser configurados para que el origen de la seal de reloj sea a trabes de un oscilador interno. Con esto, puede prescindir del oscilador externo y utilizar los pines correspondientes a la entrada del oscilador como pines E/S. Dado que el oscilador interno no es tan preciso como un cristal, un microcontrolador configurado con para ejecutar con oscilador interno puede tener un error importante en las temporizaciones.

Conexionado del PIC 16F84

Los Puertos del PIC 16F84


Los microcontroladores PIC 16F84 disponen de 2 puertos denominados Puerto A y Puerto B de 5 y 8 pines respectivamente, los cuales pueden ser configurados como Entrada o Salida. La configuracin de los puertos se realiza mediante los registros TRISA y TRISB, y por medio de los registros PORTA y PORTB se accede directamente a cada uno de los pines de los puertos.

Microcontroladores Pic.Prof. Horacio Prior

15

Juego Reducido de Instrucciones (RISC) de los PIC.


Como se indica es un juego reducido de instrucciones slo son 35, as que, no nos resultar demasiado complicado manejar estas pocas instrucciones, aunque es cierto que no es necesario retener en la memoria qu hace cada una, esto resultara una extrema labor para cualquiera de nosotros y no es esto lo que se pretende, se trata de disponer de una referencia a la que acudir, en caso de dudas y continuar con nuestro trabajo que es la programacin. Para lograr cierta soltura a la hora de programar, es muy conveniente realizar cuantas ms practicas mejor, slo con la practica se puede lograr la agilidad en cualquier disciplina. Una forma de familiarizarse con las instrucciones que aqu se describen, es utilizar las libreras de rutinas y tratar de comprender el motivo por el que se ha usado cierta instruccin y no otra que se nos haya ocurrido. Por cierto, es interesante usar las rutinas que se entregan y procurar adaptarlas a las caractersticas y circunstancias que nos convengan en cada aplicacin, el motivo es que estas rutinas sabemos que funcionan por lo tanto ser mejor aprovechar un trabajo hecho y comprobado frente al riesgo de la aventura. Y sin ms prembulos empecemos con las instrucciones.
ADDLW ADDWF ANDLW ANDWF BCF BSF BTFSC BTFSS CALL CLRF CLRW CLRWDT COMF DECF DECFSZ GOTO INCF INCFSZ IORLW IORWF MOVF MOVLW MOVWF NOP OPTION RETFIE RETLW RETURN RLF RRF SLEEP SUBLW SUBWF SWAPF TRIS XORLW XORWF

NOTACIN PARA NMEROS Siempre depender de la herramienta en uso, normalmente se usa lo que sigue: Microcontroladores Pic.Prof. Horacio Prior

16

Decimal : '100D' .100 Hexadecimal : '64H' 0x64 64h Octal : '144O' o 144O Binario : '01101100b' ASCII : 'C'

NOTACIN PARA REGISTROS Y LITERALES


w : Registro W, es el registro de trabajo, similar al acumulador. f : Campo de 5 bits (fffff),contiene la direccin del banco de registros, que ocupa el banco 0 del rea de datos. Direcciona uno de esos registros. k : Representa una constante de 8 bits. d : Bit del cdigo OP de la instruccin. Si d=0, el destino es W, y si d=1 el destino es f. O sea, en la instruccin se selecciona el destino donde se guarda el resultado de la operacin. b : Determina la posicin de un bit dentro de un registro de 8 bits, (o sea, tomar valores entre 0 y 7)

FLAGS Los Flags o banderas son marcadores, representados por bits dentro del registro STATUS, y son resaltados en la tabla siguiente:
PA2

PA1 -

PA0 -

TO# -

PD# -

Z X

DC X

C X

Z : Flag (bandera) Zero, se pone a 1 cuando una operacin lgica o aritmtica da 0 (cero) como resultado. En cualquier otro caso se pone a 0. C : Flag (bandera) Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de representacin del procesador, en nuestro caso es de 8 BIT's, de esta manera si sumamos a 11111111b un 00000011b el resultado sera 00000010b mas 1 y el Bit Carry pasara a 1 para advertir de esta circunstancia. En otras palabras, cuando se rebasa la cuenta de 255 y pasa por 0 en la cuenta el Bit Carry se pone a 1. DC : Flag carry del nibble inferior, este se comporta igual que el Bit Carry, solo que el lmite de representacin son los 4 bits inferiores, de esta manera si tenemos 00001111b (0Fh) y sumamos 00000111b (07h), el resultado ser 00010110b y el Bit DC se pone a 1, el Bit Carry estar a 0 al no superarse los 8 bits y el Bit Z a 0 al ser el nmero diferente de 0.

Procure entender y no le queden dudas respecto a los FLAGS, stos conceptos son esenciales, no obstante ya se aclararn en la medida que vaya avanzando en los artculos que siguen. Sobre todo se recomienda que revise los estados de los registros mediante herramientas como MPASM, cuando lea el artculo sobre el uso de esta herramienta que de uso libre, se aclararn las posibles dudas. NIBBLES Todos los registros del F84 y el ' 508A comprenden 8 "celdas" en las que se coloca un 'cero' o un 'uno'. Las ocho celdas se separan en dos grupos llamados Nibbles (niveles), uno superiores de 4 celdas (Nibble Alto) y otro inferiores de 4 celdas (Nibble Bajo).
N Bit Registro 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 0

Microcontroladores Pic.Prof. Horacio Prior

17
Instruccin Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera ADDLW ADDLW k 11 111x ADD Literal to W kkkk kkkk ADDWF ADD W to F ADDWF f,d 0001 11bf ffff 00 0111 dfff ffff 1/1 W .+ f -> f si d=1 W + f -> W si d=0 TO# PD# Z X DC X C X PA2 PA1 PA0 TO# PD# Z X DC X C X

1/1 W + k -> WW + k -> W W AND f -> W si d=0 PA2 PA1 PA0 -

Descripcin

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. Aade el contenido de W al contenido de k y almacena el resultado en W. ADDLW 0x15h Si antes de la instruccin: W = 10h = 0001 0000 b Al ejecutarse la instruccin: W = 10h + 15h = 25h W = 0001 0000 b + 0001 0101 b = 0010 0101 b ANDLW AND Literal and W ANDLW k 1110 kkkk kkkk 11 1001 kkkk Kkkk 1/1 W AND k -> W PA2 PA1 PA0 TO# PD# Z X DC C -

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. Aade el contenido de W al contenido de f y almacena el resultado en W si d=0 y en f si d=1. ADDWF FSR.0 Si antes de la instruccin: W = 17h y FSR = C2h como d=0 Al ejecutarse: W = 17h + C2h = D9h FSR = C2h

Ejemplo

Instruccin Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera Descripcin Ejemplo

ANDWF AND W with F [Etiqueta] ANDWF f,d 0001 01df ffff 00 0101 dfff ffff 1/1 f entre 0 y 127 b entre 0 y 7 W AND f -> f si d=1 W AND f -> W si d=0 PA2 PA1 PA0 TO# PD# Z X DC C -

Z Se pone a 1 si el resultado de la operacin es cero. Ejecuta un AND lgico entre el contenido de W y el literal k y lo almacena en W. ANDLW 0x5F Si antes de la instruccin W = A3h Al ejecutarse: W = 0101 1111 b AND 1010 0011 b = = 0000 0011b = 03h

Efecta la operacin AND lgico entre el contenido del W y el contenido de f y almacena el resultado en W. Si d = 0 o en f si d =1. Z Se pone a 1 si el resultado de la operacin es 0. ANDWF FSR,1 Si antes de la instruccin. W = 17h = 0001 0111 b y FSR = C2h = 1100 0010 b

Microcontroladores Pic.Prof. Horacio Prior

18
Al ejecutarse: W = 17h = 0001 0111 b FSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02h

Instruccin
Sintaxis

BCF

Bit Clear F

BSF

Bit Set F

[Etiqueta] BCF f,b 0100 bbbf ffff Codificacin 01 00bb bfff ffff f entre 0 y 127 b entre 0 y 7 Palabra/Ciclos 0 -> b(f) Operacin 1/1 Bit de Estado Bandera Descripcin PA2 PA1 PA0 TO# PD# Z DC C -

[Etiqueta] BSF f,b 0100 bbbf ffff 01 11bb bfff ffff f entre 0 y127 b entre 0 y 7 1 -> b(f) 1/1 PA2 PA1 PA0 TO# PD# Z DC C -

Ejemplo

Pone a 0 el bit b del archivo f BCF FLAG_REG,7 Si antes de la instruccin el registro: FLAG_REG = C7h = 1100 0111 b Al ejecutarse la instruccin, el registro queda con valor: FLAG_REG = 47h = 0100 0111b

Pone a 1 el bit b del archivo f Si antes de la instruccin el registro tiene el valor: FLAG_REG = 0Ah = 0000 1010b Al ejecutarse la instruccin, el registro queda con valor: FLAG_REG = 8Ah = 1000 1010 b

Instruccin
Sintaxis

BTFSC

Bit Test, Skip If Clear

BTFSS

Bit Test, Skip If Set

[Etiqueta] BTFSC f,b 0110 bbbf ffff Codificacin 01 10bb bfff ffff Palabra/Ciclos 1/1 o 2 f entre 0 y 127 b entre 0 y 7 Operacin Salta (Skip) si b(f)=0 Bit de Estado Bandera PA2 PA1 PA0 TO# PD# Z DC C -

[Etiqueta] BTFSS f,b 0111 bbbf ffff 01 11bb bfff ffff 1/1 o 2 f entre 0 y 127 b entre 0 y 7 Salta (Skip) si b(f)=1 PA2 PA1 PA0 TO# PD# Z DC C -

Descripcin

Si el bit nmero b del registro f es cero, la instruccin que sigue a sta se ignora (Skip) y se trata como un NOP. En este caso y slo en este caso, la instruccin BTFSC precisa de dos ciclos para ejecutarse.

Si el bit nmero b del registro f es 1, la instruccin que sigue a sta se ignora (Skip) y se trata como un NOP. En este caso y slo en este caso, la instruccin BTFSS precisa de dos ciclos para ejecutarse.

Microcontroladores Pic.Prof. Horacio Prior

19
Aqui BTFSC FLAG,1 FALSE GOTO Process_Code TRUE. Si antes de la instruccin : PC = direccin Aqui Al ejecutarse: if FLAG <1> = 0, PC = direccin TRUE if FLAG <1> = 1, PC = direccin FALSE Aqui BTFSS FLAG,1 FALSE GOTO Process_Code TRUE. Si antes de la instruccin : PC = direccin Aqui Al ejecutarse: if FLAG <1> = 0, PC = direccin FALSE if FLAG <1> = 1, PC = direccin TRUE
CLRF Clear f with f [Etiqueta] CLRF f 0000 011f ffff 00 0001 1fff ffff 1/1 f entre 0 y 127 00h -> f 1 -> Z C PA2 PA1 PA0 TO# PD# Z 1 DC C -

Ejemplo

Instruccin Sintaxis

CALL Subrutina CALL [Etiqueta] CALL k 1001 kkkk kkkk Codificacin 10 0kkk kkkk kkkk Palabra/Ciclos 1/2 k entre 0 y 2047 Para los 16c5X: PC + 1 -> Pila, k -> PC(0-7),0 ->PC(8) Operacin PA2 a PA0 -> PC(9-11) Para los 16c64, 71, 74, 84 PC +1 -> Pila, k -> PC(0-10), PCLATH(3,4) -> PC(11,12) Bit de Estado Bandera Descripcin PA2 PA1 PA0 TO# PD# Z DC -

Guarda la direccin de vuelta en la Pila y despus llama a la subrutina situada en la direccin cargada en el PC. Aqui CALL THERE Si antes de la instruccin: PC = direccin Aqui Al ejecutarse: PC = direccin (THERE) TOS = direccin (Aqui + 1) CLRW Clear register W [Etiqueta] CLRW 0000 0100 0000 00 0001 0000 0011 1/1 00 -> W 1 -> Z PA2 PA1 PA0 TO# PD# Z 1 DC C -

Pone el contenido del registro f a cero y activa el bit [Flag] Z. Z se pone a 1 si el resultado de la operacin es 0.

Ejemplo

CLRF REG Si antes de la instruccin. REG =5Ah Al ejecutarse REG = 00h Flag Z = 1 CLRWDT Clear Watchdog Timer [Etiqueta] CLRWDT 0000 0000 0100 00 0000 0110 0100 1/1 00 -> WDT y 0 -> predivisor del temporizador. Los bits TO# y PD# del registro State se ponen a 1. PA2 PA1 PA0 TO# PD# Z 1 DC C -

Instruccin Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera

Microcontroladores Pic.Prof. Horacio Prior

20
Descripcin Pone el registro W a 00h y pone a 1 el bit [flag] Z, si el resultado de la operacin 0. Pone a 00h el registro WDT, Watchdog, as como el predivisor. TO# y PD# se ponen a 1 cuando se ejecuta la instruccin CLRWDT o SLEEP. TO# se pone a 0 si el temporizador Watchdog se desborda.

Ejemplo

CLRW Si antes de la instruccin. W = 5Ah Al ejecutarse: W = 00h flag Z = 1

CLRWDT Si antes de ejecutarse la instruccin: WDT = ? Al ejecutarse: WDT = 00h Preescaler WDT = 0 bit de estado TO = 1 bit de estado PD = 1

Instruccin
Sintaxis

COMF

Complement F

DECF

Decrement F to F

[Etiqueta] COMF f,d 0010 01df ffff Codificacin 00 1001 dfff ffff Palabra/Ciclos 1/1 si d = 1 ~f -> f f entre 0 y 127 Operacin si d = 0 ~f -> W Bit de Estado Bandera Descripcin PA2 PA1 PA0 TO# PD# Z X DC C -

[Etiqueta] DECF f,d 0000 11df ffff 00 0011 dfff ffff 1/1 f - 1 -> f si d = 1 f entre 0 y 127 f - 1 -> W si d = 0 PA2 PA1 PA0 TO# PD# Z X DC C -

Ejemplo

Complementa el contenido del registro f bir a bit. El resultado lo almacena de nuevo en f si d = 1 (borra lo anterior) o en W si d = 0 (f no vara). Z se pone a 1 si el resultado de la operacin es 0. COMF REG1,0 Si antes de la instruccin: REG1 = 13h como d = 0 Al ejecutarse: REG1 = 13h = 0001 0011 b W = ECh = 1110 1100 b flag Z = 0

Decrementa el contenido del registro f en una unidad. El resultado se guarda en W si d=0 (f no vara) o en f si d=1. Z Se pone a 1 si el resultado de la operacin es 0. DECF CNT,1 Si antes de la instruccin: CNT = 01h Al ejecutarse: CNT = 00h bit [flag] Z = 1

Z=0

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin

DECFSZ

Decrement F, Skip If Zero

GOTO
GOTO k 101k 10

Salto Incondicional with F


kkkk 1kkk kkkk kkkk

[Etiqueta] DECFSZ f, d 0010 11df ffff 00 1011 dfff 1,1 (2)

ffff

kkkk

f - 1 -> f si d=1 ; f entre 0 y 127 salta si d= 0 ; f - 1 -> W

1/2 En el caso de los 16c5X: k -> PC(0-8), PA2 PA1, PA0 -> PC(9-11) En el caso de los 16c64,71,74 y 84: k -> PC(0-10), PCLATH(3,4) -> PC(11,12)

Microcontroladores Pic.Prof. Horacio Prior

21
Bit de Estado Bandera PA2 PA1 PA0 TO# PD# Z DC C PA2 PA1 PA0 TO# PD# Z DC C -

Descripcin

Decrementa el contenido del registro f en una unidad. El resultado se guarda en W si d=0 (f no varia) y en f si d=1 Si el resultado es nulo, se ignora la siguiente instruccin y en ese caso la instruccin dura dos ciclos. AQUI DECFSZ CNT,1 GOTO LOOP CONTINUE; Si antes de la instruccin: PC = direccin AQUI Al ejecutarse: CNT = CNT -1 Si CNT = 0 entonces PC = direccin CONTINUE Si CNT no = 0 entonces PC = direccin AQUI + 1

Llama la subrutina situada en la direccin cargada en el registro PC

Ejemplo

- Ocupa 2 ciclos de reloj. Ejemplo: GOTO retardo1 Antes: PC = Origen Despus: PC = Destino (retardo1)

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera

INCF

Incremento F
ffff dfff

INCFSZ

Incrementa F, Skip (salta) if Zero

INCF f, d 0010 10df 00 1010 1/1 f + 1 -> f si d=1 f + 1 -> W si d=0 PA2 PA1 -

ffff

INCFSZ f, d 0011 11df ffff 00 1111 dfff ffff 1/1(2) d = [0,1], f entre 0 y 127 f + 1 -> f si d=1 f + 1 -> W si d=0 En ambos casos: Salta si f + 1 = 0 PD# Z 1 DC C PA2 PA1 PA0 TO# PD# Z DC C -

PA0 -

TO# -

Descripcin

Incrementa en 1 el contenido de f. El resultado se almacena de nuevo en f, si d=1, o en W si d=0 (en este caso f no vara)

Incrementa el contenido de f en una unidad. El resultado se guarda de nuevo en f si d=1, o si d=0 en W (en este caso f no varia). Si el resultado es nulo, salta la siguiente instruccin y en este caso, esta instruccin dura dos ciclos

Ejemplo

Instruccin
Sintaxis

IORLW
IORLW k

Inclusive OR Literal con W

IORWF
IORWF f, d

Inclusive OR W With f

Microcontroladores Pic.Prof. Horacio Prior

22
Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera Descripcin 1101 11 1/1 W OR k -> W PA2 PA1 k entre 0 y 255 PA0 TO# PD# Z 1 DC C kkkk 1000 kkkk kkkk kkkk 0001 00 00df 0100 ffff dfff ffff

1/1 W OR f -> f si d=1 f entre 0 y 127 W OR f -> W si d=0 PA2 PA1 PA0 TO# PD# Z 1 DC C -

Efecta un OR lgico inclusivo entre el contenido de W y el literal k y almacena el resultado en W IORLW 0x35 = 00110101 Antes: W = 0x9Ah = 10011010 Despus: W = 0xBFh = 10111111

Efecta un OR lgico inclusivo entre el contenido de W y el contenido de f y almacena el resultado en f, si d=1 o en W si d=0 IORWF Reg,0 Antes: W=0x91, Reg=0x13 Despus: W=0x93, Reg=0x13

Ejemplo

Instruccin
Sintaxis

MOVF

MOVE F

MOVLW
MOVLW f 1100 kkkk 11 00xx 1/1 k -> W Z 1 DC C PA2 -

Move Literal to W with F


kkkk kkkk

MOVF f,d 0010 00df ffff Codificacin 00 1000 dfff ffff Palabra/Ciclos 1/1 f -> f si d=1 f entre 0 y 127 Operacin f -> W si d=0 Bit de Estado Bandera PA2 PA1 PA0 TO# PD# -

kkkk

f entre 0 y 127 PA1 PA0 TO# PD# Z DC C -

Descripcin

Ejemplo

Pone el contenido de f en f, si d=1 o f en W si d=0 ; Pone Z a 1 si operacin = 0 Atencin: El desplazamiento de f en f que parecera intil, permite comprobar el contenido de f con respecto a cero ya que esta instruccin afecta sobre el bit Z MOVF Reg,0 Despus: W = al valor del Reg

Carga W con el literal k

MOVLW 0x5A Despus: Reg = 0x4F, W = 0x5A

Microcontroladores Pic.Prof. Horacio Prior

23

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera Descripcin

MOVWF

Move W to F

NOP
NOP 0000 0000 00 0000 1/1 Ninguna Z DC C PA2 PA1 -

No Operation
0000 0xx0

MOVWF W,f 0000 001f ffff 00 0000 1fff 1/1 W -> f f entre 0 y 127 PA2 PA1 PA0 TO# -

ffff

0000

PD# -

PA0 -

TO# -

PD# -

Z -

DC -

C -

Carga f con el contenido de W MOVWF Reg,0 Antes: Reg = 0xFF, W = 0x4F Despus: Reg =0x4F , W = 0x4F

Consume un ciclo de maquina y ocupa un lugar en la memoria de programa. Se usa para hacer retardos.

Ejemplo

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera

OPTION

Load Option Register


0010 0110

RETFIE
RETFIE 00 0000

Return From Interrupt


0000 1001

OPTION 0000 0000 00 0000 1/1 W -> OPTION PA2 PA1 PA0 -

0010 1/2 Pila -> PC, 1 -> GIE

TO# -

PD# -

Z -

DC -

C -

PA2 -

PA1 -

PA0 -

TO# -

PD# -

Z -

DC -

C -

Microcontroladores Pic.Prof. Horacio Prior

24
Carga el registro OPTION con el contenido de W. Atencin: Esta instruccin no debe utilizarse en otros chips que no sean los PIC 16c5x. Sin embargo, es correctamente interpretada por los chips 16c64, 71, 74, 84 con el fin de asegurar una compatibilidad ascendente. Carga el PC con el valor que se encuentra en la parte superior 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 Atencin: Esta interrupcin dura dos ciclos. RETFIE Al ejecutarse: PC = TOS GIE = 1

Descripcin

Ejemplo

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera

RETLW
RETLW 11 01xx

Return with Literal in W


kkkk kkkk

RETURN
RETURN 00 0000 1/2 Pila -> PC

Return from Subroutine with F


0000 0000

1/2 K --> (W); TOS --> PC PA2 PA1 PA0 TO# PD# Z DC C -

PA2 -

PA1 -

PA0 -

TO# -

PD# -

Z -

DC -

C -

Descripcin

Carga el registro W con el literal k y despus carga el PC con el valor de la parte superior de la PILA, efectuando as, un retorno de subrutina.

Carga el PC con el valor que se encuentra en la parte superior de la pila, efectuando as una vuelta a la subrutina. Se trata de la instruccin RETLW simplificada Atencin: Esta instruccin dura dos ciclos.

Ejemplo

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin

RLF

Rotate Left F through Carry

RRF
RRF f, d 0011 00df 00 1100 1/1 ver descripcin

Rotate Right F through Carry


ffff dfff

RLF f,d 0011 01df ffff 00 1101 dfff 1/1 ver descripcin

ffff

ffff

Microcontroladores Pic.Prof. Horacio Prior

25
Bit de Estado Bandera PA2 PA1 PA0 TO# PD# Z DC C 1 PA2 PA1 PA0 TO# PD# Z DC C 1

Descripcin

Rotacin de un bit a la izquierda del contenido de 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

Rotacin de un bit a la derecha del contenido de f, pasando por el bit de acarreo C. Si d=1 el resultado se introduce en f, si d=0 el resultado se amacena en W

Ejemplo

RLF Reg1,0 ; d = 0 result. en W antes: Reg1=1110 0110b ; flag C = 0 despus: W =1110 0110b ; flag C = 1

RRF Reg1,0 ; d = 0 result. en W antes: Reg1=1110 0110b ; flag C = 1 despus: W =1110 0110b ; flag C = 0

Instruccin
Sintaxis

SLEEP

Sleep
0011 0110

SUBLW
SUBWF f, d 11 110x 0011 1/1 k - W -> W PA2 PA1 -

Substract W from Literal


kkkk kkkk

SLEEP 0000 0000 Codificacin 00 0000 Palabra/Ciclos 1/1 Operacin Bit de Estado Bandera

0 -> PD, 1 -> TO, 00 -> WDT, 0 -> Predivisor del WDT PA2 PA1 PA0 TO# PD# Z DC C

PA0 -

TO# -

PD# -

Z 1

DC 1

C 1

Descripcin

Pone el circuito en bajo consumo con parada del oscilador. Pone a 0 el flag PD y el TO se pone a 1. Nota: Puede salir de este estado por: 1. Activar MCLR para provocar Reset. 2. Desbordamiento de WDG si operativo 3. Generar interrupcin diferente a TMR0.

Sustrae el contenido de W del literal k y almacena el resultado en W. La sustraccin se realiza en complemento a dos

Ejemplo

Instruccin
Sintaxis

SUBWF
SUBWF f, d

Substract W from F

SWAPF
SWAPF f, d

Swap F to F

Microcontroladores Pic.Prof. Horacio Prior

26
Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera Descripcin 0000 00 1/1 10df 0010 ffff dfff ffff 11 11df ffff 00 1110 dfff ffff 1/1 f(0-3) -> f(4-7) y f(4-7) -> f(0-3) Resultado -> f si d=1 Resultado -> W si d=0 PD# Z 1 DC 1 C 1 PA2 PA1 PA0 TO# PD# Z DC C -

f - W -> f si d=1 f - W -> W si d=0 PA2 PA1 PA0 TO# -

Sustrae el contenido de W del contenido de f, y almacena el resultado en W si d=0 y en f si d=1. La sustraccin se realiza en complemento a dos

Intercambia los cuatro bit de mayor peso por los cuatro de menor peso de f, y almacena el resultado en W si d=0, y en f si d=1

Instruccin
Sintaxis Codificacin Palabra/Ciclos Operacin Bit de Estado Bandera

TRIS
TRIS f 0000 0000 00 0000 1/1

Load TRIS Register


0fff 0110

XORLW
XORLW k 1111 kkkk 11 1010 1/1

Exclusive OR Literal With W


kkkk kkkk

0fff

kkkk

W -> registro TRIS del puerto f PA2 PA1 PA0 TO# PD# Z DC C -

W OR (Exclusivo) k -> W PA2 PA1 PA0 TO# PD# Z 1 DC C -

Carga el contenido de W en el registro TRIS del puerto f. Atencin: Esta instruccin no debe utilizarse en otros Descripcin circuitos que no sean los Pic 16c5X. No obstante, es correctamente interpretada por los circuitos 16c64, 71, 74, 84, con el fin de asegurar una compatibilidad ascendente Instruccin XORWF Exclusive Or W with F Sintaxis XORWF f,d 0001 10df ffff Codificacin 00 0110 dfff ffff Palabra/Ciclos 1/1 W OR (Exclusivo) f -> f si d=1 Operacin W OR (Exclusivo) f -> W si d=0 Bit de Estado Bandera PA2 PA1 PA0 TO# PD# Z 1 DC C

Efecta un OR lgico exclusivo entre el contenido de W y el contenido del Literal K y almacena el resultado en W

PA2 -

PA1 -

PA0 -

TO# -

PD# -

DC

Microcontroladores Pic.Prof. Horacio Prior

27
Descripcin OR Exclusiva W con f resultado en f ej. XORWF 0C,1

Microcontroladores Pic.Prof. Horacio Prior

28

Microcontroladores Pic.Prof. Horacio Prior

29

Microcontroladores Pic.Prof. Horacio Prior