Laboratorio 5 (Interrupciones)

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

UNIVERSIDAD NACIONAL DE INGENIERA

FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

Laboratorio 5: Interrupciones
1. Objetivos
o Comprender el uso de las interrupciones con que dispone
el microcontrolador.
o Usar las interrupciones RB e EXT
2. Introduccin
Las interrupciones permiten a cualquier suceso interior o exterior al
interrumpir la ejecucin del programa principal ( main ) en cualquier
momento. En el momento de producirse la interrupcin, el PIC
ejecuta un salto a la rutina de atencin a la interrupcin ( ISR ,
Interrupt Service Routine), previamente definida, donde se atender
a la demanda de la interrupcin. Cuando se termina de ejecutar
dicha rutina, el PIC retorna a la ejecucin del programa principal en
la misma posicin de la memoria de programa donde se ejecut la
interrupcin1. Mirar Figura 1.

Figura 1. Flujo de una interrupcin en la programacin2

1 Compilador C CCS y Simulador Proteus para Microcontroladores PIC, Eduardo


Garca Breijo, Alfaomega
2 http://www.puntoflotante.net/INTERRUPCIONES-18F2550-TIMER-0.htm

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

El uso de las interrupciones es fundamental ya que el usuario no


necesita consultar continuamente en el programa si ha ocurrido un
suceso determinado, sino ms bien deja estipulado qu funcin
realizar en tal caso.
Cada microcontrolador vara en la cantidad de interrupciones que
dispone. El 16 F 877 A posee 15. Mirar Figura 2.

Figura 2. Cantidad de interrupciones de la familia 16F87XA.

Los registros que controlan las interrupciones estn en la seccin


Registros de Funcin Especial (Special Function Registers, en
ingls) del captulo 2 Organizacin de la Memoria de Datos (Data
Memory Organization, en ingls). Estos son:

OPTION REG
INTCON
PIE 1

PIR 1
PIE 2

PIR 2

En la Figura 3 se muestran las interrupciones que el registro


INTCON controla. Al configurar los bits de los registros, se habilita
o deshabilita una o varias interrupciones. Al producirse una
interrupcin determinada, sta afectar el bit de flag, en el registro
correspondiente, para indicar que la interrupcin ha ocurrido.

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

Figura 3. Interrupciones que controla el registro

INTCON .

En este laboratorio se aprender a utilizar las interrupciones EXT


e RB , las cuales responden a un cambio de nivel (de alto a bajo
o de bajo a alto) en RB0 y un cambio de estado en los pines
RB 4RB7 del Puerto B, respectivamente.
3. Desarrollando el cdigo
Hardware:
La seccin 14.11 , Interrupts, explica lo fundamental del manejo
de las interrupciones. Indica que el Bit de Habilitacin de
Interrupcin Global (Global Interrupt Enable Bit) GIE, ubicado en el
Bit 7 del registro INTCON ( INTCON <7> ), habilita (si est a 1 )
todas las interrupciones o deshabilita (si est a 0 ) todas las
interrupciones. Mirar Figura 4.

Figura 4. Eplicacin del Global Interrupt Enable.

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

En la seccin 14.11 .1 , INT Interrupt, se explica cmo funciona la


interrupcin externa en RB0 . La interrupcin externa es activada
por flanco, puede ser por flanco ascendente si el bit INTEDG (
OPTION REG <6 > ) est a
1 , o por flanco descendente si el bit
INTEDG est a 0 . Cuando un flanco vlido aparece en el pin
RB 0 , su bit de bandera

INTCON <1>
INTF

es puesto a

1 ,

indicando

que la interrupcin externa ha ocurrido. Mirar Figura 5.

Figura 5. Interrupcin Externa

En la seccin 4.2 , PORTB and the TRISB register, se explica que


4 de los pines del Puerto B, RB7 : RB 4 , tienen una caracterstica de
interrupcin al cambio. Slo los pines configurados como entrada
pueden causar que esta interrupcin ocurra. La interrupcin
funciona al comparar los pines de entrada con el valor almacenado
en la lectura previa del Puerto B. Al haber un estado diferente en
cualquiera de los pines de entrada se pone a 1 el bit de bandera
INTCON <0>
. Mirar Figura 6.
RBIF

Figura 6. Interrupcin RB

Cabe seala que al producirse un cambio en cualquiera de sus


entradas, se activa la interrupcin. El programador debe ser capaz
de determina qu pin cambi de estado.
Software:

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

La directiva utilizada en el manejo de las interrupciones es xxxx .


Esta indica que la funcin que le sigue es una funcin de
interrupcin. El compilador generar el cdigo para saltar a la
funcin asociada a la interrupcin cuando sta ocurra. Algunas
directivas que soporta CCS se muestran en la Figura 7.

Figura 7. Algunas directivas con que dispone CCS.

No todas las directivas pueden ser usadas con todos los


microcontroladores. Para saber qu interrupciones dispone un
microcontrolador es necesario abrir su archivo de encabezado ( . h )
y observar sus constantes, como en la Figura 8.

Figura 8. Interrupciones definidas en

16 F 877 A . h

Las funciones utilizadas para el manejo de las directivas de


interrupcin estn en la Figura 9.

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

Figura 9. Funciones que controlan las directivas de interrupciones.

Las funciones ms utilizadas son:

es una de las constantes definidas en


la Figura 5. Esta funcin pone a 1 el bit que habilita la
interrupcin determinada.
nivel es una de las constantes definidas en
disable interrupts (nivel):
la Figura 5. Esta funcin pone a 0 el bit que deshabilita la
interrupcin determinada.
El

enable interrupts (nivel):

programa

DEBE

nivel

llamar

xxxx

enable interrupts
enable interrupt (GLOBAL)

interrupcin, junto a
interrupciones previamente habilitadas.

para
para

habilitar
activar

la
las

La funcin para configurar en qu flanco se activar la interrupcin


externa en RB0 es:

L
H :
ext

La interrupcin es por flanco de cada.

H
L :
ext

La interrupcin es por flanco de subida.

edge

edge

Compilar el cdigo de la Tabla 1 y simular el circuito de la Figura

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

10.

#include <16F877A.h>
#fuses HS, NOWDT
#use delay (clock=4M)
#byte trisb=0x86 //Locacin en la memoria del registro de direccin de datos del
puerto B
#INT_EXT //Directiva Interrupcin Externa (INTF (INTCON<1>) est en 1)
void cambio() //ISR
{
output_toggle(PIN_B7); // Complementa el estado del Pin B7
}
void main()
{
trisb=0x01;
//B0 como entrada, el resto de pines como
salida
output_high(PIN_B7);
enable_interrupts(INT_EXT); //Habilitacin interrupcin RB0 (Pone INTE
(INTCON<4>) a 1)
ext_int_edge(L_TO_H);
//Activado por flanco de subida (Pone INTEDG
(OPTION_REG<6>) a 1)
enable_interrupts(GLOBAL); //Habilitacin general
while(TRUE)
//Bucle infinito
{
Tabla 1

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

Figura 10. Circuito para la interrupcin externa.

La interrupcin RB ocurre cuando haya cualquier cambio en los


pines B 4B 7 . Slo hay una interrupcin y el PIC no dice cul pin
cambi. El programador debe determinar el cambio basado en el
valor previamente conocido del puerto 3. Adems, una presin del
botn puede causar diversas interrupciones debido al rebote en el
switch. Un algoritmo de antirebote debe ser usado.
Para elaborar el cdigo es necesario revisar el cdigo ejemplo
EX PBUTT . c , ubicado en la carpeta Examples de PIC C. Dicho cdigo
muestra cmo controlar la interrupcin del puerto B en cambio de
pin.
Compilar el cdigo de la Tabla 2 y simular el circuito de la Figura
11.

3 Manual del compilador CCS

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES
#include <16F877A.h>
#fuses HS, NOWDT
#use delay (clock=4M)
#byte trisb=0x86 //Locacin en la memoria del registro de direccin de datos del puerto B
#INT_RB // Directiva Interrupcin Port B (RBIF (INTCON<0> est en 1)
void detect_rb_change() // ISR
{
int actual;
static int anterior=0; //Variable global es inicializada a 0
actual=input_b();
// Se almacena el valor del estado de los pines del puerto B en la variable actual
if ((!bit_test(anterior,4))&&(bit_test(actual,4))) // B4 cambi a 1
{
output_high(PIN_B0);
}
if ((!bit_test(anterior,5))&&(bit_test(actual,5))) // B5 cambi a 1
{
output_high(PIN_B1);
}
if ((!bit_test(anterior,6))&&(bit_test(actual,6))) // B6 cambi a 1
{
output_high(PIN_B2);
}
if ((!bit_test(anterior,7))&&(bit_test(actual,7))) // B7 cambi a 1
{
output_high(PIN_B3);
}
if ((!bit_test(actual,4))&&(bit_test(anterior,4))) // B4 cambi a 0
{
output_low(PIN_B0);
}
if ((!bit_test(actual,5))&&(bit_test(anterior,5))) // B5 cambi a 0
{
output_low(PIN_B1);
}
if ((!bit_test(actual,6))&&(bit_test(anterior,6))) // B6 cambi a 0
{
output_low(PIN_B2);
}
if ((!bit_test(actual,7))&&(bit_test(anterior,7))) // B7 cambi a 0
{
output_low(PIN_B3);
}
anterior=actual; // Se almacena el valor actual del puerto en la interrupcin en la variable anterior.
}
void main()
{
trisb=0xF0;
//B4-B7 como entrada, el resto de pines como salida
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
enable_interrupts(INT_RB); //Habilitacin interrupcin RB (Pone RBIE (INTCON<3>) a 1)
enable_interrupts(GLOBAL); //Habilitacin general
while(TRUE)
//Bucle infinito
{
}
}

Tabla 2. Cdigo Interrupcin RB.

UNIVERSIDAD NACIONAL DE INGENIERA


FACULTAD DE ELECTROTECNIA Y
COMPUTACIN
ELECTRNICA DIGITAL II
DEPARTAMENTO SISTEMAS DIGITALES Y
TELECOMUNICACIONES

Figura 11. Circuito para la interrupcin en el puerto B.

4. Trabajo a Entregar (Reporte)

También podría gustarte