Cómo generar una interrupción de temporizador de 1 minuto en PIC24F

0

Estoy tratando de generar una interrupción de 1 minuto usando pic24F seires ... Para ser específico PIC24Fj64GA306

Aquí está el fragmento de código

#include "xc.h"
#include "newxc16_header.h"

void TimerInit(void);
void __attribute__((__interrupt__)) _T1Interrupt(void);



void main() 
{
    ANSB = 0x0000;
    TRISBbits.TRISB0 = 0;
   TRISBbits.TRISB1 = 1;
    TRISBbits.TRISB2 = 1;
   TRISBbits.TRISB3 = 1;
    TRISBbits.TRISB4 = 1;
    TRISBbits.TRISB5 = 1;
    TRISBbits.TRISB6 = 1;
   TRISBbits.TRISB7 = 1;
   TRISBbits.TRISB8 = 1;
   TRISBbits.TRISB9 = 1;
   TRISBbits.TRISB10 = 1;
   TRISBbits.TRISB11 = 1;
   TRISBbits.TRISB12 = 1;
   TRISBbits.TRISB13 = 1;
   TRISBbits.TRISB14 = 1;
   TRISBbits.TRISB15 = 1;

   TimerInit();

   T1CONbits.TON = 1; //start the timer

   while(1)
   {      

   }
 }

void TimerInit(void)
{
  PR1 = 0x1FFF;  //8191
  IPC0bits.T1IP = 5;     //set interrupt priority
  T1CONbits.TCKPS = 0x03; //timer prescaler bits
  T1CONbits.TCS = 0;   //using FOSC/2 

  IFS0bits.T1IF = 0;    //reset interrupt flag
  IEC0bits.T1IE = 1;     //turn on the timer1 interrupt

}


  void __attribute__((__interrupt__, auto_psv)) _T1Interrupt(void)
   {
     T1CONbits.TON = 0;   //stop the timer
     LATBbits.LATB0 = ~LATBbits.LATB0;  //Toggle output to LED
    IFS0bits.T1IF = 0;   //reset the interrupt flag
     T1CONbits.TON = 1;   //start timer
  }

Para fines de prueba, estoy intentando generar una interrupción del temporizador después de cada 1 segundo ...

Pero el problema es que no puedo generar ninguna interrupción.

Por favor, ayúdame.

Gracias de antemano

    
pregunta Pradeep Dayama

1 respuesta

1

Encontré que el controlador PIC24f genera una interrupción máxima durante 4 segundos, usando un oscilador externo de 8MHz. así que estoy generando una interrupción de temporizador durante 1 segundo y calculando segundos ... una vez que se realiza durante 1 minuto, hago el proceso ... aquí está el fragmento de código

void __attribute__((__interrupt__, auto_psv)) _T1Interrupt(void)
  {

   IFS0bits.T1IF = 0;   //reset the interrupt flag 
   Timer_flag = 1;

 }

el código anterior es para el temporizador isr

inicio del temporizador

void TimerInit(void)
{
   PR1 = 0x2FFF;     //8191
   IPC0bits.T1IP = 1;    //set interrupt priority
   T1CONbits.TCKPS = 0x03; //timer prescaler bits
   T1CONbits.TCS = 0;   //using FOSC/2 

   IFS0bits.T1IF = 0;    //reset interrupt flag
   IEC0bits.T1IE = 1;    //turn on the timer1 interrupt

 }

Código del temporizador en main

if(Timer_flag == 1)
{
      Timer_flag = 0;
      if(second++ == 60)
       {
           second = 0;
           //code
        }
}
    
respondido por el Pradeep Dayama

Lea otras preguntas en las etiquetas