SlideShare una empresa de Scribd logo
1 de 11
Universidad de la Marina Mercante

Ingeniería Electrónica

Técnicas Digitales II



Introducción a los
Microcontroladores PIC
Índice:
1. Objetivos.
2. Material de Referencia.
3. Los Microcontroladores PIC.

Introducción a los Microcontroladores PIC
1. Objetivos
Familiarizarse con el uso de los microcontroladores PIC, su set de instrucciones,
características, etc.
Utilizar la herramienta de desarrollo MPLAB para realizar la edición, ensamblado,
simulación y depuración del código.

2. Material de referencia

2 Microcontroladores PIC – La clave del Diseño. José Ma Angulo Usategui.
AHojas de Datos del PIC16F84A (disponible en el Blog de la asignatura).

3. Los Microcontroladores PIC.

La familia de los PIC es muy amplia ya que dispone de la gama baja, media y alta y
dentro de cada una de ellas tenemos muchos miembros. Utilizaremos un
microcontrolador PIC muy popular por sus características y facilidad de programación, el PIC
16F84 un miembro de la gama media.

3.1 El PIC16F84

El PIC 16F84 es el miembro más simple de la familia de los PICs y es el que utilizaremos para
comenzar nuestro estudio. Este microcontrolador posee memoria de programa tipo FLASH de
1K de capacidad, Timer, interrupciones, líneas de E/S, etc.
Veamos entonces las características más relevantes de este microcontrolador:

VSolo 35 instrucciones para aprender.
V1024 palabras de Memoria de Programa FLASH.
VMemoria de Datos RAM de 68 bytes.
VMemoria de Datos EEPROM de 64 bytes.
VPila de 8 niveles para permitir llamadas a subrutinas anidadas.
V4 fuentes distintas de interrupción.
VVelocidad de operación desde DC hasta 20 MHz.
VTemporizador/contador de 8 bits (TMR0) con prescaler.
VPerro guardián (WDT).
VPosee 13 líneas de E/S digitales, dos puertas (puerta A 5 líneas y puerta B 8 líneas).
VCorriente máxima por pin: 25 mA modo sink, 20 mA modo source.
VVoltaje de alimentación (VDD) debe estar entre 2 y 5.5 V DC.
10.000 ciclos de borrado/escritura en memoria FLASH.
  10.000.000 ciclos de borrado/escritura en memoria EEPROM.
   Programación In Circuit a través de dos terminales (ICSP™).
    Protección de Código.
     Modo SLEEP para bajo consume.

3.1.1 Encapsulado y distribución de terminales.
Este dispositivo esta fabricado en tecnología CMOS. Se halla disponible en encapsulado
plástico con 18 pines, posee 13 pines de E/S, 2 pines para la alimentación (Vss y VDD), 1 pin
para el RESET y 2 pines para el oscilador.

Figura 1. Distribución de terminales.




Aspecto externo del PIC 16F84A.




El pin VDD es el correspondiente q la tensión realimentación positiva y VSS es la tierra o
referencia. /MCLR es la entrada de reset del microcontrolador. Esta a entrada es activa en bajo
y además se usa en la programación del dispositivo (Vpp). Los pines RA0...RA4 son las líneas
de E/S de la puerta A, RB0...RB7 son las líneas de E/S del puerto B. Los pines OSC1/CLKIN y
OSC2/CLKOUT son las entradas del circuito oscilador.

3.1.2 Reset del Microcontrolador

El PIC 16F84A posee internamente un temporizador conectado al pin de reset que actúa al
momento de conectar la alimentación al microcontrolador. Por ello utilizaremos una resistencia
conectada desde el pin MCLR a la fuente de alimentación. Con esto al encender el sistema, el
microcontrolador permanece en estado de reset por un cierto tiempo hasta que se estabilizan
las señales del circuito. Cuando se produce el reset ocurren dos cosas:
1. El contador de programa es cargado con 000H. De este modo cada vez que ocurre un
RESET reejecuta la instrucción localizada en la posición de memoria 000H.
2. Todos los registros de control y estado adoptan un estado predeterminado.

3.1.3 El Reloj.

A través de este parámetro estableceremos la velocidad de ejecución de las instrucciones y
además el consumo. En esta familia un ciclo de instrucción esta constituido por 4 ciclos de
reloj. Las instrucciones se ejecutan en un ciclo de instrucción a excepción de las instrucciones
de salto que necesitan dos ciclos. Por ejemplo si utilizamos un cristal de 4 MHz, un ciclo de
reloj es de 250 ns, y un ciclo de instrucción es entonces 1uS.
Los microcontroladores PIC poseen 4 alternativas para el circuito de reloj:
RC Usa resistencia y capacitor. La frecuencia de oscilación es dada por los valores de estos.
HS Utiliza un cristal de cuarzo. El rango de operación es de 4 a 10 MHz.
XT Oscilador de cristal o resonador. Opera entre 100KHz y 4 MHz.
LP Oscilador de bajo consumo. Utiliza cristal o resonador con frecuencias entre 35 y 200 KHz.
Cuando vamos a programar o "quemar" el microcontrolador debemos especificar el tipode
oscilador que utilizaremos. Esto lo hacemos a través de unos fusibles llamados"fusibles de
configuración" o fuses.

Nosotros utilizaremos un cristal de 4 MHz. Esta frecuencia es dividida por cuatro, lo que hace
que la frecuencia de trabajo del microcontrolador sea de 1 MHz, por lo que cada instrucción se
ejecuta en 1uS.

3.1.4 Memoria de Programa.

El PIC16F84 tiene un contador de programa de 13 bits, tiene una capacidad de
direccionamiento de 8K x 14, pero solo tienen implementado el primer 1K x 14 (0000h hasta
03FFh). La memoria de programa es de tipo FLASH.
El contador de programa (PC) está implementado en la RAM. Los 8 bits de menor peso son
almacenados en el registro PCL. Los bits restantes en el registro PCLATH. El PC cambia de
manera automática, no podemos modificarlo desde el programa. La forma en que cambia el PC
es incrementándose con la ejecución de cada instrucción o a través de las instrucciones de
salto y retorno: GOTO, CALL, RETURN, RETLW y RETFIE.
En cuanto a la pila se halla en una zona independiente de la memoria de programa y de datos.
Su estructura es de tipo LIFO (Last In First Out) con 8 niveles de profundidad, cada uno de 13
bits. No posee instrucciones para manipulación de la pila. La instrucción CALL y las
interrupciones, cargan el contenido del PC en el nivel superior de la pila. Las instrucciones
RETURN, RETLW y RETFIE, sacan el primer valor de la pila y lo cargan en el PC.

3.1.5 Memoria de Datos

En el PC 16F84 la memoria de datos RAM posee dos zonas diferentes: el área de RAM
estática y el Área EEPROM.

Área RAM estática o SRAM: en ésta se hallan el banco de Registros Específicos (SRF) y el
banco de Registros de Propósito General (GPR). El SRF posee 24 posiciones de 1 byte,
aunque dos de ellas no son operativas y el GPR 68 bytes.

Área EEPROM: posee 64 bytes donde podemos almacenar datos importantes y que no se
perderán al desconectar la alimentación.
La memoria RAM esta dividida en dos bancos (banco 0 y banco 1), cada uno consta de 128
bytes.
En el PIC16F84 sólo se hallan implementadas las 48 primeras posiciones de cada banco, de
las cuales las 12 primeras (00h...0Bh) están reservadas a los Registros de Propósito Específico
(SFR). Estos registros son los encargados de controlar el procesador y sus recursos. Algunos
de estos registros están duplicados en la misma dirección de los dos bancos para facilitar su
acceso, como INDF, ESTADO, FSR, PCLATH, INTCON, como se puede ver en la figura 2.
Figura 2. Memoria de Datos.


Las direcciones 7 y 87 no están implementadas. Los 36 registros restantes de cada banco se
destinan a Registros de Propósito General (GPR) y en realidad sólo son operativos los 36 del
banco 0, pues los del banco 1 se mapean sobre el banco 0. Es decir cuando se hace referencia
a un registro general del banco 1, realmente se accede al mismo registro del banco 0.
Para elegir el banco al que queremos acceder lo hacemos a través del bit 5 (RP0) del registro
de estado. Cuando RP0 = 1 se accede al banco 1 y cuando RP0 = 0 se accede al banco 0.
Al producirse un reset automáticamente se accede al banco 0. Esto sólo es importante para los
Registros de Propósito Específico. Los registros SFR se clasifican en dos grupos.
En el primero se incluyen aquellos que controlan el núcleo del microcontrolador
(ESTADO, OPTION, INTCON, etc.). Y en el otro grupo se incluyen los que caracterizan la
operatividad de los recursos auxiliares y periféricos.
3.1.6 Modos de Direccionamiento

En el microcontrolador PIC16F84A, las instrucciones pueden especificar los datos u
operandos de tres formas distintas: inmediato, directo o indirecto.
En el modo inmediato (o literal) el valor del operando está incluido en el propio código de la
instrucción.
En el direccionamiento directo el operando es especificado mediante su dirección, incluida en el
código de la operación. El banco que se debe acceder lo determina en el bit RP0 del registro de
ESTADO.
En el direccionamiento indirecto se usa cuando una instrucción usa como operando el registro
INDF, que ocupa la dirección 0 de ambos bancos. Se accede a la posición que apunta el
contenido del registro FSR ubicado en la posición 04 H del área de datos.

3.1.7 El Registro de Estado.

El registro de estado es un registro donde se almacena el estado del microcontrolador.
Este registro es de 8 bits, se ubica en la dirección 03h de los bancos 0 y 1. Los bits de este
registro se pueden usar para:

- Obtener el estado de la ALU después de una operación (C, DC y Z).
- Indican el estado de Reset (/TO y /PD, activos a nivel bajo)
- Seleccionar el banco en el cual vamos a trabajar.

bit 7                                                                                             bit 0
   IRP          RP1           RP0            T0           PD             Z           DC            C



Figura 3. Registro de Estado.

C: bit de acarreo. Si esta en ‘1’ indica que se produjo acarreo en el bit de mayor peso del resultado de una
operación de suma (addwf y addlw). Actúa como señalizador de borrowene una resta (subwf y sublw).
Vale ‘1’ si no hay borrow.

DC: Acarreo del 4º bit. Igual que el anterior pero para el 4º bit del resultado.
Z: bit de cero. Vale 1 si el resultado de la instrucción anterior ha sido 0.
PD: Power Down. Se pone automáticamente a ‘1’ después de la conexión de la alimentación o al ejecutar
la instrucción clrwdt. Se pone automáticamente a 0 con la instrucción sleep.
TO: Time Out. Se pone automáticamente a 1 después de la conexión de la alimentación o al
ejecutar la instrucción clrwdt o sleep. Se pone a cero cuando se produce el desbordamiento del perro
guardián.
RP1 – RP0: Selección del bando. En el PIC16F84 sólo se usa RP0 por tener sólo dos bancos de
memoria. Cuando vale ‘0’ se accede al bando 0 y cuando vale ‘1’ al banco 1.
IRP: Selección del banco de direccionamiento indirecto. Determinan el banco de memoria de datos
seleccionado. En el PIC16F84 debe valer siempre 0.
Nota: No todos los bits de este registro pueden escribirse. Si ejecutamos la instrucción de
limpieza de este registro (CLRF ESTADO), la misma deja el registro con el valor: 000XX1XX
(‘X’ significa que no cambia).

3.1.8 Puertas de Entrada – Salida

La mayoría de las aplicaciones con microcontroladores están destinados a recibir datosdel
mundo exterior (entradas) y proveer datos a distintos periféricos (salidas). Para realizar esto, el
PIC16F84 posee 13 líneas de E/S digitales.
En el PIC16F84 las 13 líneas de E/S están agrupadas en puertas, aunque también
podemos actuar sobre una línea individual. El PIC16F84 posee dos puertas; la puerta A que
posee 5 líneas RA0 ... RA4, y la puerta B que tiene 8 líneas RB0 ... RB7.
Para poder configurar los pines de las puertas como entrada o salida, utilizamos los
registros:

STATUS           dirección 0x3
PORTAdirección 0x5
PORTBdirección 0x6
TRISA        dirección 0x5
TRISB        dirección 0x6

Al producirse un reset, el PIC16F84A tendrá todos los pines de las puertas, colocados como
entrada de datos. Por lo tanto si necesitamos cambiarlos tendremos que configurarlos.
Para configurar las puertas debemos tener en cuenta que asignando un CERO (0) a un pin,
éste quedará como salida y asignando un UNO (1), quedará como entrada. Esta asignación la
hacemos en los registros TRISA y TRISB.

TRISA para configurar los pines del PUERTO A (5 bits)
TRISB para configurar los pines del PUERTO B (8 bits)

Por Ejemplo:

Queremos configurar que todos los pines de la puerta A sean salidas excepto RA0 que será
entrada y además la puerta B la queremos como entrada.

TRISA = 00001
TRISB = 11111111

Cuando el PIC arranca se halla en el BANCO 0, pero TRISA y TRISB están ubicados en el
BANCO 1 por lo que debemos cambiar de banco para configurar las puertas. Esto lo hacemos
a través del registro STATUS.

El bit 5 de STATUS (RP0) define la posición del banco en donde nos encontramos. Si
colocamos RP0 en ‘0’ estaremos en el BANCO 0, si lo colocamos en ‘1’ en el BANCO 1.

Ahora si queremos acceder a las puertas existen otros dos registros denominados
PUERTAA y PUERTAB, que se hallan en las posiciones 5 y 6 del banco 0 de la memoria de
datos.

Por Ejemplo:

Realizaremos la configuración de la puerta A como entrada y la puerta B como entrada los 4
bits más altos y como salida los 4 más bajos.

BSF STATUS,RP0      ; Entramos al BANCO 1
MOVLW B'11111'      ; Movemos 11111 al registro de trabajo.
MOVWF TRISA         ; Configuramos el puerto A como Entrada.
MOVLW B'11110000' ; Movemos 00000000 al registro de trabajo.
MOVWF TRISB         ; Configuramos el puerto B como salida.
BCF STATUS,RP0      ; Salimos del BANCO 1.

Podemos leer los datos de entrada de una puerta, siempre y cuando esté configurada como
entrada. Esto lo hacemos accediendo a los registros de las puertas, por ejemplo:

movfw PUERTAA.

De igual forma podemos escribir un dato en una puerta (siempre que halla sido
configurada como salida) escribiendo en el registro correspondiente.
Por ejemplo:

movwf PUERTAA.

Podemos además modificar un bit de una puerta, para ello contamos con instrucciones
destinadas a esto:

bsf PUERTA, bit ; pone a 1 el bit indicado de la puerta A.
bcf PUERTA, bit ; pone a 0 el bit indicado de la puerta A.

Importante: Al momento de leer una puerta, lo que se lee es el nivel lógico presente en sus
líneas en ese momento. Cuando escribimos un dato en una puerta, la información queda
presente en la salida hasta que realice otra escritura (pues poseen latchs).

Puerta A.

La puerta A posee 5 líneas de E/S digitales denominadas RA0, RA1, RA2, RA3 y RA4. Estas
líneas pueden configurarse individualmente como entradas o salidas a través del registro
TRISA. El acceso a la puerta A se efectúa con el registro PUERTAA, ubicado en la posición 5
del banco 0 de la memoria de datos.
Las líneas RA0 .. RA3 son E/S digitales que admiten niveles TTL a la entrada y CMOS de
salida. La línea RA4/TOCKI, multiplexa la función de E/S con la entrada de pulsos externos
para el contador TMR0.
En cuanto a manejo de corriente, cada línea de la puerta A puede suministrar una
corriente máxima de 20 mA (Source) y puede absorber una corriente máxima de 25 mA (sink).
La capacidad máxima de corriente de la puerta A es de 80 mA(sink) y de 50 mA (source).

Puerta B

La puerta B posee 8 líneas de E/S digitales RB0 ... RB7, que pueden ser configuradas
individualmente como entradas o salidas, a través del registro TRISB. El acceso a la puerta A
se efectúa con el registro PUERTAB, ubicado en la posición 6 del banco 0 de la memoria de
datos.
La línea RB0/INT además de funcionar como E/S digital, sirve como entrada de solicitud de
interrupción externa, cuando esta habilitada en el registro INTCON.
Las líneas RB4 ... RB7, cuando funcionan como entradas, pueden ser programadas para
generar una interrupción si alguna de ellas cambia su estado lógico. Al leer el valor de estas
entradas, es comparado con el valor anterior almacenado y si éste ha cambiado se origina una
interrupción, activándose el señalizador RBIF.
La línea RB6 se usa además para la grabación serie de la memoria de programa (soporta la
señal de reloj) mientras que RB7 es la entrada de datos en serie.
En cuanto a manejo de corriente, cada línea de la puerta B puede suministrar una
corriente máxima de 20 mA (Source) y puede absorber una corriente máxima de 25 mA (sink).
La capacidad máxima de corriente de la puerta A es de 150 mA (sink) y de 100 mA (source).

3.1.9 Temporizador/Contador TMR0

El microcontrolador PIC16F84 incorpora un temporizador/contador de 8 bits denominado
TMR0, el cual puede operar como contador o como temporizador.

Contador: cuenta los impulsos recibidos por el pin RA4/TOCKI. En este modo cuenta el
número de ciertos sucesos externos al micro. Cuando la cuenta llega al valor FFh se produce
el desbordamiento al pasar a 00h, indicando esto a través de un señalizador y además puede
producir una interrupción si la misma esta habilitada.

Temporizador: en este caso cuenta los impulsos provenientes del reloj interno. Se usa para
determinar un tiempo preciso, debido a que los impulsos poseen una duración conocida. La
duración de los impulsos equivale a un ciclo de instrucción, es decir, la cuarta parte del ciclo de
reloj. Igual que en el funcionamiento como contador, se produce el desbordamiento al pasar de
FFh a 00h poniendo a 1 un bit señalizador y produciendo interrupción si esta se encuentra
habilitada.
El TMR0 se comporta como un registro de propósito especial ubicado en la dirección 01h del
bando 0 de la memoria de datos.
Cuando opera como temporizador, conviene cargarle con el valor de los impulsos que se
quieren contar pero expresados en complemento a 2.
De este modo al transcurrir el número de impulsos deseados el contador valdrá 00h
activando el señalizador TOIF y produciendo una interrupción si esta se halla habilitada.
Podemos leer el contenido del TMR0 en cualquier momento sin detener o cambiar su cuenta
utilizando la instrucción movf TMR0, W.
Cuando escribimos un nuevo valor sobre TMR0 para iniciar una nueva cuenta, se retrasa en
incremento del mismo en 2 ciclos posteriores.
A veces es necesario controlar tiempos largos, para lograr esto el PIC16F84 dispone de un
circuito programable llamado divisor de frecuencia (prescaler) el cual permite dividir la
frecuencia usada por varios valores.
Este divisor de frecuencia puede ser utilizado por el TMR0 o por el perro guardián (WDT).
Para realizar la programación del funcionamiento de TMR0, el WDT y del divisor de
frecuencia se usan ciertos bits del registro OPTION y de la palabra de configuración.




Figura 4. Diagrama en bloques del TMR0.
3.2.1 El Perro Guardián (Watch dog Timer).

El perro guardián (WDT) también es un contador interno de 8 bits que tienen por objetivo
generar un reset del microcontrolador cuando se desborda. Su control de tiempo es
independiente del TMR0. Podemos evitar el funcionamiento del WDT programando un bit
WDTE de la palabra de configuración.
Para evitar que se desborde debemos refrescarlo o recargar su cuenta antes de que
llegue al desbordamiento. Este refresco, que consiste en ponerlo en cero, lo realizamos a
través de las instrucciones CLRWDT y SLEEP.
Debemos analizar el programa y ubicar alguna de estas dos instrucciones en sitios
estratégicos por los que pase el flujo del programa, antes de que transcurra el tiempo asignado
al WDT. De este modo si el programa se cuelga no se refresca el perro guardián y se produce
el reset del microcontrolador.
La instrucción CLRWDT borra el valor del WDT, reiniciando su cuenta. Por otro lado, la
instrucción SLEEP además de borrar el WDT, detiene el sistema entrando a un modo de bajo
consumo. Si no se desactiva el perro guardián cuando se entra en el estado de reposo, al
terminar desbordar, provocará un reset que sacará al microcontrolador de dicho estado. En el
registro de ESTADO existe un bit denominado TO que toma el valor ‘0’ después del
desbordamiento del WDT.

3.2.2 El Registro OPTION.

La función principal del registro OPTION es controlar el comportamiento del TMR0 y el divisor
de frecuencia. El registro OPTION se halla en la posición 81h de la memoria de datos
(dirección 1 del banco 1). En la figura 5 podemos ver la composición del registro y a
continuación se explica la función cada uno de sus bits.

RBP0        INTEDG       TOCS            TOSE            PSA             PS2             PS1             PS0


Figura 5. Registro OPTION.

RBPU           RBPU = 0 activa las resistencias Pull-up de la puerta B. RBPU = 1 desactiva.

INTEDG         Indica cual es el flanco activo de la interrupción externa (RB0/INT). Si vale 0 activa el flanco
               descendente y si vale 1 el ascendente.
TOCS              Tipo de reloj para el TMR0. Si vale 1 activa los pulsos introducidos a través de TOCKI
                  (contador). Si vale 0 se activan los pulsos de reloj interno Fosc/4 (temporizador)
TOSE              Activa el tipo de flanco de la señal TOCKI. Si vale 0 se incrementa el TMR0 cada flanco
                  ascendente. Si vale 1 se incrementa con el flanco descendente.
PSA                          Asignación del divisor de frecuencias. Si vale 0 el divisor de frecuencia se asigna al
                  TMR0 y si vale 1 se asigna al WDT.

PS2 – PS0          Indican el valor con el que actúa el divisor de frecuencias, según la siguiente tabla de valores.

3.2.3 Interrupciones

Las interrupciones son acontecimientos o sucesos que hacen que el microcontrolador deje de
la do lo que esta haciendo para atender este suceso y luego regrese y continúe con lo que
estaba haciendo.
Dichos sucesos pueden ser de origen interno o externo al microcontrolador. Al momento de
producirse una interrupción se para la normal ejecución del programa, se guarda la dirección
actual en la pila y se carga el PC con la dirección del Vector de Interrupción que es una
dirección reservada de la memoria de código.
En el microcontrolador PIC16F84 el Vector de Interrupción está ubicado en la dirección 0004h
de la memoria de programa, donde empieza la Rutina de Servicio de la Interrupción. Por lo
general en esta dirección colocamos una instrucción de salto incondicional GOTO que salta a la
dirección del programa donde se halla la rutina de servicio de la interrupción (RSI). La RSI
comienza salvando en la memoria de datos los registros específicos que va a emplear. Antes
de retornar al programa principal estos valores almacenados son recuperados y se restaura el
estado del procesador.
Siempre que se produce una interrupción se debe averiguar cual de las posibles causas ha
motivado la interrupción. Para lograr esto se exploran los señalizadores de las fuentes de
interrupción del registro INTCON.
PS2..PS0 Timer 0 Watch Dog
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
RBP0 INTEDG TOCS TOSE PSA PS2 PS1 PS0

El microcontrolador PIC16F84 posee un bit GIE (Global Interrupt Enable) que cuando vale 0
inhabilita todas las interrupciones.
La RSI debe colocar este bit en ‘0’ para evitar que se aniden interrupciones. Al retornar de la
interrupción (Instrucción RETFIE), GIE pasa a valer ‘1’ automáticamente para habilitar
nuevamente las interrupciones.
Pero los señalizadores de interrupción no son borrados de forma automática y debemos
desactivarlos por software. Si no hacemos esto, al producirse la siguiente interrupción, no
podríamos averiguar su origen).
La figura 6 muestra las fases más importantes de la atención a una interrupción.

Figura 6. Fases en la atención de una Interrupción.



3.2.4 Causas de la Interrupción

El PIC16F84 tiene cuatro posibles causas de interrupción.
1. Interrupción externa provocada al activar la patita RB0/INT.
2. Desbordamiento del TMR0.
3. Cambio de estado en las líneas de la Puerta B (RB4 ... RB7).
4. Finalización de escritura en la EEPROM de datos.

Proceso de
Interrupción
Todas éstas solicitudes de interrupción serán
atendidas siempre que el bit GIE este en ‘1’.
Cada interrupción dispone de un señalizador
o flag que es un bit que se pone
automáticamente a 1 cuando se produce la
interrupción. Y cada interrupción posee
también un bit de habilitación, el cual
permite o prohíbe la solicitud de esa
interrupción.




4.2.5. Registro de control de interrupción INTCON
Como el PIC 16F84A admite interrupciones, requiere un registro encargado de su
gestión. El registro encargado de gestionar las interrupciones es el INTCON, en este se
encuentran los señalizadores y los bits de habilitación de las interrupciones. Ocupa la
dirección 0Bh del banco 0 de la memoria de datos RAM y está duplicado en el banco 1.
En la figura 8 podeos ver la estructura de este registro y a continuación una descripción
de cada uno de sus bits.
Figura 8. Registro INTCON.
GIE Habilitación global de interrupciones. GIE = 1 permite la solicitud de interrupciones cuyos bits de
permiso individuales también lo permitan. GIE = 0 prohíbe todas las interrupciones.
EEIE Permiso de interrupción por fin de escritura en la EEPROM. EEIE = 0 prohíbe esta interrupción y si
EEIE = 1 la permite.
TOIE Permiso de interrupción por desbordamiento del TMR0. TOIE = 0 prohíbe esta interrupción.
TOIE = 1 la permite.
INTE Permiso de interrupción por activación de la patilla RB0/INT. INTE = 0 prohíbe esta interrupción.
INTE = 1 la permite.
RBIE Permiso de interrupción por cambio de estado en RB4 - RB7. RBIE = 0 prohíbe esta interrupción.
RBIE = 1 la permite.
TOIF Señalizador del desbordamiento del TMR0. Se pone automáticamente a 1 cuando el TMR0 pasa del
valor FFh a 00h.
INTF Señalizador de activación de la patilla RB0/INT. Se pone a uno al activarse la patilla RB0/INT,
indicando solicitud de interrupción externa
RBIF Señalizador de cambio de estado en las patillas RB4/RB7. Se pone a 1 cuando cambia el estado de
alguna de estas líneas.
4.2.6 Interrupción externa INT
Esta interrupción es útil para atender sucesos externos al microcontrolador. Cuando
ocurre algún suceso externo que el microcontrolador debe gestionar se activa la pata
RB0/INT y se efectúa una solicitud de interrupción. El bit INTF del registro INTCON se
pone a ‘1’ en forma automática y si el bit de habilitación INTE = 1 y además bit de
permiso global GIE = 1, se puede atender a la interrupción.
4.2.7 Interrupción de desbordamiento del contador TMR0
Esta interrupción se produce cuando el TMR0 se desborda y pasa del valor FFh a 00h.
Bajo esta situación el señalizador TOIF se pone automáticamente a 1. Si el bit de TOIE y
GIE, están puestos a 1 se atiende la interrupción. Si no se recarga el TMR0 sigue contado
de 00h a FFh. En cualquier momento se puede leer o escribir este registro, pero cada vez
que se recarga se pierden dos ciclos de reloj. Cuando se recarga con el valor N (en
decimal) cuenta un número de ciclos igual a 256 - N.
4.2.8 Interrupción por cambio de estado en las líneas RB7:RB4
Esta interrupción está específicamente implementada para atender la pulsación de una
tecla en un teclado matricial conectado a dichas líneas (RB7...RB4). Con estas 4 líneas
podemos controlar un teclado matricial de 16 teclas. Al cambiar el estado lógico de
alguna de estas entradas, el señalizador RBIF se pone a 1 y si los dos bits de permiso
RBIE = GIE = 1 se autoriza la interrupción.
GIE
EEIE TOIE INTE RBIE TOIF INTF RBIF
4.2.9 Reinicialización o Reset
Existen 5 causas que pueden originar el reset del PIC16F84. Recordemos que al
producirse un reset, el PC se carga con el valor 000h y los registros específicos toman un
valor conocido. Las causas que pueden originar un reset son:
1. Conexión de la alimentación al PIC16F84.
2. Activación de /MCLR estando del microcontrolador funcionando normalmente.
3. Activación de /MCLR estando en estado de reposo.
4. Desborde del WDT estando el microcontrolador funcionando normalmente.
5. Desborde del WDT estando el microcontrolador en el estado de reposo.
5. Desarrollo de la Práctica
Realizaremos algunos programas simples para comenzar la programación de los PIC.
Utilizaremos el PIC16F84A ya que es un micro de la gama media con Timer,
interrupciones, WDT, memoria EEPROM de datos y posee memoria de programa FLASH.
Para comenzar a utilizar la herramienta de desarrollo MPLAB utilizaremos la guía

Más contenido relacionado

La actualidad más candente

Ud1 3 microcontrolador_pic
Ud1 3 microcontrolador_picUd1 3 microcontrolador_pic
Ud1 3 microcontrolador_picarnadillo
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Alejandra Ruiz
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Hamiltonn Casallas
 
Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Hamiltonn Casallas
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Hamiltonn Casallas
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84adanqueas
 
Memorias, puertos, y registros del pic
Memorias, puertos, y registros del picMemorias, puertos, y registros del pic
Memorias, puertos, y registros del picMario Sandi
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Hamiltonn Casallas
 
Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Hamiltonn Casallas
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASMdave
 
Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Luis Zurita
 
Ud1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aUd1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aarnadillo
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresGabriel Jhonatan
 

La actualidad más candente (19)

PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
Ud1 3 microcontrolador_pic
Ud1 3 microcontrolador_picUd1 3 microcontrolador_pic
Ud1 3 microcontrolador_pic
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
 
Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84a
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Memorias, puertos, y registros del pic
Memorias, puertos, y registros del picMemorias, puertos, y registros del pic
Memorias, puertos, y registros del pic
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07
 
Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01
 
Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
 
Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2Guía de ejercicios resueltos tema 2
Guía de ejercicios resueltos tema 2
 
Ud1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aUd1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84a
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladores
 

Similar a Microcontroladores PIC Introducción

Introducpic2
Introducpic2Introducpic2
Introducpic2conalep
 
Introducpic
IntroducpicIntroducpic
Introducpicconalep
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedadordy vc
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84AMicroPart
 
7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanolDanny Sanchez
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del bancoAnibal Ulibarri
 
Microcontroladores tabla de referencia
Microcontroladores tabla de referenciaMicrocontroladores tabla de referencia
Microcontroladores tabla de referenciaRuderocker Billy
 
CaracteríSticas Del Pic
CaracteríSticas Del PicCaracteríSticas Del Pic
CaracteríSticas Del Picemmanuel9393
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxJhonRymond2
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxJhonRymond2
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesiDavid Narváez
 

Similar a Microcontroladores PIC Introducción (20)

Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedador
 
Apuntes del pic 16f84
Apuntes del pic 16f84Apuntes del pic 16f84
Apuntes del pic 16f84
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Implementacion del 16F84A
Implementacion del 16F84AImplementacion del 16F84A
Implementacion del 16F84A
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 
7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol7842803 capitulo2-arquitectura-del-a tmega32-espanol
7842803 capitulo2-arquitectura-del-a tmega32-espanol
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del banco
 
Microcontroladores tabla de referencia
Microcontroladores tabla de referenciaMicrocontroladores tabla de referencia
Microcontroladores tabla de referencia
 
Unidad I
Unidad IUnidad I
Unidad I
 
Microcontrolador PIC16F887
Microcontrolador PIC16F887Microcontrolador PIC16F887
Microcontrolador PIC16F887
 
CaracteríSticas Del Pic
CaracteríSticas Del PicCaracteríSticas Del Pic
CaracteríSticas Del Pic
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptx
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptx
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Curso de pic
Curso de picCurso de pic
Curso de pic
 

Más de Daniel Remondegui

Calidad de sw 2c - 2018 mindset
Calidad de sw  2c - 2018 mindsetCalidad de sw  2c - 2018 mindset
Calidad de sw 2c - 2018 mindsetDaniel Remondegui
 
Ingeniería de Calidad -Apunte calidad en las metodologias agiles
Ingeniería de Calidad -Apunte  calidad en las metodologias agilesIngeniería de Calidad -Apunte  calidad en las metodologias agiles
Ingeniería de Calidad -Apunte calidad en las metodologias agilesDaniel Remondegui
 
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017Daniel Remondegui
 
Ejemplo de Técnica de Resolución de Problemas
Ejemplo de Técnica de Resolución de ProblemasEjemplo de Técnica de Resolución de Problemas
Ejemplo de Técnica de Resolución de ProblemasDaniel Remondegui
 
La batalla de las metodologías de mejora Gil Lugo
La batalla de las metodologías de mejora   Gil LugoLa batalla de las metodologías de mejora   Gil Lugo
La batalla de las metodologías de mejora Gil LugoDaniel Remondegui
 
Sameco 2014. Los 7 magnificos. Daniel Firka
Sameco 2014. Los 7 magnificos. Daniel FirkaSameco 2014. Los 7 magnificos. Daniel Firka
Sameco 2014. Los 7 magnificos. Daniel FirkaDaniel Remondegui
 
Conferencia de Daniel Firka - Mejores Prácticas en Six Sigma
Conferencia de Daniel Firka - Mejores Prácticas en Six SigmaConferencia de Daniel Firka - Mejores Prácticas en Six Sigma
Conferencia de Daniel Firka - Mejores Prácticas en Six SigmaDaniel Remondegui
 
Los mitos de la calidad o los 5 supuestos erróneos de crosby
Los mitos de la calidad o los 5 supuestos erróneos de crosbyLos mitos de la calidad o los 5 supuestos erróneos de crosby
Los mitos de la calidad o los 5 supuestos erróneos de crosbyDaniel Remondegui
 
Practica n#2 - Ingeniería de Calidad
Practica n#2 - Ingeniería de CalidadPractica n#2 - Ingeniería de Calidad
Practica n#2 - Ingeniería de CalidadDaniel Remondegui
 
Historia de la calidad (ASQ)- Texto traducido por Daniel Remondegui
Historia de la calidad (ASQ)- Texto traducido por Daniel RemondeguiHistoria de la calidad (ASQ)- Texto traducido por Daniel Remondegui
Historia de la calidad (ASQ)- Texto traducido por Daniel RemondeguiDaniel Remondegui
 
Práctica N°1 - Ingeniería de Calidad
Práctica N°1 - Ingeniería de CalidadPráctica N°1 - Ingeniería de Calidad
Práctica N°1 - Ingeniería de CalidadDaniel Remondegui
 

Más de Daniel Remondegui (20)

LEANMANUFACTURING.pptx
LEANMANUFACTURING.pptxLEANMANUFACTURING.pptx
LEANMANUFACTURING.pptx
 
Calidad de sw 2c - 2018 mindset
Calidad de sw  2c - 2018 mindsetCalidad de sw  2c - 2018 mindset
Calidad de sw 2c - 2018 mindset
 
Six sigma
Six sigmaSix sigma
Six sigma
 
Itil
ItilItil
Itil
 
ITIL
ITILITIL
ITIL
 
ISO 9000 - Normas
ISO 9000 - Normas ISO 9000 - Normas
ISO 9000 - Normas
 
Ingeniería de Calidad -Apunte calidad en las metodologias agiles
Ingeniería de Calidad -Apunte  calidad en las metodologias agilesIngeniería de Calidad -Apunte  calidad en las metodologias agiles
Ingeniería de Calidad -Apunte calidad en las metodologias agiles
 
Indicadores
Indicadores Indicadores
Indicadores
 
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017
Guia de trabajos prácticos N°1 - Ingeniería de Calidad 2017
 
F00 proceso
F00 procesoF00 proceso
F00 proceso
 
Examen multiple choice
Examen multiple choiceExamen multiple choice
Examen multiple choice
 
Ejemplo de Técnica de Resolución de Problemas
Ejemplo de Técnica de Resolución de ProblemasEjemplo de Técnica de Resolución de Problemas
Ejemplo de Técnica de Resolución de Problemas
 
La batalla de las metodologías de mejora Gil Lugo
La batalla de las metodologías de mejora   Gil LugoLa batalla de las metodologías de mejora   Gil Lugo
La batalla de las metodologías de mejora Gil Lugo
 
Sameco 2014. Los 7 magnificos. Daniel Firka
Sameco 2014. Los 7 magnificos. Daniel FirkaSameco 2014. Los 7 magnificos. Daniel Firka
Sameco 2014. Los 7 magnificos. Daniel Firka
 
Conferencia de Daniel Firka - Mejores Prácticas en Six Sigma
Conferencia de Daniel Firka - Mejores Prácticas en Six SigmaConferencia de Daniel Firka - Mejores Prácticas en Six Sigma
Conferencia de Daniel Firka - Mejores Prácticas en Six Sigma
 
Mapeo de procesos
Mapeo de procesosMapeo de procesos
Mapeo de procesos
 
Los mitos de la calidad o los 5 supuestos erróneos de crosby
Los mitos de la calidad o los 5 supuestos erróneos de crosbyLos mitos de la calidad o los 5 supuestos erróneos de crosby
Los mitos de la calidad o los 5 supuestos erróneos de crosby
 
Practica n#2 - Ingeniería de Calidad
Practica n#2 - Ingeniería de CalidadPractica n#2 - Ingeniería de Calidad
Practica n#2 - Ingeniería de Calidad
 
Historia de la calidad (ASQ)- Texto traducido por Daniel Remondegui
Historia de la calidad (ASQ)- Texto traducido por Daniel RemondeguiHistoria de la calidad (ASQ)- Texto traducido por Daniel Remondegui
Historia de la calidad (ASQ)- Texto traducido por Daniel Remondegui
 
Práctica N°1 - Ingeniería de Calidad
Práctica N°1 - Ingeniería de CalidadPráctica N°1 - Ingeniería de Calidad
Práctica N°1 - Ingeniería de Calidad
 

Microcontroladores PIC Introducción

  • 1. Universidad de la Marina Mercante Ingeniería Electrónica Técnicas Digitales II Introducción a los Microcontroladores PIC Índice: 1. Objetivos. 2. Material de Referencia. 3. Los Microcontroladores PIC. Introducción a los Microcontroladores PIC 1. Objetivos Familiarizarse con el uso de los microcontroladores PIC, su set de instrucciones, características, etc. Utilizar la herramienta de desarrollo MPLAB para realizar la edición, ensamblado, simulación y depuración del código. 2. Material de referencia 2 Microcontroladores PIC – La clave del Diseño. José Ma Angulo Usategui. AHojas de Datos del PIC16F84A (disponible en el Blog de la asignatura). 3. Los Microcontroladores PIC. La familia de los PIC es muy amplia ya que dispone de la gama baja, media y alta y dentro de cada una de ellas tenemos muchos miembros. Utilizaremos un microcontrolador PIC muy popular por sus características y facilidad de programación, el PIC 16F84 un miembro de la gama media. 3.1 El PIC16F84 El PIC 16F84 es el miembro más simple de la familia de los PICs y es el que utilizaremos para comenzar nuestro estudio. Este microcontrolador posee memoria de programa tipo FLASH de 1K de capacidad, Timer, interrupciones, líneas de E/S, etc. Veamos entonces las características más relevantes de este microcontrolador: VSolo 35 instrucciones para aprender. V1024 palabras de Memoria de Programa FLASH. VMemoria de Datos RAM de 68 bytes. VMemoria de Datos EEPROM de 64 bytes. VPila de 8 niveles para permitir llamadas a subrutinas anidadas. V4 fuentes distintas de interrupción. VVelocidad de operación desde DC hasta 20 MHz. VTemporizador/contador de 8 bits (TMR0) con prescaler. VPerro guardián (WDT). VPosee 13 líneas de E/S digitales, dos puertas (puerta A 5 líneas y puerta B 8 líneas). VCorriente máxima por pin: 25 mA modo sink, 20 mA modo source. VVoltaje de alimentación (VDD) debe estar entre 2 y 5.5 V DC.
  • 2. 10.000 ciclos de borrado/escritura en memoria FLASH. 10.000.000 ciclos de borrado/escritura en memoria EEPROM. Programación In Circuit a través de dos terminales (ICSP™). Protección de Código. Modo SLEEP para bajo consume. 3.1.1 Encapsulado y distribución de terminales. Este dispositivo esta fabricado en tecnología CMOS. Se halla disponible en encapsulado plástico con 18 pines, posee 13 pines de E/S, 2 pines para la alimentación (Vss y VDD), 1 pin para el RESET y 2 pines para el oscilador. Figura 1. Distribución de terminales. Aspecto externo del PIC 16F84A. El pin VDD es el correspondiente q la tensión realimentación positiva y VSS es la tierra o referencia. /MCLR es la entrada de reset del microcontrolador. Esta a entrada es activa en bajo y además se usa en la programación del dispositivo (Vpp). Los pines RA0...RA4 son las líneas de E/S de la puerta A, RB0...RB7 son las líneas de E/S del puerto B. Los pines OSC1/CLKIN y OSC2/CLKOUT son las entradas del circuito oscilador. 3.1.2 Reset del Microcontrolador El PIC 16F84A posee internamente un temporizador conectado al pin de reset que actúa al momento de conectar la alimentación al microcontrolador. Por ello utilizaremos una resistencia conectada desde el pin MCLR a la fuente de alimentación. Con esto al encender el sistema, el microcontrolador permanece en estado de reset por un cierto tiempo hasta que se estabilizan las señales del circuito. Cuando se produce el reset ocurren dos cosas: 1. El contador de programa es cargado con 000H. De este modo cada vez que ocurre un RESET reejecuta la instrucción localizada en la posición de memoria 000H. 2. Todos los registros de control y estado adoptan un estado predeterminado. 3.1.3 El Reloj. A través de este parámetro estableceremos la velocidad de ejecución de las instrucciones y además el consumo. En esta familia un ciclo de instrucción esta constituido por 4 ciclos de
  • 3. reloj. Las instrucciones se ejecutan en un ciclo de instrucción a excepción de las instrucciones de salto que necesitan dos ciclos. Por ejemplo si utilizamos un cristal de 4 MHz, un ciclo de reloj es de 250 ns, y un ciclo de instrucción es entonces 1uS. Los microcontroladores PIC poseen 4 alternativas para el circuito de reloj: RC Usa resistencia y capacitor. La frecuencia de oscilación es dada por los valores de estos. HS Utiliza un cristal de cuarzo. El rango de operación es de 4 a 10 MHz. XT Oscilador de cristal o resonador. Opera entre 100KHz y 4 MHz. LP Oscilador de bajo consumo. Utiliza cristal o resonador con frecuencias entre 35 y 200 KHz. Cuando vamos a programar o "quemar" el microcontrolador debemos especificar el tipode oscilador que utilizaremos. Esto lo hacemos a través de unos fusibles llamados"fusibles de configuración" o fuses. Nosotros utilizaremos un cristal de 4 MHz. Esta frecuencia es dividida por cuatro, lo que hace que la frecuencia de trabajo del microcontrolador sea de 1 MHz, por lo que cada instrucción se ejecuta en 1uS. 3.1.4 Memoria de Programa. El PIC16F84 tiene un contador de programa de 13 bits, tiene una capacidad de direccionamiento de 8K x 14, pero solo tienen implementado el primer 1K x 14 (0000h hasta 03FFh). La memoria de programa es de tipo FLASH. El contador de programa (PC) está implementado en la RAM. Los 8 bits de menor peso son almacenados en el registro PCL. Los bits restantes en el registro PCLATH. El PC cambia de manera automática, no podemos modificarlo desde el programa. La forma en que cambia el PC es incrementándose con la ejecución de cada instrucción o a través de las instrucciones de salto y retorno: GOTO, CALL, RETURN, RETLW y RETFIE. En cuanto a la pila se halla en una zona independiente de la memoria de programa y de datos. Su estructura es de tipo LIFO (Last In First Out) con 8 niveles de profundidad, cada uno de 13 bits. No posee instrucciones para manipulación de la pila. La instrucción CALL y las interrupciones, cargan el contenido del PC en el nivel superior de la pila. Las instrucciones RETURN, RETLW y RETFIE, sacan el primer valor de la pila y lo cargan en el PC. 3.1.5 Memoria de Datos En el PC 16F84 la memoria de datos RAM posee dos zonas diferentes: el área de RAM estática y el Área EEPROM. Área RAM estática o SRAM: en ésta se hallan el banco de Registros Específicos (SRF) y el banco de Registros de Propósito General (GPR). El SRF posee 24 posiciones de 1 byte, aunque dos de ellas no son operativas y el GPR 68 bytes. Área EEPROM: posee 64 bytes donde podemos almacenar datos importantes y que no se perderán al desconectar la alimentación. La memoria RAM esta dividida en dos bancos (banco 0 y banco 1), cada uno consta de 128 bytes. En el PIC16F84 sólo se hallan implementadas las 48 primeras posiciones de cada banco, de las cuales las 12 primeras (00h...0Bh) están reservadas a los Registros de Propósito Específico (SFR). Estos registros son los encargados de controlar el procesador y sus recursos. Algunos de estos registros están duplicados en la misma dirección de los dos bancos para facilitar su acceso, como INDF, ESTADO, FSR, PCLATH, INTCON, como se puede ver en la figura 2.
  • 4. Figura 2. Memoria de Datos. Las direcciones 7 y 87 no están implementadas. Los 36 registros restantes de cada banco se destinan a Registros de Propósito General (GPR) y en realidad sólo son operativos los 36 del banco 0, pues los del banco 1 se mapean sobre el banco 0. Es decir cuando se hace referencia a un registro general del banco 1, realmente se accede al mismo registro del banco 0. Para elegir el banco al que queremos acceder lo hacemos a través del bit 5 (RP0) del registro de estado. Cuando RP0 = 1 se accede al banco 1 y cuando RP0 = 0 se accede al banco 0. Al producirse un reset automáticamente se accede al banco 0. Esto sólo es importante para los Registros de Propósito Específico. Los registros SFR se clasifican en dos grupos. En el primero se incluyen aquellos que controlan el núcleo del microcontrolador (ESTADO, OPTION, INTCON, etc.). Y en el otro grupo se incluyen los que caracterizan la operatividad de los recursos auxiliares y periféricos.
  • 5. 3.1.6 Modos de Direccionamiento En el microcontrolador PIC16F84A, las instrucciones pueden especificar los datos u operandos de tres formas distintas: inmediato, directo o indirecto. En el modo inmediato (o literal) el valor del operando está incluido en el propio código de la instrucción. En el direccionamiento directo el operando es especificado mediante su dirección, incluida en el código de la operación. El banco que se debe acceder lo determina en el bit RP0 del registro de ESTADO. En el direccionamiento indirecto se usa cuando una instrucción usa como operando el registro INDF, que ocupa la dirección 0 de ambos bancos. Se accede a la posición que apunta el contenido del registro FSR ubicado en la posición 04 H del área de datos. 3.1.7 El Registro de Estado. El registro de estado es un registro donde se almacena el estado del microcontrolador. Este registro es de 8 bits, se ubica en la dirección 03h de los bancos 0 y 1. Los bits de este registro se pueden usar para: - Obtener el estado de la ALU después de una operación (C, DC y Z). - Indican el estado de Reset (/TO y /PD, activos a nivel bajo) - Seleccionar el banco en el cual vamos a trabajar. bit 7 bit 0 IRP RP1 RP0 T0 PD Z DC C Figura 3. Registro de Estado. C: bit de acarreo. Si esta en ‘1’ indica que se produjo acarreo en el bit de mayor peso del resultado de una operación de suma (addwf y addlw). Actúa como señalizador de borrowene una resta (subwf y sublw). Vale ‘1’ si no hay borrow. DC: Acarreo del 4º bit. Igual que el anterior pero para el 4º bit del resultado. Z: bit de cero. Vale 1 si el resultado de la instrucción anterior ha sido 0. PD: Power Down. Se pone automáticamente a ‘1’ después de la conexión de la alimentación o al ejecutar la instrucción clrwdt. Se pone automáticamente a 0 con la instrucción sleep. TO: Time Out. Se pone automáticamente a 1 después de la conexión de la alimentación o al ejecutar la instrucción clrwdt o sleep. Se pone a cero cuando se produce el desbordamiento del perro guardián. RP1 – RP0: Selección del bando. En el PIC16F84 sólo se usa RP0 por tener sólo dos bancos de memoria. Cuando vale ‘0’ se accede al bando 0 y cuando vale ‘1’ al banco 1. IRP: Selección del banco de direccionamiento indirecto. Determinan el banco de memoria de datos seleccionado. En el PIC16F84 debe valer siempre 0. Nota: No todos los bits de este registro pueden escribirse. Si ejecutamos la instrucción de limpieza de este registro (CLRF ESTADO), la misma deja el registro con el valor: 000XX1XX (‘X’ significa que no cambia). 3.1.8 Puertas de Entrada – Salida La mayoría de las aplicaciones con microcontroladores están destinados a recibir datosdel mundo exterior (entradas) y proveer datos a distintos periféricos (salidas). Para realizar esto, el PIC16F84 posee 13 líneas de E/S digitales. En el PIC16F84 las 13 líneas de E/S están agrupadas en puertas, aunque también podemos actuar sobre una línea individual. El PIC16F84 posee dos puertas; la puerta A que posee 5 líneas RA0 ... RA4, y la puerta B que tiene 8 líneas RB0 ... RB7. Para poder configurar los pines de las puertas como entrada o salida, utilizamos los registros: STATUS dirección 0x3
  • 6. PORTAdirección 0x5 PORTBdirección 0x6 TRISA dirección 0x5 TRISB dirección 0x6 Al producirse un reset, el PIC16F84A tendrá todos los pines de las puertas, colocados como entrada de datos. Por lo tanto si necesitamos cambiarlos tendremos que configurarlos. Para configurar las puertas debemos tener en cuenta que asignando un CERO (0) a un pin, éste quedará como salida y asignando un UNO (1), quedará como entrada. Esta asignación la hacemos en los registros TRISA y TRISB. TRISA para configurar los pines del PUERTO A (5 bits) TRISB para configurar los pines del PUERTO B (8 bits) Por Ejemplo: Queremos configurar que todos los pines de la puerta A sean salidas excepto RA0 que será entrada y además la puerta B la queremos como entrada. TRISA = 00001 TRISB = 11111111 Cuando el PIC arranca se halla en el BANCO 0, pero TRISA y TRISB están ubicados en el BANCO 1 por lo que debemos cambiar de banco para configurar las puertas. Esto lo hacemos a través del registro STATUS. El bit 5 de STATUS (RP0) define la posición del banco en donde nos encontramos. Si colocamos RP0 en ‘0’ estaremos en el BANCO 0, si lo colocamos en ‘1’ en el BANCO 1. Ahora si queremos acceder a las puertas existen otros dos registros denominados PUERTAA y PUERTAB, que se hallan en las posiciones 5 y 6 del banco 0 de la memoria de datos. Por Ejemplo: Realizaremos la configuración de la puerta A como entrada y la puerta B como entrada los 4 bits más altos y como salida los 4 más bajos. BSF STATUS,RP0 ; Entramos al BANCO 1 MOVLW B'11111' ; Movemos 11111 al registro de trabajo. MOVWF TRISA ; Configuramos el puerto A como Entrada. MOVLW B'11110000' ; Movemos 00000000 al registro de trabajo. MOVWF TRISB ; Configuramos el puerto B como salida. BCF STATUS,RP0 ; Salimos del BANCO 1. Podemos leer los datos de entrada de una puerta, siempre y cuando esté configurada como entrada. Esto lo hacemos accediendo a los registros de las puertas, por ejemplo: movfw PUERTAA. De igual forma podemos escribir un dato en una puerta (siempre que halla sido configurada como salida) escribiendo en el registro correspondiente. Por ejemplo: movwf PUERTAA. Podemos además modificar un bit de una puerta, para ello contamos con instrucciones destinadas a esto: bsf PUERTA, bit ; pone a 1 el bit indicado de la puerta A.
  • 7. bcf PUERTA, bit ; pone a 0 el bit indicado de la puerta A. Importante: Al momento de leer una puerta, lo que se lee es el nivel lógico presente en sus líneas en ese momento. Cuando escribimos un dato en una puerta, la información queda presente en la salida hasta que realice otra escritura (pues poseen latchs). Puerta A. La puerta A posee 5 líneas de E/S digitales denominadas RA0, RA1, RA2, RA3 y RA4. Estas líneas pueden configurarse individualmente como entradas o salidas a través del registro TRISA. El acceso a la puerta A se efectúa con el registro PUERTAA, ubicado en la posición 5 del banco 0 de la memoria de datos. Las líneas RA0 .. RA3 son E/S digitales que admiten niveles TTL a la entrada y CMOS de salida. La línea RA4/TOCKI, multiplexa la función de E/S con la entrada de pulsos externos para el contador TMR0. En cuanto a manejo de corriente, cada línea de la puerta A puede suministrar una corriente máxima de 20 mA (Source) y puede absorber una corriente máxima de 25 mA (sink). La capacidad máxima de corriente de la puerta A es de 80 mA(sink) y de 50 mA (source). Puerta B La puerta B posee 8 líneas de E/S digitales RB0 ... RB7, que pueden ser configuradas individualmente como entradas o salidas, a través del registro TRISB. El acceso a la puerta A se efectúa con el registro PUERTAB, ubicado en la posición 6 del banco 0 de la memoria de datos. La línea RB0/INT además de funcionar como E/S digital, sirve como entrada de solicitud de interrupción externa, cuando esta habilitada en el registro INTCON. Las líneas RB4 ... RB7, cuando funcionan como entradas, pueden ser programadas para generar una interrupción si alguna de ellas cambia su estado lógico. Al leer el valor de estas entradas, es comparado con el valor anterior almacenado y si éste ha cambiado se origina una interrupción, activándose el señalizador RBIF. La línea RB6 se usa además para la grabación serie de la memoria de programa (soporta la señal de reloj) mientras que RB7 es la entrada de datos en serie. En cuanto a manejo de corriente, cada línea de la puerta B puede suministrar una corriente máxima de 20 mA (Source) y puede absorber una corriente máxima de 25 mA (sink). La capacidad máxima de corriente de la puerta A es de 150 mA (sink) y de 100 mA (source). 3.1.9 Temporizador/Contador TMR0 El microcontrolador PIC16F84 incorpora un temporizador/contador de 8 bits denominado TMR0, el cual puede operar como contador o como temporizador. Contador: cuenta los impulsos recibidos por el pin RA4/TOCKI. En este modo cuenta el número de ciertos sucesos externos al micro. Cuando la cuenta llega al valor FFh se produce el desbordamiento al pasar a 00h, indicando esto a través de un señalizador y además puede producir una interrupción si la misma esta habilitada. Temporizador: en este caso cuenta los impulsos provenientes del reloj interno. Se usa para determinar un tiempo preciso, debido a que los impulsos poseen una duración conocida. La duración de los impulsos equivale a un ciclo de instrucción, es decir, la cuarta parte del ciclo de reloj. Igual que en el funcionamiento como contador, se produce el desbordamiento al pasar de FFh a 00h poniendo a 1 un bit señalizador y produciendo interrupción si esta se encuentra habilitada. El TMR0 se comporta como un registro de propósito especial ubicado en la dirección 01h del bando 0 de la memoria de datos. Cuando opera como temporizador, conviene cargarle con el valor de los impulsos que se quieren contar pero expresados en complemento a 2. De este modo al transcurrir el número de impulsos deseados el contador valdrá 00h activando el señalizador TOIF y produciendo una interrupción si esta se halla habilitada.
  • 8. Podemos leer el contenido del TMR0 en cualquier momento sin detener o cambiar su cuenta utilizando la instrucción movf TMR0, W. Cuando escribimos un nuevo valor sobre TMR0 para iniciar una nueva cuenta, se retrasa en incremento del mismo en 2 ciclos posteriores. A veces es necesario controlar tiempos largos, para lograr esto el PIC16F84 dispone de un circuito programable llamado divisor de frecuencia (prescaler) el cual permite dividir la frecuencia usada por varios valores. Este divisor de frecuencia puede ser utilizado por el TMR0 o por el perro guardián (WDT). Para realizar la programación del funcionamiento de TMR0, el WDT y del divisor de frecuencia se usan ciertos bits del registro OPTION y de la palabra de configuración. Figura 4. Diagrama en bloques del TMR0. 3.2.1 El Perro Guardián (Watch dog Timer). El perro guardián (WDT) también es un contador interno de 8 bits que tienen por objetivo generar un reset del microcontrolador cuando se desborda. Su control de tiempo es independiente del TMR0. Podemos evitar el funcionamiento del WDT programando un bit WDTE de la palabra de configuración. Para evitar que se desborde debemos refrescarlo o recargar su cuenta antes de que llegue al desbordamiento. Este refresco, que consiste en ponerlo en cero, lo realizamos a través de las instrucciones CLRWDT y SLEEP. Debemos analizar el programa y ubicar alguna de estas dos instrucciones en sitios estratégicos por los que pase el flujo del programa, antes de que transcurra el tiempo asignado al WDT. De este modo si el programa se cuelga no se refresca el perro guardián y se produce el reset del microcontrolador. La instrucción CLRWDT borra el valor del WDT, reiniciando su cuenta. Por otro lado, la instrucción SLEEP además de borrar el WDT, detiene el sistema entrando a un modo de bajo consumo. Si no se desactiva el perro guardián cuando se entra en el estado de reposo, al terminar desbordar, provocará un reset que sacará al microcontrolador de dicho estado. En el registro de ESTADO existe un bit denominado TO que toma el valor ‘0’ después del desbordamiento del WDT. 3.2.2 El Registro OPTION. La función principal del registro OPTION es controlar el comportamiento del TMR0 y el divisor de frecuencia. El registro OPTION se halla en la posición 81h de la memoria de datos (dirección 1 del banco 1). En la figura 5 podemos ver la composición del registro y a continuación se explica la función cada uno de sus bits. RBP0 INTEDG TOCS TOSE PSA PS2 PS1 PS0 Figura 5. Registro OPTION. RBPU RBPU = 0 activa las resistencias Pull-up de la puerta B. RBPU = 1 desactiva. INTEDG Indica cual es el flanco activo de la interrupción externa (RB0/INT). Si vale 0 activa el flanco descendente y si vale 1 el ascendente.
  • 9. TOCS Tipo de reloj para el TMR0. Si vale 1 activa los pulsos introducidos a través de TOCKI (contador). Si vale 0 se activan los pulsos de reloj interno Fosc/4 (temporizador) TOSE Activa el tipo de flanco de la señal TOCKI. Si vale 0 se incrementa el TMR0 cada flanco ascendente. Si vale 1 se incrementa con el flanco descendente. PSA Asignación del divisor de frecuencias. Si vale 0 el divisor de frecuencia se asigna al TMR0 y si vale 1 se asigna al WDT. PS2 – PS0 Indican el valor con el que actúa el divisor de frecuencias, según la siguiente tabla de valores. 3.2.3 Interrupciones Las interrupciones son acontecimientos o sucesos que hacen que el microcontrolador deje de la do lo que esta haciendo para atender este suceso y luego regrese y continúe con lo que estaba haciendo. Dichos sucesos pueden ser de origen interno o externo al microcontrolador. Al momento de producirse una interrupción se para la normal ejecución del programa, se guarda la dirección actual en la pila y se carga el PC con la dirección del Vector de Interrupción que es una dirección reservada de la memoria de código. En el microcontrolador PIC16F84 el Vector de Interrupción está ubicado en la dirección 0004h de la memoria de programa, donde empieza la Rutina de Servicio de la Interrupción. Por lo general en esta dirección colocamos una instrucción de salto incondicional GOTO que salta a la dirección del programa donde se halla la rutina de servicio de la interrupción (RSI). La RSI comienza salvando en la memoria de datos los registros específicos que va a emplear. Antes de retornar al programa principal estos valores almacenados son recuperados y se restaura el estado del procesador. Siempre que se produce una interrupción se debe averiguar cual de las posibles causas ha motivado la interrupción. Para lograr esto se exploran los señalizadores de las fuentes de interrupción del registro INTCON. PS2..PS0 Timer 0 Watch Dog 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 RBP0 INTEDG TOCS TOSE PSA PS2 PS1 PS0 El microcontrolador PIC16F84 posee un bit GIE (Global Interrupt Enable) que cuando vale 0 inhabilita todas las interrupciones. La RSI debe colocar este bit en ‘0’ para evitar que se aniden interrupciones. Al retornar de la interrupción (Instrucción RETFIE), GIE pasa a valer ‘1’ automáticamente para habilitar nuevamente las interrupciones. Pero los señalizadores de interrupción no son borrados de forma automática y debemos desactivarlos por software. Si no hacemos esto, al producirse la siguiente interrupción, no podríamos averiguar su origen). La figura 6 muestra las fases más importantes de la atención a una interrupción. Figura 6. Fases en la atención de una Interrupción. 3.2.4 Causas de la Interrupción El PIC16F84 tiene cuatro posibles causas de interrupción. 1. Interrupción externa provocada al activar la patita RB0/INT. 2. Desbordamiento del TMR0. 3. Cambio de estado en las líneas de la Puerta B (RB4 ... RB7). 4. Finalización de escritura en la EEPROM de datos. Proceso de Interrupción
  • 10. Todas éstas solicitudes de interrupción serán atendidas siempre que el bit GIE este en ‘1’. Cada interrupción dispone de un señalizador o flag que es un bit que se pone automáticamente a 1 cuando se produce la interrupción. Y cada interrupción posee también un bit de habilitación, el cual permite o prohíbe la solicitud de esa interrupción. 4.2.5. Registro de control de interrupción INTCON Como el PIC 16F84A admite interrupciones, requiere un registro encargado de su gestión. El registro encargado de gestionar las interrupciones es el INTCON, en este se encuentran los señalizadores y los bits de habilitación de las interrupciones. Ocupa la dirección 0Bh del banco 0 de la memoria de datos RAM y está duplicado en el banco 1. En la figura 8 podeos ver la estructura de este registro y a continuación una descripción de cada uno de sus bits. Figura 8. Registro INTCON. GIE Habilitación global de interrupciones. GIE = 1 permite la solicitud de interrupciones cuyos bits de permiso individuales también lo permitan. GIE = 0 prohíbe todas las interrupciones. EEIE Permiso de interrupción por fin de escritura en la EEPROM. EEIE = 0 prohíbe esta interrupción y si EEIE = 1 la permite. TOIE Permiso de interrupción por desbordamiento del TMR0. TOIE = 0 prohíbe esta interrupción. TOIE = 1 la permite. INTE Permiso de interrupción por activación de la patilla RB0/INT. INTE = 0 prohíbe esta interrupción. INTE = 1 la permite. RBIE Permiso de interrupción por cambio de estado en RB4 - RB7. RBIE = 0 prohíbe esta interrupción. RBIE = 1 la permite. TOIF Señalizador del desbordamiento del TMR0. Se pone automáticamente a 1 cuando el TMR0 pasa del valor FFh a 00h. INTF Señalizador de activación de la patilla RB0/INT. Se pone a uno al activarse la patilla RB0/INT, indicando solicitud de interrupción externa RBIF Señalizador de cambio de estado en las patillas RB4/RB7. Se pone a 1 cuando cambia el estado de alguna de estas líneas. 4.2.6 Interrupción externa INT Esta interrupción es útil para atender sucesos externos al microcontrolador. Cuando ocurre algún suceso externo que el microcontrolador debe gestionar se activa la pata RB0/INT y se efectúa una solicitud de interrupción. El bit INTF del registro INTCON se pone a ‘1’ en forma automática y si el bit de habilitación INTE = 1 y además bit de permiso global GIE = 1, se puede atender a la interrupción. 4.2.7 Interrupción de desbordamiento del contador TMR0 Esta interrupción se produce cuando el TMR0 se desborda y pasa del valor FFh a 00h. Bajo esta situación el señalizador TOIF se pone automáticamente a 1. Si el bit de TOIE y GIE, están puestos a 1 se atiende la interrupción. Si no se recarga el TMR0 sigue contado de 00h a FFh. En cualquier momento se puede leer o escribir este registro, pero cada vez que se recarga se pierden dos ciclos de reloj. Cuando se recarga con el valor N (en decimal) cuenta un número de ciclos igual a 256 - N. 4.2.8 Interrupción por cambio de estado en las líneas RB7:RB4 Esta interrupción está específicamente implementada para atender la pulsación de una tecla en un teclado matricial conectado a dichas líneas (RB7...RB4). Con estas 4 líneas podemos controlar un teclado matricial de 16 teclas. Al cambiar el estado lógico de alguna de estas entradas, el señalizador RBIF se pone a 1 y si los dos bits de permiso RBIE = GIE = 1 se autoriza la interrupción.
  • 11. GIE EEIE TOIE INTE RBIE TOIF INTF RBIF 4.2.9 Reinicialización o Reset Existen 5 causas que pueden originar el reset del PIC16F84. Recordemos que al producirse un reset, el PC se carga con el valor 000h y los registros específicos toman un valor conocido. Las causas que pueden originar un reset son: 1. Conexión de la alimentación al PIC16F84. 2. Activación de /MCLR estando del microcontrolador funcionando normalmente. 3. Activación de /MCLR estando en estado de reposo. 4. Desborde del WDT estando el microcontrolador funcionando normalmente. 5. Desborde del WDT estando el microcontrolador en el estado de reposo. 5. Desarrollo de la Práctica Realizaremos algunos programas simples para comenzar la programación de los PIC. Utilizaremos el PIC16F84A ya que es un micro de la gama media con Timer, interrupciones, WDT, memoria EEPROM de datos y posee memoria de programa FLASH. Para comenzar a utilizar la herramienta de desarrollo MPLAB utilizaremos la guía