problema con la función de retardo

-2

void Timer1Init (void)

_T1IP = 4; // this is the default value anyway
TMR1 = 0; // clear the timer
PR1 =0x0139 ;
T1CON = 0x8030;
_T1IF = 0;
 _T1IE = 1;

void atributo ((interrupt, no_auto_psv)) _T1Interrupt (void)

 LATAbits.LATA0 = ~LATAbits.LATA0;  //Toggle output to LED
_T1IF = 0;

void Timer2Init (void)

_T2IP = 4; // this is the default value anyway
TMR2 = 0; // clear the timer
PR2 = 0x1E85;
T2CON = 0x8030;
_T2IF = 0;

void atributo ((interrupt, no_auto_psv)) _T2Interrupt (void)

 LATAbits.LATA1 = ~LATAbits.LATA1 ;
 DELAY_MS (6000);
_T2IF = 0;

int main (void)

    TRISAbits.TRISA0 = 0; 
TRISAbits.TRISA1 = 0;
ANSELA = 0x0000;
_RCDIV=0;

Timer1Init();
Timer2Init();
  while (1)  {}

el programa escrito anterior no funciona correctamente. He dado un retraso en la rutina de interrupción del temporizador 2, lo que significa que debería haber un retraso de 6 s para que el parpadeo se conecte al pin A1 y su funcionamiento, pero el problema es que también ocurre un retraso mientras parpadea el led conectado al pin A0, ¿alguien puede ayudarme a decir qué está mal aquí?

    

1 respuesta

0

Tiene una demora en su rutina de interrupción: esto detiene cualquier otra interrupción (lo que impide que el otro LED cambie de estado) hasta que haya expirado. Las rutinas de interrupción deben ejecutarse lo más rápido posible y, por supuesto, nunca deben contener retrasos.

* nunca digas nunca, pero sería una aplicación muy inusual que lo hizo

    
respondido por el NMF

Lea otras preguntas en las etiquetas