Danke nochmal für eure Mühe !

Hier das Programm, das mit meinem optischen Encoder einwandfrei funktioniert:

Code:
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600

Ddrd.2 = 0                                                  'Eingänge mit Pullup für Drehgeber
Portd.2 = 1

Ddrd.4 = 0
Portd.4 = 1

On Int0 Onint0
Mcucr.isc00 = 1                                             'INT0 bei FALLING + RISING
Mcucr.isc01 = 0
Gimsk.int0 = 1

Dim Drehgeber As Long                                       'wird von ISR (INT0) verändert
Dim Drehgeber_alt As Long

Drehimpuls1 Alias Pind.2
Drehimpuls2 Alias Pind.4
Onint0:
  If Drehimpuls2 <> Drehimpuls1 Then                        'test phase B
   If Divider1 = 9 Then                                     'soll 9 sein
    Divider1 = 0
         Incr Drehgeber
   Else
    Incr Divider1
    Divider2 = 0
   End If
  Else
   If Divider2 = 9 Then                                     'Soll 9 sein
    Divider2 = 0
         Decr Drehgeber
   Else
    Incr Divider2
    Divider1 = 0
   End If
 End If
Return
Den Divider hab ich nur drin um die über 500 Impulse pro Umdrehung auf ein Maß zu bringen, dasss man auch von Hand drehen kann

So und hier der Versuch mit dem Bascom Befehl :

Code:
$regfile = "m32def.dat"                                     ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
Config Lcd = 20 * 4a , Chipset = Ks077                      '20*4 LCD DIP
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Cls
Locate 1 , 1
Lcd "Encoder test"
Dim B As Byte
Dim Wert As Integer
Dim Divider1 As Integer
Dim Divider2 As Integer
Wert = 100
'we have dimmed a byte because we need to maintain the state of the encoder

Portb = &B11                                                ' activate pull up registers

Do
   B = Encoder(pind.3 , Pind.2 , Links , Rechts , 0)
   '                                               ^--- 1 means wait for change which blocks programflow
   '                               ^--------^---------- labels which are called
   '              ^-------^---------------------------- port PINs
   Lcd B
   Locate 4 , 1
   Lcd "" ; Wert ; "  "
  Waitms 10
Loop
End

'so while you can choose PINB0 and PINB7,they must be both member of PINB
'this works on all PIN registers

Links:
Locate 2 , 1
  Lcd "left rotation   "
  Decr Wert
Return

Rechts:
Locate 2 , 1
  Lcd "right rotation  "
  Incr Wert
Return


End
Das ist praktisch genau der Code aus der Hilfe.

Gruß Markus