ich weiss leider nicht mehr wo ich den code gefunden habe...
der intressante teil ist in rec_isr...

Code:
' "Deklaration" m³sste klar sein
$regfile = "m8def.dat"                                      
$crystal = 16000000                                        
$baud = 250000                                              'Baudrate 250Kbaud

$framesize = 128
$swstack = 32
$hwstack = 64

Open "Comc.4:9600,8,n,1" For Output As #1

' ben÷tigete Variablen
Dim Dmx_count As Integer                                    'Pakete die auf Ausgõnge zielen
Dim Dmx_count_temp As Byte                                  'Gesendete Pakete
Dim Dmx_byte As Byte                                        'DMX Wert
Dim Dmx_clock As Byte                                       'Spielerei
Dim Dmx_adr As Word                                         'DMX-Adresse
Dim Dmx_adr_temp As Byte                                    'DMX-Adresse (Temp)
Dim Dmx_adr_c As Word                                       'DMX-Adresse (Counter)
Dim Dmx_off As Byte                                         'DMX-Signal noch da?




' Ports setzen und configurieren

Config Portb.0 = Output                                     'Schaltausgõnge

' Anfangsvariablen Festlegen
Dmx_count = 0                                               'kein Paket empfangen
Dmx_clock = 16                                              '
Dmx_adr = 55
                                                'DMX_Adresse 2
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.2 = Output

Dim Ledr As Byte
Dim Ledg As Byte
Dim Ledb As Byte
Dim Servo1 As Byte
Dim Servo2 As Byte
Dim Speed As Byte
Dim Strobe As Bit
Dim Strobo As Byte
Dim Strobo_to As Byte
Dim X As Byte

Config Timer1 = Pwm , Prescale = 64 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
Config Timer2 = Pwm , Pwm = On , Compare = Set , Prescale = 1

Wait 1

On Urxc Rec_isr
Enable Urxc

Enable Interrupts

' ******************************************************************************
' Hauptschleife
' ******************************************************************************
 Do

    Decr Dmx_off
    If Dmx_off = 0 Then
       Set Portb.0
    End If



    X = 23
    Disable Interrupts
    Printbin #1 , 1 ; Servo1 ; Servo2 ; Speed;
    Enable Interrupts
    Waitms 50

   'Incr Strobo_to

   'If Strobo_to >= Strobo Then
      '  Strobo_to = 0
    ' '   Toggle Strobe
    'End If
    'Toggle Strobe
    'If Strobe = 0 Then
      Pwm1a = Ledr
      Pwm1b = Ledg
      Ocr2 = Ledb
    'Else
    '  Pwm1a = 0
    '  Pwm1b = 0
    '  Ocr2 = 0
    'End If
    'Incr Strobo_to


 Loop

' ******************************************************************************
' Funktion: DMX-Signal emfangen und auswerten
'           Dieser Interupt wird beim eintreffen von seriellen Daten ausgef³hrt
Rec_isr:
   $asm                                                     'Programmteil f³r das Auswerten der
      .def Uart_status = R16                                'emfangenen Daten
      .def Uart_byte = R17
      .def Uart_temp1 = R18

            IN Uart_status,USR
            IN Uart_byte,UDR

            SBRC Uart_status,FE                             'Auswertung ob Datenbyte OK
            RJMP  Asm_reset                                 'bei ³berlõnge des Datenbyte = DMX Reset
            RJMP  Asm_Loop1                                 'Daten OK--->

      Asm_reset:
            LDI Uart_temp1,$00                              'Adesszõhler zur³cksetzen
            STS {Dmx_count_temp} , Uart_temp1               'Daten dem Basicvariablen ³bergeben
            STS {Dmx_byte} , Uart_byte
            RJMP Asm_exit
      Asm_loop1:
            STS {Dmx_byte} , Uart_byte
      Asm_exit:
   $end Asm

   If Dmx_count_temp <> 0 Then                              'emfangene Daten im "Dmx_buf" ablegen
      Incr Dmx_count                                        'und den jeweiligen Kanal zuordnen
      If Dmx_adr_c = Dmx_count Then
         If Dmx_adr_temp < 8 Then
            Select Case Dmx_adr_temp
               Case 1:
                  'Ocr0a = Dmx_byte
               Case 2:
                  Ledr = Dmx_byte
               Case 3:
                  Ledg = Dmx_byte
               Case 4:
                  Ledb = Dmx_byte
               Case 5:
                  Servo1 = Dmx_byte
               Case 6:
                  Servo2 = Dmx_byte
               Case 7:
                  Speed = Dmx_byte
            End Select
            Incr Dmx_adr_temp
            Incr Dmx_adr_c
         End If
      End If
   Else                                                     'bei DMX Reset Variablen setzen
      Dmx_count = 0 : Dmx_count_temp = 1
      Dmx_adr_c = Dmx_adr : Dmx_adr_temp = 1
      Decr Dmx_clock
      'nur eine Spielerei Toggelt eine LED am PortD.6 beim eintreffen von korrekten DMX Daten
      If Dmx_clock = 0 Then : Toggle Portb.0 : Dmx_clock = 16 : End If


   End If
   Dmx_off = 64

Return