apuntes del pic 16f84

14
UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II NOTAS SOBRE EL PIC 16F84A El 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 de EEPROM como memoria auxiliar. Estas memorias son eléctricamente borrables, lo que permite grabar y borrar el programa 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 16f84 A continuación se va a comentar brevemente la misión de cada patilla: - Vdd: Patilla por la que se va a aplicar la tensión positiva de 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 para resetear el pic. También se va a utilizar durante la grabación de la memoria de programa para introducir por ella la tensión Vpp (12V – 14V DC). El micropic trainer tiene un botón de 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 un pulsador - OSC1/CLKIN: Por ella se va a introducir la entrada del circuito oscilador externo que va a proporcional la frecuencia de trabajo. - OSC2/CLKOUT: Patilla auxiliar del circuito oscilador. Según la frecuencia de trabajo del oscilador, se va a tener una u otra velocidad en la ejecución de cada instrucción. En las prácticas realizadas, la frecuencia de trabajo es de 4 MHz, por tanto el ciclo de instrucción va a ser de 1sg (4 periodos de reloj x 0,25sg = 1sg). Todas las instrucciones se van a ejecutar en 1sg salvo las de salto que van ha tardar 2sg. 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 XT DOCENTE: Ing. Luis Pacheco Cribillero

Upload: electropic2013

Post on 30-Jun-2015

545 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

NOTAS SOBRE EL PIC 16F84A

El 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 de EEPROM como memoria auxiliar. Estas memorias son eléctricamente borrables, lo que permite grabar y borrar el programa 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 16f84

A continuación se va a comentar brevemente la misión de cada patilla:

- Vdd: Patilla por la que se va a aplicar la tensión positiva de 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 para resetear el pic. También se va a utilizar durante la grabación

de la memoria de programa para introducir por ella la tensión Vpp (12V – 14V DC). El micropic trainer tiene un botón de 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 un pulsador

- OSC1/CLKIN: Por ella se va a introducir la entrada del circuito oscilador externo que va a proporcional la frecuencia de trabajo.

- OSC2/CLKOUT: Patilla auxiliar del circuito oscilador. Según la frecuencia de trabajo del oscilador, se va a tener una u otra velocidad en la ejecución de cada instrucción. En las prácticas realizadas, la frecuencia de trabajo es de 4 MHz, por tanto el ciclo de instrucción va a

ser de 1sg (4 periodos de reloj x 0,25sg = 1sg). Todas las instrucciones se van a ejecutar en 1sg salvo las de salto que van ha tardar 2sg.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 XT

Este circuito utiliza un cristal de cuarzo que actúa como un oscilador que proporciona la frecuencia de 4MHz antes citada. Los condensadores C1 y C2 están comprendidos entre 15 – 33 pF. El micro’pic trainer los utiliza de 27 pF.

- RA0 – RA4: Son las 5 líneas de E/S digitales correspondientes a la puerta A. La línea RA4 multiplexa

el 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á de entrada 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 modo llamado “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 con buses distintos con la memoria de instrucciones y con la de datos, permitiendo a esta acceder simultáneamente a las dos memorias. Se aplica la técnica de segmentación en la ejecución de las instrucciones. Esta segmentación permite

DOCENTE: Ing. Luis Pacheco Cribillero

Page 2: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

al procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta 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 se haya 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 35 instrucciones. Cualquier instrucción puede manejar cualquier elemento de la arquitectura como fuente o como destino, es decir, todos los objetos del sistema (puertas de E/S, posiciones de memoria, etc.) están implementados como registros.

En la figura 2.1 aparece el diagrama de bloques del pic 16f84. Para analizar un poco el funcionamiento del procesador, nos vamos a centrar en la ejecución de una instrucción.

Figura 2.1. Arquitectura interna del PIC16F84

El contador de programa comienza la fase de búsqueda facilitando la dirección de la memoria de instrucciones donde se ubica la instrucción. Su código binario de 14 bits se lee y se carga en el Registro de instrucciones (1), desde donde se transfiere al decodificador y a la unidad de control (2). La ALU (3) es la encargada de realizar la operación aritmético-lógica que implica la instrucción decodificada. Uno de los operandos lo recibe del registro W (4) y el otro de un 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. Este mapa se divide en páginas de 2.048 posiciones. Para direccionar 8K posiciones se necesitan 13 bits (longitud del contador de programa). Sin embargo el PIC solo tiene implementadas 1K posiciones, por lo que ignora los 3 bits de má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. La memoria 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 In First Out) en la que el último valor guardado es el primero que sale. Tiene ocho niveles de profundidad cada uno con 13 bits. La instrucción CALL (Ver apartado 5) y las interrupciones originan la carga del contenido del PC en el nivel DOCENTE: Ing. Luis Pacheco Cribillero

Page 3: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

superior de la pila. El contenido del nivel superior se saca de la pila al ejecutar las instrucciones RETURN, RETLW y RETFIE.

Figura 2.3. Organización de la memoria de programa

3. Registros internos:

La memoria de datos del 16F84 dispone de dos zonas diferentes:

- Área EEPROM: de 64 bytes. En ella se pueden almacenar datos que no se pierden al desconectar la alimentación.

- Área RAM estática o SRAM: en ella reside el banco de registros

específicos (SFR) y el banco de registros de propósito general (GPR). El primero tiene 24 posiciones de tamaño byte y el segundo 68.

La memoria RAM se halla dividida en dos bancos (banco 0 y banco 1) de 128 bytes

cada uno. Las 12 primeras posiciones están reservadas al SFR, son los registros encargados del control del procesador y sus recursos. Las direcciones comprendidas entre 7H – 87H no son operativas. Los 68 registros del GPR se destinan a propósito general y en realidad solo son operativos los 68 del banco 0 porque los del banco 1 se mapean 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 se representan en la figura 3.1.

Figura 3.1. Organización de los registros internos

- Registro de indirección (00): Este registro no tiene existencia física, por tanto no se podrá leer. Si se intenta acceder a él, siempre se encontrará 00, y si se intenta escribir se producirá un NOP, es decir, una instrucción que no hace nada. Este registro se utiliza únicamente para realizar un direccionamiento indirecto; cuando se le hace referencia se accede a la dirección de un banco especificada con los 7 bits de menos peso del registro FSR. El bit de más peso del FSR junto con el IRP del registro ESTADO se encarga de seleccionar el banco a acceder.

- Registro PCL (02): Son los 8 bits de menos peso del contador del programa o PC. Como el PC debe tiene un tamaño de 13 bits, sus bits 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, el contenido de PCLATH se tiene en cuenta automáticamente; para las instrucciones CALL y GOTO tiene lugar la misma operación (teniendo en cuenta que el PC está ahora codificado con 11 bits en la propia instrucción).

Figura 3.2. Determinación de los bits de mayor peso del PC a través del 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 escribir como cualquier otro registro. En la figura 3.3 se puede ver la estructura de este registro; hay bits que no se pueden

DOCENTE: Ing. Luis Pacheco Cribillero

Page 4: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

varia al indicar estados del procesador, así al ejecutar la instrucción de borrar el registro, este se carga con el valor 000uu1uu (u = se queda como estaba).Figura 3.3. Estructura interna del registro estado

El bit 0 o C (Carry) es el bit de acarreo para las operaciones de suma y sustracción. Se pone a 1 si se produce acarreo 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 la instrucció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ón CLRWDT 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 RP0 al 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 reposo

Tabla 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 de alguna 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 en la EEPROM de datos. Figura 3.4. Registro INTCON

Cada 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 del puerto 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 de estado 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 del puerto B.Los bit 5 o bit T0IE (Timer 0 Interrupt Enable) se pone a 1 para autorizar las interrupciones debidas al desbordamiento del temporizador 0.El bit 6 o EEIE (EEPROM Interrupt Enable) se pone a 1 para autorizar las interrupciones que proceden de la memoria EEPROM 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 de entrada/salida. La puerta A posee 5 líneas, RA0-RA4, y una de ellas soporta dos funciones multiplexadas. Se trata de la RA4/T0CKI, que puede actuar como línea de E/S o como patilla de entrada para los impulsos con que debe contar TMR0. La puerta B tiene 8 líneas, RB0-RB7, y también tiene

DOCENTE: Ing. Luis Pacheco Cribillero

Page 5: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

una con funciones multiplexadas, la RB0/INT, que sirve como E/S y como patilla por la que se reciben los impulsos externos que provocan una interrupción. Cada línea de E/S puede configurarse independientemente como entrada o salida, según se ponga a 1 o 0, respectivamente, el bit asociado del registro de TRISA o TRISB (direcciones 5 y 6 del banco 1 de la memoria de datos). Los registros PUERTAA y PUERTAB guardan la información que entra o sale por la puerta (direcciones 5 y 6 del banco 0). Al reinicializarse el pic todos los bits de los registros TRIS quedan a 1, con lo que las líneas de las puertas quedan configuradas como entradas; las resistencias pull-up que veremos más adelante, se desconectan al resetear. Cada línea de salida puede suministrar una corriente máxima de 20 mA y si es entrada puede absorber hasta 25 mA.

En la figura 3.6 se muestra la adaptación de las patillas RA4-RA0 a las señales internas del procesador. Por ejemplo, cuando se saca un nivel lógico por una puerta A, primero se deposita en la línea correspondiente del bus de datos y se activa la señal WRITE, lo que origina el almacenamiento del nivel en la báscula de datos; para que actúe como salida, la báscula de configuración debería contener un 0, por lo que la puerta OR tendría un 0 en su salida y la AND también; estos valores producen la conducción del PMOS superior y el bloqueo del NMOS; así, la patilla queda conectada a Vdd y tiene nivel alto. Como la línea de salida está lacheada conserva su valor hasta que no se reescriba en la báscula D. Figura 3.6. Conexión electrónica de las patillas RA·-RA0. A la derecha la patilla RA4

En 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 le permite conectar una resistencia pull-up de elevado valor con el positivo de la alimentación (se programa en el registro OPTION). Las líneas RB7-RB4 pueden programarse para que generen una interrupción si alguna de ellas cambia de valor (en ese caso se indicaría en el RBIF). Las líneas RB7 y RB6 también se utilizan para la grabación en serie de la memoria de programa (Ver apartado 4).

Figura 3.7. A la izquierda el conexionado 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, representado por los impulsos que se aplican a la patilla RA4/T0CKI (de FF pasa a 00, activándose un señalizador o una interrupción), y como temporizador, cargando un registro con un valor inicial (al desbordarse hará lo mismo que el anterior). Para programarlo de una u otra forma se usa el registro OPTION que veremos más adelante. El TMR0 puede ser leído y escrito (dirección 1, banco 0) en cualquier momento al estar conectado al bus de datos. Cuando actúa como temporizador se carga con el valor de los impulsos que se quiere temporizar, pero expresados en complemento a 2; así, al llegar al número de impulsos deseado se desborda y activa el señalizador TOIF y/o se produce la interrupción.Otro temporizador importante es el perro guardián (WDT). Se trata de un contador interno de 8 bits que origina un reset 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 para

DOCENTE: Ing. Luis Pacheco Cribillero

Page 6: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

durante, por ejemplo, una instrucción SLEEP. Se programa desde el registro OPTION. Se puede desactivar en la palabra 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 de frecuencia. 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 de frecuencia. Ocupa la dirección 81H de la memoria de datos (equivale a la dirección 1 del banco 1). En la figura 3.8 se puede ver la estructura de este registro. Figura 3.8. Distribución de los bits del registro OPTION

Los 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:128

Tabla 3.2. Programación de los bits PS2, PS1 y PS0

El 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á la señ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 patilla RB0/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ón

Los 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 se puede leer ni sobreescribir. A 0 también evita que pueda accederse a la EEPROM de datos, borrándose esta si el bit es 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 al conectar 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 y variables que interesa que no se pierdan cuando se desconecta la alimentación al sistema. En el registro EEADR

DOCENTE: Ing. Luis Pacheco Cribillero

Page 7: Apuntes del pic 16f84

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 8 del banco 0) se depositan los datos que se leen o se escriben. El EECON1 (dirección 8 del banco 1) tiene la misión de controlar las operaciones en la EEPROM (Figura 3.10).

Figura 3.10. Distribución de los bits del registro EECON1

El bit RD se pone a 1 cuando se va a realizar un ciclo de lectura de la EEPROM. Luego pasa a cero automáticamente.El bit WR se pone a 1 cuando se va a realizar un ciclo de escritura de la EEPROM. Luego pasa a cero automá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 ha finalizado 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. Este registro solo asume funciones de seguridad, cargándose con dos valores concretos: 55H y AAH. El ciclo de escritura comienza cargando en EEADR la dirección de la posición a escribir, en el registro EEDATA el valor a grabar y activado 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 con el 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, dos de las cuales se destinan a soportar el reloj de la transmisión (RB6) y los bits de datos serie (RB7), mientras que las otras tres soportan Vdd, tierra y la tensión de programación. El PIC pasa al modo de programación/verificación poniendo a nivel bajo las líneas RB6 y RB7 y aplicando la tensión de programación Vpp (12V – 14V). A partir de ese momento por RB6 se transmiten los impulsos de reloj y por RB7 los bits de datos. Figura 4.1. Esquema de conexionado de un 16F84 para

su grabación del programa en serie

5. Instrucciones del pic:Como ya se ha visto, los pic responden a la arquitectura RISC. Esta arquitectura contiene pocas instrucciones (35 en nuestro caso) simples y rápidas (la mayoría se ejecutan en un ciclo de instrucción); las instrucciones son ortogonales (las instrucciones pueden usar cualquier operando) y tienen una longitud 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 ciclo dura 1 microsegundo) que tarda en ejecutarse una instrucción.

DOCENTE: Ing. Luis Pacheco Cribillero

Page 8: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

INSTRUCCIONES QUE MANEJAN REGISTROSSINTAXIS OPERACIÓN C FORMATO (14 bits) Bits

ADDWF f, d W + f 1 00 0111 dfff ffff C,DC,ZANDWF f, d W AND f 1 00 0101 dfff ffff Z

CLRF f Borra f 1 00 0001 1fff ffff ZCLRW Borra W 1 00 0001 0xxx xxxx Z

COMF 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 Z

IORWF 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 ffff

NOP 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 C

SUBWF 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 Z

INSTRUCCIONES 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 ffff

INSTRUCCIONES 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 ffff

DECFSZ 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 ffff

INSTRUCCIONES 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 kkkk

INSTRUCCIONES DE CONTROL Y ESPECIALESSINTAXIS OPERACIÓN C FORMATO (14 bits) Bits

CALL 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 1001

RETLW 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,PD

Tabla 5.1. Juego de instrucciones del PIC16F84

Por último vamos ha ver más detenidamente el funcionamiento de las instrucciones representadas en la tabla anterior.

- 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 menos que 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 los mismos 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 el resultado es nulo, activa el bit Z.

- 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).

DOCENTE: Ing. Luis Pacheco Cribillero

Page 9: Apuntes del pic 16f84

UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II

- 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. En este 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 este caso (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ón cargada 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 los bits 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 (en este 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 el resultado 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 f no 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 no varí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 la operació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 en W (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 el contenido 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 la interrupció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 la pila, 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 de subrutina. Es como la anterior pero simplificada.- RLF f, d: rotación de un bit a la izquierda del contenido de f, pasando por el bit de acarreo C (ver figura 5.1). Si d=1 el resultado se almacena en f, si es 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 figura 5.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 realiza en 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 de d). La sustracción se realiza en complemento a 2. Tanto esta como la anterior activan los bits C, DC, y Z según el caso.- SWAPF f, d: intercambia los cuatro bits de mayor peso con los cuatro de menor peso de f y almacena el resultado en 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 resultado en 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 ejecutando instrucciones y manteniendo el mismo valor en la puertas de E/S. Pone a cero el WDT (aunque sigue funcionando), el predivisor y PD; también pone a 1 el bit TO. Para que el micro salga del modo SLEEP, se tiene que dar una de estas situaciones: que la patilla MCLR se active externamente (reset), que se desborde el WDT(en caso de que estuviera activado 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