Está en la página 1de 29

1. ¿QUÉ ES UN MICROCONTROLADOR?

Es un circuito integrado programable que contiene todos los componentes de


un computador

Se emplea para controlar el funcionamiento de una tarea determinada y, debido a su


reducido tamaño, suele ir incorporado en el propio dispositivo al que gobierna.

También se lo conoce con el nombre de computador dedicado ya que en su


memoria sólo reside un programa destinado a gobernar una aplicación determinada.

Sus líneas de E/S soportan el conexionado de los sensores y actuadores del


dispositivo a controlar y todos los recursos complementarios disponibles tienen como
única finalidad atender sus requerimientos. Una vez programado y configurado el
microcontrolador solamente sirve para gobernar la tarea asignada.

Podemos decir entonces que:

Un microcontrolador es un computador completo, aunque de limitadas


prestaciones, que está contenido en el chip de un circuito integrado y se destina a
gobernar una sola tarea.

Ejemplos: electrodomésticos línea blanca (lavarropas, lavavajillas, microondas,


etc.), línea marrón (televisores, equipos de música, etc.), elementos de informática
(mouse, teclado, impresora, etc.), sistemas de vigilancia, control de ascensores,
comunicaciones, entre otras.

Las comunicaciones y los productos de consumo general absorben más de la mitad


de la producción de microcontroladores. El resto se distribuye entre el sector de la
automoción, las computadoras y la industria.
2. DIFERENCIAS ENTRE UN MICROPROCESADOR Y UN MICROCONTROLADOR

Un MICROPROCESADOR es un SISTEMA ABIERTO con el que puede construirse un


computador con las características que se desee, acoplándole los módulos necesarios.

Microprocesador

Memoria Controlador 1 Controlador 2

Periférico Periférico

Un MICROCONTROLADOR es un SISTEMA CERRADO que contiene un computador


completo y de prestaciones limitadas que no se pueden modificar.

P P
E E
R R
I I
F Microcontrolador F
É É
R R
I I
C C
O O
S S

Todas las partes del computador están contenidas en su interior y sólo salen al exterior
las líneas que gobiernan los periféricos.
Si sólo se dispusiese de 1 modelo debería tener potenciados todos sus recursos para
poder adaptarse a las exigencias de las múltiples aplicaciones. En lugar de eso, los
fabricantes ofrecen gran cantidad de modelos diferentes. Se puede seleccionar según
capacidad de memoria, número de líneas de E/S, cantidad y potencia de los elementos
auxiliares, velocidad, etc.
3. ARQUITECTURA INTERNA

Un MICROCONTROLADOR posee todos los componentes de un computador pero


con unas características fijas que no pueden alterarse.

Las partes principales de un microcontrolador son:

1. Procesador
2. Memoria no volátil para contener el programa
3. Memoria de lectura/escritura para guardar los datos.
4. Líneas de E/S para los controladores de periféricos
5. Recursos auxiliares:
a) Circuito de reloj
b) Temporizadores
c) Watchdog (perro guardián)
d) Conversores A/D y D/A
e) Comparadores analógicos
f) Protección ante fallas de la alimentación
g) Estado de reposo o de bajo consumo

3.1. EL PROCESADOR

Los procesadores utilizados por los microcontroladores PIC utilizan la arquitectura


HARVARD en lugar de la tradicional de VON NEUMANN.

Esta arquitectura utiliza una memoria de programa y una memoria de datos, cada
una con sus respectivos buses de direcciones y datos / instrucciones, a diferencia de Von
Neumann que dispone de una única memoria para instrucciones y datos a la cual se
accede a través de un sistema de buses único (direcciones, datos y control).

BUS Memoria Central:


CPU Programa y datos
La arquitectura HARVARD dispone de dos memorias independientes: una, que contiene
sólo instrucciones, y otra, sólo datos. Ambas disponen de sus respectivos sistemas de
buses de acceso lo cual permite realizar operaciones de acceso (lectura o escritura) en
ambas memorias.

Bus Direcc de Instrucciones (10bits) Bus Direcc.datos (9 bits)

Memoria de Memoria de
Programa datos

UCP

1K x 14 bits 512 x 8 bits

Bus de Instrucciones (14 bits)


Bus de Datos (8 bits)

El hecho de disponer de dos memoria separadas para instrucciones y datos propicia


el PARALELISMO y permite adecuar el tamaño de las palabras y los buses a los
requerimientos específicos de las instrucciones y de los datos.

La arquitectura HARVARD propicia numerosas ventajas al funcionamiento del


sistema, las cuales se enumeran a continuación:

a) Aplica la técnica de segmentación (pipe-line) en la ejecución de las


instrucciones. Esta técnica permite 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 trabajar
con dos instrucciones a la vez.

b) El formato de todas las instrucciones tiene la misma longitud (14 bits)


aunque el formato de instrucción es variable.

c) Procesador RISC (Reduced Instruction Set Computer - Computador de


Juego de Instrucciones Reducido).

d) Todas las instrucciones son ortogonales, es decir que cualquier instrucción


puede manejar cualquier elemento de la arquitectura como fuente o como destino. En la
ALU se realizan las operaciones aritmético-lógicas con dos operandos, uno que recibe
desde el registro W (que cumple la función del AC en los microprocesadores
convencionales) y otro que puede provenir de cualquier registro interno direccionable (de
la RAM). El resultado de la operación se puede depositar en el registro de trabajo (W) o
en el registro de la RAM utilizado en la operación. Esta funcionalidad da un carácter
completamente "ortogonal" a las instrucciones, posibilitando que los operandos fuente y
destino estén ubicados en cualquier registro.

e) Arquitectura basada en un banco de registros. Esto significa que todos los


objetos del sistema (puertas de E/S, temporizadores, posiciones de memoria, etc.) están
implementados físicamente como registros.

3.2 MEMORIA DE PROGRAMA

En la memoria de programa se almacenan todas las instrucciones del programa de


control. No hay posibilidad de utilizar memorias externas de ampliación.

Como el programa a ejecutar es siempre el mismo debe estar grabado de forma


permanente. Los tipos de memoria adecuados para soportar esta función admiten 5
versiones diferentes.

a) ROM

El programa se graba en el chip durante el proceso de fabricación y su contenido


es permanente (no puede borrarse).

Los costos de diseño con este tipo de memoria y el instrumental necesario son
muy elevados.

b) EPROM

La grabación se realiza mediante un dispositivo gobernado por un computador


personal.

Esta memoria puede modificarse, ¿cómo? Borrando primero el contenido del chip
(mediante la acción de rayos ultravioletas) y luego grabando normalmente.

Es recomendable en la fase de diseño y depuración de programas aunque su


costo unitario es elevado.

c) OTP o PROM

El usuario sólo puede grabar una vez utilizando el mismo procedimiento de


grabación que la EPROM aunque no permite borrar el contenido.
El bajo costo y la sencillez de la grabación lo hacen aconsejable para prototipos
finales y series de producción cortas.

d) EEPROM

La grabación es similar a los dos tipos anteriores, pero el borrado es más sencillo
ya que se realiza eléctricamente (de la misma forma que la grabación).

Sobre el mismo zócalo del grabador puede ser borrada y programada tantas
veces como se desee. Esto lo hace ideal para la enseñanza y la creación de nuevos
proyectos.

Se puede seleccionar cada dirección que se quiere reescribir.

e) FLASH

Se trata de una memoria no volátil, de bajo consumo, que puede escribirse y


borrase en circuito de igual manera que las EEPROM, pero suelen disponer de mayor
capacidad que estas últimas. El borrado sólo es posible con bloques completos ( no en
posiciones concretas).

Son muy recomendables en aplicaciones en que sea necesario modificar el programa a lo


largo de la vida útil del producto como consecuencia del desgaste o del cambio de piezas.

Por sus mejores prestaciones está sustituyendo a las EEPROM para contener las
instrucciones.

3.3. MEMORIA DE DATOS

Los datos que manejan los programas varían continuamente, lo cual exige que la
memoria que los contiene sea de lectura / escritura. Por tal motivo la SRAM es la más
adecuada, pese a ser volátil.

Hay microcontroladores que disponen como memoria de datos una de lectura / escritura
no volátil del tipo EEPROM.

El PIC16C84 dispone de 64 bytes de memoria EEPROM para contener datos.

3.4. LÍNEAS DE E/S

Un chip microcontrolador posee varias patitas. La cantidad varía según el modelo.


En general dispone de:
• 2 patitas para recibir la alimentación

• 2 para el cristal de cuarzo (que regula la frecuencia de trabajo)


• 1 para provocar el Reset
• el resto sirve para soportar la comunicación con los periféricos que controla.
Las líneas de E/S que soportan la comunicación con los periféricos manejan
información en paralelo y se agrupan en conjuntos de 8 que se llaman puertas.
Hay modelos con líneas que soportan la comunicación en serie, otros con conjuntos
de líneas que implementan puertas de comunicación para diversos protocolos (como el
USB).

3.5. CIRCUITOS AUXILIARES


Según la aplicación a la que se orienta cada modelo incorpora una diversidad de
complementos que refuerzan la potencia y la flexibilidad del dispositivo.

Entre los recursos más comunes están los siguientes:

a) Circuito de reloj: encargado de generar los impulsos que sincronizan el


funcionamiento de todo el sistema.

b) Temporizadores: orientados a controlar tiempos

c) Watchdog: destinado a provocar una reinicialización cuando el programa


queda bloqueado.

d) Conversores A/D y D/A: convierte señales analógicas en digitales y


viceversa.

e) Comparadores analógicos: para verificar el valor de una señal analógica

f) Sistema de protección ante fallos de la alimentación

g) Estado de reposo: en que el sistema queda congelado y el consumo de


energía se reduce al mínimo

4. PIC 16C84
Pertenecen a la gama media de microcontroladores PIC (la PIC16CXX). Abarca
modelos con encapsulado desde 18 patitas hasta 68, cubriendo varias opciones que
integran abundantes periféricos.
El repertorio de instrucciones de la gama media es de 35 instrucciones de 14 bits
cada una y compatible con el de la gama baja. Sus distintos modelos contienen todos los
recursos necesarios en las aplicaciones de los microcontroladores de 8 bits.

También dispone de interrupciones y una pila de 8 niveles que permite el


anidamiento de subrutinas.

La nomenclatura de la subfamilia 16X8X diferencia a sus modelos por la letra


intermedia C, F o CR.

C: significa que la memoria de instrucciones es EEPROM.

F: indica que la memoria de instrucciones es tipo FLASH.

CR: la memoria de instrucciones es ROM y se graba en fábrica. Sólo se usa para


grandes series.

4.1. LA FRECUENCIA DE FUNCIONAMIENTO: EL RELOJ

La frecuencia de trabajo de un microcontrolador es fundamental a la hora de


establecer la velocidad en la ejecución de las instrucciones y el consumo de energía.

La ejecución de cada instrucción se realiza en sincronismo con impulsos eléctricos


que se suceden regularmente, a razón de millones de ellos por segundo, generados por
un reloj. Supongamos que nuestro reloj genera 10 millones de impulsos por segundo (10
Mhz), entonces estamos hablando de 10 millones de pulsos o ciclos por segundo. Si
decimos que cada instrucción se ejecuta en 4 pulsos de reloj entonces se ejecutan
2.500.000 instrucciones por segundo (10.000.000 / 4)

Los impulsos de reloj entran por la patita OSC1 / CLKIN y se dividen internamente
por 4 dando lugar a las señales Q1, Q2, Q3 y Q4. Las cuatro señales constituyen un ciclo
de instrucción (1 ciclo de instrucción equivale a 4 ciclos de reloj).

En realidad cada instrucción conlleva dos ciclos de instrucción: el primero destinado


a la "fase de búsqueda o fetch" y el otro a la “fase de ejecución o execute". Debido a la
estructura segmentada del procesador es posible realizar simultáneamente la fase de
ejecución de una instrucción y la de búsqueda de la siguiente, es por ello que se dice que
una instrucción se ejecuta en un ciclo de instrucción (cuatro ciclos de reloj).

A continuación se describen las operaciones que se realizan en cada ciclo de reloj:

Q1: durante este impulso se incrementa el CP


Q2 - Q3: se produce la decodificación y ejecución de la instrucción previa.

Q4: durante este impulso se busca el código de la instrucción en la memoria del


programa y se carga en el RI

Con la técnica de segmentación se reduce el tiempo de ejecución de los programas.

Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será la próxima


instrucción a ejecutar ya que depende de una condición. Esto implica que debe terminarse
la instrucción para buscar la siguiente. En este caso se sustituye la fase de Búsqueda de
instrucción siguiente por una instrucción NOP (No operar) mientras se ejecuta la
instrucción de salto. Es decir que las instrucciones de Salto requieren un ciclo más.

Ejemplo: Supongamos una instrucción n de llamada a una subrutina (CALL SUB_1)


4.2. LA ARQUITECTURA HARVARD

Es uno de los pilares en los que se sustenta la organización de los PIC. Gracias a
ella se puede acceder de forma simultánea e independiente a la memoria de datos y a la
de instrucciones.

Otra característica es el manejo intensivo del Banco de Registros que participan de


manera muy activa en la ejecución de las instrucciones.

La ALU efectúa las operaciones aritméticas y lógicas con dos operandos:


1. uno proveniente del registro de trabajo (W)
2. y otro que puede provenir de alguno de los registros del banco de registros o
del propio código de la instrucción (usando literal).
3. El resultado se puede almacenar en W o en cualquier registro.
Estas características dan un carácter de ortogonalidad a las instrucciones, ya que las
mismas pueden utilizar cualquier registro como operando fuente y destino. La memoria
RAM de Datos implementa en sus posiciones los registros específicos (SFR) y los de
propósito general (GPR).
4.3. ARQUITECTURA INTERNA DEL PIC 16C84

La Arquitectura interna del PIC 16C84 presenta las siguientes características:

1. MEMORIA DE PROGRAMA: EEPROM (1 k palabras de 14 bits)

2. MEMORIA DE DATOS: formada por 2 areas

• Una RAM con 22 Registros de propósito específico (SFR) y

• Otra con 36 registros de Propósito general (GPR).

3. CAMINO DE DATOS con una ALU de 8 bits que recibe los operandos desde
un registro de trabajo W

4. RECURSOS CONECTADOS:

• Puertos de E/S

• Temporizador

• Etc.

5. BASE DE TIEMPOS Y CIRCUITOS AUXILIARES

6. DIRECCIONAMIENTO DE LA MEMORIA DE PROGRAMA en base al CP


ligado a una pila de 8 niveles

7. DIRECC. DIRECTO E INDIRECTO de la memoria RAM.

Funcionamiento Básico

El microcontrolador funciona bajo el control de las instrucciones grabadas en la memoria


de instrucciones.

1. En la fase de búsqueda, el PC (Contador de programa) proporciona la dirección de


la instrucción en la Memoria de Programa.

2. La instrucción es leída y cargada en el Registro de Instrucciones. El Formato de la


Instrucción varía según el tipo. Todas disponen de un campo Código de Operación
(Código OP).
3. Desde el Registro de Instrucciones es transferida a la Unidad de Control donde se
decodifica y se generan las órdenes para la ejecución de la misma. Según el tipo
de instrucción se localizan los operandos, uno de los cuales puede ser el contenido
del registro W y otro puede provenir del bus de datos o bien estar dentro del código
de la instrucción (literal).

4. La ALU realiza la operación aritmética o lógica correspondiente a la instrucción


decodificada.

La memoria de programa siempre está direccionada desde el Contador de


Programa, mientras que la Memoria de Datos puede direccionarse directamente desde el
Código de la Instrucción o indirectamente a través de un registro denominado FSR
(Registro de Selección del Banco).

El PIC 16C84 tiene una zona de memoria de datos tipo RAM y otra tipo EEPROM.
La primera tiene una capacidad de 22 registros de propósito especial (SFR) y 36 de
Propósito General (GPR), todos ellos del tamaño de 1 byte. La segunda dispone de una
capacidad de 64 bytes (contiene información que no debe perderse al quitar la
alimentación).

Las operaciones de E/S con los periféricos se realizan a través de las Puertas A y B.
Existe un Temporizador TMR0 que se encarga de las funciones de control de tiempos.
También dispone de circuitos auxiliares que ofrecen posibilidades de seguridad, reducción
del consumo y reinicialización.

En la asignatura no trabajaremos con operaciones de E/S, nos


limitaremos a programas que realicen operaciones sobre datos
provenientes de la memoria de Datos.
4.3.1. Memoria de Programa

La memoria de programa puede contener 8192 instrucciones (8 k) de 14 bits cada


una. Este mapa se divide en 4 páginas de 2048 posiciones (2K). Para direccionar las 8K
posiciones se requieren 13 bits (logitud del CO).
El PIC16C84 tiene implementadas sólo 1 K posiciones, ignorando los 3 bits de más
peso del PC (Contador de Programa).
4.3.1.1. Contador de Programa
Es un registro de 13 bits cuyos 8 bits menos significativos están en el registro PCL
de la memoria de Datos (reg. de lectura/escritura) y cuyos 5 bits más significativos
provienen del registros PCLATH (esta porción del CP no puede escribirse ni leerse
directamente).
El contenido de PCLATH es transferido al CP cuando este último es cargado con
algún valor, lo que ocurre durante un CALL (llamado a subrutina), GOTO (salto a
dirección) o bien una escritura en el PCL.
Al igual que todos los registros específicos que controlan la actividad de procesador,
el PC está implementado sobre un par de posiciones de la Memoria RAM. Cuando se
escribe el PC como resultado de una operación de la UAL , los 8 bits de menor peso
provienen del registro PCL que ocupa la posición 2 de los dos bancos de la Memoria de
datos. Los 5 bits de más peso provienen del registro PCLATH, que ocupa la posición 0Ah
de los dos bancos de la Memoria RAM.

En las instrucciones GOTO y CALL los 11 bits de menor peso provienen del
Registro de Instrucción y los 2 bits de mayor peso provienen de los bits 3 y 4 del Registro
PCLATH

Un Reset pone a 0 todos los bits del PCL y del PCLATH, obligando a que la
dirección de reinicio sea 0000h.
4.3.1.2. La Pila

Es una zona aislada de las memorias de instrucciones y datos. Tiene una estructura
LIFO, en la que el último valor que ingresa es el primero que sale y se utiliza para anidar
subrutinas.

Tiene 8 niveles de profundidad cada una con 13 bits.

Las instrucciones CALL y GOTO originan la carga del PC en la pila. El contenido de


la cima se saca de la pila al ejecutar las instrucciones: RETURN (retorno desde una
subrutina), RETLW (retorno con un literal en W) RETFIE (retorno desde una interrupción).

El contenido del registro PCLATH no es afectado por la entrada o salida de


información de la Pila.

4.3.2. Memoria de datos

La memoria RAM de datos está dividida en 2 bancos de 128 bytes cada uno. En
PIC16C84 están implementadas las 48 primeras posiciones de cada banco.

En ellos, las 12 primeras posiciones de cada banco están reservadas a los SFR que
son los encargados de controlar el procesador y sus recursos.

Hay registros repetidos en ambos bancos: INDF, ESTADO, FSR, PCLATH, INTCON.

Los 36 registros restantes de cada banco se destinan a los GPR, aunque en realidad
sólo son operativos los 36 del banco 0 (los del banco 1 se mapean sobre el banco 0).

Para SELECCIONAR A QUÉ BANCO ACCEDER se utiliza el 6º bit (RP0) del


registro ESTADO:

• RP0 = 0 (accede al banco 0),


• RP0 = 1 (accede al banco 1)
Luego de un RESET siempre se accede al banco 0.

Para acceder a un GPR no se tiene en cuenta el valor de RP0.

Los registros SFR se clasifican en dos grupos:

• En uno se incluyen aquellos que controlan el núcleo del microcontrolador


(ESTADO, OPTION, INTCON, etc) y

• en el otro los que se refieren a la operatividad de los recursos auxiliares.


Las puertas PA y PB son grupos de líneas de E/S digitales. Tanto las líneas de PA
como de PB pueden actuar con líneas de entrada o líneas de salida. Eso habrá que
indicarlo escribiendo todos 0 o todos 1 en TRISA (para PA) y TRISB (para PB). Todos 1
en TRISx indica que la puerta afectada actúa como salida, si se escriben todos 0 la puerta
actúa como entrada.

Luego de un RESET se accede automáticamente al banco 0. Si se desea acceder a


posiciones del banco 1 se deberá poner a 1 el bit 5 del reg ESTADO.
4.3.2.1. El Registro de ESTADO

Es uno de los registros más usados. Ocupa la dirección 3 de ambos bancos. Sus bits
tienen 3 misiones distintas:

a) Se encargan de avisar las incidencias del resultado de la ALU (C, DC y Z)


b) Indican el estado de RESET
c) Seleccionan el banco a acceder en la Memoria de Datos (IRP, RP0 y RP1).

Direccionamiento Directo

El bit RP0 del Registro de ESTADO determina el banco a acceder y los 7 bits de menos
peso del Código OP de la instrucción proporcionan la dirección dentro del banco.
Direccionamiento Indirecto

Este modo de direccionamiento se usa cuando en una instrucción se utiliza como


operando el registro INDF, que ocupa la dirección 0 en ambos bancos. Este registro no
está implementado físicamente por lo que cuando una instrucción hace referencia a él se
accede a la dirección de un banco especificado por los 7 bits de menos peso del registro
FSR. El bit de más peso del FSR junto al bit IRP (8vo.bit) del registro ESTADO se
encargan de seleccionar el banco a acceder. Como en el PIC 16C84 hay sólo dos bancos
IRP=0 siempre.
MEMORIA DE PROGRAMA
12 0
STACK 1

STACK 2
13 0
STACK 3
0000h Vector de Reset
STACK 4
0001h
STACK 5
0002h
STACK 6
0003h
STACK 7
0004h Vector de Interrupción
STACK 8

12 0
PC

03FFh

En el momento del arranque el PC se carga con el valor 0000h, por lo que se


posiciona en la posición más baja de memoria (VECTOR de RESET). Este vector
apunta a la dirección de inicio del Programa (generalmente 0005h). Lo apropiado
es que el programa comience en la dirección 0005h y puede extenderse hasta la
dirección 03FFh. Es conveniente reservar el espacio de memoria por si se utilizan
interrupciones. Si no se utilizaran interrupciones, el programa podría comenzar en
la dirección 0000h (esto se hace cuando se requiere disponer de más memoria).
0000 goto START

0001

0002

0003

0004 goto INTERRU

0005 START

Cuando existe una interrupción el PC se carga con el valor 0004h, mediante el


cual se obtiene la dirección de inicio de la rutina de servicio de interrupción. En la
PILA se guarda la dirección de retorno.

• ¿Qué es una interrupción?

Es un evento que produce una alteración o cambio en la secuencia normal


de funcionamiento. Su importancia radica en que existen determinados estados
que deben atenderse en el instante en que aparecen, lo cual provoca una
bifurcación de la actividad principal.

• Una interrupción se origina por dos motivos:

1. Por un agente externo al microcontrolador, a través de los pines de entrada

2. Por eventos de microcontrolador

Cuando se produce los pasos a seguir son:

- Atender la interrupción

- Determinar la causa que la origina mediante la inspección de los registros


INTCON y EECON1

- Ejecutar la rutina de servicio de la interrupción

- Retornar al programa principal

El registro INTCON (Control de Interrupciones) contiene banderas que permiten


conocer el origen de la interrupción. Consta de un bit (el octavo) denominado GIE
cuyo valor indica si están activadas o no las interrupciones ( 0 = Desactivada, 1 =
Activada).
El registro EECON indica si la interrupción se produjo por finalización de escritura
en la EEPROM.

A continuación se presenta un esquema de las fases de una interrupción:

1. Para que sea factible la utilización de las interrupciones, al inicio de la


ejecución deberá configurarse el registro INTCON. Para ello GIE = 1, lo cual
habilita a todas las interrupciones. Si GIE = 0 las interrupciones no se activan
lo cual ocasionará que no se atiendan.

2. Cuando se detecta una interrupción debe colocarse GIE a 0 para evitar que
interfiera una nueva interrupción cuando se está atendiendo la interrupción en
curso.

3. Se carga en el STACK la dirección de retorno (PC + 1)

4. Se carga en el PC la dirección 0004h destinada al vector de interrupciones.

5. Deben resguardarse los contenidos de los registros utilizados por el programa


durante su ejecución (como mínimo W, ESTADO y FSR)

6. Analizar el registro INTCON para saber cuál de las banderas está en "1" a
efectos de determinar el origen de la interrupción. Si todos los flags de este
registro están en 0 habrá que evaluar el bit 4 del registro EECON1. Una vez
determinado el origen de la interrupción, la secuencia del programa se
desviará a atender la tarea que se programó para tal circunstancia.

7. Una vez que finaliza la atención de la interrupción deberá ponerse a 0 el flag


que la originó, de lo contrario la rutina se repetirá indefinidamente.

8. Al finalizar la subrutina se encuentra la instrucción retfie, cuya función es


recuperar el valor del STACK, transferirlo al PC y devolver al bit GIE el estado
"1" para habilitar nuevamente las interrupciones.
Programa principal
Análisis de INTCON y
PC a STACK EECON1

Habilitar interrupciones
GIE = 1 GIE = 0 Rutina de interrupción
según origen de int.

PC = 0004h
Continúa programa
Restauración de
registros resguardados
SI Salto a rutina de
servicio de la
Ocurre interrupción
interrupción Borrar bandera que
provocó la interrupción

NO Resguardo de registros
( W - ESTADO - FSR Retorno (retfie)
Continúa programa como mínimo)

Transferir STACK a PC
GIE = 1
Formato de las Instrucciones

Todas las instrucciones tienen 14 bits.

Están agrupadas en tres categorías:

1. Operaciones orientadas a bits

2. Operaciones orientadas bytes

3. Operaciones con literales y de control

Operaciones orientadas a bits

OPCODE b (bit) f (file)

13 10 9 7 6 0

Son cuatro en total:

a) Dos se encargan de imponer que algún bit en particular de un registro tome el


valor "0" o "1":

• bcf f, b : coloca un 0 en el bit b del registro f

Ejemplo: bcf BANDERA,3 ; coloca un 0 en el bit 3 del reg.BANDERA

• bsf f, b : coloca un 1 en el bit b del registro f

Ejemplo: bsf BANDERA,3 ; coloca un 1 en el bit 3 del reg.BANDERA

b) Las otras dos se encargan de examinar si se produjo un cambio en algún bit


de un registro . En función de ello puede tomar, o no, la decisión de realizar
un salto.

• btfsc f, b : salta si el bit del registro es 0

• btfss f, b : salta si el bit del registro es 1


Operaciones orientadas a bytes (registros)

Este grupo maneja registros como operandos. Cada operación, realizada


mediante este tipo de instrucción, usualmente hace referencia indirecta a una
dirección. Previamente debe definirse el registro con un nombre y una dirección
muy concreta en la RAM

OPCODE d f (file)

13 8 7 6 0

d = 0 el registro destino es w

d = 1 el registro destino es f

Ejemplo:

addwf f, d ; sumar el contenido de W con el contenido del registro f. Si d=0 el


resultado queda en w, si d=1 el resultado queda en f

addwf DATO,0 ; W = W + DATO

addwf DATO,1 ; DATO = W + DATO

Esta operación afecta a los bits C, DC y Z del registro de ESTADO

Operaciones con literales y de control

OPCODE k

13 8 7 0

OPCODE k Sólo para las instrucciones


CALL y GOTO
13 11 10 0
Las operaciones con literales permiten realizar operaciones aritméticas y lógicas
con un literal (un valor dado). El resultado de la operación queda en el registro W

addlw k ;W=W+k

sublw k ;W=k-W

andlw k ; W = W and k

iorlw k : W = W or k

xorlw k ;

movlw k ;W=k

Las operaciones de control son aquellas que permiten realizar saltos a subrutinas
(CALL) , saltos incondicionales (GO TO), retornar de una subrutina, retornar de
una interrupción, entre las más utilizadas.

Ejemplos

call REBOTE ; guarda PC+1 en la PILA y salta a la dirección donde comienza la


subrutina REBOTE. Ejecuta las instrucciones hasta encontrar la
instrucción RETURN, en cuyo caso recupera del STACK la
dirección de retorno, regresa al programa principal y prosigue la
ejecución

goto SALTO ;se trata de una instrucción de Salto Incondicional


MEMORIA DE DATOS

00 INDF INDF 80

01 TMR0 OPTION 81

02 PCL PCL 82

03 STATUS STATUS 83

04 FSR FSR 84

05 PUERTA TRISA 85

06 PUERTB TRISB 86

07 87

08 EEDATA EECON1 88

09 EEADR EECON2 89

0A PCLATH PCLATH 8A

0B INTCON INTCON 8B

0C 8C
36 36
REGISTROS DE REGISTROS DE
DATOS DATOS

MEMORIA RAM MEMORIA RAM

2F AF
30 No No B0
implementada implementada

7F FF
Registro Contador de Programa

Durante la ejecución de un programa el registro PC se incrementa en 1 para


buscar la siguiente instrucción, pero en determinadas ocasiones puede tomar
algún otro valor (interrupciones, Salto relativo, Salto incondicional, Salto a
subrutina).
Dado que el PC tiene una longitud de 13 bits, requiere recurrir a un registro
auxiliar para conformar la sección de loas bits más altos. Por este motivo está
dividido en dos: una parte baja de 8 bits alojados en la dirección 02h, denominada
PCL y otra sección de bits de mayor peso llamada PCLATH ubicada en la
dirección 0Ah.

12 11 10 9 8 7 6 5 4 3 2 1 0

PCLATCH PCL

Cuando se utilizan instrucciones que modifican el contenido del PC y, por


consiguiente, la secuencia de ejecución la nueva dirección puede conformarse de
dos maneras diferentes. Dependerá de la instrucción.

Salto Relativo
Consiste en modificar el contenido del PC mediante una operación orientada al
byte, por ejemplo addwf PC,1 ; PC = PC + W
Esta instrucción modificará el contenido del PC y el mismo se conformará con los
8 bits de W (en las posiciones 0 a 7) y los 5 bits menos significactivos del
PCLATH

Salto Incondicional (goto) o Llamada a Subrutina (call)


En estos casos el PC toma los 11 bits de la parte de dirección de la instrucción
para el PCL y los bits 4º y 5º del PCLATH
Registro de ESTADO

Bit C o Carry
82h + 81h = 103h . El resultado será 03h y C = 1

Bit DC o Digital Carry


DC = 0 No hubo acarreo del 4º bit al 5º
DC = 1 Hubo acarreo del bit 4º al 5º

Bit Z o Zero
Indica si la operación arirmética o lógica da como resultado 0 (en tal caso Z = 1)

Bit RP0 y RP1


Se utilizan para seleccionar el banco de datos en direccionamiento directo. En
PIC 16C84 se utiliza sólo RP0

IRP
Se utiliza para direccionamiento indirecto.

También podría gustarte