Autor Tema: Ayuda con interrpuciones para borrar bandera  (Leído 1121 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alberto_bad

  • PIC10
  • *
  • Mensajes: 1
Ayuda con interrpuciones para borrar bandera
« en: 23 de Septiembre de 2012, 21:35:54 »
Hola al parecer algo se me olvida, pero porque al simular este programa nunca logro entrar a las interrupciones de baja prioridad y solo puedo a la de alta , pero si presiono el boton de INT1 o INT2 , y despues quiero entrar a INT0 la interrupcion entra ahi pero ya no sale nunca


Código: [Seleccionar]

#define Leds PORTD
#define Conf_l TRISD
void config_Puertos(void);
void config_INTs(void);
void tarea_principal(void);
void tarea1(void);
void tarea2(void);
void tarea3(void);
void ISR_H(void);
void ISR_L(void);

///////////////////////////////////////////////////////////7
#pragma code prioridad_alta = 0X08   

void high_vector (void)                       
{
_asm
       goto ISR_H               
       _endasm
}
#pragma code 

#pragma interrupt ISR_H

 void ISR_H(void)
{
char conta=0;
if (INTCONbits.INT0IF==1)
{
while(conta<5)
{tarea1();conta++;Delay10KTCYx(30);
 }     
INTCONbits.INT0IF=0;
}

conta=0;
}

//////////////////////////////////////////////////////////////

#pragma code prioridad_baja = 0X0018       
void low_vector (void)
                     
{
_asm
       goto ISR_L               
       _endasm
}
#pragma code
#pragma interruptlow ISR_L
void  ISR_L(void){

if (INTCON3bits.INT2IF==1)
{char cont=0;
INTCON3bits.INT2IF=0;

while(cont<5)
{
tarea2();
cont++;Delay10KTCYx(30);
}

}


}
/////////////////////////////////////////////////////////////////////////
void main(void)
{

config_Puertos();
config_INTs();
INTCONbits.GIE=1;//permiso para interrumpir alta prioridad


while(1)
{
tarea_principal();

}
}

void config_Puertos(void)
{

ADCON1=0xff;
TRISD=0x00;
TRISBbits.TRISB0=1;
TRISBbits.TRISB2=1;

}
void config_INTs(void)
{

// INT0 de alta prioridad

INTCONbits.INT0IF=0;//Borra la bandera
INTCONbits.INT0IE=1;//PERmiso
INTCON2bits.INTEDG0=0;//Flanco de alta prioridad

//INT1 de baja prioridad

INTCON3bits.INT1IF=0;
INTCON3bits.INT1IE=1;
INTCON3bits.INT1IP=0;
INTCON2bits.INTEDG1=0;

//INT2 de baja prioridad
INTCON3bits.INT2IF=0;
INTCON3bits.INT2IE=1;
INTCON3bits.INT2IP=0;
INTCON2bits.INTEDG2=0;


}




void tarea_principal(void)
{
PORTD=0b11111111;
}
 


////////////////////////////////////
void tarea1(void)
{
PORTD=0b00000001;

}
///////////////////////////////////


void tarea2(void)
{
PORTD=0b00000010;
}

//////////////////////////////////
void tarea3(void)
{
PORTD=0b00000011;
}




Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ayuda con interrpuciones para borrar bandera
« Respuesta #1 en: 23 de Septiembre de 2012, 22:53:33 »
te falta INTCONbits.GIEL=1

yo no pondria llamadas a funciones en las interrupciones, ni mucho menos delays. Las interrupciones deben ser lo mas rapido posibles.