Hallo Vitis,

der Sender läuft wieder einwandfrei, der Knackpunkt war, daß ich die Senderoutine nicht in einem Interrupt untergebracht hatte. Dadurch haben meine neuen Gimmecks im Sender (I2C-Display, Inkrementalgeber usw.) mit ihren Interrupts das Protokoll zerschossen.

Anbei die eigentliche Senderoutine. Sie ist für einen 8 MHz-Quarz ausgelegt...
Code:
Ontimer0:
Timer0 = 70
Dmxout = 1
Trigger = 0
$asm
.def Tmp1 = R17                                             'Marker
.def Tmp2 = R18
            ldi  Tmp1, $5
Make_loop1:
            dec  Tmp1
            brne Make_loop1
            nop
            nop
$end Asm
For Kanal = 0 To 512                                        '8   'Anzahl der Kanäle
   Temp = Puffer(kanal)                                     '20
   $asm
   .def Temp1 = R17
   .def Temp2 = R18
   .def Txbyte = R19
   Putchar:
      LDS Txbyte, {Temp}                                    '2
      LDI Temp1 , 9                                         '1
      COM Txbyte                                            '1
      SEC                                                   '1
   Putchar0:
      BRCC Putchar1                                         '1 oder 2
      nop                                                   '1
      CBI Portd,Pd7                                         '2
      RJMP putchar2                                         '2
   Putchar1:
      SBI Portd,Pd7                                         '2
      NOP                                                   '1
      nop                                                   '1
   Putchar2:
      LDI Temp2 , $7                                        '1
   Sd_loop0:
      DEC Temp2                                             '1
      BRNE Sd_loop0

      nop
      LSR Txbyte                                            '1
      DEC Temp1                                             '1
      BRNE putchar0                                         '1 oder 2
   $end Asm
   nop
   nop
   nop
   Dmxout = 1                                               '2 genauso schnell wie SBI PORTD,PD7 in Assembler
   $asm
   .def Tmp1 = R17
   .def Tmp2 = R18
   ldi  Tmp1, $1                                            '1
   Make_loop0:                                              '2 Stoppbits
      dec  Tmp1                                             '1
      brne Make_loop0                                       '1 oder 2
   $end Asm
Next Kanal
Trigger = 1                                                 '10
   $asm
   .def Tmp1 = R17
   .def Tmp2 = R18
   ldi  Tmp1, $7
   Make_loop3:                                              'zusätzlich für Kanal 512
      dec  Tmp1
      brne Make_loop3
   $end Asm
Dmxout = 0
Waitus 88
Dmxout = 1
Return
Günter