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.
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.
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.
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.
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.
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.
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:
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.
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
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.
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
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.
12
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
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.
15
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'
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
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
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
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
BTFSS
[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.
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 -
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
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
GOTO
GOTO k 101k 10
ffff
kkkk
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)
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
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
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
IORWF
IORWF f, d
Inclusive OR W With f
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 -
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
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
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
RETFIE
RETFIE 00 0000
OPTION 0000 0000 00 0000 1/1 W -> OPTION PA2 PA1 PA0 -
TO# -
PD# -
Z -
DC -
C -
PA2 -
PA1 -
PA0 -
TO# -
PD# -
Z -
DC -
C -
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
RETURN 00 0000 1/2 Pila -> PC
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
RRF
RRF f, d 0011 00df 00 1100 1/1 ver descripcin
RLF f,d 0011 01df ffff 00 1101 dfff 1/1 ver descripcin
ffff
ffff
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 -
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
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 -
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
XORLW
XORLW k 1111 kkkk 11 1010 1/1
0fff
kkkk
W -> registro TRIS del puerto f PA2 PA1 PA0 TO# PD# Z 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
27
Descripcin OR Exclusiva W con f resultado en f ej. XORWF 0C,1
28
29