EJEMPLO 3: Interrupcion Externa por RB0

Para este ejemplo se dispone de un pulsador conectado a tierra en el pin RB0, por cada pulso que se de en RB0 se incrementa el valor del puerto D. 

//******************************************************************************************
/////////////       CONFIGURACION DE LA INTERRUPCION EXT POR RB0          //////////////////
//******************************************************************************************


#INCLUDE <18F4550.h>             // LIBRERIA PARA EL 2550

//******************************************************************************************
//////////////////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 LAS 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();
//****************************************************************************************
///////////////    FUNCION DE INTERRUPCION EXTERNA POR RB0            ////////////////////
//////    ESTA FUNCION SE EJECUTA CUANDO SE DETECTA UN FLANCO DE BAJADA EN RBO   /////////
/// POR CADA INTERRUPCION SE INCREMENTA EL VALOR DEL PUERTO D Y SE MUESTRA EN 8 LEDS  ////


#INT_EXT
VOID CONTROL_EXT()
{
PORTD++;                //INCREMENTA EL VALOR DEL PUERTO
}


//***************************************************************************************
////////////////////////FUNCION PRINCIPAL (MAIN)/////////////////////////////////////////

VOID MAIN (VOID)
{
//////////////////////  CONFIGURACION DE PUERTOS  ///////////////////////////////////////

SET_TRIS_B(0B00000001); //SE CONFIGURA RB0 COMO ENTRADA
SET_TRIS_D(0);          //SE CONFIGURA EL PUERTO D COMO SALIDA PARA LOS LEDS
PORTB=0;
PORTD=0;

/// SE HABILITA LA INTERRUPCION EXT Y SE HABILITAN INTERRUPCIONES GLOBALES ADEMAS SE ///
//  ACTIVAN LAS RESISTENCIAS DE PULL-UP DEL PUERTO B Y SE SELECCIONA FLANCO DE BAJA  ///

SETUP_ADC_PORTS(NO_ANALOGS);     //NO CANALES ANALOGOS TODOS DIGITALES
SETUP_ADC(ADC_OFF);              //NO SE UTILIZA CONVERSOR A/D
ENABLE_INTERRUPTS(INT_EXT);                            
ENABLE_INTERRUPTS(GLOBAL);
PORT_B_PULLUPS(TRUE);
EXT_INT_EDGE(H_TO_L);

WHILE(1)
{                 //CONDICION DE REPOSO
SLEEP();
}
}

No hay comentarios:

Publicar un comentario