You are on page 1of 14

Registros del PIC16F84A

ndice de contenidos

Registros del PIC16F84A o ndice de contenidos o Registro W o La pila o stack o Registro INDF (00h y 80h) o Registro TMR0 (01h) o El Contador de programa PC (02h y 82h) El contador de programa y la pila o Registro de Estado (03h y 83h) o Registro FSR (04h y 84h) o Registro PORTA y PORTB (05h y 06h) o Registro EEDATA (08h) o Registro EEADR (09h) o Registro PCLATH (0Ah y 8Ah) o Registro INTCON (0Bh y 8Bh) o Registro OPTION (80h) o Registro TRISA y TRISB (85h y 86h) o Registro EECON1 (88h) o Registro EECON2 (89h) o Estado predeterminado de los registros

Anteriormente ya localizamos la seccin de registros especiales en el bloque de memoria RAM, estos estaban repartidos en dos bancos, el 0 y el 1, y situados en las 12 primeras posiciones o registros de cada uno (00h-0Bh, y 80h-8Bh). A continuacin se presentan en bloque y en una tabla:

Banco 0 Direcc Nombre 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh Banco 1 Direcc Nombre 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh INDF OPTION PCL Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 INDF TMR0 PCL Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Direccin de FSR (no es fsicamente un registro) Contador/Temporizador de 8 bits 8 bits LSB del PC RP1 RP0 TO PD Z DC C

STATUS IRP FSR PORTA PORTB -

Puntero para el Direccionamiento Indirecto RB7 RB6 RB5 RA4 RA3 T0CKI RB4 RB3 RA2 RB2 RA1 RB1 RA0 RB0 INT

No implementado

EEDATA Registro de Datos EEPROM EEADR Registro de Direcciones EEPROM 5 bits MSB del PC INTE RBIE T0IF INTF RBIF

PCLATH INTCON GIE

EEIE T0IE

Direccin de FSR (no es fsicamente un registro) RBPU INTE T0CS T0SE 8 bits LSB del PC RP1 RP0 TO PD Z DC C PSA PS2 PS1 PS0

STATUS IRP FSR TRISA TRISB ECON1 ECON2

Puntero para el Direccionamiento Indirecto Direccin de datos del Puerto A

Direccin de los datos del Puerto B No Implementado EEIF WRR WEN WR RD

2 REGISTRO DE Control de la EEPROM 5 bits MSB del PC INTE RBIE T0IF INTF RBIF

PCLATH INTCON GIE

EEIE T0IE

Registro W
En la figura siguiente se representa un diagrama simplificado de la arquitectura interna de los datos en la CPU de los microcontroladores PIC y de los microprocesadores tradicionales relacionado con la ALU:

Podemos ver los buses por donde circulan los datos, y la Unidad Aritmtico-Lgica ALU (ArithmeticLogic Unit). Que es la encargada de hacer las operaciones aritmticas tales como suma y resta, y operaciones lgicas. Observamos que la principal diferencia entre ambos se encuentra en la ubicacin del registro de trabajo, que para los PICs se denomina W (Working Register), y para los sistemas tradicionales es el Acumulador. En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador. La salida del acumulador esta conectada a una de las entradas de la ALU, y por lo tanto ste es siempre uno de los dos operandos de cualquier instruccin. Por convencin, las instrucciones de simple operando (borrar, incrementar, decrementar, complementar), actan sobre el acumulador. La salida de la ALU va solamente a la entrada del acumulador, por lo tanto el resultado de cualquier operacin siempre quedara en el acumulador. Para operar sobre un dato de memoria, despus de realizar la operacin tendremos que mover siempre el acumulador a la memoria con una instruccin adicional. En los microcontroladores PIC, la salida de la ALU va al registro W y tambin a la memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos destinos. En las instrucciones de doble operando, uno de los dos datos siempre debe estar en el registro W, como ocurra en el modelo tradicional con el acumulador. En las instrucciones de simple operando el dato en este caso se toma de la memoria (tambin por convencin).

La gran ventaja de esta arquitectura es que permite un gran ahorro de instrucciones ya que el resultado de cualquier instruccin que opere con la memoria (sea de simple o doble operando), puede dejarse en la misma posicin de memoria o en el registro W, segn se seleccione con un bit de la misma instruccin. Las operaciones con constantes provenientes de la memoria de programa (literales) se realizan slo sobre el registro W. En la memoria de datos de los PICs se encuentran ubicados casi todos los registros de control del microcontrolador y sus perifricos autocontenidos, y tambin las posiciones de memoria de usos generales.Sin embargo el registro W no est implementado dentro de los registros especiales del bloque de memoria, si no que est situado a la entrada de la ALU como ya hemos visto anteriormente. En resumen, el registro W servir para guardar temporalmente un dato ledo de memoria, y lo usaremos como si del portapapeles del escritorio se tratase. Cuando copiamos algo (texto, un fichero o lo que sea), el contenido se guarda en el portapapeles, y cuando lo pegamos en su destino, este se copia y el contenido todava permanece en el portapapeles hasta que cortemos o copiemos otro objeto.

La pila o stack
En los microcontroladores PIC el stack es una memoria interna dedicada, de tamao limitado, separada de las memorias de datos y de programa, inaccesible al programador, y organizada en forma de pila, que es utilizada solamente, y en forma automtica, para guardar las direcciones de retorno de subrutinas e interrupciones. Cada posicin es de 11 bits y permite guardar una copia completa del PC. Como en toda memoria tipo pila, a los datos se accede de forma LIFO (Last In First Out) de manera que el ltimo en entrar es el primero en salir. El tamao del stack en los 16F84 es de 8 posiciones. El stack y el puntero interno que lo direcciona, son invisibles para el programador, solo se accede a ellos automticamente para guardar o rescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada o retorno de subrutinas, cuando se produce una interrupcin o cuando se ejecuta una instruccin de retorno de ella.

Registro INDF (00h y 80h)


El registro INDF (Indirect File) que ocupa la posicin 00 no tiene existencia fsica, por lo que no se podr acceder a l. En realidad este registro sirve nicamente para especificar la utilizacin del direccionamiento indirecto junto con el registro FSR. Ver el direccionamiento indirecto en "El PIC16F84A".

Registro TMR0 (01h)


El registro TMR0 (Timer 0) almacena el valor del contador TMR0, que como ya sabemos, est funcionando continuamente e incrementando el valor que tiene almacenado. Las opciones que controlan este contador residen en el registro OPTION. El registro TMR0 se incrementa en una unidad con cada impulso de reloj seleccionado mediante el registro OPTION. Cada vez que llega al valor FF, vuelve a 00 generando una interrupcin, si se ha autorizado, y contina su ciclo indefinidamente. El registro TMR0 se puede leer o escribir directamente con cualquier instruccin, con el fin de conocer su posicin actual, o para inicializarlo en un estado determinado. Es importante saber que despus de cualquier escritura en este registro, es necesario un retardo de dos ciclos de instruccin para que se retome

la incrementacin. Este retraso es independiente de la fuente de reloj usada. Las instrucciones concernidas son MOVF TMR0 o CLRF TMR0. Para comprobar el paso por cero sin inferir en el desarrollo regular del recuento, es aconsejable utilizar, por ejemplo, una instruccin MOVF TMR0,W, que no hace mas que una lectura. El reloj interno deja de funcionar en el modo SLEEP, por lo que no se puede contar con sus interrupciones en este modo ni por consiguiente, que salga de este modo de funcionamiento por medio de dicha interrupcin. Obsrvese que todas las instrucciones que escriben en el TMR0 ponen a cero al prescaler (divisor), cuando ste est asignado al temporizador.

El Contador de programa PC (02h y 82h)


Este registro, normalmente denominado PC (Program Counter), es equivalente al de todos los microprocesadores y contiene la direccin de la prxima instruccin a ejecutar. Se incrementa automticamente al ejecutar cada instruccin, de manera que la secuencia natural de ejecucin del programa es lineal, una instruccin despus de la otra. Algunas instrucciones (que llamaremos de control) cambian el contenido del PC alterando la secuencia lineal de ejecucin. Dentro de estas instrucciones se encuentran GOTO y CALL que permiten cargar en forma directa un valor constante en el PC haciendo que el programa salte a cualquier posicin de la memoria. Otras instrucciones de control son los SKIP o saltos condicionales, que producen un incremento adicional del PC si se cumple una condicin especfica, haciendo que el programa salte, sin ejecutar, la instruccin siguiente. El PC del 16F84 es un registro de 13 bits, lo que permite direccionar 8.192 posiciones de memoria de programa, pero que internamente solamente podr direccionar las 1.024 posiciones de memoria de programa del 16F84. Esto significa que solo hace realmente falta tener en cuenta 10 bits del PC (210=1.024). El PC est implementado por dos registros, PCLATH (5 bits) y PCL (8 bits)

Los 8 bits de menor peso del PC los proporciona el registro PCL (02h) y a diferencia de la mayora de los microprocesadores convencionales, es tambin un registro accesible al programador como registro de memoria interna de datos. Es decir que cualquier instruccin comn que opere sobre registros puede ser utilizada para alterar el PCL y desviar la ejecucin del programa. Los 5 bits de mayor peso del PC que no pueden leerse ni escribirse directamente proceden del registro PCLATH en la direccin 0Ah vy 8Ah.

En la instruccin de salto relativo, el resultado de las mismas slo afecta a los 8 bits de menor peso. Los 5 bits de mayor peso se suministran desde PCLATH. En las instrucciones GOTO y CALL se efectua la misma operacin teniendo presente que el PC se codifica mediante 11 bits y se suministran en la propia instruccin, desde el cdigo OP. Los dos bits de ms peso del PC de cargan con los bits 4 y 3 del registro PCLATH. Dado que la memoria de programa se organiza en pginas de 2 K, la posicin de la memoria la indican los 11 bits de menor peso del PC y los 2 bits de mayor peso indican la pgina. A continuacin se muestra como se carga el PC:

El reset pone a 0 todos los bits de PCL y PCLATH haciendo que el reinicio comience en la direccin 0000h.

El contador de programa y la pila


Los ocho registros de pila no estan situados en el mismo espacio de memoria que los dems. Son registros de trece bits capaces de contener ntegramente al PC. Su utilizacin es automtica, ya que el PC se introduce en la pila durante la ejecucin de una instruccin CALL o de una interrupcin, y se extrae de la pila durante la ejecucin del retorno correspondiente. Cuando los datos contenidos en el PC son almacenados o extrados de la pila el registro PCLATH no se ve modificado. Estos registros de pila deben considerarse como un buffer de memoria circular, lo que significa que, si se introduce ms de 8 valores del PC, el noveno valor tomar la posicin del primero, y as sucesivamente. Ningn bit de registro indica que la pila est llena, por lo que debemos tener cuidado de que no se desborde.

Registro de Estado (03h y 83h)


El registro de Estado (STATUS) contienen varios bits de estado de la unidad central, el estado aritmtico de la ALU, el estado del reset y un par de bits de seleccin de pgina denominados RP1 y RP0. Ocupa la posicin 03h del banco 0 y la 83h del banco 1. Algunos de estos bits los podemos cambiar manualmente a travs del programa. Otros no los activamos nosotros, si no que los activa automticamente el PIC cuando se dan ciertos procesos. Estos bits se llaman

flags (banderas). Para hacernos una idea prctica una bandera se levanta (se pone a 1) cuando ha pasado algo, al igual que ocurre en el ftbol con los linieres. El registro STATUS est formado por 8 bits: R/W-0 R/W-0 R/W-0 R-1 IRP bit 7 RP1 bit 6 RP0 bit 5 R-1 R/W-x R/W-x R/W-x Z bit 2 DC bit 1 C bit 0

/TO /PD bit 4 bit 3

R/W significa que el bit correspondiente se puede leer y escribir, mientras que R significa que solamente puede ser ledo. Tambin se indica el estado que se establece tras un reset.

Bit 7, IRP: Seleccin del banco en direccionamiento indirecto. Este bit junto con el de ms peso del registro FSR sirven para determinar el banco de la memoria de datos seleccionado. En el PIC16X84 al disponer de dos bancos no se usa y debe programarse como 0. Bit 6 y 5, RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con direccionamiento directo. Cada pgina contiene 128 bytes. Como el PIC16X84 slo tiene dos bancos nicamente se emplea RP0 de forma que cuando vale 0 se accede al banco 0 y cuando vale 1 se accede al banco 1. Despus de un reset, RP0 se pone automticamente a 0. RP1 debe mantenerse a 0. El bit RP1 deber ser puesto a cero, ya que si no nos saldramos del rango de memoria. Bit 4 (flag), TO: Time Out (Tiempo acabado) o 1. Se pone a 1 tras conectar la alimentacin o al ejecutar CLRWDT o SLEEP. o 0. Se pone a 0 por desbordamiento del Perro Guardin WDT. Bit 3 (flag), PD: Power Down (Apagado). o 1. Se pone automticamente a 1 tras conectar la alimentacin Vdd o ejecutar CLRWDT, que resetea el contador WatchDog. o 0. Se pone a 0 al ejecutar la instruccin SLEEP. Bit 2 (flag), Z: Cero o 1 = El resultado de una operacin aritmtica o lgica es 0. o 0 = El resultado es distinto de 0. Bit 1 (flag), DC (Digit Carry). Acarreo en el 4 bit de menos peso. Funciona igual que el bit de Carry descrito a continuacin. De inters en operaciones en BCD Bit 0 (flag), C (Carry). Acarreo en el 8 bit o bit de mas peso. Es el bit de "acarreo" en operaciones de suma AADWF y ADDLW as como tambin el bit de "llevada" en las instrucciones de sustraccin SUBWF y SUBLW. Tambin lo emplean las instrucciones RLF y RRF de rotacin de bits. o Suma 1. Se pone a 1 cuando se ha producido acarreo en la suma en el bit de mayor peso con las operaciones AADWF y ADDLW. 0. Se pone a 0 si en la suma no se ha producido acarreo. o Resta 1. Se pone a 1 si en la resta no se ha producido llevada. 0. Se pone a 0 cuando se ha producido llevada en la resta con las operaciones SUBWF y SUBLW.

Posibles configuraciones de los bits de seleccin de pgina RP1 y RP0: RP1 RP0 Banco Direccin 0 0 0 1 0 1 00h a 7Fh 80h a FFh

1 1

0 1

2 3

100h a 17Fh 180h a 1FFh

Registro FSR (04h y 84h)


El contenido del FSR se utiliza para el direccionamiento indirecto junto con el registro INDF. Este registro contiene 8 bits. Ver el direccionamiento indirecto en "El PIC16F84A".

Registro PORTA y PORTB (05h y 06h)


Cuando vimos los puertos se coment el uso de estos registros que contienen los niveles lgicos de las patillas de E/S. Cada bit se puede leer o escribir segn la patilla correspondiente se haya configurado como entrada o como salida. Conviene recordar que cualquier lnea puede funcionar como entrada o como salida. Sin embargo, si acta como entrada la informacin que se introduce no se memoriza, por lo que la informacin debe ser mantenida hasta que sea leda. Si la lnea acta como salida, el bit que procede del bus de datos se guarda en la bscula, con lo que la informacin que ofrece esta patilla permanece invariable hasta que se reescriba este bit. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 RA4 RA3 RA2 RA1 RA0

Registro EEDATA (08h)


El registro EEDATA (Datos de EEPROM) guarda el contenido de una posicin de la memoria EEPROM de datos antes de su escritura o despus de su lectura, segn leamos o escribamos en ella. Para leerla se sigue un proceso especial que se comentar mas adelante. Como ya sabemos la memoria EEPROM es bastante lenta, dato que tendremos en cuenta cuando accedamos a ella para escribirla, pues tarda unos 10 ms en completar el proceso.

Registro EEADR (09h)


El registro EEADR (Direccin de EEPROM) guarda la direccin de la posicin de memoria EEPROM cuando queramos acceder a ella, bien para su lectura, o bien para su escritura. El igual que con el registro anterior, veremos su uso ms a fondo cuando lleguemos a las instrucciones que lo utilizan. El registro EEADR puede direcconar como mximo 256 bytes de los cuales slo los 64 primeros estn disponibles, con lo que los dos bits de mayor peso han de tener el valor de '0'.

Registro PCLATH (0Ah y 8Ah)


El registro PCLATH (Contador de Programa Alto) ya lo vimos cuando analizamos el PCL y su relacin con el PC.

Registro INTCON (0Bh y 8Bh)


Este registro contiene varios bits de seleccin de fuentes de interrupcin, el bit de activacin global de interrupciones y varios flag que indican la causa de una interrupcin. Sirve para el control global de las interrupciones y para indicar la procedencia de algunas de ellas, gracias a los bits de estado. Se dispone de cuatro potenciales recursos de interrupcin:

Una fuente externa a travs del pin RB0/INT. El desbordamiento del temporizador 0 (TMR0). Un cambio de estado en los pines RB4 a RB7. Programacin de la EEPROM de datos.

Cada bit del registro INTCON tiene un significado concreto que se muestra en la siguiente tabla: 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 bit 7 EEIE bit 6 T0IE bit 5 INTE bit 4 RBIE bit 3 T0IF bit 2 INTF bit 1 RBIF bit 0

Bit 7, GIE: Habilitacin global de interrupciones (Global Interrupt Enable). o 1: Concede el permiso de interrupciones. o 0: Cancela el permiso de las interrupciones. Bit 6, EEIE: Habilitacin de las Interrupciones de la memoria EEPROM. o 1: Permite que se produzcan interrupciones debidas al fin de escritura de la EEPROM, etc. o 0: Este tipo de interrupciones estarn inhibidas. Bit 5, T0IE: Habilitacin de la interrupcin del temporizador por desbordamiento (Timer 0 Interrupt Enable). o 1: Autoriza las interrupciones debidas al desbordamiento del temporizador. o 0: Interrupcin del temporizador deshabilita de manera que cuando se produzca el flag correspondiente permanecer inactivo. Bit 4, INTE: Habilitacin de la entrada de interrupcin externa (Interrupt Enable) por patilla RB0/INT. o 1: Autoriza las interrupciones provocadas RB0/INT del puerto B. o 0: Interrupcin externa deshabilita de manera que cuando se produzca una interrupcin externa el flag correspondiente permanecer inactivo. Bit 3, RBIE: Habilitacin de las interrupciones del puerto B (RB Interrupt Enable). o 1: Autoriza las interrupciones provocadas por un cambio de estado de las lneas RB4 a RB7 del puerto B. o 0: Interrupcin del puerto B deshabilitada. Bit 2 (flag), T0IF: Bit de interrupcin de desbordamiento del TMR0. o 1: El TMR0 ha rebosado. Se borra por software. o 0: El TMR0 no ha rebosado. Bit 1 (flag), INTF: Bit de interrupcin de la Entrada de Interrupcin INT (patilla RB0/INT). o 1: La entrada de interrupcin se ha activado (patilla RBO/INT del puerto B). Se borra por software. o 0: No hay interrupcin externa. Bit 0 (flag), RBIF: Bit de interrupcin del puerto B. o 1: Cambio de estado en una de las lneas de RB4 a RB7 del puerto B. Se borra por software. o 0: Ninguna lnea de RB4 a RB7 del puerto B ha cambiado.

Cada flag o bandera individual debe ponerse a cero por software.

Solamente hay un vector de interrupcin en la memoria de programa (direccin 0004h), por lo que se deben comprobar los bits de INTCON en la subrutina de interrupcin para saber cual es la fuente de la misma. Cuando llega una interrupcin, el PIC pone el bit GIE a cero, de forma que no se perturbe el tratamiento de la interrupcin en curso, debido a otras interrupciones eventuales. Este bit se pone automticamente a uno al terminar la subrutina de interrupcin, con la ejecucin de la instruccin RETFIE. Los indicadores de interrupciones correspondientes permanecen funcionales incluso cuando no se han autorizado. En este caso tambin pueden leerse y escribirse todos los bits que componen este registro.

Registro OPTION (80h)


El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupcin y la activacin de las resistencias de polarizacin del puerto B. Ocupa la posicin 81h de la pgina 1 del banco de registros. Debe escribirse usando la instruccin especial OPTION. Esta instruccin carga el contenido de W en el registro 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 T0SE Bit 4 PSA Bit 3 PS2 Bit 2 PS1 Bit 1 PS0 Bit 0

/RBPU INTEDG T0CS Bit 7

Bit 6

Bit 5

Bit 7, /RBPU (RB Pull Up). Conexin de las resistencias de polarizacin del Puerto B. Se conectan todas cuando el puerto B actua como entrada. o 1: Todas las resistencias son desconectadas. o 0: Las resistencias se activan de forma individual. Bit 6, INTDEG (INTerrupt EDGe). Selecciona el tipo de flanco para la interrupcin externa. Este bit indica el tipo de flanco de la seal externa que ha de provocar una interrupcin en la patilla RB0/INT. o 1: La interrupcin es producida por el flanco ascendente o de subida. o 0: La interrupcin es producida por el flanco descendente o de bajada. Bit 5, T0CS (Timer 0 Signal Source). Seleccin de la fuente de reloj para el TMR0. o 1: TMR0 se usa en modo contador de los pulsos introducidos a travs de RA4/T0CKI o 0: TMR0 se usa en modo temporizador haciendo uso de los pulsos de reloj internos (Fosc/4). Bit 4, T0SE (Timer 0 Signal Edge). Tipo de flanco activo de T0CKI (patilla RA4/T0CKI). o 1 = El TMR0 se incrementa con el flanco descendente de la seal aplicada a RA4/T0CK1. o 0 = El TMR0 se incrementa con el flanco ascendente. Bit 3, PSA (PreScaler Assignement). Se usa para la asignacin del divisor de frecuencias o Prescaler. o 1 = El divisor de frecuencia se asigna al WDT. o 0 = El divisor de frecuencia se asigna a TMR0. Bits 0, 1 y 2, PS0, PS1 y PS2 (Prescaler Rate Select Bits). Configura la tasa del valor del divisor de frecuencia o prescaler. Difiere dependiendo que se haya asignado al TMR0 o al WDT.

PS2 PS1 PS0 Divisor TMR0 Divisor WDT 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

Registro TRISA y TRISB (85h y 86h)


Los registros TRISA y TRISB los vimos cuando estudiamos los puertos (ver "Puertos de E/S" de "El PIC16F84A"), pero conviene recordar lo siguiente:

Estos registros son idnticos para el puerto A y el puerto B, con la diferencia de que uno ser de 5 bits y otro de 8 bits, el mismo nmero de bits que tiene cada puerto. Los registros TRIS, tambin son llamados as, sirven para configurar si los bits de cada puerto sern de entrada o de salida: o 1: La patilla del puerto correspondiente ser de entrada o 0: En este caso la patilla actuar como una salida.

Para mas informacin, ver "Instrucciones y puertos" de "Tcnicas de programacin".

Registro EECON1 (88h)


Este registro contiene configuraciones importantes acerca de la escritura y la lectura de la EEPROM de datos. En concreto tiene 5 bits de control, cuya distribucin y significado es el siguiente. U-0 U-0 U-0 R/W-0 R/W-x EEIF R/W-0 R/S-0 R/S-0 RD Bit 0

WRERR WREN WR Bit 3 Bit 2 Bit 1

Bit 7 Bit 6 Bit 5 Bit 4

U (Unimplemented), No implementado. Se lee como 0.

Bit 4 (flag): EEIF. Bit de interrupcin de escritura en la memoria EEPROM ( EEPROM Interrupt Flag) o 1: Este bit se pone a uno al terminar la operacin de escritura en la EEPROM, y debe ponerse a cero por software o 0: No se ha completado la operacin de escritura o no ha empezado. Bit 3 (flag), WRERR. Bit de error de escritura (Write Error)

1: Este bit se pone a 1 si se produce un error de escritura de forma prematura (Reset o Watchdog). En este caso, los contenidos de EEADR y EEDATA no varan, de manera que el proceso pueda ser repetido correctamente. o 0: Se ha completado la operacin de escritura. Bit 2, WREN. Bit de habilitacin de escritura. (Write Enable) o 1: Este bit debe ser habilitado para poder escribir en la EEPROM o 0: Deshabilita la escritura de datos en la memoria EEPROM. Bit 1, WR. Bit de control de escritura (Write Data) o 1: Indica que se ha iniciado una operacin de escritura. Este bit debe ponerse a uno para escribir un dato. o 0: Indica que se ha completado una operacin de escritura. El PIC lo pone automticamente a cero Bit 0, RD. Bit de control de lectura (Read Data) o 1: Inicia una lectura de la memoria EEPROM. Este bit debe ponerse a uno para poder leer un dato. o 0: No se ha iniciado una lectura de la EEPROM. El PIC lo pone automticamente a cero

En el registro EECON1, los tres primeros bits no estn implementados por los que su lectura es '0'. Los bits de control RD y WR inician operaciones de lectura y escritura respectivamente. Estos bits slo pueden ser puestos a '1' por software, nunca a '0'. Son puestos a '0' cuando se completa la operacin de lectura o escritura. Para leer una posicin de memoria, se debe escribir la direccin en el registro EEADR y colocar a '1' el bit de control RD. El dato estar disponible en un prximo ciclo de instruccin, normalmente en el siguiente, en el registro EEDATA hasta que se lea otro o se escriba en este registro. Para escribir un dato en la EEPROM, se debe primero colocar la direccin en el registro EEADR y el dato en el registro EEDATA. Luego. Despus se debe seguir una secuencia especfica para comenzar a escribir cada byte, para garantizar no escribir datos en la EEPROM por error. La secuencia es:
MOVLW 55h MOVWF EECON2 MOVLW AAH MOVWF EECON2 BSF EECON1,WR ; Escribe 55h en EECON2 ; Escribe AAh en EECON2 ; Pone WR a 1 para comenzar la escritura

Adems, el bit WREN del registro EECON1 debe estar puesto a '1' para habilitar la operacin de escritura. Ms informacin en Uso de la EEPROM.

Registro EECON2 (89h)


Este registro no est implementado fsicamente, por lo cual no se puede leer. Tan slo sirve para un proceso de proteccin de escritura que consiste en copiar en l unos datos especficos, con el fin de evitar que un programa por error pueda programar la EEPROM, manipulando simplemente los bits del EECON1. Lo veremos mas adelante en Uso de la EEPROM.

Estado predeterminado de los registros


En la siguiente tabla, se muestran los estados que tienen los registros al alimentar el PIC, despus de un reset y al salir del modo SLEEP. Leyenda:

( u ) = no cambia ( x ) = desconocido ( - ) = no existe, se lee como 0 ( ? ) = depende de otras condiciones

Notas: 1. Uno o ms bits de INTCON pueden quedar afectados a causa de la salida del modo SLEEP. 2. Cuando la salida del modo SLEEP se produce por una interrupcin y GIE est activado, el PC se carga con el vector de interrupcin (0004 h). Las posibles fuentes de reset afectan de forma diversa a los contenidos de los diferentes registros de control, de estado o de datos. En la descripcin de cada registro se indica el estado de los bits despus de un reset de alimentacin. Es aconsejable examinar esta tabla despus de un reset antes de cualquier utilizacin, excepto en el caso de que se reinicie por programa cada registro.

DISPOSITIVOS LGICOS MICROPROGRAMABLES Conexin Direc. de la alimentac. 00 h 01 h 02 h 03 h 04 h 05 h 06 h 08 h 09 h 0A h 0B h 80 h 81 h 82 h 83 h 84 h 000 h xxxx xxxx ---- ---xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx ---x xxxx xxxx xxxx xxxx xxxx xxxx xxxx ---0 0000 0000 000x ---- ---1111 1111 0000 0000 0001 1xxx xxxx xxxx Reset por MLCR en modo normal 000 h uuuu uuuu ---- ---uuuu uuuu 0000 0000 000u uuuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---0 0000 0000 000u ---- ---1111 1111 0000 0000 000u uuuu uuuu uuuu en modo SLEEP 000 h uuuu uuuu ---- ---uuuu uuuu 0000 0000 0001 0uuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---0 0000 0000 000u ---- ---1111 1111 0000 0000 0001 0uuu uuuu uuuu

Registros del PIC16F84A Reset por WDT en modo normal 000 h uuuu uuuu ---- ---uuuu uuuu 0000 0000 0000 1uuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---0 0000 0000 000u ---- ---1111 1111 0000 0000 0000 1uuu uuuu uuuu

6.14

Salida del modo SLEEP por WDT PC + 1 uuuu uuuu ---- ---uuuu uuuu PC+1 uuu0 0uuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---u uuuu uuuu uuuu1 ---- ---uuuu uuuu PC+1 uuu0 0uuu uuuu uuuu por interrupcin PC + 1 uuuu uuuu ---- ---uuuu uuuu PC+12 uuu1 0uuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---u uuuu uuuu uuuu1 ---- ---uuuu uuuu PC+12 uuu1 0uuu uuuu uuuu

Registro

PC W INDF TMR0 PCL STATUS FSR PORT A PORT B EEDATA EEADR PCLATCH INTCON INDF OPTION PCL STATUS FSR

TRIS A TRIS B EECON1 EECON2 PCLATCH INTCON

85 h 86 h 88 h 89 h 8A h 8B h

---1 1111 1111 1111 ---0 x000 ---- ------0 0000 0000 000x

---1 1111 1111 1111 ---0 ?000 ---- ------0 0000 0000 000u

---1 1111 1111 1111 ---0 ?000 ---- ------0 0000 0000 000u

---1 1111 1111 1111 ---0 ?000 ---- ------0 0000 0000 000u

---u uuuu uuuu uuuu ---u uuuu ---- ------u uuuu uuuu uuuu1

---u uuuu uuuu uuuu ---u uuuu ---- ------u uuuu uuuu uuuu1

You might also like