SlideShare una empresa de Scribd logo
1 de 10
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 1µsg (4 periodos de reloj x 0,25µsg = 1µsg). Todas las instrucciones se van a ejecutar en 1µsg salvo las de
salto 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 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
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
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
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 reset
1 1 Reset por alimentación
0 1 Desbordamiento del WDT en funcionamiento normal
0 0 Desbordamiento del WDT en estado de reposo
1 1 Activación del MCLR en funcionamiento normal
1 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
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
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 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 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
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
UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II
INSTRUCCIONES QUE MANEJAN REGISTROS
SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits
ADDWF f, d W + f 1 00 0111 dfff ffff C,DC,Z
ANDWF f, d W AND f 1 00 0101 dfff ffff Z
CLRF f Borra f 1 00 0001 1fff ffff Z
CLRW Borra W 1 00 0001 0xxx xxxx Z
COMF f, d Invierte f 1 00 1001 dfff ffff Z
DECF f, d Decrementa f 1 00 0011 dfff ffff Z
INCF f, d Incrementa f 1 00 1010 dfff ffff Z
IORWF f, d W OR f 1 00 0100 dfff ffff Z
MOVF f, d Mueve f 1 00 1000 dfff ffff Z
MOVWF f Mueve W y f 1 00 0000 1fff ffff
NOP No operación 1 00 0000 0xx0 0000
RLF f, d Rota f a la izquierda 1 00 1101 dfff ffff C
RRF 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,Z
SWAPF f, d Intercambia bits 1 00 1110 dfff ffff
XORWF f, d W XOR f 1 00 0110 dfff ffff Z
INSTRUCCIONES QUE MANEJAN BITS
SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits
BCF f, b Borra bit b de f 1 01 00bb bfff ffff
BSF f, b Pone a 1 bit b de f 1 01 01bb bfff ffff
INSTRUCCIONES DE BRINCO
SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits
BTFSC f, d Explora bit d de f y salta si es 0 1,2 01 10bb bfff ffff
BTFSS 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 ffff
INCFSZ f, d Incrementa f y si es 1 salta 1,2 00 1111 dfff ffff
INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS
SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits
ADDLW k W + k 1 11 111x kkkk kkkk C,DC,Z
ANDLW k W AND k 1 11 1001 kkkk kkkk Z
IORLW k W OR k 1 11 1000 kkkk kkkk Z
MOVLW k Mueve a W el valor k 1 11 00xx kkkk kkkk
SUBLW k k – W 1 11 110x kkkk kkkk C,DC,Z
XORLW k W XOR k 1 11 1010 kkkk kkkk
INSTRUCCIONES DE CONTROL Y ESPECIALES
SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits
CALL k Llamada a subrutina 2 10 0kkk kkkk kkkk TO,PD
CLRWDT Borra o refresca el perro guardián 1 00 0000 0110 0100
GOTO k Salto incondicional a k 2 10 1kkk kkkk kkkk
RETFIE Retorno de interrupción 2 00 0000 0000 1001
RETLW k Retorno de subrutina y W=k 2 11 01xx kkkk kkkk
RETURN Retorno de subrutina 2 00 0000 0000 1000
SLEEP 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.
DOCENTE: Ing. Luis Pacheco Cribillero
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. 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
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. 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

Más contenido relacionado

La actualidad más candente

PWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosPWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosEduardo Henriquez
 
SysTick, Timer & Watchdog
SysTick, Timer & WatchdogSysTick, Timer & Watchdog
SysTick, Timer & WatchdogGiovanni Panice
 
Field programable gate array
Field programable gate arrayField programable gate array
Field programable gate arrayNeha Agarwal
 
Introduction to 80386
Introduction to 80386Introduction to 80386
Introduction to 80386Abinaya B
 
Combinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfCombinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfMoinPasha12
 
01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swetha01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swethaswethamg18
 
Simatic s7 300 caracteristicas
Simatic s7 300 caracteristicasSimatic s7 300 caracteristicas
Simatic s7 300 caracteristicastechonmyweb
 
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1Microcontroladores: Los microcontroladores AVR de ATMEL parte 1
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1SANTIAGO PABLO ALBERTO
 
PLD’s (programmable logic device)
PLD’s (programmable logic device)PLD’s (programmable logic device)
PLD’s (programmable logic device)Carlos Solano
 
ATPG Methods and Algorithms
ATPG Methods and AlgorithmsATPG Methods and Algorithms
ATPG Methods and AlgorithmsDeiptii Das
 
ARM architcture
ARM architcture ARM architcture
ARM architcture Hossam Adel
 
Dispositivos logicos programables
Dispositivos logicos programablesDispositivos logicos programables
Dispositivos logicos programablesLuiS YmAY
 

La actualidad más candente (20)

PWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros InvolucradosPWM con PIC16F877A: Modulos y Registros Involucrados
PWM con PIC16F877A: Modulos y Registros Involucrados
 
SysTick, Timer & Watchdog
SysTick, Timer & WatchdogSysTick, Timer & Watchdog
SysTick, Timer & Watchdog
 
Floor plan & Power Plan
Floor plan & Power Plan Floor plan & Power Plan
Floor plan & Power Plan
 
Timers and pwm
Timers and pwmTimers and pwm
Timers and pwm
 
Memory interfacing
Memory interfacingMemory interfacing
Memory interfacing
 
Field programable gate array
Field programable gate arrayField programable gate array
Field programable gate array
 
Transition fault detection
Transition fault detectionTransition fault detection
Transition fault detection
 
Introduction to 80386
Introduction to 80386Introduction to 80386
Introduction to 80386
 
Combinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdfCombinational & Sequential ATPG.pdf
Combinational & Sequential ATPG.pdf
 
01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swetha01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swetha
 
Simatic s7 300 caracteristicas
Simatic s7 300 caracteristicasSimatic s7 300 caracteristicas
Simatic s7 300 caracteristicas
 
Micro2 tema 1
Micro2 tema 1Micro2 tema 1
Micro2 tema 1
 
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1Microcontroladores: Los microcontroladores AVR de ATMEL parte 1
Microcontroladores: Los microcontroladores AVR de ATMEL parte 1
 
PLD’s (programmable logic device)
PLD’s (programmable logic device)PLD’s (programmable logic device)
PLD’s (programmable logic device)
 
timers.pdf
timers.pdftimers.pdf
timers.pdf
 
ATPG Methods and Algorithms
ATPG Methods and AlgorithmsATPG Methods and Algorithms
ATPG Methods and Algorithms
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 
ARM architcture
ARM architcture ARM architcture
ARM architcture
 
Spyglass dft
Spyglass dftSpyglass dft
Spyglass dft
 
Dispositivos logicos programables
Dispositivos logicos programablesDispositivos logicos programables
Dispositivos logicos programables
 

Destacado

Lab.270910.instrucciones basicas del pic 16 f84a
Lab.270910.instrucciones basicas del pic 16 f84aLab.270910.instrucciones basicas del pic 16 f84a
Lab.270910.instrucciones basicas del pic 16 f84almendi
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICsguest0ce7f8
 
Ud1 7 puertos_es_pic
Ud1 7 puertos_es_picUd1 7 puertos_es_pic
Ud1 7 puertos_es_picarnadillo
 
Ensamblador pic16f84a
Ensamblador pic16f84aEnsamblador pic16f84a
Ensamblador pic16f84aRoberto Mora
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICsguest0ce7f8
 
Electronica aplicada primera presentacion
Electronica aplicada primera presentacionElectronica aplicada primera presentacion
Electronica aplicada primera presentacionUNACH
 
PIC MICROCONTROLADORES
PIC MICROCONTROLADORESPIC MICROCONTROLADORES
PIC MICROCONTROLADORESada_laura
 
El Microprocesador Y Su Arquitectura
El Microprocesador Y Su ArquitecturaEl Microprocesador Y Su Arquitectura
El Microprocesador Y Su Arquitecturajadenjgct
 
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1ddarioooo
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 

Destacado (12)

Lab.270910.instrucciones basicas del pic 16 f84a
Lab.270910.instrucciones basicas del pic 16 f84aLab.270910.instrucciones basicas del pic 16 f84a
Lab.270910.instrucciones basicas del pic 16 f84a
 
Manual pic
Manual picManual pic
Manual pic
 
Cpu12 Reference Manual
Cpu12 Reference ManualCpu12 Reference Manual
Cpu12 Reference Manual
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICs
 
Ud1 7 puertos_es_pic
Ud1 7 puertos_es_picUd1 7 puertos_es_pic
Ud1 7 puertos_es_pic
 
Ensamblador pic16f84a
Ensamblador pic16f84aEnsamblador pic16f84a
Ensamblador pic16f84a
 
Introducción PICs
Introducción PICsIntroducción PICs
Introducción PICs
 
Electronica aplicada primera presentacion
Electronica aplicada primera presentacionElectronica aplicada primera presentacion
Electronica aplicada primera presentacion
 
PIC MICROCONTROLADORES
PIC MICROCONTROLADORESPIC MICROCONTROLADORES
PIC MICROCONTROLADORES
 
El Microprocesador Y Su Arquitectura
El Microprocesador Y Su ArquitecturaEl Microprocesador Y Su Arquitectura
El Microprocesador Y Su Arquitectura
 
Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1Curso microprocesadores y_microcontroladores_unidad_1
Curso microprocesadores y_microcontroladores_unidad_1
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 

Similar a Apuntes del pic 16f84

Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercanteDaniel Remondegui
 
7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanolDanny Sanchez
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedadordy vc
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresGabriel Jhonatan
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del bancoAnibal Ulibarri
 
2 curso de pic (saber electronica)
2 curso de pic (saber electronica)2 curso de pic (saber electronica)
2 curso de pic (saber electronica)Geovanny Ruiz
 
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...SANTIAGO PABLO ALBERTO
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Rubén Loredo
 
Introducpic2
Introducpic2Introducpic2
Introducpic2conalep
 
Introducpic
IntroducpicIntroducpic
Introducpicconalep
 
Rutinas y Sub Rutinas del MicroZ80
Rutinas y Sub Rutinas del MicroZ80Rutinas y Sub Rutinas del MicroZ80
Rutinas y Sub Rutinas del MicroZ80Pablo Chumania
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84AMicroPart
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadoresupc
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadoresupc
 

Similar a Apuntes del pic 16f84 (20)

Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercante
 
7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedador
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladores
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del banco
 
Curso de-picnn
Curso de-picnnCurso de-picnn
Curso de-picnn
 
2 curso de pic (saber electronica)
2 curso de pic (saber electronica)2 curso de pic (saber electronica)
2 curso de pic (saber electronica)
 
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...
Microcontroladores: Curso de microcontroladores PIC para estudiantes y aficio...
 
Curso de pic
Curso de picCurso de pic
Curso de pic
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51
 
Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
Registros del Pic 16F84
Registros del Pic 16F84Registros del Pic 16F84
Registros del Pic 16F84
 
Rutinas y Sub Rutinas del MicroZ80
Rutinas y Sub Rutinas del MicroZ80Rutinas y Sub Rutinas del MicroZ80
Rutinas y Sub Rutinas del MicroZ80
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84A
 
Ut03 1 cpu
Ut03 1 cpuUt03 1 cpu
Ut03 1 cpu
 
Microprocesador
Microprocesador Microprocesador
Microprocesador
 
Manual de microcontroladores
Manual de microcontroladoresManual de microcontroladores
Manual de microcontroladores
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 

Apuntes del pic 16f84

  • 1. 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 1µsg (4 periodos de reloj x 0,25µsg = 1µsg). Todas las instrucciones se van a ejecutar en 1µsg salvo las de salto 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 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
  • 2. 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
  • 3. 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
  • 4. 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 reset 1 1 Reset por alimentación 0 1 Desbordamiento del WDT en funcionamiento normal 0 0 Desbordamiento del WDT en estado de reposo 1 1 Activación del MCLR en funcionamiento normal 1 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
  • 5. 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
  • 6. 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 WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8 1:4 0 1 1 1:16 1:8 1 0 0 1:32 1:16 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 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
  • 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 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
  • 8. UNIVERSIDAD TECNOLOGICA DEL PERÚ FACULTAD DE INGENIERÍA ELECTRÓNICA CIRCUITOS DIGITALES II INSTRUCCIONES QUE MANEJAN REGISTROS SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits ADDWF f, d W + f 1 00 0111 dfff ffff C,DC,Z ANDWF f, d W AND f 1 00 0101 dfff ffff Z CLRF f Borra f 1 00 0001 1fff ffff Z CLRW Borra W 1 00 0001 0xxx xxxx Z COMF f, d Invierte f 1 00 1001 dfff ffff Z DECF f, d Decrementa f 1 00 0011 dfff ffff Z INCF f, d Incrementa f 1 00 1010 dfff ffff Z IORWF f, d W OR f 1 00 0100 dfff ffff Z MOVF f, d Mueve f 1 00 1000 dfff ffff Z MOVWF f Mueve W y f 1 00 0000 1fff ffff NOP No operación 1 00 0000 0xx0 0000 RLF f, d Rota f a la izquierda 1 00 1101 dfff ffff C RRF 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,Z SWAPF f, d Intercambia bits 1 00 1110 dfff ffff XORWF f, d W XOR f 1 00 0110 dfff ffff Z INSTRUCCIONES QUE MANEJAN BITS SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits BCF f, b Borra bit b de f 1 01 00bb bfff ffff BSF f, b Pone a 1 bit b de f 1 01 01bb bfff ffff INSTRUCCIONES DE BRINCO SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits BTFSC f, d Explora bit d de f y salta si es 0 1,2 01 10bb bfff ffff BTFSS 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 ffff INCFSZ f, d Incrementa f y si es 1 salta 1,2 00 1111 dfff ffff INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits ADDLW k W + k 1 11 111x kkkk kkkk C,DC,Z ANDLW k W AND k 1 11 1001 kkkk kkkk Z IORLW k W OR k 1 11 1000 kkkk kkkk Z MOVLW k Mueve a W el valor k 1 11 00xx kkkk kkkk SUBLW k k – W 1 11 110x kkkk kkkk C,DC,Z XORLW k W XOR k 1 11 1010 kkkk kkkk INSTRUCCIONES DE CONTROL Y ESPECIALES SINTAXIS OPERACIÓN C FORMATO (14 bits) Bits CALL k Llamada a subrutina 2 10 0kkk kkkk kkkk TO,PD CLRWDT Borra o refresca el perro guardián 1 00 0000 0110 0100 GOTO k Salto incondicional a k 2 10 1kkk kkkk kkkk RETFIE Retorno de interrupción 2 00 0000 0000 1001 RETLW k Retorno de subrutina y W=k 2 11 01xx kkkk kkkk RETURN Retorno de subrutina 2 00 0000 0000 1000 SLEEP 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. DOCENTE: Ing. Luis Pacheco Cribillero
  • 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. 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
  • 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. 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