Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Parte 1
Elaborado por:
Ivan Londoño
José Fernando Perez
Interrupciones
Ejemplo 1:
a. Conversión análoga
b. Lectura de teclado
c. Temporización
d. Recepción serial
Ejemplo1: Se requiere Conmutar el led D1 cada que se presione el interruptor S1, para ello se debe utilizar la
interrupción externa INT0 del microcontroaldor PIC16F877 , simultaneo a esta tarea se debe poner a oscilar un
led D2 con una frecuencia de 1Hz. Esta oscilación se debe generar usando la herramienta DELAY.
Solución:
Interrupción externa INT0
#INCLUDE <16F877.H>
void Main ()
#USE DELAY(CLOCK=20M)
{
#Byte PORTB = 0x06
TRISC=0; //Configuración Puertos
#Byte PORTC = 0x07
TRISD=0;
#Byte PORTD = 0x08
#Byte TRISB = 0x86
enable_interrupts(INT_EXT); //Habilitación Interrupción Externa INT0
#Byte TRISC = 0x87
enable_interrupts(GLOBAL); //Permiso de Interrupciones
#Byte TRISD = 0x88
D2=0;
#BIT S1 =PORTB.0
WHILE(true)
#BIT D1 =PORTC.0
{
#BIT D2 =PORTD.0
D2=1; //D2 = ON
DELAY_MS(500);
#int_EXT
D2=0; //D2 = OFF
void Interrupcion_INT0(void) //Subrutina de Atención a la
DELAY_MS(500);
{ //interrupción de INT0
}
IF(D1==0)
{
}
D1=1;
}
ELSE
{
D1=0;
}
}
Interrupción externa RB7_RB4
Ejemplo2: Se requiere Conmutar 4 leds conectados en la parte baja del Portd, cada que se presione alguno de
los interruptores entre S1 y S4, para ello se debe utilizar la interrupción de la parte alta del Portb del
microcontroaldor PIC16F877, Esta interrupción detecta cualquier cambio en la parte alta del Portb, es decir
que cuando se presione uno o mas interruptores el sistema salta a la rutina reservada para atender este evento.
Solución:
Combinado dos interrupciones.
Interrupción externa RB7_RB4 y Interrupción externa RB0
#INCLUDE <16F877.H>
#USE DELAY(CLOCK=20M)
#BIT D1 =PORTD.0
#BIT D2 =PORTD.1
#BIT D3 =PORTD.2
enable_interrupts(INT_RB);
#BIT D4 =PORTD.3 enable_interrupts(GLOBAL);
WHILE(True)
#int_RB {
void TECLAS(void) //Rutina de Atención Interrupción }
{ //de la parte alta del puerto B
IF(S1==0) //S1 se presiona S1
D1=~D1; //D1 Conmuta }
IF(S2==0) //Si se presiona S2
D2=~D2; //D2 Conmuta
IF(S3==0) //Si se presiona S3
D3=~D3; //D3 Conmuta
IF(S4==0) //Si se presiona S4
D4=~D4; //D4 Conmuta
}
Combinado dos interrupciones.
Interrupción externa RB7_RB4 y Interrupción externa RB0
Ejemplo3: En esta aplicación se combinan las dos interrupciones anteriores Se requiere Conmutar 4 leds conectados en la parte
baja del Portd, cada que se presione alguno de los interruptores entre S1 y S4, para ello se debe utilizar la interrupción de la
parte alta del Portb del microcontroaldor PIC16F877, además cada que se presiones el interruptor S0 se debe activar la
interrupción RB0(INT0), en donde se conmutara el estado del motor conectado en el pin RC2.
Solución:
#int_RB
#INCLUDE <16F877.H>
void TECLAS(void) //Rutina de Atención Interrupción
#USE DELAY(CLOCK=20M)
{ //de la parte alta del puerto B
IF(S1==0) //S1 se presiona S1
#Byte PORTB = 0x06
D1=~D1; //D1 Conmuta
#Byte PORTD = 0x08
IF(S2==0) //Si se presiona S2
#Byte PORTC = 0x07
D2=~D2; //D2 Conmuta
#Byte TRISB = 0x86
IF(S3==0) //Si se presiona S3
#Byte TRISD = 0x88
D3=~D3; //D3 Conmuta
#Byte TRISC = 0x87
IF(S4==0) //Si se presiona S4
D4=~D4; //D4 Conmuta
#BIT S1 =PORTB.4
}
#BIT S2 =PORTB.5
#BIT S3 =PORTB.6
#BIT S4 =PORTB.7
Los TIMER o temporizadores son módulos integrados en el PIC que permiten realizar tanto de eventos
internos como externos. Cuando la cuenta es interna se habla de TEMPORIZACION y cuando la cuenta es
externa se habla de CONTADOR.
TIMER0
Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la ejecución del programa principal
en cualquier momento.
En el momento en el que se produce la interrupción, el PIC ejecuta un salto a la rutina de interrupción y ejecuta el
codigo correspondiente a la interrupción. Una vez se termina de ejecutar dicha rutina el PIC retorna a la ejecución del
programa principal en la misma posición de memoria donde se produjo la interrupción.