' ========================================================================= ' ' File....... Encoder.BS2 ' Purpose.... ' Author..... Jon Williams -- Parallax, Inc. ' E-mail..... jwilliams@parallax.com ' Started.... ' Updated.... 13 DEC 2004 ' ' {$STAMP BS2pe} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- EncPort VAR INA ' -----[ Constants ]------------------------------------------------------- Span CON 100 ' set value 0 - 99 NumTasks CON 3 ' -----[ Variables ]------------------------------------------------------- encNew VAR Nib ' current scan encOld VAR Nib ' old scan value VAR Byte task VAR Nib ' -----[ EEPROM Data ]----------------------------------------------------- ' -----[ Initialization ]-------------------------------------------------- Reset: encNew = EncPort >> 1 & %0011 ' read current inputs encOld = encNew ' -----[ Program Code ]---------------------------------------------------- Main: DO GOSUB Check_Encoder ON task GOSUB Task_0, Task_1, Task_2 LOOP END ' -----[ Subroutines ]----------------------------------------------------- Check_Encoder: encNew = EncPort >> 1 & %0011 ' read current inputs IF ((encNew ^ encOld) <> 0) THEN ' test for change IF (encOld.BIT0 ^ encNew.BIT1) THEN ' test direction value = value + 1 // Span ' increment value ELSE value = value + (Span - 1) // Span ' decrement value ENDIF encOld = encNew ' save current inputs ENDIF RETURN Task_0: DEBUG HOME, DEC value, CLREOL ' print value task = task + 1 // NumTasks ' update task pointer RETURN Task_1: ' do something task = task + 1 // NumTasks RETURN Task_2: ' do something task = task + 1 // NumTasks RETURN