Вы находитесь на странице: 1из 10

Microcontrolador PIC16F84

Registros de Propsito Especial (SFR)


Direccin

Nombre

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

BANCO DE REGISTROS 0
00h

INDF

Contenido utilizado de FSR a la direccin de memoria de datos (no es un registro fsico)

01h

TMR0

Contador de 8 bit en tiempo real

02h

PCL

8 bit ms bajos del Contador de Programa

03h

STATUS

IRP

04h

FSR

Puntero indirecto de direccionamiento de datos

05h

PORTA

--

--

--

06h

PORTB

RB7

RB6

RB5

07h

RP1

RP0

T0#

PD#

DC

RB4/TOCKI

RA3

RA2

RA1

RA0

RB4

RB3

RB2

RB1

RB0

RBIE

TOIF

INTF

RBIE

Posicin no implementada, se lee como "00"

08h

EEDATA

Registro de datos EEPROM

09h

EEADR

Registro de direcciones EEPROM

0Ah

PCLATH

--

--

--

0Bh

INTCON

GIE

EEIE

TOIE

INTE

BANCO DE REGISTROS 1
80h

INDF

Contenido utilizado de FSR a la direccin de memoria de datos (no es un registro fsico)

81h

OPTION

RBPU#

82h

PCL

8 bit ms bajos del Contador de Programa

83h

STATUS

IRP

84h

FSR

Puntero indirecto de direccionamiento de datos

85h

TRISA

--

86h

TRISB

Registro de direccionamiento de datos del PORTB

87h

INTEDG
RP1

TOSC
RP0

--

--

TOSE

PSA

PS2

PS1

PS0

T0#

PD#

DC

Registro de direccionamiento de datos del PORTA

Posicin no implementada, se lee como "00"

88h

EECON1

--

89h

EECON2

Registro de control de EEPROM (no es un registro fsico)

--

--

EEIF

WRERR

WRWN

8Ah

PCLATH

--

--

--

Buffer escrito con los 5 bit ms altos del PC

8Bh

INTCON

GIE

EEIE

TOIE

INTE

RBIE

TOIF

WR

RD

INTF

RBIE

Registro de STATUS (POSICIN 03h o 83h)


O

R/W-0

R/W-0

R/W-0

R-1

R-1

R/W-X

R/W-X

R/W-X

IRP

RP1

RP0

T0#

PD#

DC

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

R = bit de lectura
W = bit de escritura
-n = Valor del bit despus de un Reset

bit 0 C : flag (O) de acarreo en el octavo bit


1: Acarreo en la suma y no en la resta
0: Acarreo en la resta y no en la suma
Este bit tambin se utiliza en las instrucciones de rotacin
bit 1 DC: flag (O) de acarreo en el 4 bit de menos peso.
1: Acarreo en la suma
0 : No acarreo en la suma.En la resta lo contrario
bit 2 Z: flag (O) de cero
1: el resultado de la ltima operacin aritmtica o lgica es cero
0: El resultado de la ltima operacin es distinto de cero
bit 3 PD#: flag (O) Pow er Dow n
1: Tras conectar VDD o al ejecutar la instruccin CLRWDT
0: Al ejecutar la instruccin SLEEP
bit 4 TO#: flag (O) Timer Out
1:Tras conectar VDD o ejecutar CLRWDT o SLEEP
0 :Al desbordar el temporizador de WDT
bit 5-6 RP<1:0>:Seleccin del banco para el direccionamiento directo
00 Banco 0 (00h-7Fh)
01 Banco 1 (80h-FFh)
10 Banco 2 (100h-17Fh)
11 Banco 3 (180h-1FFh)
bit 7 IRP: Seleccin de bancos para el direccionamiento indirecto
1: el resultado de la ltima operacin aritmtica o lgica es cero
0: Bancos 0 y 1 (00h-FFh)

Registro OPTION (POSICIN 81h)


Ocupa la posicin la 81h del banco de registro 1. En la siguiente tabla se muestra el significado de cada uno de sus 8 bits.
Es recomendable darle otro nombre por ejemplo "OPTION" en el programa ensamblador, para que el programa
ensamblador no de mensajes de error, ya que en los PIC de la gama baja existe la instruccin OPTION.
R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

RBPU#

INTEDG

TOCS

TOSE

PSA

PS2

PS1

PS0

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

R = bit de lectura
W = bit de escritura
-n = Valor del bit despus de un Reset
bit 2-0 PS2:PSO: Rango con el que acta el Divisor de frecuencia
PS2 PS1 PS0

Divisor del TMRO

Divisor del WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1:128

bit 3 PSA: Asignacin del divisor de frecuencia


1: El divisor de frecuencia se asigna al WDT
0: El divisor de frecuencia se asigna al TMR0
bit 4 TOSE: Tipo de flanco en TOCK1
1: Incremento de TMR0 cada flanco descendente
0: Incremento de TMR0 cada flanco ascendente
bit 5 TOCS: Tipo de Reloj para TMR0
1: Pulsos introducidos a travs de T0CK1 (Contador)
0: Pulsos de reloj interno Fosc/4 (Temporizador)
bit 6 INTEDG: Flanco activo control de interrupciones

1: Flanco Ascendente
0: Flanco Descendente
bit 7 BPRU : Resistencia Pull-up Puerto B
1: Desactivadas
0: Activadas

Registro de Interrupciones INTCON(POSICIN 0Bh o 8Bh)Registro de Interrupciones INTCON(POSICIN 0Bh o 8Bh):


Ocupa la posicin 0Bh del banco de registro 0 y la 8Bh del banco de registro 1. En la siguiente tabla se muestra la
estructura de cada uno de sus 8 bits de los cuales unos actan como sealadores del estado de estado y otros como bit de
permiso o autorizacin para que se pueda producir la interrupcin. Cuando se estudien las interrupciones se entender
mejor el funcionamiento del registro.
O

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-X

GIE

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

R = bit de lectura
W = bit de escritura
-n = Valor del bit despus de un Reset

bit 0 RBIF: flag (O) de estado del Port B


1:Cuando cambia de estado cualquier lnea de PB (RB<7:4>). Se borra por software
0:Ninguna entrada de PB ha cambiado
bit 1 INTF: flag (O) de estado de la interrupcin externa INT
1:La entrada de la interrupcin se ha activado. Se borra por software
0:No hay interrupcin externa
bit 2 T0IF: flag (O) de rebosamiento del TMR0
1: El TMR0 se ha desbordado. Se borra por software
0: El TMR0 no se ha desbordado
bit 3 RBIE: Activacin de la interrupcin del Port B
1: Interrupcin activada

0: Interrupcin desactivada
bit 4 INTE: Activacin de la interrupcin externa INT
1: Interrupcin activada
0: Interrupcin desactivada
bit 5 T0IE: Activacin de la interrupcin del TMR0
1: Interrupcin activada
0: Interrupcin desactivada
bit 6 EEIE: Activacin de la interrupcin de la memoria EEPROM
1: Interrupcin activada
0: Interrupcin desactivada
bit 7 GIE: Activacin Global de Interrupciones
1: Concedido el permiso de interrupciones
0: No hay posibilidad de interrupciones

Registro de Interrupciones EEDATA (POSICIN 08h ):


En el registro EEDATA, se encuentra en la posicin 08h del banco 1; tiene misiones de control de las operaciones en la
EEPROM y la distribucin de sus bits se presenta en la siguiente tabla se muestra la estructura de cada uno de sus 8 bits
U
bit 7

U
bit 6

U
bit 5

R/W-0

R/W-x

R/W-0

R/W-0

R/W-0

EEIF

WRERR

WREN

WR

RD

bit 4

bit 3

bit 2

bit1

bit0

R = bit de lectura
W = bit de escritura
S = bit no implementado se lee como 0
-n = Valor del bit despus de un Reset

bit 0: RD, Lectura


Se pone a 1 cuando se va a realizar un ciclo de lectura de la EEPROM, luego pasa a 0 automticamente.

bit 1: WR, Escritura


Se pone a 1 cuando comienza el ciclo de escritura de la EEPROM
Se pone a 0 cuando finaliza el ciclo de escritura de la EEPROM
bit 2: WREN, Permiso de escritura
1 = Permite la escritura de la EEPROM
0 = Prohibe la escritura de la EEPROM
bit 3:WRWRR, Sealizador de error de escritura
1 = Se pone a 1 cuando una operacin de escritura ha terminado prematuramente
0 = La operacin de escritura se ha completado correctamente
bit 4:EEIF, Sealizador de final de operacin de escritura
1= La operacin de escritura se ha completado con xito
0 = La operacin de escritura no se ha completado

LAS INTERRUPCIONES
Las interrupciones constituyen quiz el mecanismo ms importante para la conexin del microcontrolador con el mundo
exterior, sincronizando la ejecucin de programas con acontecimientos externos.
El funcionamiento de las interrupciones es similar al de las subrutinas de las cuales se diferencian principalmente en los
procedimientos que las ponen en marcha. As como las subrutinas se ejecutan cada vez que en el programa aparece una
instruccin CALL, las interrupciones se ponen en marcha al aparecer en cualquier instante un evento externo al programa,
es decir por un mecanismo hardw are.
El PIC16C84/PIC16F84 dispone de 4 posibles fuentes de interrupcin:
1.
2.
3.
4.

Activacin del pin RB0/INT


Desbordamiento del temporizador TMR0
Cambio de estado en uno de los 4 pines de ms peso (RB7:RB4) del PORTB
Finalizacin de la escritura en la EEPROM de datos.

Cuando se produce cualquiera de los sucesos indicados anteriormente, se origina una peticin de interrupcin, que si se
acepta, guarda el valor del PC actual en la Pila, pone a cero el bit GIE (Global Interrupt Enable), lo que prohibe cualquier
otra interrupcin y se carga el PC con el valor 0004H , que es la posicin del vector de interrupcin, y comienza a ejecutarse
el programa de atencin a la interrupcin que se encuentra a partir de esta direccin.
Cada causa de interrupcin est controlada mediante dos bit. Uno de ellos acta como sealizador o flag que indica si se ha
producido o no la interrupcin, y la otra funciona como bit de permiso o prohibicin de la interrupcin en s, tal y como se
muestra en la siguiente figura.

Los bits de control que se encuentran en el registro INTCON (0Bh 8Bh) habilitan y configuran las interrupciones. Para
que se pueda producir interrupcin por alguna de estas fuentes, el bit correspondiente debe estar a 1, mientras que los bits
sealizadores o flags que estn en los registros INTCON y EEDATA (08h) informan si se ha producido la interrupcin
cuando se ponen a 1. Cualquiera de las interrupciones tambin puede sacar al procesador del modo de reposo.
El bit GIE (Global Interrupt Enable) es el de activacin global del permiso de interrupcin, y se borra automticamente
cuando se reconoce una interrupcin para evitar que se produzca ninguna otra mientras se est atendiendo a la primera. Al
retornar de la interrupcin con una instruccin RETFIE, el bit GIE se vuelve a activar ponindose a 1. Para el resto de los bit
de indicacin de interrupcin (es decir, el resto de los flags) no se ha previsto mecanismo de puesta a cero, por lo que es e l
programa de atencin a la interrupcin el que debe realizar el tratamiento de la correspondiente interrupcin y adems, el
que debe poner el o los flags de indicacin de interrupcin a 0. De no ser as, no se podr salir de la rutina de atencin a la
interrupcin.
El microcontrolador solo dispone de un vector de interrupcin en la direccin 0004h; esto quiere decir que, sea cual sea la
fuente de la interrupcin, el PC se carga con 0004h. Por lo tanto, el programa de atencin a la interrupcin debe encargarse
de comprobar el estado de cada uno de los flags para saber cual es el dispositivo que produce la interrupcin y actuar
segn el caso.
Como ya hemos dicho el nico registro que se salva en la PILA es PC, luego si se necesita preservar algn otro registro
debe ser el propio programa de atencin a la interrupcin el que se encargue de salvar s u estado al inicio de la rutina y de
devolverlos al final del mismo, de igual modo que se haca en las subrutinas.
Resumiendo, las acciones que se realizan automticamente el microcontrolador y las que el programador debe tener en
cuenta en sus programas son las siguientes:

1.
2.
3.
4.
5.

6.
7.
8.

Cuando se activa una posible causa de interrupcin, el flag correspondiente se activa. Si el bit de permiso
correspondiente est a 1 y el bit de habilitacin de todas las interrupciones (GIE) est a 1, se produce la
interrupcin.
Para evitar que se produzca otra interrupcin mientras se est atendiendo a otra anterior, el bit GIE se pone a 0.
El valor del PC se guarda en la PILA
El PC se carga con el valor 0004h, que es el vector de interrupciones
El programador, debe comenzar la rutina de atencin a la interrupcin con un salto a la posicin de memoria
donde se encuentra el programa, seguidamente se guardan todos los registros que puedan ser modificados por
esta, seguidamente si estn habilitadas varias vas de interrupcin, se debe explorar el valor de los flag para
determinar la causa de la interrupcin.
Dependiendo de la causa de la interrupcin, la rutina de interrupcin se bifurca a la subrutina correspondiente.
Se deben devolver los valores que tenan los registros antes de producirse la interrupcin y se deben borrar por
softw are los flags que indican las fuentes de las interrupciones, antes del retorno al programa principal.
Cuando se llega a la ltima instruccin de la rutina de interrupcin, RETURN, se carga el PC con el v alor que se
guard inicialmente en la PILA y el bit GIE se pone automticamente a 1.

INTERRUPCIN EXTERNA INT


La fuente de interrupciones INT es sumamente importante para atender eventos externos en tiempo real. Cuando en la
lnea RB0/INT se hace una peticin de interrupcin, entonces, de forma automtica, el bit INTF del registro INTCON se
pone a 1 y si el bit GIE=1, se pone en marcha el mecanismo que ya hemos comentado de la interrupcin. Mediante el bit
INTDEG del registro OPTION, se puede seleccionar el flanco activo de RBO/INT, ya que con este puesto 1 el flanco activo
es el de subida y cuando est a 0 el flanco activo es el de bajada.
El programa de atencin a la interrupcin antes de regresar al programa principal debe borrar el flag INTF, puesto que en
caso contrario al ejecutar la instruccin de retorno de interrupcin RETFIE se volver a desarrollar el mismo proceso de
interrupcin.
INTERRUPCION POR DESBORDAMIENTO DEL TMR0
Para activar la interrupcin del TMR0, los bit T0IE y GIE del registro INTCON deben de estar a 1; bajo estas condiciones
cuando el temporizador TMR0 se desborda al pasar de FFh a 00h, se activa el flag TOIF del registro INTCON.
Si no se carga de nuevo TMR0 cuando se desborda, ste sigue contando desde 00h hasta FFh. Este registro puede
escribirse o leerse en cualquier momento, pero hay que tener en cuenta que al escribir sobre l, se pierden dos ciclos de
reloj para la sincronizacin.
Cuando se carga el registro TMR0 con un valor XXh, ste cuenta FFh-XXh impulsos y el tiempo que tarda en hacerlo
viene dado por la expresin:
Temporizacin = 4 . Tosc . (256 N10). Rango del Divisor de Frecuencia
INTERRUPCION POR CAMBIO DE ESTADO EN LOS PINES RB7:RB4 INTERRUPCION POR CAMBIO DE ESTADO EN
LOS PINES RB7:RB4.
Para activar la interrupcin por cambio de nivel en los pines <RB7:RB4>, los bits RBIE y GIE del registro INTCON deben
de estar a 1, bajo estas condiciones cuando se produce un cambio de nivel en cualquiera de los pines RB7:RB0 se activa el
flag RBIF del registro INTCON.
Este tipo de interrupciones, estn especialmente pensadas para el control de un teclado matricial de 4 x 4, es decir de 16
teclas.
INTERRUPCIN POR FINALIZACIN DE ESCRITURA EN
FINALIZACIN DE ESCRITURA EN LA EEPROM DE DATOS.

LA

EEPROM

DE

DATOS

INTERRUPCIN

POR

El rea de EEPROM dispone de 64 bytes donde opcionalmente, se pueden almacenar datos que no se pier den al
desconectar la alimentacin. El PIC 16C84 y el 16F84 soportan un milln de ciclos de escritura/borrado y son capaz de
guardar la informacin sin alteracin durante ms de 40 aos.
La memoria EEPROM no est mapeada en la zona de memoria de datos donde se encuentran los registros SFR y GPR.
Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador hay que utilizar los registros especiales
EEDATA, EEADR, EECON1 y EECON2.

El Registro EEADR, se encuentra en la posicin de memoria 09h del banco 0, en el se carga directamente la direccin a la
que acceder de la EEPROM de datos. Las 64 posiciones de un byte ocupan las direcciones de un mapa que comienza en la
posicin 00h y termina en la 3Fh, por eso los 2 bits de ms peso del registro EEADR siempre valen 0.
Los bit RD y WR indican respectivamente lectura o escritura. No hay que ponerlos a 0 solo a 1. Se borran
automticamente cuando la operacin de lectura ha sido completada.
El registro EECON2 no est implementado fsicamente, por lo que es imposible leerlo (si se intenta leer, todos sus bits se
ponen a 0). Se emplea como dispositivo de seguridad durante el proceso de escritura de la EEPROM, para evitar las
interferencias en el largo intervalo de tiempo que precisa su desarrollo. La seguridad se consigue escribiendo los valores
concretos 55h y AAh. Un ciclo de escritura en una posicin EEPROM de datos tiene una duracin de 10 ms, que es un
tiempo muy grande para la velocidad del procesador.

Proceso de lectura de una posicin de memoria de la EEPROM: Comprende los siguientes pasos:

1.
2.
3.
4.

Escritura de la direccin que hay que leer en el registro EEADR.


Poner a 1 el bit RD del registro EECON1.
Lectura del dato diseccionado de esta forma en el registro EEDATA.
El dato est disponible en EEDATA despus de colocar RD a 1, por lo que es posible leerlo. El dato ledo estar
disponible el registro EEDATA en el siguiente ciclo y permanecer en l hasta que se realice una nueva lec tura o
escritura en la EEPROM.

Seguidamente se muestra un programa capaz de leer la posicin de memoria MEM1, de la EEPROM de datos.
LECTURA

bcf STATUS,RP0
movlw MEM1

; Selecciona banco 0
; Direccin a leer de la EEPROM

movw f EEADER

ESPERA

bsf STATUS,RP0

; Selecciona banco 1

bsf EECON1,RD

;Activar Lectura

btfsc EECON1,RD

;Espera final de lectura

goto ESPERA
bcf STATUS,RP0

;Selecciona banco 0

movf EEDATA,W

;W se carga con el valor ledo en EEPROM

Proceso de escritura de una posicin de memoria de la EEPROM: Comprende los siguientes pasos:

1.
2.
3.

Se carga en EEADR la direccin de la posicin a escribir


Se carga en el registro EEDATA el valor a grabar
Se ejecuta la siguiente secuencia para iniciar la escritura de cada byte
movlw 55h
movw f EECON2 ;Escribe 55h
movw f AAh
movw f eecon2 ;Escribe AAh
bsf eecon1,w r ;coloca a 1 el bit

4.
5.

Esta ltima instruccin inicia el proceso de escritura propiamente dicho. Cuando se termina el bit EEIF est a 1 y,
si ha sido activada la interrupcin EEPROM haciendo uso del bit EEIE de INCONT, esta interrupcin se genera.
Al acabar el proceso se pone a 0 el bit WR automticamente.
Mediante programa hay que poner a 0 el bit EEIF.

Un sistema para comprobar si se ha producido la escritura correctamente en la memoria EEPROM consiste en restar el
dato escrito con el que existe en el registro EEDATA. Si no se ha producido error el flag Z pasa a valer 1.
Seguidamente se muestra un programa que escribe en la posicin de memoria MEN1, de la EEPROM el dato DATO1.
ESCRITURA:
bcf STATUS,RP0

;Selecciona el banco 0

movlw MEN1
movw f EEADR

;Escribe la direccin en EEADR

movlw DATO1
movw f EEDATA

;Se escribe el dato en EEDATA

bsf STATUS,RP0

;Selecciona el banco 1

bsf EECON1,WREN ;Permiso de escritura


;Comienzo Secuencia de escritura
movlw 0x55
movw f EECON2

;Se escribe el dato 55h en eecon2

movlw 0xaa ;
movw f EECON2

;Se escribe AA h en eecon2

bsf EECON1,WR

;Comienza la escritura

ESPERA:
btfsc EECON1,WR

;Espera a que termine la escritura

goto ESPERA
bcf STATUS,R0

;Selecciona el banco 0

Microchip recomienda que se deshabiliten las interrupciones durante la secuencia de, aadiendo las siguientes
instrucciones al principio y final de la secuencia.
BCF INTCON,GIE ;Deshabilita interrupcin
BSF INTCON,GIE ;Habilita interrupcin
Proceso de verificacin de la escritura. Dependiendo de la aplicacin, es aconsejable que se compruebe que los dat os se
estn escribiendo correctamente; aunque esto no suele ser necesario en la mayora de las ocasiones, para las posiciones
de memoria EEPROM es aconsejable.

10

Вам также может понравиться