Apuntes del pic 16f84

895 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
895
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Apuntes del pic 16f84

  1. 1. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IINOTAS SOBRE EL PIC 16F84AEl pic que se va a utilizar para las prácticas realizadas va ha ser el 16f84A. Este pic es similar al 16c84, por tanto(aunque a veces se hable de éste) nos referimos al 16f84A a lo largo de toda la guía.1. Encapsulado:El 16f84 pertenece a la familia de la gama media y dentro de ella es de los más pequeños: tan solo tiene 18 patillas.Tiene una capacidad de memoria de programa de 1K (palabras de 14 bits cada una) tipo FLASH y 64 bytes deEEPROM como memoria auxiliar. Estas memorias son eléctricamente borrables, lo que permite grabar y borrar elprograma para realizar todas las pruebas pertinentes (soporta unos 1000 ciclos de escritura/borrado). Este pic estáfabricado con tecnología CMOS y el encapsulado (de 18 patillas) es el representado en la figura 1.1.Figura 1.1. Patillaje del pic 16f84A continuación se va a comentar brevemente la misión decada patilla:- Vdd: Patilla por la que se va a aplicar la tensión positivade alimentación (4V – 6V DC).- Vss: Conectada a tierra o negativo de la alimentación.- MCLR: Esta patilla va a ser activada a nivel bajo pararesetear el pic. También se va a utilizar durante la grabaciónde la memoria de programa para introducir por ella la tensión Vpp (12V – 14V DC). El micropic trainer tiene un botónde reset conectado al pic como se ve en la figura 1.2 (R1 = 100Ω y R = 4K7Ω).Figura 1.2. Circuito que permite producir un reset al presionar unpulsador- OSC1/CLKIN: Por ella se va a introducir la entrada del circuitooscilador externo que va a proporcional la frecuencia de trabajo.- OSC2/CLKOUT: Patilla auxiliar del circuito oscilador. Según lafrecuencia de trabajo del oscilador, se va a tener una u otra velocidaden la ejecución de cada instrucción. En las prácticas realizadas, lafrecuencia de trabajo es de 4 MHz, por tanto el ciclo de instrucción va aser de 1µsg (4 periodos de reloj x 0,25µsg = 1µsg). Todas las instrucciones se van a ejecutar en 1µsg salvo las desalto que van ha tardar 2µsg.Los pic admiten cuatro tipos de circuito oscilador (RC, HS, XT y LP). En las prácticas realizadas se a utilizado el XT(Figura 1.3).Figura 1.3. Esquema del oscilador tipo XTEste circuito utiliza un cristal de cuarzo que actúa comoun oscilador que proporciona la frecuencia de 4MHzantes citada. Los condensadores C1 y C2 estáncomprendidos entre 15 – 33 pF. El micro’pic trainer losutiliza de 27 pF.- RA0 – RA4: Son las 5 líneas de E/S digitalescorrespondientes a la puerta A. La línea RA4 multiplexael TOCKI. En este caso sirve para recibir una frecuencia externa que alimente el temporizador interno TMR0.- RB0 – RB7: Corresponden a las 8 líneas de E/S digitales de la puerta B. La RB0 multiplexa el INT, que servirá deentrada a una petición externa de interrupción.El consumo típico del pic es de 2mA aproximadamente funcionando en modo normal. Cuando entramos en el modollamado “reposo”, mediante la instrucción SLEEP (ver apartado 5), pasa a consumir menos de 10 µA.2. Arquitectura interna:La arquitectura del procesador sigue el modelo Harvard. En este, la CPU se conecta de forma independiente y conbuses distintos con la memoria de instrucciones y con la de datos, permitiendo a esta acceder simultáneamente a lasdos memorias. Se aplica la técnica de segmentación en la ejecución de las instrucciones. Esta segmentación permiteDOCENTE: Ing. Luis Pacheco Cribillero
  2. 2. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIal procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. Deesta forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a cuatro ciclos de reloj).Las instrucciones de salto ocupan dos ciclos al no conocer la dirección de la siguiente instrucción hasta que no sehaya completado la de bifurcación.El formato de todas las instrucciones es de la misma longitud (14 bits en los de gama media). Procesador RISC(Computador de Juego de Instrucciones Reducido). Los modelos de la gama media disponen de un repertorio de 35instrucciones. Cualquier instrucción puede manejar cualquier elemento de la arquitectura como fuente o comodestino, es decir, todos los objetos del sistema (puertas de E/S, posiciones de memoria, etc.) están implementadoscomo registros.En la figura 2.1 aparece el diagrama de bloques del pic 16f84. Para analizar un poco el funcionamiento delprocesador, nos vamos a centrar en la ejecución de una instrucción.Figura 2.1. Arquitectura interna del PIC16F84El contador de programa comienza la fase de búsqueda facilitando la dirección de la memoria de instrucciones dondese ubica la instrucción. Su código binario de 14 bits se lee y se carga en el Registro de instrucciones (1), desde dondese transfiere al decodificador y a la unidad de control (2). La ALU (3) es la encargada de realizar la operaciónaritmético-lógica que implica la instrucción decodificada. Uno de los operandos lo recibe del registro W (4) y el otro deun registro o de la propia instrucción.En cuanto a la memoria de programa, el PIC es capaz de contener 8.192 instrucciones de 14 bits cada una. Estemapa se divide en páginas de 2.048 posiciones. Para direccionar 8K posiciones se necesitan 13 bits (longitud delcontador de programa). Sin embargo el PIC solo tiene implementadas 1K posiciones, por lo que ignora los 3 bits demás peso del PC (contador programa). La organización de la memoria de programa es como indica la figura 2.2.El vector de reset se almacena en la dirección 0000, mientras que el vector de interrupción está en la 0004. Lamemoria de programa de usuario comienza en la dirección 0005 y se extiende hasta la 03FF.La pila es una zona aislada de las memorias de instrucciones y datos (Ver fig. 2.3). Tiene una estructura LIFO (Last InFirst Out) en la que el último valor guardado es el primero que sale. Tiene ocho niveles de profundidad cada uno con13 bits. La instrucción CALL (Ver apartado 5) y las interrupciones originan la carga del contenido del PC en el nivelDOCENTE: Ing. Luis Pacheco Cribillero
  3. 3. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIsuperior de la pila. El contenido del nivel superior se saca de la pila al ejecutar las instrucciones RETURN, RETLW yRETFIE.Figura 2.3. Organización de la memoria deprograma3. Registros internos:La memoria de datos del 16F84dispone de dos zonas diferentes:- Área EEPROM: de 64 bytes. En ella sepueden almacenar datos que no se pierdenal desconectar la alimentación.- Área RAM estática o SRAM:en ella reside el banco deregistrosespecíficos (SFR) y el banco de registros depropósito general (GPR). El primero tiene 24posiciones de tamaño byte y el segundo 68.La memoria RAM se halla dividida en dosbancos (banco 0 y banco 1) de 128 bytescada uno. Las 12 primeras posiciones están reservadas al SFR, son los registros encargados del control delprocesador y sus recursos. Las direcciones comprendidas entre 7H – 87H no son operativas. Los 68 registros delGPR se destinan a propósito general y en realidad solo son operativos los 68 del banco 0 porque los del banco 1 semapean sobre el banco 0, es decir, cuando se apunta a uno del banco 1 se accede al mismo pero en el banco 0.A continuación, se describen los diferentes registros que serepresentan en la figura 3.1.Figura 3.1. Organización de los registros internos- Registro de indirección (00): Este registro no tiene existenciafísica, por tanto no se podrá leer. Si se intenta acceder a él, siemprese encontrará 00, y si se intenta escribir se producirá un NOP, esdecir, una instrucción que no hace nada. Este registro se utilizaúnicamente para realizar un direccionamiento indirecto; cuando se lehace referencia se accede a la dirección de un banco especificadacon los 7 bits de menos peso del registro FSR. El bit de más peso delFSR junto con el IRP del registro ESTADO se encarga de seleccionarel banco a acceder.- Registro PCL (02): Son los 8 bits de menos peso del contador delprograma o PC. Como el PC debe tiene un tamaño de 13 bits, susbits de mayor peso se llevan al registro PCLATH (posiciones 0A-8A).Como muestra la figura 3.2, si el PC es destino de una instrucción, elcontenido de PCLATH se tiene en cuenta automáticamente; para lasinstrucciones CALL y GOTO tiene lugar la misma operación (teniendoen cuenta que el PC está ahora codificado con 11 bits en la propiainstrucción).Figura 3.2. Determinación de los bits de mayor peso del PC a travésdel PCLATH. A la derecha, para instrucciones CALL y GOTO.- Registro STATUS (03): contiene un cierto número de bits de estado de la unidad central. Se puede leer y escribircomo cualquier otro registro. En la figura 3.3 se puede ver la estructura de este registro; hay bits que no se puedenDOCENTE: Ing. Luis Pacheco Cribillero
  4. 4. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIvaria al indicar estados del procesador, así al ejecutar la instrucción de borrar el registro, este se carga con el valor000uu1uu (u = se queda como estaba).Figura 3.3. Estructura interna del registro estadoEl bit 0 o C (Carry) es el bit de acarreo para las operaciones de suma y sustracción. Se pone a 1 si se produceacarreo en el bit de mayor peso. También lo utilizan las instrucciones de rotación.El bit 1 o DC (Digit Carry) es el bit de acarreo de dígito. Funciona igual que el anterior, pero haciendo referencia al 4ºbit.El bit 2 o Z (Zero) se pone a 1 si el resultado de una operación aritmética o lógica es nulo.El bit 3 o PD (Power down) se pone a 1 durante la conexión a la alimentación del circuito o durante la ejecución de lainstrucción CLRWDT. Se pone a 0 al ejecutar SLEEP. Es de solo lectura.El bit 4 o TO (Time out) se pone a 1 durante la conexión a alimentación o durante la ejecución de una instrucciónCLRWDT o SLEEP. Se pone a 0 cuando el temporizador watchdog se desborda. También es de solo lectura.Los bit 5 y 6 o RP0 y RP1 sirven para seleccionar las páginas de memoria de programa. El 16F84 solo utiliza el RP0al tener tan solo dos páginas; si RP0 = 1 selecciona pagina 1, si RP0 = 0 selecciona la pagina 0.El bit 7 o IRP no se utiliza en nuestro caso, debe programarse como 0.Los bits T0 y PD también nos sirven para determinar la causa de la producción de un reset (ver tabla 3.1).TO PD Condición de reset1 1 Reset por alimentación0 1 Desbordamiento del WDT en funcionamiento normal0 0 Desbordamiento del WDT en estado de reposo1 1 Activación del MCLR en funcionamiento normal1 0 Activación MCLR en reposoTabla 3.1. Determinación del origen de un reset- Registro INTCON (0B-8B): sirve para el control global de las interrupciones y para indicar la procedencia dealguna de ellas. Las cuatro fuentes de interrupción posibles en el 16F84 son: activación de la patilla RB0/INT,desbordamiento del temporizador TMR0, cambio de estado en los pines RB4 a RB7 y el fin de una escritura enla EEPROM de datos. Figura 3.4. Registro INTCONCada bit del registro INTCON (Figura 3.4) tiene un significado concreto que es el que sigue:El bit 0 o RBIF (RB Interrupt Flag) se pone a 1 si hay un cambio de estado en una de las líneas de RB4 a RB7 delpuerto B.El bit 1 o INTF (Interrupt Flag) se pone a 1 si hay una interrupción provocada por la línea RB=/INT del puerto B.El bit 2 o T0IF (Timer 0 Interrupt Flag) se pone a 1 si hay desbordamiento del Timer 0.El bit 3 o RBIE (RB Interrupt Enable) se pone a 1 para autorizar las interrupciones provocadas por un cambio deestado en las líneas RB4 a RB7 del puerto B.El bit 4 o INTE (Interrupt Enable) se pone a 1 para autorizar las interrupciones provocadas por la línea RB0/INT delpuerto B.Los bit 5 o bit T0IE (Timer 0 Interrupt Enable) se pone a 1 para autorizar las interrupciones debidas aldesbordamiento del temporizador 0.El bit 6 o EEIE (EEPROM Interrupt Enable) se pone a 1 para autorizar las interrupciones que proceden de la memoriaEEPROM de datos.El bit 7 o GIE (Global Interrupt Enable) se pone a 1 para autorizar todas las interrupciones que no tengan sus bits a 0.Si este bit es 0, todas las interrupciones están desactivadas aunque sus bits particulares sean 1 (Ver figura 3.5).Figura 3.5. Lógica de control para interrupciones- Puertas de E/S: el 16F84 solo dispone de dos puertas deentrada/salida. La puerta A posee 5 líneas, RA0-RA4, y unade ellas soporta dos funciones multiplexadas. Se trata de laRA4/T0CKI, que puede actuar como línea de E/S o comopatilla de entrada para los impulsos con que debe contarTMR0. La puerta B tiene 8 líneas, RB0-RB7, y también tieneDOCENTE: Ing. Luis Pacheco Cribillero
  5. 5. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIuna con funciones multiplexadas, la RB0/INT, que sirve como E/S y como patilla por la que se reciben los impulsosexternos que provocan una interrupción. Cada línea de E/S puede configurarse independientemente como entrada osalida, según se ponga a 1 o 0, respectivamente, el bit asociado del registro de TRISA o TRISB (direcciones 5 y 6 delbanco 1 de la memoria de datos). Los registros PUERTAA y PUERTAB guardan la información que entra o sale por lapuerta (direcciones 5 y 6 del banco 0). Al reinicializarse el pic todos los bits de los registros TRIS quedan a 1, con loque las líneas de las puertas quedan configuradas como entradas; las resistencias pull-up que veremos másadelante, se desconectan al resetear. Cada línea de salida puede suministrar una corriente máxima de 20 mA y si esentrada puede absorber hasta 25 mA.En la figura 3.6 se muestra laadaptación de las patillas RA4-RA0 alas señalesinternas del procesador. Por ejemplo,cuando se saca un nivel lógico por unapuerta A, primero se deposita en lalínea correspondiente del bus de datosy se activa la señal WRITE, lo queorigina el almacenamiento del nivel enla báscula de datos; para que actúecomo salida, la báscula deconfiguración debería contener un 0,por lo que la puerta OR tendría un 0 ensu salida y la AND también; estosvalores producen la conducción delPMOS superior y el bloqueo delNMOS; así, la patilla queda conectadaa Vdd y tiene nivel alto. Como la líneade salida está lacheada conserva suvalor hasta que no se reescriba en labáscula D. Figura 3.6. Conexión electrónica de las patillas RA·-RA0. A la derecha lapatilla RA4En la figura 3.7 se ve el esquema electrónico de conexionado para las patillas RB7-RB0.A todas las líneas de esta puerta se lepermite conectar una resistencia pull-up de elevado valor con el positivo dela alimentación (se programa en elregistro OPTION). Las líneas RB7-RB4pueden programarse para que generenuna interrupción si alguna de ellascambia de valor (en ese caso seindicaría en el RBIF). Las líneas RB7 yRB6 también se utilizan para lagrabación en serie de la memoria deprograma (Ver apartado 4).Figura 3.7. A la izquierda elconexionado de las puertas RB7-RB4.A la derecha para las puertas RB3-RB0.- Temporizadores: el TMR0 es un temporizador/contador de 8 bits. Puede utilizarse como contador, representadopor los impulsos que se aplican a la patilla RA4/T0CKI (de FF pasa a 00, activándose un señalizador o unainterrupción), y como temporizador, cargando un registro con un valor inicial (al desbordarse hará lo mismo que elanterior). Para programarlo de una u otra forma se usa el registro OPTION que veremos más adelante. El TMR0puede ser leído y escrito (dirección 1, banco 0) en cualquier momento al estar conectado al bus de datos. Cuandoactúa como temporizador se carga con el valor de los impulsos que se quiere temporizar, pero expresados encomplemento a 2; así, al llegar al número de impulsos deseado se desborda y activa el señalizador TOIF y/o seproduce la interrupción.Otro temporizador importante es el perro guardián (WDT). Se trata de un contador interno de 8 bits que origina unreset cuando se desborda. Su control de tiempos es independiente del TMR0 y está basado en una red R-C interna,por lo que no necesita ningún componente externo y continúa funcionando incluso cuando el reloj del pic se paraDOCENTE: Ing. Luis Pacheco Cribillero
  6. 6. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIdurante, por ejemplo, una instrucción SLEEP. Se programa desde el registro OPTION. Se puede desactivar en lapalabra de configuración (más adelante).La temporización nominal del WDT es de 18 msg, pero puede llegar a 2,3 segundos utilizando el llamado divisor defrecuencia. Este divisor puede utilizarse con el WDT o con el TMR0. Con el TMR0 actúa como Pre-divisor, es decir,los impulsos pasan primero por el divisor y luego se aplican al TMR0. Con el WDT actúa como Post-divisor.Una fórmula práctica para calcular los tiempos a controlar con el TMR0 puede ser esta:Valor a cargar en TMR0 = Temporización / 4 * Toscilación * Rango del divisor- Registro OPTION (dirección 81): la misión principal de este registro es controlar el TMR0 y el divisor defrecuencia. Ocupa la dirección 81H de la memoria de datos (equivale a la dirección 1 del banco 1). En la figura 3.8 sepuede ver la estructura de este registro.Figura 3.8. Distribución de los bits del registro OPTIONLos bits 0, 1 y 2 o PS0, PS1 y PS2 son los encargados de definir el valor con el que actúa el divisor de frecuencia.En la tabla 3.2 se pueden ver los distintos valores que puede tomar el divisor.PS2 PS1 PS0 División del TMR0 División del WDT0 0 0 1:2 1:10 0 1 1:4 1:20 1 0 1:8 1:40 1 1 1:16 1:81 0 0 1:32 1:161 0 1 1:64 1:321 1 0 1:128 1:641 1 1 1:256 1:128Tabla 3.2. Programación de los bits PS2, PS1 y PS0El bit 3 o PSA (Prescaler assignment) asigna el divisor de frecuencia al WDT (1) o al TMR0 (0).El bit 4 o T0SE (Timer 0 signal edge) hace que el TMR0 se incremente cada flanco ascendente (0) o descendente(1).El bit 5 o T0CS (Timer 0 signal source) a 0 indica que el temporizador utilizará el reloj interno. Si está a 1 utilizará laseñal aplicada en la patilla RA0/T0CKI.El bit 6 o INTEDG (Interrupt edge) define el sentido del flanco que provocará una interrupción a través de la patillaRB0/INT. Un 1 activa un flanco de subida y un 0 de bajada.El bit 7 o RBPU (RB pull up enable) activa las resistencias pull-up (0) o las desactiva (1).- LA PALABRA DE CONFIGURACIÓN: se trata de una posición reservada de la memoria de programa(2007H) y accesible únicamente durante la grabación del pic.Figura 3.9. Distribución de los bits de la palabra de configuraciónLos bits CP son bits de protección de la memoria de código. A 1 indican que no está protegida, a 0 el programa no sepuede leer ni sobreescribir. A 0 también evita que pueda accederse a la EEPROM de datos, borrándose esta si el bites modificado (si pasa de 0 a 1).El bit PWRTE activa (con un 0) el temporizador llamado “power-up”, que retrasa en 72 msg la puesta en marcha alconectar la alimentación, garantizándose así la estabilidad de la tensión aplicada.El bit WDTE activa (1) o desactiva (0) el perro guardián.Los bits FOSC1-FOSC0 seleccionan el oscilador utilizado: RC (11), HS (10), XT (01) y LP (00).Las posiciones de memoria 2000H-2003H también están reservadas para las llamadas palabras de configuración(ID). En estas solo se usan los 4 bits de menos peso para grabar números de serie, códigos de identificación,numeraciones secuenciales, etc.- Memoria EEPROM de datos: el PIC tiene 64 bytes de memoria donde se pueden almacenar datos yvariables que interesa que no se pierdan cuando se desconecta la alimentación al sistema. En el registro EEADRDOCENTE: Ing. Luis Pacheco Cribillero
  7. 7. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II(dirección 9 del banco 0) se carga la dirección a acceder de la EEPROM de datos. En el registro EEDATA (dirección 8del banco 0) se depositan los datos que se leen o se escriben. El EECON1 (dirección 8 del banco 1) tiene la misiónde controlar las operaciones en la EEPROM (Figura 3.10).Figura 3.10. Distribución de los bits del registro EECON1El bit RD se pone a 1 cuando se va a realizar un ciclo de lectura de la EEPROM. Luego pasa a ceroautomáticamente.El bit WR se pone a 1 cuando se va a realizar un ciclo de escritura de la EEPROM. Luego pasa a ceroautomáticamente.El bit WREN da permiso para escribir cuando está a 1 y prohibe la escritura a 0.El bit WRERR se pone a 1 cuando una operación de escritura ha terminado prematuramente y a 0 cuando hafinalizado correctamente.El bit EEIF se pone a 1 si la operación de escritura se completa con éxito y a 0 si no se ha completado.Un ciclo de escritura tiene una duración de 10 msg. El registro EECON2 no está implementado físicamente y se usaúnicamente como dispositivo de seguridad durante la escritura en la EEPROM.Para leer la EEPROM basta con colocar la dirección a leer en EEADR y poner a 1 el bit RD. El dato leído estarádisponible en el registro EEDATA.Para escribir en la EEPROM se sigue una secuencia de instrucciones en las que interviene el EECON2. Esteregistro solo asume funciones de seguridad, cargándose con dos valores concretos: 55H y AAH. El ciclo de escrituracomienza cargando en EEADR la dirección de la posición a escribir, en el registro EEDATA el valor a grabar yactivado el bit WR. Al acabar la escritura, el bit WR se pone a 0 automáticamente y el señalizador EEIF a 1 (habráque ponerlo a 0 para volver a escribir). Para verificar la correcta escritura, se resta el valor contenido en EEDATA conel dato escrito y se comprueba que el bit Z pase a valer 1.4. Programación:La programación en serie del PIC requiere 5 líneas, dosde las cuales se destinan a soportar el reloj de la transmisión(RB6) y los bits de datos serie (RB7), mientras que las otrastres soportan Vdd, tierra y la tensión de programación.El PIC pasa al modo de programación/verificación poniendo anivel bajo las líneas RB6 y RB7 y aplicando la tensión deprogramación Vpp (12V – 14V). A partir de ese momento porRB6 se transmiten los impulsos de reloj y por RB7 los bits dedatos.Figura 4.1. Esquema de conexionado de un 16F84 parasu grabación del programa en serie5. Instrucciones del pic:Como ya se ha visto, los pic responden a la arquitectura RISC.Esta arquitectura contiene pocas instrucciones (35 en nuestrocaso) simples y rápidas (la mayoría se ejecutan en un ciclo deinstrucción); las instrucciones son ortogonales (las instrucciones pueden usar cualquier operando) y tienen unalongitud constante (14 bits).En la tabla 5.1, podemos ver las 35 instrucciones diferentes que se pueden usar en la programación del pic 16F84.En la columna de sintaxis aparecen las siguientes letras:- f: es el registro de la dirección (7 bits).- d: si vale 1, el resultado de la instrucción se almacena en f. Si vale 0, va al acumulador (W).- b: indica el numero de un bit dentro de un registro.- k: es un valor inmediato (8 bits).- x: indica que es un valor indeterminado.En las últimas dos columnas, se indica el formato de la instrucción (14 bits) y los señalizadores que activa esta(Bits). Para localizar mejor las instrucciones, se ha separado la tabla para distribuir las instrucciones según su función(si manejan bits, registros, etc). La columna C indican la duración en ciclos de instrucción (en nuestro caso un ciclodura 1 microsegundo) que tarda en ejecutarse una instrucción.DOCENTE: Ing. Luis Pacheco Cribillero
  8. 8. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES IIINSTRUCCIONES QUE MANEJAN REGISTROSSINTAXIS OPERACIÓN C FORMATO (14 bits) BitsADDWF f, d W + f 1 00 0111 dfff ffff C,DC,ZANDWF f, d W AND f 1 00 0101 dfff ffff ZCLRF f Borra f 1 00 0001 1fff ffff ZCLRW Borra W 1 00 0001 0xxx xxxx ZCOMF f, d Invierte f 1 00 1001 dfff ffff ZDECF f, d Decrementa f 1 00 0011 dfff ffff ZINCF f, d Incrementa f 1 00 1010 dfff ffff ZIORWF f, d W OR f 1 00 0100 dfff ffff ZMOVF f, d Mueve f 1 00 1000 dfff ffff ZMOVWF f Mueve W y f 1 00 0000 1fff ffffNOP No operación 1 00 0000 0xx0 0000RLF f, d Rota f a la izquierda 1 00 1101 dfff ffff CRRF f, d Rota f a la derecha 1 00 1100 dfff ffff CSUBWF f, d F – W 1 00 0010 dfff ffff C,DC,ZSWAPF f, d Intercambia bits 1 00 1110 dfff ffffXORWF f, d W XOR f 1 00 0110 dfff ffff ZINSTRUCCIONES QUE MANEJAN BITSSINTAXIS OPERACIÓN C FORMATO (14 bits) BitsBCF f, b Borra bit b de f 1 01 00bb bfff ffffBSF f, b Pone a 1 bit b de f 1 01 01bb bfff ffffINSTRUCCIONES DE BRINCOSINTAXIS OPERACIÓN C FORMATO (14 bits) BitsBTFSC f, d Explora bit d de f y salta si es 0 1,2 01 10bb bfff ffffBTFSS f, d Explora bit d de f y salta si es 1 1,2 01 11bb bfff ffffDECFSZ f, d Decrementa f y si es 0 salta 1,2 00 1011 dfff ffffINCFSZ f, d Incrementa f y si es 1 salta 1,2 00 1111 dfff ffffINSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOSSINTAXIS OPERACIÓN C FORMATO (14 bits) BitsADDLW k W + k 1 11 111x kkkk kkkk C,DC,ZANDLW k W AND k 1 11 1001 kkkk kkkk ZIORLW k W OR k 1 11 1000 kkkk kkkk ZMOVLW k Mueve a W el valor k 1 11 00xx kkkk kkkkSUBLW k k – W 1 11 110x kkkk kkkk C,DC,ZXORLW k W XOR k 1 11 1010 kkkk kkkkINSTRUCCIONES DE CONTROL Y ESPECIALESSINTAXIS OPERACIÓN C FORMATO (14 bits) BitsCALL k Llamada a subrutina 2 10 0kkk kkkk kkkk TO,PDCLRWDT Borra o refresca el perro guardián 1 00 0000 0110 0100GOTO k Salto incondicional a k 2 10 1kkk kkkk kkkkRETFIE Retorno de interrupción 2 00 0000 0000 1001RETLW k Retorno de subrutina y W=k 2 11 01xx kkkk kkkkRETURN Retorno de subrutina 2 00 0000 0000 1000SLEEP Pasa al modo de reposo 1 00 0000 0110 0011 TO,PDTabla 5.1. Juego de instrucciones del PIC16F84Por último vamos ha ver más detenidamente el funcionamiento de las instrucciones representadas en la tablaanterior.- ADDLW k: añade el contenido de W al literal k y almacena el resultado en W. Esta instrucción activa los bits C,DC y Z del registro de estado. Se ejecuta en un ciclo de instrucción (todas se ejecutan en el mismo tiempo a menosque se especifique otro valor).- ADDWF f, d: añade el contenido de W al de f, y almacena el resultado en W si d=0, y en f si d=1. Activa losmismos señalizadores que la anterior.- ANDLW k: efectúa un AND lógico entre el contenido de W y el literal k, y almacena el resultado en W. Si elresultado es nulo, activa el bit Z.DOCENTE: Ing. Luis Pacheco Cribillero
  9. 9. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II- ANDWF f, d: efectúa un AND lógico entre el contenido de W y el de f y coloca el resultado en W (d=0) o en f (d=1).- BCF f,b: pone a cero el bit número b de f.- BSF f,b: pone a uno el bit número b de f.- BTFSC f, d: si el bit número b de f es nulo, la instrucción que sigue a ésta se ignora y se trata como un nop. Eneste caso (solo en este caso), la instrucción precisa de dos ciclos para ejecutarse.- BTFSC f, d: si el bit número b de f es 1, la instrucción que sigue a ésta se ignora y se trata como un nop. En estecaso (solo en este caso), la instrucción precisa de dos ciclos para ejecutarse.- CALL k: salvaguarda la dirección de vuelta en la pila y después llama a la subrutina situada en la direccióncargada en el PC. Los pasos que sigue para su ejecución son: PC + 1  pila, k  PC (0 – 10), PCLATH (3,4) PC (11,12)- CLRF f: pone el contenido de f a cero y activa el bit Z.- CLRW: pone el registro W a cero y activa el bit Z.- CLRWDT: pone a cero el registro contador del temporizador watchdog (WDT), así como el predivisor. Pone a 1 losbits TO y PD.- COMF f, d: hace el complementario de f bit a bit. El resultado se almacena de nuevo en f si d=1 y en W si d=0 (eneste caso, f no varía). Si el resultado es nulo, activa Z.- DECF f, d: decrementa el contenido de f en una unidad. El resultado lo almacena de nuevo en f (d=1) o en W(d=0), no variando f en este último caso. También activa Z si el resultado es nulo.- DECFSZ f, d: decrementa el contenido de f en una unidad. El resultado se almacena según el valor de d. Si elresultado es nulo, se ignora la siguiente instrucción y, en ese caso, esta instrucción dura dos ciclos.- GOTO k: llama a la subrutina situada en la dirección cargada en el PC. La ejecución de la instrucción sería: k PC (0-10), PCLATH (3,4)  PC (11,12)- INCF f, d: incrementa el contenido de f en una unidad. El resultado se almacena de nuevo en f o W (en este caso fno varía). Activa Z si el resultado es nulo.- INCFSZ f, d: incrementa el contenido de f en una unidad. El resultado se almacena en f (d=1) o W (d=0 y f novaría). Si el resultado es nulo, se ignora la siguiente instrucción y, en este caso, esta instrucción dura dos ciclos.- IORLW k: efectúa un OR lógico inclusivo entre el contenido de W y el literal k, y almacena el resultado en W. Si laoperación da cero, se activa el bit Z.- IORWF f, d: efectúa un OR lógico inclusivo entre el contenido de W y el contenido de f, y almacena el resultado enW (d=0) o en f. Si la operación da cero, se activa el bit Z.- MOVF f, d: desplaza el contenido de f a f si d=1 ó a W si d=0. El desplazamiento de f a f permite comprobar elcontenido de f con respecto a cero, ya que esta instrucción actúa sobre el bit Z.- MOVLW k: carga W con el literal k.- MOVWF f: carga f con el contenido de W.- NOP: sólo consume tiempo de máquina, un ciclo en este caso.- RETFIE: carga el PC con el valor que se encuentra en la parte superior de la pila, asegurando así la vuelta de lainterrupción. Pone a 1 el bit GIE con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones.- RETLW k: carga W con el literal k, y después carga el PC con el valor que se encuentra en la parte superior de lapila, efectuando así un retorno de subrutina.- RETURN: carga el PC con el valor que se encuentra en la parte superior de la pila, efectuando así una vuelta desubrutina. Es como la anterior pero simplificada.- RLF f, d: rotación de un bit a la izquierda del contenido de f, pasando porel bit de acarreo C (ver figura 5.1). Si d=1 el resultado se almacena en f, sies 0 se almacena en W. Figura 5.1. Desplazamiento a la izquierda- RRF f, d: rotación de un bit a la derecha del contenido de f, pasando por el bit de acarreo C (es como en la figura5.1 pero con las flechas hacia la derecha). Si d=1 el resultado se almacena en f, si es 0 se almacena en W.- SUBLW k: sustrae el contenido de W del literal k (k – W) y almacena el resultado en W. La sustracción se realizaen complemento a dos.- SUBWF f, d: sustrae el contenido de W del contenido de f (f – W) y almacena el resultado en W o f (según valor ded). La sustracción se realiza en complemento a 2. Tanto esta como la anterior activan los bits C, DC, y Z según elcaso.- SWAPF f, d: intercambia los cuatro bits de mayor peso con los cuatro de menor peso de f y almacena el resultadoen f o W (según d).- XORLW k: efectúa un OR lógico exclusivo entre el contenido de W y el literal k, y almacena el resultado en W.- XORLW f, d: efectúa un OR lógico exclusivo entre el contenido de W y el contenido de f, y almacena el resultadoen f o W (según d). Tanto esta como la anterior activa el bit Z si se da el caso.- SLEEP: pone el circuito en modo SLEEP y para el oscilador. El procesador queda congelado, no ejecutandoinstrucciones y manteniendo el mismo valor en la puertas de E/S. Pone a cero el WDT (aunque sigue funcionando), elpredivisor y PD; también pone a 1 el bit TO. Para que el micro salga del modo SLEEP, se tiene que dar una de estassituaciones: que la patilla MCLR se active externamente (reset), que se desborde el WDT(en caso de que estuvieraactivado al entrar en el modo reposo) y que se de una interrupción (como TMR0 está desactivado, solo podráproducirse una de los otros tipos).DOCENTE: Ing. Luis Pacheco Cribillero
  10. 10. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II- ANDWF f, d: efectúa un AND lógico entre el contenido de W y el de f y coloca el resultado en W (d=0) o en f (d=1).- BCF f,b: pone a cero el bit número b de f.- BSF f,b: pone a uno el bit número b de f.- BTFSC f, d: si el bit número b de f es nulo, la instrucción que sigue a ésta se ignora y se trata como un nop. Eneste caso (solo en este caso), la instrucción precisa de dos ciclos para ejecutarse.- BTFSC f, d: si el bit número b de f es 1, la instrucción que sigue a ésta se ignora y se trata como un nop. En estecaso (solo en este caso), la instrucción precisa de dos ciclos para ejecutarse.- CALL k: salvaguarda la dirección de vuelta en la pila y después llama a la subrutina situada en la direccióncargada en el PC. Los pasos que sigue para su ejecución son: PC + 1  pila, k  PC (0 – 10), PCLATH (3,4) PC (11,12)- CLRF f: pone el contenido de f a cero y activa el bit Z.- CLRW: pone el registro W a cero y activa el bit Z.- CLRWDT: pone a cero el registro contador del temporizador watchdog (WDT), así como el predivisor. Pone a 1 losbits TO y PD.- COMF f, d: hace el complementario de f bit a bit. El resultado se almacena de nuevo en f si d=1 y en W si d=0 (eneste caso, f no varía). Si el resultado es nulo, activa Z.- DECF f, d: decrementa el contenido de f en una unidad. El resultado lo almacena de nuevo en f (d=1) o en W(d=0), no variando f en este último caso. También activa Z si el resultado es nulo.- DECFSZ f, d: decrementa el contenido de f en una unidad. El resultado se almacena según el valor de d. Si elresultado es nulo, se ignora la siguiente instrucción y, en ese caso, esta instrucción dura dos ciclos.- GOTO k: llama a la subrutina situada en la dirección cargada en el PC. La ejecución de la instrucción sería: k PC (0-10), PCLATH (3,4)  PC (11,12)- INCF f, d: incrementa el contenido de f en una unidad. El resultado se almacena de nuevo en f o W (en este caso fno varía). Activa Z si el resultado es nulo.- INCFSZ f, d: incrementa el contenido de f en una unidad. El resultado se almacena en f (d=1) o W (d=0 y f novaría). Si el resultado es nulo, se ignora la siguiente instrucción y, en este caso, esta instrucción dura dos ciclos.- IORLW k: efectúa un OR lógico inclusivo entre el contenido de W y el literal k, y almacena el resultado en W. Si laoperación da cero, se activa el bit Z.- IORWF f, d: efectúa un OR lógico inclusivo entre el contenido de W y el contenido de f, y almacena el resultado enW (d=0) o en f. Si la operación da cero, se activa el bit Z.- MOVF f, d: desplaza el contenido de f a f si d=1 ó a W si d=0. El desplazamiento de f a f permite comprobar elcontenido de f con respecto a cero, ya que esta instrucción actúa sobre el bit Z.- MOVLW k: carga W con el literal k.- MOVWF f: carga f con el contenido de W.- NOP: sólo consume tiempo de máquina, un ciclo en este caso.- RETFIE: carga el PC con el valor que se encuentra en la parte superior de la pila, asegurando así la vuelta de lainterrupción. Pone a 1 el bit GIE con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones.- RETLW k: carga W con el literal k, y después carga el PC con el valor que se encuentra en la parte superior de lapila, efectuando así un retorno de subrutina.- RETURN: carga el PC con el valor que se encuentra en la parte superior de la pila, efectuando así una vuelta desubrutina. Es como la anterior pero simplificada.- RLF f, d: rotación de un bit a la izquierda del contenido de f, pasando porel bit de acarreo C (ver figura 5.1). Si d=1 el resultado se almacena en f, sies 0 se almacena en W. Figura 5.1. Desplazamiento a la izquierda- RRF f, d: rotación de un bit a la derecha del contenido de f, pasando por el bit de acarreo C (es como en la figura5.1 pero con las flechas hacia la derecha). Si d=1 el resultado se almacena en f, si es 0 se almacena en W.- SUBLW k: sustrae el contenido de W del literal k (k – W) y almacena el resultado en W. La sustracción se realizaen complemento a dos.- SUBWF f, d: sustrae el contenido de W del contenido de f (f – W) y almacena el resultado en W o f (según valor ded). La sustracción se realiza en complemento a 2. Tanto esta como la anterior activan los bits C, DC, y Z según elcaso.- SWAPF f, d: intercambia los cuatro bits de mayor peso con los cuatro de menor peso de f y almacena el resultadoen f o W (según d).- XORLW k: efectúa un OR lógico exclusivo entre el contenido de W y el literal k, y almacena el resultado en W.- XORLW f, d: efectúa un OR lógico exclusivo entre el contenido de W y el contenido de f, y almacena el resultadoen f o W (según d). Tanto esta como la anterior activa el bit Z si se da el caso.- SLEEP: pone el circuito en modo SLEEP y para el oscilador. El procesador queda congelado, no ejecutandoinstrucciones y manteniendo el mismo valor en la puertas de E/S. Pone a cero el WDT (aunque sigue funcionando), elpredivisor y PD; también pone a 1 el bit TO. Para que el micro salga del modo SLEEP, se tiene que dar una de estassituaciones: que la patilla MCLR se active externamente (reset), que se desborde el WDT(en caso de que estuvieraactivado al entrar en el modo reposo) y que se de una interrupción (como TMR0 está desactivado, solo podráproducirse una de los otros tipos).DOCENTE: Ing. Luis Pacheco Cribillero

×