43 if (u8_last == 1) delta = 1;
44 else if (u8_last == 2) delta = -1;
47 if (u8_last == 3) delta = 1;
48 else if (u8_last == 0) delta = -1;
51 if (u8_last == 2) delta = 1;
52 else if (u8_last == 1) delta = -1;
55 if (u8_last == 0) delta = 1;
56 else if (u8_last == 3) delta = -1;
61 if (delta == 0)
return(1);
63 if (( *cntr == 0 && delta == -1)
64 || (*cntr == max && delta == 1))
return 0;
65 (*cntr) = (*cntr) + delta;
69 #define ROT1_RAW _RB13
70 #define ROT0_RAW _RB12
71 #define GET_ROT_STATE() ((ROT1_RAW << 1) | ROT0_RAW)
75 CONFIG_RB13_AS_DIG_INPUT();
77 CONFIG_RB12_AS_DIG_INPUT();
82 #define ROT_MAX 32 //arbitrary limit
84 volatile uint8_t u8_valueROT = 0;
85 volatile uint8_t u8_lastvalueROT = 0;
87 volatile uint8_t u8_cntrROT = 0;
90 void _ISRFAST _T3Interrupt (
void) {
91 u8_valueROT = GET_ROT_STATE();
92 if (u8_lastvalueROT != u8_valueROT) {
93 u8_errROT = processRotaryData(u8_valueROT, u8_lastvalueROT, &u8_cntrROT, ROT_MAX);
94 u8_lastvalueROT = u8_valueROT;
100 #define ISR_PERIOD 15 // in ms
101 void configTimer3(
void) {
106 T3CON = T3_OFF | T3_IDLE_CON | T3_GATE_OFF
122 u8_valueROT = GET_ROT_STATE();
123 u8_lastvalueROT = u8_valueROT;
124 u8_lastCnt = u8_cntrROT;
128 if (u8_lastCnt != u8_cntrROT) {
129 u8_lastCnt = u8_cntrROT;