FUNDACIÓN micro

download FUNDACIÓN micro

of 38

Transcript of FUNDACIÓN micro

  • 8/6/2019 FUNDACIN micro

    1/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    FUNDACIN UNIVERSITARIA SAN MARTN

    CAT MONTERA FACULTAD DE INGENIERA DE SISTEMAS

    EL PIC16F84

    El PIC 16f84 es el microcontrolador que fabrica la compaa Microchip.

    Aunque no son los microcontroladores que ms prestaciones ofrecen, en los ltimos aos hanganado mucho mercado, debido al bajo precio de stos, lo sencillo de su manejo y programaciny la ingente cantidad de documentacin y usuarios que hay detrs de ellos.

    Para qu sirve un PIC?

    Un PIC, al ser un microcontrolador programable, puede llevar a cabo cualquier tarea para la

    cual haya sido programado. No obstante, debemos ser conscientes de las limitaciones de cadaPIC. As, el 16F84, PIC que se tratar en este tutorial, no podr generar un PWM ni convertirseales analgicas en digitales, entre otras. El 16F84 Se trata de un microcontrolador de 8 bits.Es un PIC de gama baja, cuyas caractersticas podemos resumir en:

    - Memoria de 1K x 14 de tipo Flash- Memoria de datos EEPROM de 64 bytes- 13 lneas de E/S con control individual- Frecuencia de funcionamiento mxima de 10 Mhz.- Cuatro fuentes de interrupcin

    - Activacin de la patita RB0/INT- Desbordamiento del TMR0- Cambio de estado en alguna patia RB4-RB7

    - Fin de la escritura de la EEPROM de datos- Temporizador/contador TMR0 programable de 8 bits- Perro Guardin o WatchDog

    Generalmente se encuentra encapsulado en formato DIP18. A continuacin puede apreciarsedicho encapsulado y una breve descripcin decada una de las patitas: imagen:

    - VDD: alimentacin- VSS: masa- OSC1/CLKIN-OSC2/CLKOUT: conexin deloscilador- VPP/MCLR:tensinde programacin y reset

    - RA0-RA3: lneas de E/S de la puerta A- RA4: lnea de E/S de la puerta A o entrada deimpulsos de reloj para TMR0- RB0/INT: lnea de E/S de la puerta B o peticinde interrupcin- RB1-RB7: lneas de E/S de la puerta B

    http://www.unicrom.com/Tut_voltaje.asphttp://www.unicrom.com/Tut_voltaje.asphttp://www.unicrom.com/Tut_voltaje.asphttp://www.unicrom.com/Tut_voltaje.asp
  • 8/6/2019 FUNDACIN micro

    2/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    PIC - Lneas E/S, recursos auxiliares, programacin

    A excepcin de dos patitas destinadas a recibir la alimentacin, otras dos para el cristal decuarzo, que regula la frecuencia de trabajo, y una ms para provocar el Reset, las restantespatitas de un microcontrolador sirven para soportar su comunicacin con los perifricosexternos que controla. Las lneas de E/S que se adaptan con los perifricos manejan informacin

    en paralelo y se agrupan en conjuntos de ocho, que reciben el nombre de Puertas. Hay modeloscon lneas que soportan la comunicacin en serie; otros disponen de conjuntos de lneas queimplementan puertas de comunicacin para diversos protocolos, como el I2C, el USB, etc.

    Recursos auxiliares

    Segn las aplicaciones a las que orienta el fabricante cada modelo de microcontrolador,incorpora una diversidad de complementos que refuerzan la potencia y la flexibilidad deldispositivo. Entre los recursos ms comunes se citan los siguientes: - Circuito de reloj: seencarga de generar los impulsos que sincronizan el funcionamiento de todo el sistema. -Temporizadores, orientados a controlar tiempos. - Perro Guardin o WatchDog: se emplea paraprovocar una reinicializacin cuando el programa queda bloqueado. - Conversores AD y DA,para poder recibir y enviar seales analgicas. - Sistema de proteccin ante fallos de

    alimentacin - Estados de reposos, gracias a los cuales el sistema queda congelado y elconsumo de energa se reduce al mnimo.

    Programacin de microcontroladores

    La utilizacin de los lenguajes ms cercanos a la mquina (de bajo nivel) representan unconsiderable ahorro de cdigo en la confeccin de los programas, lo que es muy importante dadala estricta limitacin de la capacidad de la memoria de instrucciones. Los programas bienrealizados en lenguaje Ensamblador optimizan el tamao de la memoria que ocupan y suejecucin es muy rpida. Los lenguajes de alto nivel ms empleados con microcontroladoresson el C y el BASIC de los que existen varias empresas que comercializan versiones decompiladores e interpretes para diversas familias de microcontroladores. En el caso de losPIC es muy competitivo e interesante el compilador de C PCM de la empresa CCS y el PBASIC

    de microLab Engineerign, ambos comercializados en Espaa por Mircosystems Engineering.

    Hay versiones de interpretes de BASIC que permiten la ejecucin del programa lnea a lnea, yen ocasiones, residen en la memoria del propio microcontrolador. Con ellos se puede escribiruna parte del cdigo, ejecutarlo y comprobar el resultado antes de proseguir.

  • 8/6/2019 FUNDACIN micro

    3/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Organizacin de la memoria del PIC 16F84

    A continuacin podemos ver la organizacin dela memoria del 16F84:

    Podemos comprobar como la memoria est

    dividida en dos bancos (cada una de lascolumnas): banco 0 y banco 1.

    Las primeras 12 posiciones de cada banco (00h-0Bh y 80h-8Bh) estn ocupadas por losRegistros de Propsito Especial (SpecialPurpose Registers).

    Estos registros, en los que entraremos en detallems adelante, son los encargados de controlarciertas funciones especficas del PIC.

    Las 68 posiciones siguientes (0Ch-4Fh y 8Ch-

    CFh) son los denominados Registros dePropsito General, del ingls General PurposeRegisters. stos son empleados para guardarcualquier dato que necesitemos durante laejecucin del programa.

    BANCO 0

    TMR0: es un temporizador/contador de 8bits. Puede operar de dos modosdistintos:

    - Temporizador: el registro incrementasu valor en cada ciclo de instruccin(Fosc/4).- Contador: el registro incrementa suvalor con cada impulso introducido en lapatita RA4/TOSKI.

    En ambos casos, cuando el registro se desborda, es decir, llega a su valor mximo (eneste caso 2^8 = 256. Como el 0 tambin se cuenta, el mximo valor sera 255), empiezade nuevo a contar a partir del 0, no sin antes informar de este evento a travs de laactivacin de un flag y/o una interrupcin.

    PCL: es el contador del programa. Indica la direccin de memoria que se leer a

    continuacin. En algunas ocasiones, como el empleo de las tablas, el uso de esteregistro es imprescindible.

    STATUS: registro de 8 bits que sirve para configurar ciertos aspectos del PIC. En lasiguiente figura se aprecia la disposicin de los bits de dicho registro:

    Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    IRP RP0 TO# PD# Z DC C

  • 8/6/2019 FUNDACIN micro

    4/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    - RP0: indica el banco de memoria con el que se est trabajando. Cuando vale 0 seselecciona el Banco 0 y cuando vale 1 el Banco 1.

    PORTA: representacin de la puerta A. Cada bit representa una lnea de E/S de la puertaA:

    Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

    RA4 RA3 RA2 RA1 RA0

    Como se puede comprobar, los tres bits de mayor peso no representan ninguna lnea deE/S, ya que la puerta A slo tiene 5 lneas de E/S

    PORTB: lo mismo que la puerta A, pero en este caso con 8 lneas de E/S

    BANCO 1

    TRISA: registro de 8 bits de configuracin de la puerta A. Si un bit se encuentra en 1, esalnea de E/S se configura como entrada; si, en cambio, se encuentra a 0, se configuracomo salida

    TRISB: lo mismo que TRISA, pero referente a la puerta B.

    Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

    RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

    Finalmente cabe destacar el registro W, tambin conocido como registro de trabajo (del inglswork) o acumulador. Es de vital importancia ya que, entre otras, deberemos usarlo de registropuente para llevar a cabo ciertas operaciones.

    Repertorio de instrucciones

    A continuacin veremos algunas de las instrucciones ms importantes, o al menos msempleadas en la programacin de PICs, en ASM.

    Las restantes se irn viendo en entregas posteriores segn vaya siendo necesario u manejo:

    - Manejo de registros- clrf f: limpia el registro f, es decir, pone todos sus bits a 0.- comf f,d: complementa el registro fuente f cambia los 1 por 0 y viceversa) y el resultado lo

    deposita en el destino.

    Si d = 0 el destino es W y si d = 1, el destino es el registro fuente f.

    - Manejo de bits- bcf f,b: pone a 0 el bit b del registro f.- bsf f,b: pone a 1 el bit b del registro f.

    - Brinco- Btfsc f, b: explora el bit b del registro f y salta si vale 0- Btfss f, b: explora el bit b del registro f y salta si vale 1

    - Control y especiales- Goto etiqueta: sita el cursor del programa (PCL), en etiqueta

  • 8/6/2019 FUNDACIN micro

    5/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    REGISTRO DE TRABAJO W. Este es el registro de trabajo principal, se comporta de manerasimilar al acumulador en los microprocesadores. Este registro participa en casi todo el programa ypor consiguiente en la mayora de las instrucciones.

    PILA (STACK). Estos registros no forman parte de ningn banco de memoria y no permiten elacceso 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 elmicro regresa a seguir ejecutando su tarea normal, el contador de programa recupera su valorleyndolo nuevamente desde la pila. El PIC 16F84 tiene una pila de 8 niveles, esto significa que sepueden anidar 8 llamados a subrutina sin tener problema alguno.

    CARACTERSTICAS ESPECIALES

    Algunos elementos que forman parte de los PIC no se encuentran en microcontroladores de otrosfabricantes, o simplemente representan alguna ventaja o facilidad a la hora de hacer un diseo. Acontinuacin 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 opor alguna razn externa. Es muy til cuando se trabaja en ambientes con mucha interferencia oruido electromagntico. Esta conformado por un oscilador RC que se encuentra dentro delmicroprocesador. Este oscilador corre de manera independiente al oscilador principal. Cuando sehabilita su funcionamiento, dicho circuito hace que el microcontrolador sufra un reset cadadeterminado tiempo (que se puede programar entre 18 mS y 2 segundos). Este reset lo puedeevitar el usuario mediante una instruccin especial del microcontrolador (CLRWT: Borra elcontenido del watchdog), la cual se debe ejecutar antes de que termine el periodo nominal de dichotemporizador. De esta manera si el programa se ha salido de su flujo normal, por algn ruido ointerferencia externa, el sistema se reiniciar (cuando se acabe el tiempo programado y no se hayaborrado el contador) y el programa puede restablecerse para continuar con su funcionamientonormal.

    - TEMPORIZADOR DE ENCENDIDO (Power-up Timer)

    Este proporciona un reset al microcontrolador en el momento de conectar la fuente dealimentacion, lo que garantiza un arranque correcto del sistema. En el momento de grabar elmicrocontrolador se debe habilitar el fusible de configuracin "Power-up Timer", para ello se debeseleccionar "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 muypoca potencia. Cuando se entra en este modo el oscilador principal se detiene, pero eltemporizador 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 lcuando el microcontrolador sufre un reset por un pulso en el pin MCLR, por que el watchdog haceque se reinicie el sistema o por que ocurre una interrupcin al sistema.

    - INTERRUPCIONES

    Este microcontrolador incluye el manejo de interrupciones, lo cual representa grandes ventajas. ElPIC16F84 posee cuatro formas de interrupcin que son:

  • 8/6/2019 FUNDACIN micro

    6/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    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 yfinalizacin del conteo del TMR0, al igual que el control para habilitar o deshabilitar cada una de lasfuentes de interrupcin, incluida la de escritura de la memoria EEPROM. Slo la bandera definalizacin 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. Cuandouna interrupcin es atendida, el bit GIE se coloca en 0 automticamente pare evitar interferenciascon otras interrupciones que se pudieran presentar, la direccin de retorno se coloca en la pila y elPIC se carga con la direccin 04h. Una vez en la rutina de servicio, la fuente de interrupcin sepuede determinar examinando las banderas de interrupcin. La bandera respectiva se debecolocar, por software, en cero antes de regresar de la interrupcin, para evitar que se vuelva adetectar nuevamente la misma interrupcin. La instruccin RETFIE permite al usuario retornar de lainterrupcin, a la vez que habilita de nuevo las interrupciones, al colocar el bit GIE en uno. Debetenerse presente que solamente el contador de programa es puesto en la pila al atenderse lainterrupcin; por lo tanto, es conveniente que el programador tenga cuidado con el registro deestados y el de trabajo, ya que se pueden introducir resultados inesperados si dentro de ella semodifican.

    Interrupcin Externa. Acta sobre el pin RB0/INT y se puede configurar para activarse con el flancode subida o el de bajada, de acuerdo al bit INTEDG (Interrup Edge Select Bit, localizado en elregistro 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 colocaren cero antes de regresar al programa principal. La interrupcin puede reactivar al microcontroladordespus de la instruccin SLEEP, si previamente el bit INTE fue habilitado

    Interrupcin por finalizacin de la temporizacin. La superacin del conteo mximo (0FFh) en elTMR0 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, secoloca en 1 el bit EEIF (EECON1). El bit de control respectivo es EEIE (INTCON).

    Nuestro microcontrolador, como ya sabemos, pertenece a la gama media y es de tipo RISC; estoquiere decir que tiene un juego de instrucciones reducido, en concreto de 35. Estas 35instrucciones o nemnicos (del ingls mnemonics(os recuerda a la pelcula ;) ?) y a su vezproveniente del juego de palabras: Nem On Icks) sern la base de funcionamiento del PIC. Al igualque los bits de los registros, ser imposible aprendernos todas y a la vez su funcionamiento, pero ala hora de codificar nuestros programas deberemos tenerlas en cuenta. As, cuando tengamosdudas sobre su uso, esta gua ser la chuleta ideal para recordarlo ;p.

  • 8/6/2019 FUNDACIN micro

    7/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Las instrucciones fundamentalmente se dividen en tres tipos. Esta divisin viene dada por el tipode datos con los que trabajan:

    - Instrucciones orientadas a los bytes (byte-oriented operations)- Instrucciones orientadas a los bits (bit-oriented operations)- Operaciones con literales y de control (literal and control operations)

    Aparte de estas instrucciones, hay otro tipo de instrucciones usadas para simplificar la tarea deprogramar, y q generalmente estn formadas por dos instrucciones bsicas. Estas no lastrataremos a fondo, pero las veremos en un resumen despus de comprender el funcionamiento delas 35 instrucciones bsicas.En los tres apartados siguientes veremos todos los datos que se pueden dar acerca de unafuncin. Algunos de ellos son irrelevantes y no son nuestro objetivo. En cambio otros, como laaccin, la sintaxis, el funcionamiento, la operacin, el comportamiento del registro STATUS y losejemplos, son imprescindibles para comprender su funcionamiento.

    INSTRUCCIONES ORIENTADAS AL MANEJO DE BYTES (REGISTROS)

    ADDWF

    Accin Suma el contenido del acumulador y el registro dado, y el resultado loguarda en d

    Sintaxis ADDWF f,dFuncionamiento Add W to file register (Aade W al registro)Hexadecimal 07 ffBits (OPCODE) 00 0111 dfff ffffOperacin d = W + f (d puede ser W f).Descripcin Esta instruccin suma el contenido de un registro especfico al contenido

    de W donde f puede ser un registro cualquiera con un determinado valor.Comentarios Aunque ya conocemos el funcionamiento del bit d, lo repetir de nuevo

    para el resto de instrucciones:- Si vale 1, el resultado se guarda en el registro f- Si vale 0, el resultado se guarda en el acumulador W

    Registro STATUS Modifica los bits Z, DC y C. Z vale 1 si el resultado de la operacin es 0. DC vale 1 si el resultado de la operacin es un nmero superior

    a 15. C vale 1 si el resultado de la operacin es positivo o el bit 7 del

    registro que contiene el resultado vale 0. En caso contrario Cvale 0 (resultado negativo).

    Ejemplo Tomamos como valores iniciales W = 5 y DATO = 10, donde dato es unregistro cualquiera.

    ADDWF DATO ; DATO = 15 y W = 5.ADDWF DATO, 1 ; DATO = 15 y W = 5.ADDWF DATO, 0 ; W = 15 y DATO = 10.ADDWF DATO, W ; W = 15 y DATO = 10.

    Ciclos demquina

    1

  • 8/6/2019 FUNDACIN micro

    8/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    ANDWF

    Accin Realiza la operacin AND entre un registro y WSintaxis ANDWF f,dFuncionamiento AND W with f

    Hexadecimal 05 ffBits (OPCODE) 00 0101 dfff ffffOperacin d = W AND f (d puede ser W o f).Descripcin Esta instruccin realiza la operacin lgica AND entre el acumulador y el

    registro f. el resultado se guarda dependiendo del valor de d. Si este seomite, el valor por defecto es 1 y se guarda en f

    Comentarios La operacin AND es una de las operaciones bsicas del lgebra deBoole. Esta viene descrita en el apartado de electrnica digital. Paracomprender de nuevo cual es su comportamiento, recojo en la siguientetabla los valores de la tabla de verdad de esta operacin.

    ENTRADA SALIDAf W S

    0 0 00 1 01 0 01 1 1

    La operacin lgica es:S = f W

    Esta instruccin realiza esta operacin para cada uno de los 8 bits de losdos registros, dos a dos, guardando el resultado en el registrocorrespondiente.

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo 1 Supongamos que W= 00001111 y f = 11110000 antes de ejecutar la

    instruccin ANDWF f,d ENTRADA RESULTADO

    W f W f

    Bit 7 0 1 0

    Bit 6 0 1 0

    Bit 5 0 1 0

    Bit 4 0 1 0

    Bit 3 1 0 0

    Bit 2 1 0 0Bit 1 1 0 0

    Bit 0 1 0 0

    Ejemplo 2 Ahora en nuestro segundo ejemplo tenemos que W = 01110011 y f =00101001 antes de ejecutar la instruccin ANDWF f,d tenemos:

    ENTRADA RESULTADO

    W f W f

    Bit 7 0 0 0

    Bit 6 1 0 0

    Bit 5 1 1 1

  • 8/6/2019 FUNDACIN micro

    9/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Bit 4 1 0 0

    Bit 3 0 1 0

    Bit 2 0 0 0

    Bit 1 1 0 0Bit 0 1 1 1

    Ciclos demquina 1

    CLRF

    Accin Borra un registroSintaxis CLRF fFuncionamiento Clear file registerHexadecimal 01 8fBits (OPCODE) 00 0001 1fff ffff

    Operacin F = 0Descripcin Esta instruccin borra un registro especfico, poniendo sus bits a ceroComentarios NingunoRegistro STATUS Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin es 0).Ejemplo Tenemos un registro que se llama dato y que vale 3F. Ponemos:

    CLRF datoAhora dato vale 00

    Ciclos demquina

    1

    CLRW

    Accin Borra el acumuladorSintaxis CLRWFuncionamiento Clear WHexadecimal 01 8fBits (OPCODE) 00 0001 0xxx xxxxOperacin W = 0Descripcin Esta instruccin borra el registro W solamenteComentarios Donde pone xxx en la instruccin en hexadecimal, significa que noo

    importa qu valor puede contenerRegistro STATUS Modifica el bit Z y lo pone a 1 (ya que el resultado de la operacin es 0).

    Ejemplo Tenemos el acumulador cargado con el valor 3F. Ponemos:CLRF datoAhora W vale 00

    Ciclos demquina

    1

    COMF

  • 8/6/2019 FUNDACIN micro

    10/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Accin Complementa el registro FSintaxis COMF f,dFuncionamiento Complement fHexadecimal 09 ffBits (OPCODE) 00 1001 dfff ffff

    Operacin d = NOT f (d puede ser W f).Descripcin Esta instruccin complementa un registro, es decir, los ceros losconvierte en unos, y los unos en ceros.

    Comentarios ningunoRegistro STATUS Modifica el bit Z.

    Z vale 1 si el resultado de la operacin es 0.Ejemplo Supongamos que tenemos un registro fdenominado regist = 00111011;

    cuando es aplicada la instruccin tenemos que los 0 cambian a valores 1y los valores 1 cambian a 0 obtenindose un registro invertido. Elresultado ser regist = 11000100.

    Ciclos demquina

    1

    DECF

    Accin Decrementa el registro fSintaxis DECF f,dFuncionamiento Decrement fHexadecimal 03 ffBits (OPCODE) 00 0011 dfff ffffOperacin d = f 1 (d puede ser W f).Descripcin Esta instruccin decrementa en una sola unidad el registro "f".Comentarios ninguno

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo Nuestro registro se llama regist = 5; cuando se aplica la instruccinDECF f,0 el resultado ser W=4.Por el contrario, si aplicamos la instruccin DECF f,1 el resultado serregist = 4.

    Ciclos demquina

    1

    DECFSZ

    Accin Decrementa el registro f, y si el resultado es cero, se salta unainstruccin.

    Sintaxis DECFSZ f,dFuncionamiento Decrement f, skip if 0Hexadecimal 0B ffBits (OPCODE) 00 1011 dfff ffffOperacin d = f 1, si d = 0 SALTA (d puede ser W f).Descripcin Esta instruccin decrementa el contenido del registro direccionado por el

    parmetro f, y si el resultado es 0 salta la instruccin siguiente. Si no,

  • 8/6/2019 FUNDACIN micro

    11/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    sigue con su curso habitualComentarios Aqu nos enfrentamos ante la primera instruccin que plantea una

    condicin, y que modifica el curso del PC.Registro STATUS No modifica ningn bit de estadoEjemplo DECFSZ VALOR, W

    INSTRUCCION 1

    INSTRUCCIN 2Si el contenido del registro VALOR al decrementarlo es igual a 0, seguarda el resultado en el acumulador y sigue con la INSTRUCCION2,saltndose la INSTRUCCION1.Si el resultado que guardamos en W no es 0, sigue con laINSTRUCCION1 y despus con la INSTRUCCION2 (no se salta lainmediata siguiente).

    Ciclos demquina

    1 (2) Si tiene que saltar ocupa dos ciclos

    INCF

    Accin Suma una unidad al registro fSintaxis INCF f,dFuncionamiento Increment fHexadecimal 0A ffBits (OPCODE) 00 1010 dfff ffffOperacin d = f + 1 (d puede ser W f).Descripcin Esta instruccin incrementa en una sola unidad el registro "f".Comentarios NingunoRegistro STATUS Modifica el bit Z.

    Z vale 1 si el resultado de la operacin es 0.

    Ejemplo Si tenemos un registro llamado DIA = 7.Aplicando la instruccinINCF DIA, 0, tendremos W = 8 y DIA = 7.Si aplicamos esta otraINCF DIA, 1, tendremos DIA = 8.

    Ciclos demquina

    1

    INCFSZ

    Accin Incrementa en 1 a f, y si f= 0 salta la siguiente instruccinSintaxis INCFSZ f,dFuncionamiento Increment f, Skip if 0Hexadecimal 0F ffBits (OPCODE) 00 1111 dfff ffffOperacin d = f + 1, si d = 0 SALTA (d puede ser W f).Descripcin Esta instruccin incrementa en una sola unidad el registro "f", en la cual

    si el resultado d es igual a cero, entonces salta la instruccin siguiente. Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.

  • 8/6/2019 FUNDACIN micro

    12/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Ejemplo Ejecutamos las siguiente sinstrucciones:

    INCFSZ VALOR, W ; el resultado se almacenar en WINSTRUCCION 1 ; salta aqu si W0INSTRUCCIN 2 ; salta aqu si W=0

    Si el contenido del registro VALOR es igual a 0 al incrementarlo en unaunidad, se guarda el resultado en el acumulador y sigue con laINSTRUCCION2, saltndose la INSTRUCCION1.Si el resultado que guardamos en W no es 0, sigue con laINSTRUCCION1 y despus con la INSTRUCCION2 (no se salta lainmediata siguiente).

    Ciclos demquina

    1 (2) Si tiene que saltar ocupa dos ciclos

    IORWF

    Accin Operacin lgica OR entre el acumulador y un registroSintaxis IORWF f,dFuncionamiento Inclusive Or W with FHexadecimal 04 ffBits (OPCODE) 00 0100 dfff ffffOperacin d = W OR f (d puede ser W f).Descripcin Esta instruccin realiza una operacin lgica OR inclusivo entre el

    acumulador W y el registro direccionado por el parmetro f. El parmetrod determina donde se almacenar el resultado de la operacin. Si no sepone nada, el valor por defecto es 1 y se guarda en f.

    Comentarios La operacin OR inclusivo suele llamarse OR a secas, pero se pone aspara diferenciarla de la Suma Exclusiva que veremos ms adelante. Latabla de verdad de la suma lgica es la que sigue:

    ENTRADA SALIDAf W S0 0 00 1 11 0 11 1 1

    La operacin lgica que describe esta instruccin es esta:F + W = S

    Se puede ver que basta con que uno de los dos registros tenga un unopara que la salida sea un uno tambin.

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo 1 Supongamos que W= 00001111 y f = 11110000 antes de ejecutar lainstruccin IORWF f,d, y despus obtenemos:

    ENTRADA RESULTADO

    W f W + f

    Bit 7 0 1 1

  • 8/6/2019 FUNDACIN micro

    13/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Bit 6 0 1 1

    Bit 5 0 1 1

    Bit 4 0 1 1

    Bit 3 1 0 1

    Bit 2 1 0 1

    Bit 1 1 0 1

    Bit 0 1 0 1

    Ejemplo 2 En este segundo ejemplo tenemos que W = 01110011 y f = 00101001,antes de ejecutar la instruccin IORWF f,d, y despus obtenemos que:

    ENTRADA RESULTADO

    W f W + f

    Bit 7 0 0 0

    Bit 6 1 0 1Bit 5 1 1 1Bit 4 1 0 1

    Bit 3 0 1 1

    Bit 2 0 0 0

    Bit 1 1 0 1

    Bit 0 1 1 1

    Al igual que el caso anterior, el microcontrolador compara bit a bit los dosregistros, dos a dos, obteniendo el resultado expresado en W + f

    Ciclos demquina

    1

    MOVF

    Accin Mueve el contenido de un registro al acumulador o al propio registroSintaxis MOVF f,dFuncionamiento Move fHexadecimal 08 ffBits (OPCODE) 00 1000 dfff ffffOperacin d = f (d puede ser W f).Descripcin Esta instruccin mueve el contenido del registro f en el mismo registro f o

    en W. D determina el destino del resultado. Si no se pone nada, el valorpor defecto es 1 y se guarda en f.

    Comentarios Se suele usar para mover datos al acumulador. El hecho de que sepueda mover sobre s mismo no es otro que para mirar el resultado en elregistro STATUS (no es ninguna tontera ;))

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo Tenemos el registro EDAD = 38

    MOVF EDAD, 0 ; hace que W = 38.MOVF EDAD, 1 ; hace que EDAD = 38.

  • 8/6/2019 FUNDACIN micro

    14/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    MOVF EDAD, W ; hace que W = 38.MOVF EDAD ; hace que EDAD = 38.

    Ciclos demquina

    1

    MOVWF

    Accin Mueve el acumulador al registro fSintaxis MOVWF fFuncionamiento Move W to fHexadecimal 00 ffBits (OPCODE) 00 0000 1fff ffffOperacin f = WDescripcin Esta instruccin copia el contenido del acumulador W en el registro

    direccionado por el parmetro f.Comentarios No existe el parmetro d (lgico, o no? En este caso no se puede copiar

    el acumulador sobre s mismo :p )Registro STATUS No modifica ningn bit de estado.Ejemplo Si queremos escribir el valor 10H en el registro TMR0, que est situado

    en la direccin 01h, tendremos que cargar primero el valor en elacumulador y despus copiarlo al registro.

    MOVWF 10H ; cargar el valor 10H en el acumulador.MOVWF 01H ; copia el acumulador en la direccin 01H.

    O escrito de otra manera:

    MOVWF 10H ; cargar el valor 10H en el acumulador.MOVWF TMR0 ; copia el acumulador en el registro TMR0.

    Ciclos demquina

    1

    NOP

    Accin No operaSintaxis NOPFuncionamiento No OperationHexadecimal 00 00Bits (OPCODE) 00 0000 0xx0 0000Operacin NingunaDescripcin Esta instruccin no reliza ninguna ejecucin, pero sirve para gastar un

    ciclo de mquina, equivalente a 4 de relojComentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo Si usamos un cristal de cuarzo de 4 Mhz. en el oscilador, podremos

    obtener un retardo igual a un microsegundo por cada instruccin NOPque insertemos en el cdigo del programa:RETARDO NOP

    NOP

  • 8/6/2019 FUNDACIN micro

    15/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    NOPRETURN

    Cada vez que llamemos a la subrutina RETARDO, obtendremos 3microsegundos de demora.

    Ciclos demquina

    1

    RLF

    Accin Rota a la izquierda el registro fSintaxis RLF f,dFuncionamiento Rotate Left through Carry fHexadecimal 0D ffBits (OPCODE) 00 1101 dfff ffffOperacin d = > 1 (d puede ser W f).Descripcin Esta instruccin rota a la derecha todos los bits del registro direccionado

  • 8/6/2019 FUNDACIN micro

    16/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    por el parmetro fpasando por el bit CARRY del registro STATUS (desdelos bits ms significativos a los menos significativos).Es como si dividiramos por dos el contenido del registro.Veamos el registro fde forma grfica:

    El bit C del registro STATUS pasa al D7, el D0 pasa al bit C, el D1 al D0,etc.El bit d determina el destino del resultado. Si no se pone nada, el valorpor defecto es 1 y se guarda en f.

    Comentarios NingunoRegistro STATUS Modifica el bit C (CARRY).Ejemplo Si tenemos el registro VALOR = 00000001 y aplicamos la instruccin

    RRF VALOR

    Entonces el resultado ser VALOR = 00000000 y el bit C = 1.

    Si tenemos el registro VALOR = 10000000 y aplicamos la instruccin

    RRF VALOR

    El resultado ser VALOR = 01000000 y el bit C = 0.Ciclos demquina

    1

    SUBWF

    Accin Resta el contenido del registro W el registro f

    Sintaxis SUBWF f,dFuncionamiento Subtract W from fHexadecimal 02 ffBits (OPCODE) 00 0010 dfff ffffOperacin d = f W (d puede ser W f).Descripcin Esta instruccin resta el valor contenido en el acumulador W del valor

    contenido en el registro direccionado por el parmetro f. El parmetroddetermina el destino. Si no se pone nada el valor por defecto ser 1 yse almacenar en f.

    Comentarios NingunoRegistro STATUS Modifica los bits Z, DC y C.

    Z vale 1 si el resultado de la operacin es 0. DC vale 1 si el resultado de la operacin es un nmero superior

    a 15.C vale 1 si el resultado de la operacin es positivo o el bit 7 del registroque contiene el resultado vale 0. En caso contrario C vale 0 (resultadonegativo).

    Ejemplo Segn sean los valores de W y el registro DATO, si aplicamosSUBWF DATOobtendremos diferentes resultados en el bit CARRY.

    Si DATO = 3 y W = 2; el resultado ser DATO = 1 y C = 1.

  • 8/6/2019 FUNDACIN micro

    17/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Si DATO = 2 y W = 2; el resultado ser DATO = 0 y C = 1.Si DATO = 1 y W = 2; el resultado ser DATO = FFH y C = 0.Vemos que C = 1 porque el resultado es positivo y C = 0 cuando elresultado es negativo.

    Ciclos demquina

    1

    SWAPF

    Accin Invierte los dos nibbles que forman un byte dentro de un registroSintaxis SWAPF f,dFuncionamiento Swap nibbles in fHexadecimal 0E ffBits (OPCODE) 00 1110 dfff ffffOperacin f = 0123 SWAP 4567 de fDescripcin Esta instruccin intercambia el valor de los 4 bits ms significativos (D7-

    D4) contenidos en el registro f, con los 4 bits menos significativos (D3-D0) del mismo. El parmetro d determina el destino. Si no se pone nada,el valor por defecto es 1 y se guarda en f.

    Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo Tenemos VALOR = 00001111 y W = 00000000. Aplicamos la instruccin

    SWAPF

    SWAPF VALOR ; VALOR = 11110000B y W = 00000000B.SWAPF VALOR, W ; VALOR = 00001111B y W = 11110000B.

    Con la primera instruccin modificamos el valor del registro DATO, y enla segunda instruccin modificamos el valor del acumulador sin que vareel registro DATO

    Ciclos demquina

    1

    XORWF

    Accin Operacin lgica OR-ExclusivaSintaxis XORWF f,dFuncionamiento Exclusive OR W with fHexadecimal 06 ffBits (OPCODE) 00 0110 dfff ffffOperacin d = W OR fDescripcin Esta instruccin efecta la operacin lgica XOR (OR exclusivo) entre el

    valor contenido en el acumulador W y el valor contenido en el registrodireccionado por el parmetro f. El parmetro d determina el destino. Sino se pone nada el valor por defecto es 1 y se guarda en f

    Comentarios Al igual que las otras operaciones lgicas, la suma exclusiva est tratadaen el captulo de electrnica digital. No obstante expongo las tablas deverdad correspondientes a esta operacin

  • 8/6/2019 FUNDACIN micro

    18/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    ENTRADA SALIDAf W S0 0 00 1 11 0 11 1 0

    La salida nicamente se podr a nivel alto cuando las dos entradas seandistintas. Esto es til cuando tenemos una suma lgica en la que 1 + 1es 10 y nos llevamos 1.Esta operacin algebraicamente se expresa as:

    S = f + W

    Registro STATUS Modifica el bit Z.Z vale 1 si el resultado de la operacin es 0.

    Ejemplo 1 Tenemos dos registros que se corresponden con los siguientes valoresW= 00001111 y f = 11110000 antes de ejecutar la instruccin XORWFf,d. Una vez ejecutada obtenemos la siguiente tabla de verdad sobre los

    dos registros:

    ENTRADA RESULTADO

    W f W + f

    Bit 7 0 1 1Bit 6 0 1 1

    Bit 5 0 1 1

    Bit 4 0 1 1

    Bit 3 1 0 1

    Bit 2 1 0 1

    Bit 1 1 0 1

    Bit 0 1 0 1

    El PIC compara dos a dos los bits de los registrosEjemplo 2 Ahora W = 01110011 y f = 00101001 antes de ejecutar la instruccin

    XORWF f,d y despus obtenemos:

    ENTRADA RESULTADO

    W f W + f

    Bit 7 0 0 0Bit 6 1 0 1

    Bit 5 1 1 1

    Bit 4 1 0 1Bit 3 0 1 1

    Bit 2 0 0 0

    Bit 1 1 0 1

    Bit 0 1 1 0

    Ciclos demquina

    1

  • 8/6/2019 FUNDACIN micro

    19/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    INSTRUCCIONES ORIENTADAS AL MANEJO DE BITS

    BCF

    Accin Pone a cero el bit b del registro fSintaxis BCF f,bFuncionamiento Bit Clear fHexadecimal 1b ffBits 01 00bb bfff ffffOperacin F(b) = 0Descripcin Esta instruccin pone a cero un bit que hayamos elegido de un registro

    determinado.Comentarios No debemos olvidar que en la numeracin de los bits tambin se tiene en

    cuenta el 0. Si tratamos con un registro especial, podemos poner elnombre del bit correspondiente.

    Registro STATUS No modifica ningn bit de estado.

    Ejemplo BCF PORTA, RA4 ; pone a 0 el bit RA4 del registro PORTABCF PORTA, 4 ; igual, si no conocemos en nombre del bit

    Si en el PORTA tenemos como valor inicial 11111111, despus deaplicar el ejemplo anterior, PORTA = 11101111.

    Ciclos demquina

    1

    BSF

    Accin Pone a uno el bit b del registro fSintaxis BSF f,bFuncionamiento Bit Set fHexadecimal 1b ffBits (OPCODE) 01 01bb bfff ffffOperacin F(b) = 1Descripcin Esta instruccin pone a uno un bit que hayamos elegido de un registro

    determinado.Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo BSF PORTA, RA0 ; pone a 1 el bit RA0 del registro PORTA

    BSF PORTA, 0 ; igual, si no conocemos en nombre del bit

    Si en el PORTA tenemos como valor inicial 00000000, despus deaplicar el ejemplo anterior, PORTA = 00000001.

    Ciclos demquina

    1

  • 8/6/2019 FUNDACIN micro

    20/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    BTFSC

    Accin Comprueba un bit b del registro f, y salta la instruccin siguiente si estees cero

    Sintaxis BTFSC f,bFuncionamiento Bit Test, Skip if ClearHexadecimal 1b ffBits (OPCODE) 01 10bb bfff ffffOperacin F(b) = 0? SI, salta una instruccinDescripcin Esta instruccin comprueba el valor del bit b en el registro f, y si b = 0

    entonces se salta la siguiente instruccin. Si b = 1 no salta y sigue consu ejecucin normal.

    Comentarios NingunoRegistro STATUS No modifica ningn bit de estadoEjemplo BTFSC PORTA, 2

    INSTRUCCIN 1INSTRUCCIN 2

    Si en PORTA tenemos como valor inicial 11111011, el programacontina con la instruccin 2, saltndose la instruccin 1Si en PORTA tenemos el valor 00000100, el programa sigue con lainstruccin 1 y despus la instruccin 2

    Ciclos demquina

    1 (2) Si tiene que saltar ocupa dos ciclos

    BTFSS

    Accin Comprueba un bit b del registro f, y salta la instruccin siguiente si estees uno

    Sintaxis BTFSC f,bFuncionamiento Bit Test, Skip if SetHexadecimal 1b ffBits (OPCODE) 01 11bb bfff ffffOperacin F(b) = 1? SI, salta una instruccinDescripcin Esta instruccin comprueba el valor del bit b en el registro f, y si b = 1

    entonces se salta la siguiente instruccin. Si b = 0 no salta y sigue consu ejecucin normal.

    Comentarios NingunoRegistro STATUS No modifica ningn bit de estadoEjemplo BTFSS PORTB, 7

    INSTRUCCIN 1INSTRUCCIN 2

    Si en PORTB tenemos como valor inicial 10000000, el programacontina con la instruccin 2, saltndose la instruccin 1. Si tenemos elvalor 01111111, el programa sigue con la instruccin 1 y despus lainstruccin 2.

    Ciclos de 1 (2) Si tiene que saltar ocupa dos ciclos

  • 8/6/2019 FUNDACIN micro

    21/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    mquina

    OPERACIONES CON LITERALES Y DE CONTROL

    ADDLW

    Accin Suma a W un literalSintaxis ADDLWFuncionamiento Add literal to WHexadecimal 3E kkBits (OPCODE) 11 111x kkkk kkkkOperacin W = W + kDescripcin Esta instruccin suma un valor de un literal al contenido del registro W y

    lo guarda en W.

    Comentarios

    Es igual que su homologo manejando registrosRegistro STATUS Modifica los bits Z, DC y C. Z vale 1 si el resultado de la operacin es 0. DC vale 1 si el resultado de la operacin es un nmero superior

    a 15. C vale 1 si el resultado de la operacin es positivo o el bit 7 del

    registro que contiene el resultado vale 0. En caso contrario Cvale 0 (resultado negativo).

    Ejemplo MOVLW 3 ; carga el acumulador W con el valor 3.ADDLW 1 ; suma 1 al acumulador.Al final el acumulador tendr el valor 4.

    Ciclos demquina

    1

    ANDLW

    Accin Realiza la operacin AND entre un literal y WSintaxis ANDLW kFuncionamiento AND W with kHexadecimal 39 ffBits (OPCODE) 11 1001 kkkk kkkkOperacin W = W AND kDescripcin Esta instruccin realiza una operacin lgica AND entre el contenido de

    W y k. El resultado se guarda siempre en el acumulador WComentarios ningunoRegistro STATUS Modifica el bit Z.

    Z vale 1 si el resultado de la operacin es 0.Ejemplo Si cargamos el acumulador con el nmero binario 10101010 y hacemos

    un AND con el binario 11110000, nos quedar el resultado de laoperacin en el acumulador W.MOVLW 10101010ANDLW 11110000El resultado de la operacin queda en W = 10100000.

  • 8/6/2019 FUNDACIN micro

    22/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Ciclos demquina

    1

    CALL

    Accin Llama a una subrutina en la direccin kSintaxis CALL kFuncionamiento Call subroutineHexadecimal 2k kkBits (OPCODE) 10 0kkk kkkk kkkkOperacin CALL k...RETURN PC+1.Descripcin Esta instruccin llama a un grupo de instrucciones (subrutina) que

    comienzan en la direccin k, donde k puede ser un valor numrico o unaetiqueta. Siempre termina con la instruccin de retorno (RETURN oRETLW).Definicin de subrutina: son un grupo de instrucciones que forman unprograma dentro del programa principal y que se ejecutan cuando lasllama el programa principal.Utilidad: sirven para utilizarlas varias veces en cualquier parte delprograma, sin necesidad de tener que copiar las mismas instrucciones,con el consiguiente ahorro de memoria.Funcionamiento: cuando un programa ejecuta una instruccin CALL,guarda en el stack el valor del registro PC+1 (PC = Program Counter) demanera que al regresar de la subrutina contina con la instruccinsiguiente recuperndola del stack, ejecutando la instruccin de retornoRETURN o RETLW.

    Limitaciones: en el PIC16F84 tenemos disponibles 8 niveles de stack,por lo que el nmero mximo de CALL reentrantes (instrucciones CALL

    que contengan otra instruccin CALL) queda limitado a 8.Comentarios Definicin de subrutina: son un grupo de instrucciones que forman un

    programa dentro del programa principal y que se ejecutan cuando lasllama el programa principal.Utilidad de las subritunas: sirven para utilizarlas varias veces encualquier parte del programa, sin necesidad de tener que copiar lasmismas instrucciones, con el consiguiente ahorro de memoria.Funcionamiento: cuando un programa ejecuta una instruccin CALL,guarda en el stack el valor del registro PC+1 (PC = Program Counter) demanera que al regresar de la subrutina contina con la instruccinsiguiente recuperndola del stack, ejecutando la instruccin de retornoRETURN o RETLW.

    Limitaciones: en el PIC16F84 tenemos disponibles 8 niveles de stack,por lo que el nmero mximo de CALL reentrantes (instrucciones CALLque contengan otra instruccin CALL) queda limitado a 8.

    Registro STATUS No modifica ningn bit de estado.Ejemplo PRINCIPAL: etiqueta que identifica una direccin de memoria.

    RETARDO: etiqueta que identifica el comienzo de una subrutina.BUCLE: etiqueta que identifica una direccin de memoria.

    PRINCIPAL CALL RETARDO

  • 8/6/2019 FUNDACIN micro

    23/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    BTFSC PORTB, RB0GOTO PRINCIPAL

    ***

    RETARDO CLRF CONTADORBUCLE DECFSZ CONTADOR, 1

    GOTO BUCLERETURN

    En este listado vemos que la subrutina RETARDO salta a un grupo deinstrucciones que forman un bucle y cuando ste termina regresa paraseguir con la instruccin siguiente al salto (BTFSC...).

    Ciclos demquina

    2

    CLRWDT

    Accin Pone el temporizador WDT a cero.Sintaxis CLRWDTFuncionamiento Clear WatchDog TimerHexadecimal 00 64Bits (OPCODE) 00 0000 0110 0100Operacin WDT = 0Descripcin Esta instruccin se utiliza cuando programamos el PIC con la opcin

    Watch Dog habilitada. Para evitar el reset del PIC, el programa debecontener cclicamente la instruccin CLRWDT para ponerlo a cero. Si nose pone a cero a tiempo, el WDT interpretar que se ha bloqueado elprograma y ejecutar un reset para desbloquearlo.

    Comentarios ningunoRegistro STATUS No modifica ningn bit de estado.Ejemplo Bucle CLRWDT

    ***

    GOTO BucleCiclos demquina

    1

    GOTO

    Accin Salto incondicional a k.Sintaxis GOTO kFuncionamiento Go to address (label)Hexadecimal 28 kkBits (OPCODE) 10 1kkk kkkk kkkkOperacin Salto k

  • 8/6/2019 FUNDACIN micro

    24/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Descripcin Esta instruccin ejecuta un salto del programa a la direccin k. Elparmetro k puede ser un valor numrico o una etiqueta.

    Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo INSTRUCCIN 1

    GOTO ABAJO

    INSTRUCCIN 3INSTRUCCIN 4INSTRUCCIN 5

    ABAJO INSTRUCCIN 6

    Primero se ejecuta la instruccin 1, despus GOTO y contina con lainstruccin 6 saltndose las instrucciones 3, 4 y 5.

    Ciclos demquina

    2

    IORLW

    Accin Operacin lgica OR entre el acumulador y un literalSintaxis IORWF f,dFuncionamiento Inclusive OR W with lHexadecimalBits (OPCODE)Operacin W = W OR lDescripcin Esta instruccin realiza una operacin lgica OR inclusivo entre el

    acumulador W y un literal. El resultado siempre se guarda en elacumulador.

    Comentarios La operacin OR inclusivo suele llamarse OR a secas, pero se pone aspara diferenciarla de la Suma Exclusiva que veremos ms adelante. Latabla de verdad de la suma lgica es la que sigue:

    ENTRADA SALIDAf W S0 0 00 1 11 0 11 1 1

    La operacin lgica que describe esta instruccin es esta:F + W = S

    Se puede ver que basta con que uno de los dos registros tenga un unopara que la salida sea un uno tambin.

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo Supongamos que W= 00001111 y l = f0. Ejecutanado la instruccinIORWF f,d, obtenemos:

    ENTRADA RESULTADO

    W l W + l

    Bit 7 0 1 1

  • 8/6/2019 FUNDACIN micro

    25/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Bit 6 0 1 1

    Bit 5 0 1 1

    Bit 4 0 1 1

    Bit 3 1 0 1

    Bit 2 1 0 1

    Bit 1 1 0 1

    Bit 0 1 0 1

    Ciclos demquina

    2

    MOVLW

    Accin Copia el contenido de un literal al acumulador

    Sintaxis MOVLW fFuncionamiento Move literal to WHexadecimal 30 kkBits (OPCODE) 11 00xx kkkk kkkkOperacin W = fDescripcin Esta instruccin asigna al acumulador W el valor del literal k, el cual debe

    estar comprendido entre 0 y 255.Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo Si tenemos el acumulador a cero o con cualquier valor, y queremos que

    contenga el que le asignemos nosotros directamente entonces usaremosesta instruccin:W = 0.Valor a asignar = 100.Instruccin: MOVLW 100El acumulador valdr 100 (W = 100).

    Con distinto valor de partida del acumulador:W = 225.MOVLW 100El acumulador valdr 100 (W = 100).

    Ciclos demquina

    1

    RETFIE

    Accin Retorno de la llamada a una subrutinaSintaxis RETFIEFuncionamiento Return From InterruptHexadecimal 00 09Bits (OPCODE) 00 0000 0000 1001

  • 8/6/2019 FUNDACIN micro

    26/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Operacin FIN INTERRUPCINDescripcin Esta instruccin devuelve el control al programa principal despus de

    ejecutarse una subrutina de gestin de una interrupcin.Comentarios NingunoRegistro STATUS No modifica ningn bit de estadoEjemplo ORG 00H

    BUCLE GOTO BUCLE ; bucle infinito.ORG 04H; vector de interrupcin.RETFIE ; retorna de la interrupcin

    Este cdigo de programa ejecuta un bucle infinito. Si habilitamos una delas interrupciones del 16F84, en cuanto sta se produzca pasar elcontrol al programa situado en la direccin 04h y la instruccin RETFIEregresa de la interrupcin.Al ejecutarse una interrupcin, el bit GIE del registro INTCON se pone a0 y as evita que otra interrupcin se produzca mientras ya est con unaen marcha.Con la instruccin RETFIE ponemos de nuevo el bit GIE a 1 para asatender de nuevo a futuras interrupciones.

    Ciclos demquina

    2

    RETLW

    Accin Retorno de subrutina y carga literal k en el acumuladorSintaxis RETLWFuncionamiento Return with Literal in WHexadecimal 34 kkBits (OPCODE) 11 01xx kkkk kkkkOperacin RETORNO con W = kDescripcin Esta instruccin retorna de una subrutina al programa principal, cargando

    el acumulador W con el literal k.Es la ltima instruccin que forma una subrutina, al igual que RETURN,con la diferencia que carga en W el valor de k.

    Comentarios Y para qu me sirve regresar de una subrutina con un determinadoliteral en el acumulador? Nos ser muy til al programar con TABLAS.

    Registro STATUS No modifica ningn bit de estadoEjemplo CALL SUBRUT1 ; llama a Subrut1.

    MOVWF DATO 1 ; carga W en Dato1.CALL SUBRUT2 ; llama a Subrut2.MOVWF DATO2 ; carga W en Dato2.

    **

    SUBRUT1 RETLW 0A ; carga W = 0A y retorna.SUBRUT2 RETLW 0B ; carga W = 0B y retorna.

    Ciclos demquina

    2

  • 8/6/2019 FUNDACIN micro

    27/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    RETURN

    Accin Retorno de una subrutina.Sintaxis RETURNFuncionamiento Return from subroutineHexadecimal 00 08Bits (OPCODE) 00 0000 0000 1000Operacin RETORNODescripcin Esta instruccin retorna de una subrutina al programa principal en la

    instruccin siguiente a la llamada de la subrutina, tomando el valoralmacenado en el stack para continuar.Es la ltima instruccin que forma una subrutina (al igual que RETLW).

    Comentarios El procedimiento es siempre el mismo. As, tenemos que crear lasubrrutina y darle el nombre para poder ser llamada; al final de lasubrrutina se debe escribir la instruccin denominada RETURN.Entonces podemos concluir que una subrrutina esta constituida por unconjunto de instrucciones demarcadas por un nombre que se encuentraal inicio y la instruccin RETURN que se encuentra al final demarcandoel final de la subrrutina.Estos mismos pasos debemos seguirlos para la instruccin RETLW

    Registro STATUS No modifica ningn bit de estado.Ejemplo CALL COMPARA ; llama a Compara.

    INSTRUCCION1 ; vuelve aqu cuando seINSTRUCCION2 ; ejecuta return

    **

    COMPARA INSTRUCCIN R1INSTRUCCIN R2RETURN

    Aqu llamamos a la subrutina COMPARA, se ejecutan las instruccionesR1 y R2 y con el RETURN regresa a la instruccin siguiente al CALL yejecuta las instrucciones 1, 2 y sigue con el programa.

    Ciclos demquina

    2

    SLEEP

    Accin Paso a modo de bajo consumoSintaxis SLEEP

    Funcionamiento Go into Standby ModeHexadecimal 00 63Bits (OPCODE) 00 0000 0110 0011Operacin EN ESPERA.Descripcin Esta instruccin detiene la ejecucin del programa, deja el PIC en modo

    suspendido y el consumo de energa es mnimo.No ejecuta ninguna instruccin hasta que sea nuevamente reinicializado(reset) o surja una interrupcin.Durante este modo, el contador del Watch Dog sigue trabajando, y si lo

  • 8/6/2019 FUNDACIN micro

    28/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    tenemos activado el PIC se resetear por este medio.Comentarios NingunoRegistro STATUS No modifica ningn bit de estado.Ejemplo No creo que haga falta ;)Ciclos demquina

    1

    SUBLW

    Accin Resta al literal k el valor del acumulador.Sintaxis SUBLW kFuncionamiento Substract W from LiteralHexadecimal 3C kkBits (OPCODE) 11 110x kkkk kkkkOperacin W = k - WDescripcin Esta instruccin resta al literal k el valor almacenado en W y el resultado

    se guarda en el acumulador.Comentarios ningunoRegistro STATUS Modifica los bits Z, DC y C.

    Z vale 1 si el resultado de la operacin es 0. DC vale 1 si el resultado de la operacin es un nmero superior

    a 15. C vale 1 si el resultado de la operacin es positivo o el bit 7 del

    registro que contiene el resultado vale 0. En caso contrario Cvale 0 (resultado negativo).

    Ejemplo MOVLW 10 ; carga el acumulador W con el valor 10.SUBLW 15 ; resta a 15 el valor del acumulador.Al final el acumulador tendr el valor W = 5.

    Ciclos de

    mquina

    1

    XORLW

    Accin Operacin lgica OR exclusivo entre el acumulador y el literal kSintaxis XORLW kFuncionamiento Exclusive OR Literal with WHexadecimal 3A kkBits (OPCODE) 11 1010 kkkk kkkkOperacin W = W XOR kDescripcin Esta instruccin realiza un OR exclusivo entre el contenido del

    acumulador W y el valor del literal k. El resultado se guarda siempre en

    el acumulador (recuerda que k es un literal, no un registro).Comentarios Al igual que las otras operaciones lgicas, la suma exclusiva est tratadaen el captulo de electrnica digital. No obstante expongo las tablas deverdad correspondientes a esta operacin

    ENTRADA SALIDAf W S0 0 00 1 1

  • 8/6/2019 FUNDACIN micro

    29/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    1 0 11 1 0

    La salida nicamente se podr a nivel alto cuando las dos entradas seandistintas. Esto es til cuando tenemos una suma lgica en la que 1 + 1es 10 y nos llevamos 1.

    Esta operacin algebraicamente se expresa as:S = f + W

    Registro STATUS Modifica el bit Z. Z vale 1 si el resultado de la operacin es 0.

    Ejemplo W = 01110011 y k = 00101001 antes de ejecutar la instruccin XORWFk

    ENTRADA RESULTADO

    W k W + k

    Bit 7 0 0 0

    Bit 6 1 0 1

    Bit 5 1 1 1Bit 4 1 0 1

    Bit 3 0 1 1

    Bit 2 0 0 0

    Bit 1 1 0 1

    Bit 0 1 1 0

    Ciclos demquina

    1

    INSTRUCCIONES DE LA GAMA BAJA

    Entre estas instrucciones no se han incluido dos rutinas que aparte de no pertenecer a las 35instrucciones de la gama media, no pueden ser clasificadas en ninguna de las categorasexpuestas anteriormente, aunque normalmente son acogidas dentro de las instrucciones conliterales y de control. Estas instrucciones son OPTION y TRIS. La razn por la cual no pertenecena estas 35 instrucciones es por que fueron creadas pensando en la gama baja, ya que carece de 4de las instrucciones de la gama media: ADDLW, RETFIE, RETURN y SUBLW. No por ello se haprohibido a la gama media disponer de estas instrucciones:

    OPTION

    Accin Guarda el valor del acumulador en el registro OPTIONSintaxis OPTIONFuncionamiento -Hexadecimal 00 62

  • 8/6/2019 FUNDACIN micro

    30/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    Bits (OPCODE) 00 0000 0110 0010Operacin OPTION = WDescripcin Esta instruccin guarda en el registro especial OPTION el valor

    contenido en el acumulador WComentarios ningunoRegistro STATUS No modifica ningn bit de estado.

    Ejemplo MOVLW 10H ; carga el acumulador con el valor 10h.OPTION ; carga el registro OPTION con el acumulador.

    Esta instruccin existe para mantener la compatibilidad con los PICproducidos con anterioridad, y como en el futuro podra dejar deimplementarse, Microchip aconseja realizar el ejemplo anterior de estaotra forma:

    BSF STATUS, RP0 ; activa el banco 1.MOVLW 10H ; carga el acumulador con 10hMOVWF OPTION_REG ; carga OPTION con el acumulador.

    Ciclos demquina

    1

    TRIS

    Accin Guarda el acumulador en uno de los registros de TRIS.Sintaxis TRIS fFuncionamiento -Hexadecimal 00 6FBits (OPCODE) 00 0000 0110 1111Operacin TRIS de f = W.Descripcin Esta instruccin guarda el valor del acumulador W en uno de los

    registros especiales de TRIS que indicamos en el parmetro f.Los registros TRIS determinan el funcionamiento como entrada y salidade las lneas I/O del PIC.

    Comentarios ningunoRegistro STATUS No modifica ningn bit de estado.Ejemplo MOVLW 16h ; carga el acumulador W con el valor 16h

    TRIS PORTA ; carga el registro PORTA con el acumulador.

    Esta instruccin existe para mantener la compatibilidad con los PICproducidos anteriormente, y como en el futuro podra dejar deimplementarse, Microchip aconseja realizar el ejemplo anterior de estaotra forma (aunque ocupa ms memoria...):BSF STATUS, RP0 ; activa el banco 1.MOVLW 16h ; carga el acumulador con el valor 16hMOVWF TRISA ; carga el registro PORTA con W.

    Ciclos demquina

    1

  • 8/6/2019 FUNDACIN micro

    31/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    INSTRUCCIONES ESPECIALES

    Existe un conjunto de instrucciones especiales diseadas para facilitar las operaciones a la hora dedisear nuestros algoritmos. Estas instrucciones pueden ser implementadas con una, dos o tres delas instrucciones de la gama media. La mayora de ellas se basa en las operaciones con losacarreos y con los bits del registro status en general. Este cuadro slo debe servir de referencia, yno debemos usarlo en el caso de que estemos empezando. Slo lo usaremos si vemos muy claroel funcionamiento de las instrucciones, pero es recomendable usar la forma equivalente, quetiempo de acomodarnos ya tendremos.Otra cosa que debemos tener en cuenta es que no por reducir algoritmos a una sola expresin,vamos a ahorrar ciclos de mquina.

    Mnemnico Parmetros Descripcin Traduccin OperacinEquivalente

    Banderas

    ADDCF f, d Add Carry to File Sumar acarreoa f BTFSC 3,0INCF f,d Z

    ADDDCF f, d Add Digit Carry to File Sumar acarreode digito a fBTFSC 3,1INCF f,d Z

    B K Branch Saltar a unaetiqueta

    GOTO k -

    BC K Branch on CarrySaltar a unaetiqueta si hayacarreo

    BTFSC 3,0GOTO k -

    BDC K Branch on Digit Carry

    Saltar a unaetiqueta si hayacarreo de

    digito

    BTFSC 3,1GOTO k -

    BNC K Branch on No CarrySaltar a unaetiqueta si nohay acarreo

    BTFSS 3,0GOTO k -

    BNDC KBranch on No DigitCarry

    Saltar a unaetiqueta si nohay acarreo dedigito

    BTFSS 3,1GOTO k -

    BNZ K Branch on No ZeroSaltar a unaetiqueta si nohay cero

    BTFSS 3,2GOTO k -

    BZ K Branch on ZeroSaltar a unaetiqueta si haycero

    BTFSC 3,2

    GOTO k-

    CLRC Clear Carry Poner a ceroacarreo

    BCF 3,0 -

    CLRDC Clear Digit CarryPoner a ceroacarreo dedigito

    BCF 3,1 -

    CLRZ Clear Zero Poner a cero elflag Zero BCF 3,2 -

  • 8/6/2019 FUNDACIN micro

    32/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    LCALL K Long CALL Llamada larga auna etiqueta

    BSF/BCF 0A,3BSF/BCF 0A,4CALL k

    ---

    LGOTO K Long GOTOSalto largo auna etiqueta

    BSF/BCF 0A,3BSF/BCF 0A,4GOTO k

    ---

    MOVFW F Move File to W Mover registro aW

    MOVF f,0 Z

    NEGF f, d Negate File Negar unregistro

    COMF f,1INCF f,d

    Z

    SETC Set Carry Poner a uno elacarreo

    BSF 3,0 -

    SETDC Set Digit CarryPoner a uno elacarreo dedigito

    BSF 3,1 -

    SETZ Set Zero Poner a uno elZero

    BSF 3,2 -

    SKPC Skip on Carry

    Saltar si hay

    acarreo BTFSS 3,0 -

    SKPDC Skip on Digit CarrySaltar si hayacarreo dedigito

    BTFSS 3,1 -

    SKPNC Skip on No CarrySaltar si no hayacarreo BTFSC 3,0 -

    SKPNDC Skip on No DigitCarry

    Saltar si no hayacarreo dedigito

    BTFSC 3,1 -

    SKPNZ Skip on Non ZeroSaltar si no hayZero BTFSC 3,2 -

    SKPZ Skip on Zero

    Saltar si hay

    Zero BTFSS 3,2 -

    SUBCF f,dSubstract Carry fromFile

    Restar acarreodel registro

    BTFSC 3,0DECF f,d Z

    SUBDCF f,d Substract Digit Carryfrom File

    Restar acarreode dgito delregistro

    BTFSC 3,1DECF f,d

    Z

    TSTF f Test File Probar registro MOVF f,1 Z

    CUADRO DE INSTRUCCIONES

    Para finalizar, las 35 instrucciones de la gama media las encontraremos resumidas en los tresprximos cuadros.

    Instrucciones orientadas a los bytes

    Mnemnico Parmetros Descripcin Ciclos Banderas

  • 8/6/2019 FUNDACIN micro

    33/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    ADDWF f, d Add W and f 1 C, DC, ZANDWF f, d AND W with f 1 ZCLRF f Clear f 1 ZCLRW - Clear W 1 Z

    COMF f, d Complement f 1 Z

    DECF f, d Decrement f 1 ZDECFSZ f, d Decrement f, Skip if 0 1(2) None

    INCF f, d Increment f 1 Z

    INCFSZ f, d Increment f, Skip if 0 1(2) NoneIORWF f, d Inclusive OR W with f 1 Z

    MOVF f, d Move f 1 ZMOVWF f Move W to f 1 NoneNOP - No Operation 1 None

    RLF f, d Rotate left f throughcarry 1 C

    RRF f, d Rotate right f through

    carry1 C

    SUBWF f, d Subtract W from f 1 C, DC, Z

    SWAPF f, d Swap nibbles in f 1 None

    XORWF f, dExclusive OR W withf 1 Z

    Instrucciones orientadas a los bits

    Mnemnico Parmetros Descripcin Ciclos Banderas

    BCF f, b Bit Clear f 1 None

    BSF f, b Bit Set f 1 None

    BTFSC f, b Bit Test f, Skip if Clear 1 (2) NoneBTFSS f, b Bit Test f, Skip if Set 1 (2) None

    Operaciones con literales y de control

    Mnemnico Parmetros Descripcin NroCic. Banderas

    ADDLW k Add literal and W 1 C, DC, ZANDLW k AND literal with W 1 ZCALL k Call subroutine 2CLRWDT - Clear Watchdog Timer 1 TO,PDGOTO k Go to address 2 NoneIORLW k Inclusive OR literal with W 1 ZMOVLW k Move literal to W 1 NoneRETFIE - Return from interrupt 2 NoneRETLW k Return with literal in W 2 None

    RETURN - Return from Subroutine 2 None

    SLEEP - Go into standby mode 1 TO,PD

    SUBLW k Subtract W from literal 1 C, DC, Z

  • 8/6/2019 FUNDACIN micro

    34/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    XORLW kExclusive OR literal withW 1 Z

    Microchip recomienda no utilizar las instrucciones TRIS y OPTION, para mantener lacompatibilidad con el PIC16CXX. Aunque eso no significa que tengamos que hacer caso y nousarlas.

    Circuitera bsica

    En el siguiente esquema podemos ver la circuitera bsica, es decir, el circuito mnimo para queel PIC empiece a funcionar

    Identificador ComponenteR1 Resistencia 100

    R2 Resistencia 10k

    C1, C2 Condensador cermico 27pFD1 Diodo 1N4148XTAL Cristal de cuarzo 4 Mhz.SW1 Pulsador NA

    ste consta bsicamente de dos partes:

    Alimentacin:

    se emplean para ello dos pines: 14 VDD (tensin positiva) y 5 GND (masa).

    Se incluye adems un pulsador, conectado al pin 4: cuando se introduce un nivel alto de tensin

    (pulsador abierto) el PIC funciona normalmente y cuando se introduce un nivel bajo (pulsadorcerrado) se resetea el PIC.

    - Oscilacin:

    la lleva a cabo el cristal de cuarzo (de 4 Mhz en nuestro caso) junto con los dos condensadorescermicos (27pF). Existen otros tipos de osciladores que pueden sernos tiles cuandotrabajemos con PICs.

  • 8/6/2019 FUNDACIN micro

    35/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    - LA ARQUITECTURA

    - LA ARQUITECTURA TRADICIONAL

    La arquitectura tradicional de computadoras y microprocesadores se basa en el esquemapropuesto por John Von Neumann, en el cual la unidad central de proceso, o CPU, esta conectada

    a una memoria nica que contiene las instrucciones del programa y los datos (ver figura). Eltamao de la unidad de datos o instrucciones esta fijado por el ancho del bus de la memoria. Esdecir que un microprocesador de 8 bits, que tiene adems un bus de 8 bits que lo conecta con lamemoria, deber manejar datos e instrucciones de una o ms unidades de 8 bits (bytes) delongitud. Cuando deba acceder a una instruccin o dato de ms de un byte de longitud, deberrealizar ms de un acceso a la memoria. Por otro lado este bus nico limita la velocidad deoperacin del microprocesador, ya que no se puede buscar de memoria una nueva instruccin,antes de que finalicen las transferencias de datos que pudieran resultar de la instruccin anterior.Es decir que las dos principales limitaciones de esta arquitectura tradicional son :

    tanto el microprocesador debe hacer varios accesos a memoria para buscar instruccionescomplejas.

    de operacin (o ancho de banda de operacin) esta limitada por el efecto decuello de botella que significa un bus nico para datos e instrucciones que impide superponerambos tiempos de acceso.

    La arquitectura von Neumann permite el diseo de programas con cdigo automodificable, prcticabastante usada en las antiguas computadoras que solo tenan acumulador y pocos modos dedireccionamiento, pero innecesaria, en las computadoras modernas.

    Arquitectura von Neumann

    - La arquitectura Harvard y sus ventajas

    La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPUesta conectado a dos memorias por intermedio de dos buses separados. Una de las memoriascontiene solamente las instrucciones del programa, y es llamada Memoria de Programa. La otramemoria solo almacena los datos y es llamada Memoria de Datos. Ambos buses son totalmenteindependientes y pueden ser de distintos anchos. Para un procesador de Set de InstruccionesReducido, o RISC (Reduced Instruccin Set Computer), el set de instrucciones y el bus de lamemoria de programa pueden disearse de manera tal que todas las instrucciones tengan unasola posicin de memoria de programa de longitud. Adems, como los buses son independientes,el CPU puede estar accediendo a los datos para completar la ejecucin de una instruccin, y almismo tiempo estar leyendo la prxima instruccin a ejecutar. Se puede observar claramente quelas principales ventajas de esta arquitectura son:

    Que el tamao de las instrucciones no esta relacionado con el de los datos, y por lo tanto puedeser optimizado para que cualquier instruccin ocupe una sola posicin de memoria de programa,logrando as mayor velocidad y menor longitud de programa.

    nerse con el de los datos, lograndouna mayor velocidad de operacin.

    Una pequea desventaja de los procesadores con arquitectura Harvard, es que deben poseerinstrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario

  • 8/6/2019 FUNDACIN micro

    36/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    incluir en los programas, ya que estas tablas se encontraran fsicamente en la memoria deprograma (por ejemplo en la EPROM de un microprocesador).

    Arquitectura Harvard

    Los microcontroladores PIC 16C5X, 16CXX y 17CXX poseen arquitectura Harvard, con una

    memoria de datos de 8 bits, y una memoria de programa que, segn el modelo, puede ser de 12bits para los 16C5X, 14 bits para los 16CXX y 16 bits para los 17CXX.

    A continuacin vamos a desarrollar nuestro primer programa.

    ste activar un LED conectado a RB0 siempre que el interruptor conectado a RA0 este cerrado.Para ello vamos a montar el siguiente circuito:

    En el circuito podemos ver como lo nico que hemos aadido al circuito base es un pulsadorconectado al pin 17 (RA0), de forma que cuando lo pulsemos se introduzca un cero lgico en elpin y cuando no lo pulsemos se introduzca un uno lgico. Hemos aadido adems un LED con sucorrespondienteresistencialimitadora decorrienteen el pin 6 (RB0).

    De lo que hemos comentado en esta prctica, caben destacar dos cosas:

    - La eleccin de los pines ha sido arbitraria: se han escogido stos, pero podamos haberescogido otros. No obstante, mientras sea posible es mejor organizar el esquema y el programa,y una forma de hacerlo es agrupando por un lado las entrada (Puerta A) y por otro las salidas(Puerta B). Por la misma razn, hemos escogido el pin 0 de cada puerta, en vez de escoger enun sitio el 3 y en otro el 7, por ejemplo.

    - En el caso de las entradas, es trivial que cuando se pulse o deje de activar el pulsador se enveun cero o un uno, pues lo nico que queremos es que el PIC pueda detectar un cambio. As, igualnos da comprobar cuando se enva un cero que cuando se enva un uno, ya que en ambos casospodremos verificarlo.

    http://www.unicrom.com/Tut_diodo_led.asphttp://www.unicrom.com/Tut_resistencia.asphttp://www.unicrom.com/Tut_resistencia.asphttp://www.unicrom.com/Tut_resistencia.asphttp://www.unicrom.com/Tut_corriente_electrica.asphttp://www.unicrom.com/Tut_corriente_electrica.asphttp://www.unicrom.com/Tut_corriente_electrica.asphttp://www.unicrom.com/Tut_corriente_electrica.asphttp://www.unicrom.com/Tut_resistencia.asphttp://www.unicrom.com/Tut_diodo_led.asp
  • 8/6/2019 FUNDACIN micro

    37/38

    GOOD LUCK prepar: Ing. Indalecio Copete

    En este caso se ha elegido el cero como activado porque es lo ms comn. En el caso de lassalidas no ocurre lo mismo, ya que en este caso no se trata de detectar un cambio, sino deactivar un dispositivo, por lo que se hace necesaria que el PIC "genere" unadiferencia depotencial. As, la forma de indicar al PIC que lo haga es poniendo a uno la salida.

    Hechas estas aclaraciones, veamos el programa:

    Comentarios del primer programa. PIC 16F84

    Comentemos el cdigo:

    - Las tres primeras lneas, cuyo ncleo es EQU, permiten que el compilador interprete a partir deese momento los nombres de la primera columna con las direccin de memoria de la derecha.

    El objetivo de estas instrucciones es obvio: facilitar la comprensin del cdigo, ya que es msfcil recordar un nombre que nos sugiere algo que direccin en hexadecimal.

    - La siguiente instruccin, org 0, no la analizaremos de momento. Simplemente decir que esnecesaria para el correcto funcionamiento del programa, ya que indica el comienzo del cdigo.

    - bsf ESTADO,5 nos permite poner a 1 el bit 5 de ESTADO, con lo que conseguimos acceder albanco 1, donde se encuentran los registros de configuracin de las puertas.

    - clrf PORTA: pone a cero todos los bits del registro porta, con lo que se consigue que dichapuerta se configure al completo como salida. En este caso lo usamos conjuntamente con comf,que transforma los 0 en 1 y viceversa.

    As, se consigue configurar la puerta a como entrada. Podramos usar otros mtodos, comomovlw 0xFF junto con movwf PUERTAA, pero el primero lo considero ms elegante.

    - clrf PORTB: pone a cero todos los bits del registro PORTB, configurando ste como salida.

    http://www.unicrom.com/Tut_tension_electrica.asphttp://www.unicrom.com/Tut_tension_electrica.asphttp://www.unicrom.com/Tut_tension_electrica.asphttp://www.unicrom.com/Tut_tension_electrica.asphttp://www.unicrom.com/Tut_tension_electrica.asphttp://www.unicrom.com/Tut_tension_electrica.asp
  • 8/6/2019 FUNDACIN micro

    38/38

    - bcf ESTADO,5 pone a 0 el bit 5 de ESTADO, volviendo as al banco 0.

    - Inicio, apagar y encender son etiquetas, cuya utilidad es marcar un punto del programa; as, siqueremos volver a ese punto slo tendremos que hacer referencia a su nombre.

    - btfsc PORTA,0 sirve para saltar si el bit 0 de PORTA vale 0, es decir, cuando se activ elpulsador. En ese caso, vamos a ENCENDER mediante goto ENCENDER, se pone a 1 el bit 0 dePORTB, que es donde est conectado el led y volvemos a INICIO.

    Si no est pulsado el interruptor vamos a APAGAR, y hacemos la operacin contraria a laanterior. Finalmente volvemos a INICIO.

    El segundo se basa en las instrucciones que preguntan sobre el estado de un bit, esto es,

    BTFSS y BTFSC . Y dependiendo del bit, una realiza un salto si est a 0 y la otra si est

    a 1.

    Indalecio Copete R.