Estoy trabajando con un PIC24FJ1024.
Quiero probar el temporizador 2/3 (temporizador de 32 bits), escribiendo un código C, donde alterno un pin (PORTAbits.RA7) cada segundo.
Eso es parte del código:
while(!IFS0bits.T2IF);
LATAbits.LATA7 = ~LATAbits.LATA7;
IFS0bits.T2IF = 0;
Cuando compilo y descargo en mi herramienta de desarrollo (Explorer 16/32), no veo que mi Pin (que está conectado a un LED) se alterne.
Debito el programa, y resulta que IFS0bits.T2IF
no se configura, el programa solo se sienta en while(!IFS0bits.T2IF)
¿Puede alguien explicarme por qué sucede esto?
Gracias de antemano.
EDITAR: El Código
#include <xc.h>
#pragma config FWDTEN = OFF
#pragma config FNOSC = FRC //8MHz
#pragma config ICS = PGD2
void Timer23_Init (void)
{
/*
Initialize T2 & 3
from FRC
* 1 second
* on and off
*/
T2CONbits.T32 = 1;//32 bit timer
T2CONbits.TSIDL = 0;//continues through Idle Mode
T2CONbits.TGATE = 0;//no TGATE Operationss
T2CONbits.TCS = 0;//internal CLK SRC
T2CONbits.TECS = 0x00;
T2CONbits.TCKPS = 3;//1:256
/*
PRESCALAR = 256
* t = 1 sec = 1000 ms = 1,000,000 us
* Fosc = 8MHz Fosc/2 = 4MHz Tcy = 0.25 us
*
* t = N*PRE*Tcy
* N = t/(PRE*Tcy) = 1,000,000/(256*0.25) = 15,625
* PR2 = 15625 (0x3D09)
*/
TMR2 = 0x00000000;
PR2 = 15625;
TRISAbits.TRISA7 = 0;//output
ANSAbits.ANSA7 = 0;//Digital
LATAbits.LATA7 = 0;
T2CONbits.TON = 1;
}
int main (void)
{
Timer23_Init ();
while(1)
{
IFS0bits.T2IF = 0;
while(!IFS0bits.T2IF);
LATAbits.LATA7 = ~LATAbits.LATA7;
IFS0bits.T2IF = 0;
}
return 0;
}