wenn du z.B. 172d (0b10101100) ausgeben willst passiert folgendes: r16: 10101100 andi 1: 00000000 r17: 10101100 andi 2: 00000000 r18: 10101100 andi 4: 00000100 r19: 10101100 andi 8: 00001000 r20: 10101100 andi 16: 00000000 r21: 10101100 andi 32: 00100000 r22: 10101100 andi 64: 00000000 r23: 10101100 andi 128: 10000000 die geandeten Werte gibst du dann auf Port B ( 8 Bit breit ) aus. Wenn der RS485 Treiber jetzt auf B.0 hängt kommt folgendes Bitmuster heraus 00000000, was nun nichts mehr mit 172d zu tun hat (immer die rechteste Stelle der geandeten Werte) Wenn du es schon so lösen willst denk dich mal in folgendes Konstrukt: (r16) enthält den zu sendenden Wert: $asm sbi PortB, PinNr ' Beginn Startbit rcall pause '*** cbi PortB, PinNr ' TX-Leitung auf jeden Fall löschen btsc r16, 7 ' ist Bit 7 gesetzt? ja-> im nächsten Befehl TX auf High sbi PortB, PinNr ' nein -> dieser Befehl wird geskippt, TX bleibt Low rcall Pause '*** '*** cbi PortB, PinNr ' TX-Leitung auf jeden Fall löschen btsc r16, 6 ' ist Bit 7 gesetzt? ja-> im nächsten Befehl TX auf High sbi PortB, PinNr ' nein -> dieser Befehl wird geskippt rcall Pause '*** ' obigen Block für Bit 5 4 3 2 1 0 wiederholen cbi PortB, PinNr ' Beginn Stoppbit rcall pause $endasm ACHTUNG: ob die Logik jetzt für DMX stimmt mußt du noch überprüfen, gegebenenfalls mußt du die cbi und sbi vertauschen