Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Memoria y Interrupciones en un Microcontrolador PIC16F84, Apuntes de Electrónica

Las características de la memoria de programa y datos, los controles de interrupciones y el uso del Watchdog Timer en el microcontrolador PIC16F84. Se detalla la organización de la memoria, los registros involucrados y las opciones de configuración.

Tipo: Apuntes

2015/2016

Subido el 08/10/2021

cinthia-melissa-saenz-coronel
cinthia-melissa-saenz-coronel 🇵🇪

5

(1)

2 documentos

1 / 15

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Características Técnicas del PIC 16F84
Repertorio de 35 Instrucciones.
Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que necesitan dos.
Versiones de 4 MHz (PIC16F84-04) y 10 MHz (PIC16F84-10).
Memoria de programa Flash de 1 K x 14 bits.
Memoria de datos RAM de 68 bytes.
Memoria de datos EEPROM de 64 bytes.
Figura 1. Diagrama de pins del PIC16F84
15 registros de funciones especiales.
Pila con 8 niveles de profundidad.
Modos de direccionamiento directo, indirecto y relativo.
4 fuentes de interrupciones:
A través del pin RB0/INT.
Desbordamiento del temporizador TMR0.
Interrupción por cambio de esto de los pins 4:7 del Puerto B.
Completada la escritura de la memoria EEPROM.
1.000.000 de ciclos de borrado/escritura de la memoria EEPROM.
40 años de retención de la memoria EEPROM.
13 pins de E/S con control individual de dirección.
Contador/Temporizador TMR0 de 8 bits con divisor programable.
Power-on Reset (POR).
Power-up Timer (PWRT).
Oscillator Start-up Timer (OST).
Watchdog Timer (WDT).
Protección de código.
Modo de bajo consumo SLEEP.
Puede operar bajo 4 modos diferentes de oscilador.
Programación en serie a través de dos pins.
Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM.
Rango de alimentación: 2.0 a 6.0 V.
Características Técnicas del PIC 16F84
http://members.es.tripod.de/InfoE/ctpic16f84.htm (1 of 15) [07/07/2001 07:15:47 p.m.]
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Memoria y Interrupciones en un Microcontrolador PIC16F84 y más Apuntes en PDF de Electrónica solo en Docsity!

Características Técnicas del PIC 16F

l Repertorio de 35 Instrucciones. l Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que necesitan dos. l Versiones de 4 MHz (PIC16F84-04) y 10 MHz (PIC16F84-10). l Memoria de programa Flash de 1 K x 14 bits. l Memoria de datos RAM de 68 bytes. l Memoria de datos EEPROM de 64 bytes.

Figura 1. Diagrama de pins del PIC16F

l15 registros de funciones especiales. l Pila con 8 niveles de profundidad. l Modos de direccionamiento directo, indirecto y relativo. l 4 fuentes de interrupciones: l A través del pin RB0/INT. l Desbordamiento del temporizador TMR0. l Interrupción por cambio de esto de los pins 4:7 del Puerto B. l Completada la escritura de la memoria EEPROM. l 1.000.000 de ciclos de borrado/escritura de la memoria EEPROM. l 40 años de retención de la memoria EEPROM. l 13 pins de E/S con control individual de dirección. l Contador/Temporizador TMR0 de 8 bits con divisor programable. l Power-on Reset (POR). l Power-up Timer (PWRT). l Oscillator Start-up Timer (OST). l Watchdog Timer (WDT). l Protección de código. l Modo de bajo consumo SLEEP. l Puede operar bajo 4 modos diferentes de oscilador. l Programación en serie a través de dos pins. l Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM. l Rango de alimentación: 2.0 a 6.0 V.

lConsumo típico de 2 mA a 5 V y 4 MHz y de 1μA en modo SLEEP con alimentación a 2V.

Arquitectura interna

Las altas prestaciones de los microcontroladores PIC derivan de las características de su arquitectura. Están basados en una arquitectura tipo Harvard que posee buses y espacios de memoria por separado para el programa y los datos, lo que hace que sean más rápidos que los microcontroladores basados en la arquitectura tradicional de Von Neuman.

Otra característica es su juego de instrucciones reducido (35 instrucciones) RISC, donde la mayoría se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos.

Posee una ALU (Unidad Aritmético Lógica) de 8 bits capaz de realizar operaciones de desplazamientos, lógicas, sumas y restas. Posee un Registro de Trabajo (W) no direccionable que usa en operaciones con la ALU.

Figura 2. Diagrama de bloques del PIC16F

Dependiendo de la instrucción ejecutada, la ALU puede afectar a los bits de Acarreo , Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS).

La pila es de 8 niveles. No existe ninguna bandera que indique que esté llena, por lo que será el programador el que deberá controlar que no se produzca su desbordamiento.

Este microcontrolador posee caracterísitcas especiales para reducir componentes externos con lo que se reducen los costos y se disminuyen los consumos. Posee 4 diferentes modos de oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta la utilización de un oscilador a cristal.

En el modo SLEEP el consumo se reduce significativamente y puede ‘despertarse’ al microcontrolador utilizando tanto interrupciones internas como externas y señal de reset. Además posee la función Watchdog Timer (Perro Guardian) que protege al micro de ‘cuelgues’ debido a fallos software que produzcan bucles infinitos.

Descripción de los pins

Figura 3. Memoria de Programa

El vector de reset se encuentra en la posición 0000h y el de interrupción en la 0004h. Puede decirse que la memoria de programa en realidad comienza en 0005h y termina en 03FFh.

Memoria de datos

Está organizada en dos páginas o bancos de registro. Cada banco se divide a su vez en dos áreas. La primera es la de RFS (Registros de Funciones Especiales) que controlan el funcionamiento del dispositivo. Estos se emplean para el control del funcionamiento de la CPU y de los periféricos.

Figura 4. Memoria de Datos

El segundo área (68 bytes SRAM) es la de RGP (Registros de Propósito General), y puede accederse a ellos tanto directa como indirectamente haciendo uso del registro FSR.

Estas dos áreas están divididas en dos páginas, la página 0 y la página 1. Para cambiar de página se utiliza 1 bit del registro STATUS (RP0).

Para direccionar la memoria de datos se emplean dos modos de direccionamiento, el directo y el indirecto. En el direccionamiento directo, los 7 bits de menos peso del código OP de la instrucción proporcionan la dirección en la posición de la página, mientras que los bits RP1 y RP0 de STATUS seleccionan la página o banco.

En el direccionamiento indirecto el operando de la instrucción hace referencia al registro IDNF, que ocupa la posición 00h del área de datos. Se accede a la posición que apunta el registro FSR 04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posición y su bit de más peso, junto con el bit IRP del registro de estado, seleccionan la página.

Registros del PIC16F

Direcc Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Banco 0

00h INDF Dirección de FSR (no es físicamente un registro)

Figura 5. Registro STATUS

IRP: Register Bank Select. No se emplea en el PIC16F84. RP0 y RP1: Register Bank Select. Selección de página o banco de la memoria con direccionamiento directo. Cada página contiene 128 bytes. En el PIC16F84 sólo se usa RP0, RP1 debe mantenerse a 0. TO: Time Out 1 = Tras conectar la alimentación Vdd o ejecutar CLRWDT o SLEEP. 0 = Desbordamiento del Perro Guardián WDT. PD: Power Down 1 = Tras conectar la alimentación Vdd o ejecutar CLRWDT. 0 = Al ejecutar la instrucción SLEEP. Z: Cero 1 = El resultado de una operación aritmética o lógica es 0. 0 = El resultado es distinto de 0. DC (Digit Carry) – Acarreo en el 4º bit de menos peso. C (Carry) – Acarreo en el 8º bit. Es el bit de acarreo en operaciones de suma AADWF y ADDLW y sustracción SUBWF y SUBLW. También los emplean las instrucciones RLF y RRF de rotación de bits. 1 = Acarreo en la suma en el bit de mayor peso. 0 = Acarreo en la resta y no en la suma.

Registro de opciones

Se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupción y la activación de las resistencias de polarización del puerto B. Ocupa la posición 81h de la página 1 del banco de registros. Debe escribirse usando la instrucción especial OPTION. Esta instrucción carga el contenido de W en el registro OPTION.

Figura 6. Registro OPTION

RBPU (RB Pull Up) – Conexión de las resistencias de polarización del Puerto B. Se conectan todas cuando el puerto B actua como entrada. 1 = Todas las resistencias son desconectadas 0 = Las resistencias se activan de forma individual. INTDEG (INTerrupt EDGe) – Selecciona el tipo de flanco para la interrupción. Este bit indica el tipo de flanco de la señal externa que ha de provocar una interrupción en la patita RB0/INT. 1 = La interrupción es producida por el flanco ascendente. 0 = La interrupción es producida por el flanco descendente. T0CS (Timer 0 Signal Source) – Fuente de reloj para el TMR0. 1 = TMR0 se usa en modo contador de los pulsos introducidos a través de A4/T0CKI 0 = TMR0 se usa en modo temporizador haciendo uso de los pulsos de reloj internos (Fosc/4). T0SE (Timer 0 Signal Edge) – Tipo de flanco activo del T0CKI (patilla A4/T0CKI). 1 = El TMR0 se incrementa con el flanco descendente. 0 = El TMR0 se incrementa con el flanco ascendente. PSA (PreScaler Assignement) – Como su nombre indica, se usa para la asignación del divisor de frecuencias 1 = El divisor de frecuencia se asigna al WDT.

0 = El divisor de frecuencia se asigna a TMR0. PS0, PS1 y PS2 (Prescaler Rate Select Bits) – Asigna la tasa del valor del divisor de frecuencias y difiere dependiendo del predivisor que se haya asignado al TMR0 o al WDT.

PS2 PS1 PS0 Divisor TMR0 Divisor WDT

0 0 0 1:2 1:

0 0 1 1:4 1:

0 1 0 1:8 1:

0 1 1 1:16 1:

1 0 0 1:32 1:

1 0 1 1:64 1:

1 1 0 1:128 1:

1 1 1 1:256 1:

Registro INTCON

Este registro contiene varios bits de selección de fuentes de interrupción, el bit de activación global de interrupciones y varios flag que indican la causa de una interrupción.

Figura 7. Registro INTCON

GIE: Activación global de las interrupciones. 1: Concede el permiso de interrupciones. 0: Cancela el permiso de las interrupciones. PEIE: Activación de la interrupción de periféricos (comparador). 1: Activada. 0: Desactivada. T0IE: Activación de la interrupción TMR 1: Activada 0: Desactivada. INTE: Activación de la interrupción externa (patilla RB0/INT). 1: Activada 0: Desactivada. RBIE: Activación de la interrupción de la puerta B (por cambio de estado). 1: Activada 0: Desactivada. T0IF: Señalizador del rebosamiento del TMR0.

Figura 5. Carga del Contador de Programa

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

Direccionamiento indirecto. Registros INDF y FSR

El registro INDF no es un registro físico. Si se efectua la lectura del registro INDF obtendríamos el valor de la dirección de memoria contenida en el registro FSR. Esto es a lo que se llama direccionamiento indirecto.

Puertos de E/S

Dispone de dos puertos de E/S. El puerto A con 5 líneas de la RA0 a la RA4, en la que hay que distinguir la A4 o T0CKI (Timer 0 Clock Input) que está compartida con la entrada para el Timer 0 (TMR0) a través de un trigger Schmitt y que cuando se configura como salida es de colector abierto, por lo que debe colocarse una resistencia de polarización.

Figura 6. Diagrama de bloques de RA3:RA0 Figura 7. Diagrama de bloques de RA

El puerto B dispone de 8 líneas de E/S que van desde la RB0 a la RB7 (la línea RB0 o INT es compartida con la entrada de interrupción externa). Además, las líneas RB4 a RB7 puede programarse una interrupción por cambio de estado de cualquiera de estas líneas. Cuando se produce una interrupción de este tipo, para lo cual las líneas deben estar además programadas como entradas, el hecho de que cualquier línea de RB4 a RB7 cambie de estado produce una interrupción (ver descripción del registro INTCON e Interrupciones). El valor de la patita en modo entrada es comparado con el valor almacenado en la báscula durante la última lectura del Puerto B. Los cambios en las patitas se detectan realizando una operación OR para la generación de una interrupción por cambio de estado. Esta interrupción puede despertar "wake up" al microcontrolador del modo de reposo SLEEP. El usuario debe borrar la interrupción en la Rutina de Servicio de Interrupción RSI de una de las siguientes maneras:

lBorrando la bandera bit 3 de INTCON (RBIE). l Leyendo o escribiendo el PORTB y luego borrando el bit RBIF. Esto finaliza la condición mismacht y permite que se borre RBIF.

Una condición mismacht puede producir que el bit RBIF siga a "1". Leyendo el puerto B puede finalizar la condición de mismacht y permitiendo que el bit RBIF sea puesto a "0".

Figura 8. Diagrama de bloques de RB7:RB

Figura 9. Diagrama de bloques de RB3:RB

Además, todas las líneas del Puerto B disponen de resistencias internas de polarización programables. Cada una de las 8 resistencias pueden ser activadas o deshabilitadas haciendo uso del bit RBPU del registro especial OPTION. Estas resistencias se deshabilitan automáticamente si una línea es programada como salida así como durante el proceso de Power On Reset.

Cada puerto dispone de dos registros:

lRegistro de Datos denominados PORTA ó PORTB: Se pueden leer o escribir según que el puerto correspondiente se utilice como entrada ocomo salida. Registro de Control denominado TRISA ó TRISB: En los registros de Control se programa el sentido de funcionamiento de cada una de las líneas de E/S. Colocando un "0" en el correspondiente bit del registro TRISA ó TRISB, la línea queda programada mientras que colocando un "1" la línea queda programada como entrada.

l

Cualquier línea puede funcionar como entrada o como salida. Sin embargo, si actúa como entrada la información que se introduce no se memoriza, por lo que la información debe ser mantenida hasta que sea leída. Si la línea actúa como salida, el bit que procede del bus de datos se guarda en la báscula, con lo que la información que ofrece esta patita permanece invariable hasta que se reescriba este bit.

La máxima corriente que puede absorber suministrar cada línea individual es 25 y 20 mA respectivamente. La máxima corriente que puede absorber el puerto A es de 80 mA y suministrar 50 mA, mientras que para el puerto B son respectivamente 150 mA y 100 mA.

Cuando se produce un reset todas la líneas se programan automáticamente como entradas. Todas las patitas de E/S que no se empleen deben ser llevadas a +5v., regla de las entradas CMOS.

Temporizador/Contador TMR

El temporizador TMR0 tiene las siguientes características:

lTemporizador/Contador de 8 bits l Divisor de 8 bits programable por software l Selección de reloj interno y externo l Interrupción por desbordamiento l Selección del flanco del reloj externo.

El modo temporizador se selecciona colocando a 0 el bit T0CS del registro OPTION. En este modo, el Timer0 se incrementa con cada ciclo de instrucción (con el divisor desactivado). El modo contador se selecciona colocando a 1 el bit T0CS del registro OPTION. En este modo, el contador se incrementará con cada flanco de subida o de bajada del pin RA4/T0CKI. El flanco se selecciona con el bit T0SE del registro OPTION.

El registro EEADR puede direcconar como máximo 256 bytes de lso cuales sólo los 64 primeros están disponibles, con lo que los dos bits de mayor peso han de tener el valor de ‘0’.

En cuanto al registro EECON1, los tres primeros bits no están implementados por los que su lectura es ‘0’. Los bits de control RD y WR inician operaciones de lectura y escritura respectivamente. Estos bits sólo pueden ser puestos a ‘1’ por software, nunca a ‘0’. Son puestos a ‘0’ cuando se completa la operación de lectura o escritura.

El registro EECON2 no es un registro físico. Sólo se utiliza en las operaciones de escritura de datos en la memoria EEPROM.

Para leer una posición de memoria, se debe escribir la dirección en el registro EEADR y colocar a ‘1’ el bit de control RD. El dato estará disponible en el siguiente ciclo de instrucción, en el registro EEDATA.

Para escribir un dato en la EEPROM, se debe primero colocar la dirección en el registro EEADR y el dato en el registro EEDATA. Luego. Se debe de seguir una secuencia para escribir cada byte:

MOVLW 55h MOVWF EECON MOVLW AAH MOVWF EECON BSF EECON1,WR

Además, el bit WREN del registro EECON1 debe estar puesto a ‘1’ para habilitar la operación de escritura.

Características especiales de la CPU

Palabra de configuración

Se encuentra en la posición $2007 de la memoria de programa, dirección a la que únicamente puede accederse durante la grabación del microcontrolador.

Figura 12. Palabra de configuración

CP: Bit de protección de código 1: Protección de código deshabilitada 0: Memoria protegida por código PWRTE: Bit para habilitar el Power-up Timer 1: Power-up timer deshabilitado 0: Power-up Timer habilitado WDTE: Bit para habilitar el Watchdog timer 1: WDT habilitado 0: WDT deshabilitado FOSC1:FOSC0: Selección del oscilador 11: Oscilador RC 10: Oscilador HS 01: Oscilador XT 00: Oscilador LP

Oscilador

4 opciones de oscilador

RC: Oscilador Resistencia/Capacidad. Puede funcionar hasta 4 MHz pero con una estabilidad de frecuencia menor. La frecuencia depende de los valores de R, C y de la temperatura de funcionamiento. Los valores de R deben estar comprendidos entre 5 y 100 K, mientras que los valores de C no deben ser inferiores a 20 pF.

l

l XT: Oscilador estándar de cristal de cuarzo, desde una frecuencia de 100 kHz hasta un máximo de 4 MHz.

lHS: Alta velocidad, también con cristal de cuarzo hasta una frecuencia de 10 MHz. l LP: Con cristal de cuarzo desde 32 a 200 KHz. Proporciona características de muy bajo consumo.

Figura 13. Oscilador en modo HS, XT o LP Figura 14. Oscilador en modo RC

El tipo de oscilador empleado debe indicarse durante la programación. En ese momento, se programan dos bits de configuración denominados FOSC1 y FOSC2.

Reset

El PIC16F84 dispone de un solo pin de reset, la patita MCLR. Incorpora internamente circuitería de reset que entra en funcionamiento de forma automática una vez que se conecta la alimentación. Hay que distinguir varios tipos de reset:

Por conexión de alimentación Vdd (Power On Reset: POR). Se genera un pulso de reset POR cuando se detecta la subida de Vdd entre 1.2 a 1.7 v. Para disponer de esta ventaja es necesario llevar la patita MCLR a Vdd directamente o a través de una resistencia. Esto elimina los componentes RC externos usualmente necesarios para el reset.

lReset durante el funcionamiento normal al activar MCLR. l Reset durante el modo de reposo SLEEP al activar MCLR. l Reset al sobrepasar el contador del "Perro Guardian". Detección de fallo en la alimentación (Brown-Out). Esta es una condición donde la alimentación del dispositivo Vdd toma un valor inferior del mínimo, pero sin llegar a cero y luego se recupera. El microcontrolador entra en reset en ese momento. Para que este se produzca es necesario añadir una circuitería externa de reset por descenso de la alimentación.

l

Si no se necesita circuitería de reset, la patita MCLR se conecta directamente a Vdd. Este pin incorpora un filtro antiruido que ignora impulsos pequeños

Power-Up timer (PWRT)

El temporizador Power-Up Timer (PWRT) proporciona una retardo fijo de 72 ms durante el encendido, con el fin de mantener el dispositivo en reset hasta que se estabiliza la tensión. Opera mediante un oscilador RC interno. El chip se mantiene en reset mientras PWRT esté activo. Este temporizador puede activarse o desactivarse durante la grabación del microcontrolador mediante el bit PWRTE.

Oscilador Start-Up Timer (OST)

Oscilator Start-Up Timer (OST): proporciona un retardo de 1024 ciclos de reloj de OSC1 después de la finalización del retardo de PWRT. Esto asegura que el cristal de cuarzo o el resonador ha arrancado y se ha estabilizado. Este temporizador sólo actúa si se usan los modos XT, LP y HS y sólo en el POR o en Wake-Up en modo SLEEP.

Cuando Vdd sube muy despacio, es posible que TPWRT time-out y OST terminen antes que Vdd haya tomado su valor final. En este caso sería necesario una