Estoy tratando de usar TMR0 en un PIC18F2420 para cronometrar la apertura de un dispositivo y mostrar el porcentaje que está abierto. el problema que tengo es que se ha congelado casi todas las demás operaciones. No estoy muy seguro de dónde me equivoqué. Si alguien pudiera ayudar, lo apreciaría enormemente. Tengo mi reloj interno configurado para 4MHz y Tmr2 está siguiendo la pista en una interrupción externa.
mi código principal en los conjuntos de configuración GIE = 1; GIEL = 1;
y mi rutina que estoy rastreando conjuntos TMR0ON = 1;
void int (void)
{
RCONbits.IPEN=1;
INTCON2bits.RBPU=0;
INTCONbits.INT0IE=1;
INTCON3bits.INT1IE=1;
INTCON3bits.INT1IP=1;
INTCON2bits.INTEDG0=0; //interrupt at falling edge
INTCON2bits.INTEDG1=0;
GIE=1; // Global interrupt enable
INTCON2bits.TMR0IP=0;
INTCON2bits.RBIP=0;
INTCONbits.TMR0IE =1;
INTCON2bits.TMR0IP = 0;
}
//========================================================================
void Counter(void)
{
Timer0count=0;
TMR0ON=0;
TMR0=0x00;
//PR2=0xFF;
T0CON=0xD0;
TMR0IF=0;
TMR0IE=1;
TMR0IP=0;
TMR0ON=0;
}
//========================================================================
void Counter1(void)
{
// Timer0count=0;
TMR0ON=0;
TMR0=0x00;
// PR2=0xFF;
T0CON=0xD0;
TMR0IF=0;
TMR0IE=1;
TMR0IP=0;
TMR0ON=1;
}
//========================================================================
#pragma interrupt_level 0
void interrupt low_priority lowISR()
{
if(TMR0IE && TMR0IF)
{
if((Timer0count) >= 16) //915 is a count for a minute
{
TMR0IF=0;
TMR0IE=0;
TMR0=0x00;
Timer0count=0;
TMR0ON=0;
percent++;
}
else
{
TMR0IF=0;
TMR0IE=1;
TMR0=0x00;
Timer0count++;
}
Counter1();
}
}