PROBLEMA:
Se eu colocar RB0 em nível baixo enquanto RA1 está em nível alto, RA1 se mantém assim. Isso está OK.
PORÉM, se eu voltar a colocar RB0/INT em nível alto, mesmo que seja por menos de 1000mseg, RA1 volta para nível baixo sem passar pela rotina de inversão de estado do Timer0 (eu testei), o que é um problema, pois esta saída só deveria ter seu estado invertido se RB0/INT permanecesse por mais de 1000mseg em nível alto.
Alguém sabe o que pode estar gerando este comportamento estranho?
cpp code
#INT_TIMER0
void TMR0_isr(void)
{
// ROTINA DO TIMER0 COM ESTOURO DE 1MS
if (INTCON_TMR0IF) {
// Zera a flag de Timer0
INTCON_TMR0IF = 0;
// Verifica nível lógico de RB0/INT.
if (input(PIN_B0))
TMR0_counter++;
else
TMR0_counter = 0;
if (TMR0_counter > 1000){
PORTAA_0 = !PORTAA_0;
TMR0_counter = 0;
}
}
}