unsigned char DIRECTION = 0;
unsigned char FINAL_REG = 0;
unsigned int COUNTER = 0;
unsigned int MAX_COUNT = 0;
/*****************************************************************
* setup interrupt vectors *
*****************************************************************/
#pragma code high_interrupt = 0x08
void high_interrupt (void)
{ _asm goto isr_hi _endasm
}
#pragma code
/*****************************************************************
* ISR (high) *
*****************************************************************/
#pragma interrupt isr_hi
void isr_hi ()
{ if (INTCONbits.TMR0IF = 1)
{ DIRECTION = PORTB; //
if ( DIRECTION && 0b00000100 ) // if enabled
{ if ( DIRECTION && 0b00000010 ) // if increment
{ if (!(FINAL_REG >>= 1)) // "rrncf FINAL_REG,F"
FINAL_REG = 0b10000000; //
while ( COUNTER++ == MAX_COUNT) //
COUNTER = 0; //
}
else // else decrement
{ if (!(FINAL_REG <<= 1)) // "rlncf FINAL_REG,F"
FINAL_REG = 0b00000001; //
while ( COUNTER-- == 0) //
COUNTER = MAX_COUNT; //
}
if ( COUNTER && 0b11111110 ) // INT_MARKER ??? Huh?
{ FINAL_REG |= 0b00010000; // "bsf FINAL_REG,4"
FINAL_REG &= 0b11011111; // "bcf FINAL_REG,5"
}
else
{ FINAL_REG &= 0b11101111; // "bcf FINAL_REG,4"
FINAL_REG |= 0b00001000; // "bsf FINAL_REG,5"
}
LATA = FINAL_REG; //
}
INTCONbits.TMR0IF = 0; //
}
}