hier:
war und ist für ein SwitchPack mit dem 2313Code:'-------------------------------------------------------------------- ' Original von: ' DMX - Dimmer 512 / by DW-Soft ' Dirk Wegener - 2004 - the_clown@web.de '-------------------------------------------------------------------- ' Bearbeitet von Jochen Steinmann ' DMX - SwitchPack ' AVR-Bascom '-------------------------------------------------------------------- ' "Deklaration" m³sste klar sein $regfile = "2313def.dat" 'AT90S2313 $crystal = 8000000 '8MHz Quarz $baud = 250000 'Baudrate 250Kbaud ' ben÷tigete Variablen Dim Dmx_count As Word '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? ' UART initialiesieren Print "Start" On Urxc Rec_isr Enable Urxc ' Ports setzen und configurieren Config Pind.6 = Output 'StatusLED Config Portb = Output 'Schaltausgõnge Set Portd.6 ' Anfangsvariablen Festlegen Dmx_count = 0 'kein Paket empfangen Dmx_clock = 16 ' Dmx_adr = 2 'DMX_Adresse 2 Enable Interrupts ' ****************************************************************************** ' Hauptschleife ' ****************************************************************************** Do Waitms 10 Decr Dmx_off If Dmx_off = 0 Then Set Portd.6 End If 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 < 9 Then Select Case Dmx_adr_temp Case 1: If 127 <= Dmx_byte Then : Reset Portb.0 : Else : Set Portb.0 : End If Case 2: If 127 <= Dmx_byte Then : Reset Portb.1 : Else : Set Portb.1 : End If Case 3: If 127 <= Dmx_byte Then : Reset Portb.2 : Else : Set Portb.2 : End If Case 4: If 127 <= Dmx_byte Then : Reset Portb.3 : Else : Set Portb.3 : End If Case 5: If 127 <= Dmx_byte Then : Reset Portb.4 : Else : Set Portb.4 : End If Case 6: If 127 <= Dmx_byte Then : Reset Portb.5 : Else : Set Portb.5 : End If Case 7: If 127 <= Dmx_byte Then : Reset Portb.6 : Else : Set Portb.6 : End If Case 8: If 127 <= Dmx_byte Then : Reset Portb.7 : Else : Set Portb.7 : End If 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 Portd.6 : Dmx_clock = 16 : End If End If Dmx_off = 64 Return
PS: Aus eigenem Interesse: Was willst du denn DMXzifizieren ??







Zitieren

Lesezeichen