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