$crystal = 16000000 $baud = 115200 Const Dmxon = 1 Const Dmxoff = 0 Dim Dmxdata(1 To 512) As Byte Dim I As Integer , J As Integer Dim Rechner As Byte Dim Bitwert(8) As Byte Dim Rxcount As Byte Dim Channel As Integer Dim Value As Byte Dim Zerocount As Byte Dim Tmp As Byte Dim Bytecount As Byte 'Portb.0 ist der DMX Ausgabe Port Config Portb = Output 'Interrupts & Timer initialisieren On Urxc Onrxd Enable Urxc Enable Interrupts Config Timer0 = Timer , Prescale = 1 Stop Timer0 'Initialisieren Portb.0 = Dmxon Waitms 10 'Hauptschleife Do Portb.0 = Dmxoff 'Reset senden Waitus 88 Portb.0 = Dmxon 'Mark senden Waitus 8 Disable Interrupts For J = 1 To 8 Portb.0 = Dmxoff 'Startbyte senden Start Timer0 Do Loop Until Tcnt0 >= 60 Stop Timer0 Next J Portb.0 = Dmxon 'Stopbits senden Enable Interrupts Waitus 8 For I = 1 To 512 Rechner = Dmxdata(i) 'Die einzelnen Bitwerte berechnen For J = 1 To 8 Bitwert(j) = Rechner Mod 2 Rechner = Rechner - Bitwert(j) Rechner = Rechner / 2 Next J Disable Interrupts Portb.0 = Dmxoff 'Startbit senden Waitus 4 'Die Datenbits senden For J = 1 To 8 Portb = Bitwert(j) Start Timer0 Do Loop Until Tcnt0 >= 60 Stop Timer0 Next J Portb.0 = Dmxon 'Stopbits senden Enable Interrupts Waitus 8 Next I Loop 'Serieller Datenempfang Onrxd: Tmp = Udr If Tmp = 0 Then Zerocount = Zerocount + 1 End If If Zerocount => 1 Then Bytecount = Bytecount + 1 If Zerocount = 3 Then If Bytecount = 3 Then Print "RESET" Do Channel = Udr Loop Until Channel = 255 Channel = 0 Zerocount = 0 Bytecount = 0 Rxcount = 0 Value = 0 Return End If Else If Bytecount = 3 Then Bytecount = 0 Zerocount = 0 End If If Rxcount = 0 Then Value = Tmp If Value = 0 Then Zerocount = Zerocount + 1 Rxcount = 1 End If If Rxcount = 1 Then Channel = Tmp If Channel = 0 Then Zerocount = Zerocount + 1 Rxcount = 2 End If If Rxcount = 2 Then Channel = Channel * Tmp If Channel = 0 Then Zerocount = Zerocount + 1 Rxcount = 0 Dmxdata(channel) = Value End If End If Return