Con este ejemplo se muestra la configuracion de las interrupciones por RB0, RB1 y RB2, ademas la forma correcta de determinar los flancos de activacion y como activar y dar prioridad a cada una de las interrupciones
//***********************************************************************************************************
//////////// CONFIGURACION DE LAS INTERRUPCIONES EXT, EXT1 Y EXT2 //////////////////
//***********************************************************************************************************
#INCLUDE <18F4550.h> // LIBRERIA PARA EL 2550
//***********************************************************************************************************
#DEVICE HIGH_INTS=TRUE //ACTIVACION DE LAS PRIORIDADES EN LAS INTERRUPCIONES
//************************************************************************************************************
//////////////////PALABRA DE CONFIGURACION CON CRISTAL DE 4Mhz XT///////////////////////////
#FUSES XT,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOPBADEN
//******************************************************************************************
#USE DELAY (clock=4M) //SE CONFIGURA LA FUNCION DELAY PARA UNA VELOCIDAD DE 4Mhz
//******************************************************************************************
///////////////////////ASIGNACION DE NOMBRES A LOS RESPECTIVOS PUERTOS//////////////////////
#BYTE PORTA=0xf80
#BYTE PORTB=0xf81
#BYTE PORTC=0xf82
#BYTE PORTD=0xf83
#BYTE PORTE=0xf84
//*****************************************************************************************
////LAS FUNC. FAST_IO EVITAN RECONFIGURAR LOS PUERTOS CON FUNCIONES OUTPUT E INPUT/////
#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(C)
#USE FAST_IO(D)
#USE FAST_IO(E)
//****************************************************************************************
////////////////////////////////DEFINICION DE VARIABLES///////////////////////////////////
INT8 CONT=0;
//****************************************************************************************
////////////////////DEFINICION DE LAS FUNCIONES DE PROGRAMA///////////////////////////////
VOID CONTROL_EXT();
VOID CONTROL_EXT1();
VOID CONTROL_EXT2();
//****************************************************************************************
/////////////// FUNCIONES DE LAS INTERRUPCIONES EXT, EXT1 Y EXT2 ////////////////////
#INT_EXT //FUNCION DE LA INTERRUPCION EXT0, PRIORIDAD ALTA POR DEFECTO
VOID CONTROL_EXT()
{
PORTD=0B10000001; //SACA DETERMINADO VALOR POR EL PUERTO D
DELAY_MS(500);
PORTD=0B01000010;
DELAY_MS(500); //RETARDO DE MEDIO SEGUNDO
PORTD=0B00100100;
DELAY_MS(500);
PORTD=0B00011000;
DELAY_MS(500);
}
#INT_EXT1 HIGH //FUNCION DE LA INTERRUPCION EXT1, PRIORIDAD ALTA
VOID CONTROL_EXT1()
{
PORTD=0B11000000;
DELAY_MS(500);
PORTD=0B01100000;
DELAY_MS(500);
PORTD=0B00110000;
DELAY_MS(500);
PORTD=0B00011000;
DELAY_MS(500);
PORTD=0B00001100;
DELAY_MS(500);
PORTD=0B00000110;
DELAY_MS(500);
PORTD=0B00000011;
DELAY_MS(500);
}
#INT_EXT2 //FUNCION DE LA INTERRUPCION EXT2, PRIORIDAD BAJA
VOID CONTROL_EXT2()
{
PORTD=0B11000011;
DELAY_MS(500);
PORTD=0B01100110;
DELAY_MS(500);
PORTD=0B00111100;
DELAY_MS(500);
PORTD=0B00011000;
DELAY_MS(500);
PORTD=0B00111100;
DELAY_MS(500);
PORTD=0B00110110;
DELAY_MS(500);
PORTD=0B11000011;
DELAY_MS(500);
}
//***************************************************************************************
////////////////////////FUNCION PRINCIPAL (MAIN)/////////////////////////////////////////
VOID MAIN (VOID)
{
////////////////////// CONFIGURACION DE PUERTOS ///////////////////////////////////////
SET_TRIS_B(0B00000111); //SE CONFIGURA RB0 RB1 RB2 COMO ENTRADA
SET_TRIS_D(0); //SE CONFIGURA EL PUERTO D COMO SALIDA PARA LOS LEDS
PORTB=0;
PORTD=0;
SETUP_ADC_PORTS(NO_ANALOGS); //NO CANALES ANALOGOS TODOS DIGITALES
SETUP_ADC(ADC_OFF); //NO SE UTILIZA CONVERSOR A/D
ENABLE_INTERRUPTS(INT_EXT); //INT_EXT HABILITADA
ENABLE_INTERRUPTS(INT_EXT1); //INT_EXT1 HABILITADA
ENABLE_INTERRUPTS(INT_EXT2); //INT_EXT2 HABILITADA
ENABLE_INTERRUPTS(GLOBAL); //INT GLOBALES HABILITADAS
PORT_B_PULLUPS(TRUE); //RESISTENCIAS DE PULL-UP HABILITADAS
EXT_INT_EDGE(H_TO_L); //FLANCO DE BAJADA PARA INT EXT
EXT_INT_EDGE(1,L_TO_H); //FLANCO DE SUBIDA PARA INT EXT1
EXT_INT_EDGE(2,H_TO_L); //FLANCO DE BAJADA PARA INT EXT2
WHILE (1)
{
SLEEP(); //CONDICION DE REPOSO
}
}
No hay comentarios:
Publicar un comentario