Registros Del PIC16F84A
Registros Del PIC16F84A
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
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
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
2 REGISTRO DE Control de la EEPROM 5 bits MSB del PC INTE RBIE T0IF INTF RBIF
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.
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.
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.
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
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
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.
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.
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
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.
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.
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
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