Ich habe viele Encoder-Programme ausprobiert, bei mir läuft dieses zuverlässig:

Code:
$regfile = "m8adef.dat"
$crystal = 2000000
$hwstack = 40
$swstack = 16
$framesize = 32
Portc = &B11                                                ' PIN 0,1 Pullup
Enc_a Alias Pinc.1
Enc_b Alias Pinc.0
Dim Wert As Byte , Tick As Byte
Wert = 30                                                   'Vorgabewert
Config Portd = Output

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls
Cursor Off Noblink

Config Timer0 = Timer , Prescale = 1024                     '= ~10MHz= ~0,1µs * 1024= 0,1ms
On Timer0 Enc_int                                           'Interrupt
Timer0 = 246                                                'Timerstartwert:10; ~0,1ms * 10= 1ms
Enable Timer0
Enable Interrupts


Do
      Locate 1 , 1 : Lcd "Drehencoder EC11"
      Locate 2 , 1 : Lcd "Wert : " ; Wert ; "     "
Waitms 1
Loop

Enc_int:
Timer0 = 246                                                'Timerstartwert
Tick.0 = Enc_a                                              'Zustandswechsel
Tick.1 = Enc_b
Select Case Tick
  Case &H0_2 : Incr Wert
  Case &H0_1 : Decr Wert
End Select
Tick.4 = Tick.0
Tick.5 = Tick.1
Return

End
Das LCD ist nur zur Demo. Der Ausgang "Wert" kann für beliebige Zwecke angepaßt werden.

Joachim