Should I be setting Old_Bits to New_Bits in the 'DoneRotEnc' label for the first 3 of 4 interrupts related to an IOC?
Code:
' ***************************************************************
' [IOC - interrupt handler]
' ***************************************************************
RotEncAdjust:
New_Bits = PORTA & (%00000011)
IF New_Bits = Old_Bits Then DoneRotEnc
' Increment ISR counter (since quad encoder throws 4 interrupts
' for every single detent), only want to update MotorRPM when counter
' reaches 4 (i.e. a single detent 'click')
ISRCounter = ISRCounter + 1
IF ISRCounter < 4 THEN DoneRotEnc
RotEncDir = New_Bits.1 ^ Old_Bits.0
IF RotEncDir = 1 Then
; CW rotation - increase speed but only to a max of 'MaxDuty'
IF MotorRPM < MaxDuty then MotorRPM = MotorRPM + 1
Else
' CCW rotation - decrease speed to a min of 0
IF MotorRPM > 0 Then MotorRPM = MotorRPM - 1
EndIF
ValueDirty = 1 ; Set dirty flag
ISRCounter = 0 ; Reset ISR entry counter
TimeToSave = 50000 ; Set value to begin countdown to EEPROM save
DoneRotEnc:
Old_Bits = New_Bits
IOCAF.0 = 0 ' Clear interrupt flags
IOCAF.1 = 0
@ INT_RETURN
Bookmarks