top of page

INTERRUPCIONES CON EL MICROCONTROLADOR PIC 18F4550

EL microcontrolador es un dispositivo que ejecuta tareas de manera secuencial; estas tareas son indicadas mediante un algoritmo que puede ser en Assembler, C, ect. El integrado interpretar y ejecuta linea por linea, pero que sucede cuando deseamos que realice una acción "B"cuando el microcontrolador esta ejecutando una acción "A"; para dar solución a tal problema, se utilizan las interrupciones que sera tema de discusión en el presente articulo.

IMAGEN 1.0 / Proyecto Interrupción con PIC18F4550

Pero, ¿ Que son las Interrupciones ? y para que sirven.

Para dar respuesta a esta pregunta explicaremos mediante el siguiente diagrama de bloques de la imagen 2.0.:

IMAGEN 2.0 / DIAGRAMA DE BLOQUES INTERRUPCIÓN

En el diagrama de bloques de la Izquierda tenemos un programa principal, cuando se genera una interrupción el programa se detiene y atiende esta llamada , si la interrupción es de alta prioridad se atiende de manera inmediata, las lineas punteadas que indican hacia la derecha muestran el diagrama de bloques del programa determinado de la interrupción; finalmente cuando termina, regresa al programa principal he inicia donde se genero la interrupción.

Para contextualizar este Tema, hagamos un proyecto el cual incluya un led que parpadea de manera ininterrumpida por el Puerto RD0, por otro lado, un botón en el puerto RBO por donde

se genera la interrupción y cambiara el estado de un led ubicado en el puerto RD1.

(Ver Imagen 1.0)

Con este ejemplo, podremos ver como es el funcionamiento de la interrupción de alta prioridad, así mismo, como pareciera que el microcontrolador ejecutara las dos funciones al mismo tiempo, pero en realidad ejecuta una instrucción a la vez.

Analicemos el Código:

/* * File: fhd.c * Author: GUILLERMO ANGULO NIQUEN * BLINK LED AND INTERRUPCION. * Created on 25 de MAYO de 2017, 0:29 A.M. */

#include <xc.h> #include "INICIALIZASISTEMA.h" #include "DELAY.h" #define mybit LATDbits.LATD0 // ETIQUETAMOS EL PIN PORTB RB4 COMO mybit. #define mybit2 LATDbits.LATD1 // ETIQUETAMOS EL PIN PORTB RB4 COMO mybit.

// Programa Principal int main(void) {

// CONFIGURAMOS LOS PUERTOS TRISDbits.RD0=0; // CONFIGURAMOS AL PIN COMO SALIDA. TRISDbits.RD1=0; // CONFIGURAMOS AL PIN COMO SALIDA. //INT0 (RB0) es entrada TRISBbits.RB0 = 1; //Leds apagados LATDbits.LATD0 = 0; LATDbits.LATD1 = 0; //Configuración de INT0 INTCONbits.GIE = 1; //Habilitando interrupciones INTCONbits.INT0IE = 1; //Habilitar INT0 INTCON2bits.INTEDG0 = 1; //Interrupción se activa en flanco de subida while(1){ mybit=1; // enciende led MsDelay(150); mybit=0;// apaga led. MsDelay(150); }

// Programa Interrupción }

void interrupt high_isr() { if(INT0IF) //Si la bandera de interrupción es 1 { mybit2 = ~mybit2; //Se invierte el estado del led MsDelay(150); //inicializar bandera INT0IF = 0; } }

SIMULACIÓN EN LA PLACA ENTRENADORA:

Finalmente, se logro el objetivo de obtener un sistema donde podamos ejecutar varias funciones sin interrupir el proceso principal, mediante las interrupciones.

MICROTECSD

Telf.: 978519228

Cursos, eventos y capacitaciones.


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page